openapi: 3.1.0
info:
  description: "# Présentation\n\nLes webhooks sont des notifications déclenchées par des événements système. \nLorsqu'un événement spécifique se produit, Xsolla envoie à votre application \nune requête HTTP, généralement sous la forme d'une requête POST au format JSON, \ncontenant les données de l'événement.\n\n<strong>Exemples d'événement\_:</strong>\n- interaction de l'utilisateur avec le catalogue des objets\_;\n- paiement ou annulation d'une commande.\n\nLorsqu'un événement se produit, Xsolla envoie une notification à votre système \nvia un webhook. Vous pouvez ensuite effectuer des actions telles que\_:\n- recharger le solde de l'utilisateur\_;\n- effectuer un remboursement de paiement\_;\n- créditer des objets au compte de l'utilisateur ou en débiter\_;\n- commencer à fournir un abonnement\_;\n- bloquer un utilisateur en cas de soupçon de fraude.\n\n<b>Exemple de flux de travail d'un webhook de traitement de paiement\_:</b>\n\n![Webhook de traitement de paiement \n](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks-general.svg)\n\n<div class=\"note\">\n<p><strong>Note</strong></p><p>En fonction de la solution utilisée et du type d'intégration, l'ensemble des webhooks et la séquence des interactions peuvent différer de l'exemple fourni.</p>\n</div>\n\n<b>Guide vidéo pour l'intégration des webhooks 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>Paramètres des webhooks lors de l'interaction avec les produits et solutions Xsolla\_:</b>\n\n<table>\n<thead>\n    <tr>\n        <th>Produit/Solution</th>\n        <th>Obligatoire/Facultatif</th>\n        <th>À quoi servent les webhooks\_?</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Payments</td>\n        <td>Obligatoire</td>\n        <td>\n          <ul>\n            <li>Validation utilisateur.</li>\n            <li>Réception d'informations détaillées sur la transaction en cas de paiement réussi ou de remboursement de paiement.</li>\n            <li>Octroi des objets achetés à l'utilisateur et déduction de ceux-ci en cas d'annulation de la commande.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>In-Game Store</td>\n        <td>Obligatoire</td>\n        <td>\n          <ul>\n            <li>Validation utilisateur.</li>\n            <li>Réception d'informations détaillées sur la transaction en cas de paiement réussi ou de remboursement de paiement.</li>\n            <li>Octroi des objets achetés à l'utilisateur et déduction de ceux-ci en cas d'annulation de la commande.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Game Sales</td>\n        <td>Facultatif</td>\n        <td>Pour la vente de clés de jeu, la validation utilisateur et le crédit des objets ne sont pas nécessaires. Connectez des webhooks si vous souhaitez recevoir des informations sur des événements tels que le paiement ou l'annulation de commandes.<br />Assurez-vous de traiter tous les <a href=\"/fr/webhooks/overview/#section/List-of-required-webhooks\"> webhooks entrants requis</a>.\n</td>\n    </tr>\n    <tr>\n        <td>Subscriptions</td>\n        <td>Facultatif</td>\n        <td>Réception d'informations sur la création, la mise à jour ou l'annulation d'abonnements. Vous pouvez également <a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_information_set_up_via_api\">demander des informations via API</a>.\n</td>\n    </tr>\n    <tr>\n        <td>Web Shop</td>\n        <td>Obligatoire</td>\n        <td>\n          <ul>\n            <li>Validation utilisateur.</li>\n            <li>Réception d'informations détaillées sur la transaction en cas de paiement réussi ou de remboursement de paiement.</li>\n            <li>Octroi des objets achetés à l'utilisateur et déduction de ceux-ci en cas d'annulation de la commande.</li>\n            <li>Authentification utilisateur, si vous utilisez l'authentification par ID utilisateur. Vous pouvez également utiliser l'<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\">authentification utilisateur via Xsolla Login</a>.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Digital Distribution Hub</td>\n        <td>Obligatoire</td>\n        <td>\n          <ul>\n            <li>Validation utilisateur.</li>\n            <li>Liaison de l'ID de transaction côté Xsolla à l'ID de transaction de votre système.</li>\n            <li>Transfert de paramètres de transaction supplémentaires dans la commande.</li>\n            <li>Octroi des objets achetés à l'utilisateur et déduction de ceux-ci en cas d'annulation de la commande.</li>\n          </ul>\n          <p>Reportez-vous à la <a href=\"/solutions/ddh/#integration_guide_ddh_webhook\">documentation</a> pour obtenir plus d'informations sur la configuration des webhooks pour Digital Distribution Hub.</p>\n        </td>\n    </tr>\n    <tr>\n        <td>Login</td>\n        <td>Facultatif</td>\n        <td>\n          <p>Réception d'informations sur les événements\_:</p>\n          <ul>\n            <li>enregistrement/autorisation d'utilisateur</li>\n            <li>confirmation d'adresse e-mail d'utilisateur</li>\n            <li>liaison du compte de réseau social de l'utilisateur</li>\n          </ul>\n          <p>Reportez-vous à la <a href=\"/api/login/operation/add-webhook-for-event/\">documentation Login</a> pour des informations détaillées sur la configuration des webhooks.</p>\n        </td>\n    </tr>\n</tbody>\n</table>\n\n# Liste des webhooks requis\nSi vous utilisez des produits et des solutions nécessitant de travailler avec \ndes webhooks, <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-\nAccount\">activez et testez ces webhooks dans votre Compte éditeur</a>, puis <a \nhref=\"/webhooks/overview/#section/Webhook-listener\">configurez leur \ntraitement</a>. Lorsque des événements spécifiques se produisent, les webhooks \nsont envoyés de manière séquentielle. Assurez-vous de traiter tous les webhooks \nrequis, sinon les suivants ne seront pas envoyés. La liste des webhooks requis \nest présentée ci-dessous.\n\n## In-Game Store et Payments\nDeux options d'envoi de webhook sont configurées côté Xsolla lors de l'achat et \ndu retour de biens sur le site\_: les informations sur les données de paiement \net de transaction, ainsi que celles sur les biens achetés, peuvent être \nenvoyées séparément ou être combinées dans un seul webhook.\n\n<b>Réception d'informations dans des webhooks combinés\_:</b>\n\nSi vous avez enregistré un <a href=\"https://publisher.xsolla.com/\">Compte \néditeur</a> après le 22\_janvier\_2025, vous recevez toutes les informations dans \nles webhooks <a href=\"/webhooks/operation/successful-order-payment\">Paiement de \ncommande réussi</a> (`order_paid`) et <a href=\"/webhooks/operation/order-\ncancellation\">Annulation de commande</a> (`order_canceled`). Dans ce cas, vous \nn'avez pas besoin de traiter les webhooks <a \nhref=\"/webhooks/operation/payment\">Paiement</a> (`payment`) et <a \nhref=\"/webhooks/operation/refund\">Remboursement</a> (`refund`).\n\n<b>Réception d'informations dans des webhooks distincts\_:</b>\n\nSi vous avez enregistré un <a href=\"https://publisher.xsolla.com/\">Compte \néditeur</a> au plus tard le 22\_janvier\_2025, vous recevez les webhooks suivants\_\n:\n- <a href=\"/webhooks/operation/payment\">Paiement</a> (`payment`) et <a \n  href=\"/webhooks/operation/refund\">Remboursement</a> (`refund`) avec des \n  informations sur les données de paiement et de transaction.\n- <a href=\"/webhooks/operation/successful-order-payment-separate\">Paiement de \n  commande réussi</a> (`order_paid`) et <a href=\"/webhooks/operation/order-\n  cancellation-separate\">Annulation de commande</a> (`order_canceled`) avec des \n  informations sur les objets achetés.\n\nVous devez traiter tous les webhooks entrants. Pour passer à la nouvelle option \nde réception des webhooks combinés, contactez vos responsables de la réussite \nclient ou envoyez un e-mail à <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\nPour assurer le fonctionnement complet du magasin en jeu et de la gestion des \npaiements, il est nécessaire d'implémenter le traitement des principaux \nwebhooks.\n\n<b>Si vous recevez des webhooks combinés</b>\_:\n\n<table>\n<thead>\n    <tr>\n        <th>Nom et type du webhook</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n        <td>Est envoyé à différentes étapes du processus de paiement pour s'assurer que l'utilisateur est enregistré dans le jeu.</td>\n    </tr>\n    <tr>\n        <td>Services de jeux &gt; Webhooks combinés &gt; <a href=\"/webhooks/operation/successful-order-payment\">Paiement de commande réussi</a> (<code>order_paid</code>)</td>\n        <td>Il contient les données du paiement et de la transaction ainsi que des informations sur les biens achetés. Utilisez les données du webhook pour octroyer les objets à l'utilisateur.</td>\n    </tr>\n    <tr>\n        <td>Services de jeux &gt; Webhooks combinés &gt; <a href=\"/webhooks/operation/order-cancellation\">Annulation de commande</a> (<code>order_canceled</code>)</td>\n        <td>Il contient les données du paiement annulé et de la transaction ainsi que des informations sur les biens achetés. Utilisez les données du webhook pour retirer les objets achetés.</td>\n    </tr>\n</tbody>\n</table>\n\n\n<b>Si vous recevez des webhooks distincts</b>\_:\n\n<table>\n<thead>\n    <tr>\n        <th>Nom et type du webhook</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n        <td>Est envoyé à différentes étapes du processus de paiement pour s'assurer que l'utilisateur est enregistré dans le jeu.</td>\n    </tr>\n    <tr>\n        <td>Payments &gt; <a href=\"/webhooks/operation/payment\">Paiement</a> (<code>payment</code>)</td>\n        <td>Il contient les données du paiement et de la transaction.</td>\n    </tr>\n    <tr>\n        <td>Services de jeux &gt; Webhooks distincts &gt; <a href=\"/webhooks/operation/successful-order-payment-separate\">Paiement de commande réussi</a> (<code>order_paid</code>)</td>\n        <td>Il contient des informations sur les biens achetés. Utilisez les données du webhook pour octroyer les objets à l'utilisateur.</td>\n    </tr>\n    <tr>\n        <td>Payments &gt; <a href=\"/webhooks/operation/refund\">Remboursement</a> (<code>refund</code> )</td>\n        <td>Il contient les données du paiement et de la transaction.</td>\n    </tr>\n    <tr>\n        <td>Services de jeux &gt; Webhooks distincts &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">Annulation de commande</a> (<code>order_canceled</code>)</td>\n        <td>Il contient des informations sur les biens achetés et l'ID de la transaction annulée. Utilisez les données du webhook pour retirer les objets achetés.</td>\n    </tr>\n</tbody>\n</table>\n\nSi la <a href=\"/doc/in-game-\nstore/features/personalization\">personnalisation</a> du catalogue des objets \nest implémentée du côté de votre application, configurez le traitement du \nwebhook <a href=\"/webhooks/operation/personalized-partner-\ncatalog\">Personnalisation du catalogue côté partenaire</a>.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Pour recevoir des paiements réels, vous devez simplement <a href=\"/doc/in-game-store/integration-guide/sign-licensing-agreement/\">signer le contrat de licence</a> et implémenter le traitement des webhooks\_:</p>\n<p><ul><li><a href=\"/webhooks/operation/payment\">Paiement</a>, <a href=\"/webhooks/operation/successful-order-payment-separate\">Paiement de commande réussi</a> et <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> si vous recevez des webhooks distincts\_;</li><li><a href=\"/webhooks/operation/successful-order-payment\">Paiement de commande réussi</a> et <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> si vous recevez des webhooks combinés.</li></ul></p>\n</div>\n\n## Subscriptions\nPour gérer les plans d'abonnement de manière automatique, il est nécessaire \nd'implémenter le traitement des principaux webhooks\_:\n- <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> \n  (`user_validation`) — envoyé à différentes étapes du processus de paiement pour \n  s'assurer que l'utilisateur est bel et bien enregistré dans le jeu.\n- <a href=\"/webhooks/operation/payment\">Paiement</a> (`payment`) — envoyé \n  lorsqu'une commande est payée et contient les données de paiement ainsi que les \n  détails de la transaction.\n- <a href=\"/webhooks/operation/created-subscription/\">Abonnement créé</a> \n  (`create_subscription`) — envoyé lorsqu'un webhook <a \n  href=\"/webhooks/operation/payment\">Paiement</a> est traité avec succès ou \n  lorsque l'utilisateur achète un abonnement avec une période d'essai. Il \n  contient les détails de l'abonnement acheté ainsi que les données de \n  l'utilisateur. Utilisez les données du webhook pour ajouter l'abonnement à \n  l'utilisateur.\n- <a href=\"/webhooks/operation/updated-subscription/\">Abonnement mis à jour</a> \n  (`update_subscription`) — envoyé lorsqu'un abonnement est renouvelé ou modifié, \n  lorsqu'un webhook <a \n  href=\"https://developers.xsolla.com/fr/webhooks/operation/payment\">Paiement</a> \n  est traité avec succès. Il contient les détails de l'abonnement acheté et les \n  données de l'utilisateur. Utilisez les données du webhook pour prolonger \n  l'abonnement de l'utilisateur ou modifier les paramètres de l'abonnement.\n- <a href=\"/webhooks/operation/refund\">Remboursement</a> (`refund`) — envoyé \n  lorsqu'une commande est annulée et contient les données du paiement annulé \n  ainsi que les détails de la transaction.\n- <a href=\"/webhooks/operation/canceled-subscription/\">Abonnement annulé</a> \n  (`cancel_subscription`) — envoyé lorsqu'un webhook <a \n  href=\"/webhooks/operation/refund\">Remboursement</a> est traité avec succès ou \n  lorsque l'abonnement est annulé pour une autre raison. Il contient des \n  informations sur l'abonnement et les données de l'utilisateur. Utilisez les \n  données du webhook pour déduire les abonnements achetés de l'utilisateur.\n\n# Configurer les webhooks dans le Compte éditeur\n\n## Paramètres généraux\n\nPour activer la réception des webhooks\_:\n1. Dans le projet dans le Compte éditeur, accédez à la section <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Paramètres du \n   projet &gt; Webhooks</a>.\n2. Dans le champ <b>Webhook server</b>, spécifiez l'URL du serveur où vous \n   souhaitez recevoir des webhooks au format `https://example.com`. Vous pouvez \n   également indiquer l'URL que vous trouvez dans un outil de test de webhooks.\n\n<div class=\"notice\">\n<p><strong>Attention</strong></p>\n<p> Le protocole HTTPS est utilisé pour transférer les données\_; le protocole HTTP n'est pas pris en charge.</p>\n</div>\n\n<p></p>\n\n3. Une clé secrète pour signer les webhooks du projet est générée par défaut. Si \n   vous souhaitez générer une nouvelle clé secrète, cliquez sur l'icône \n   d'actualisation.\n4. Cliquez sur <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>Note</strong></p>\n<p>Pour tester les webhooks, sélectionnez n'importe quel site Web dédié, tel que <a href=\"https://webhook.site/#!/\">webhook.site</a>, ou une plateforme, telle que <a href=\"https://ngrok.com/\">ngrok</a>.</p>\n</div>\n\n<p></p>\n\n<div class=\"notice\">\n    <p><strong>Remarque</strong></p>\n    <p>Il est impossible d'envoyer simultanément des webhooks à différentes URL. Une approche consiste à spécifier d'abord une URL pour les tests dans le Compte éditeur, puis à la remplacer par l'URL réelle.</p>\n</div>\n\nPour désactiver la réception de webhooks\_:\n1. Dans le projet dans le Compte éditeur, accédez à la section <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Paramètres du \n   projet &gt; Webhooks</a>.\n2. Cliquez sur <b>Disable webhooks</b>.\n\n## Paramètres avancés\n\nPour les webhooks de la section <a href=\"/webhooks/overview/#section/Test-\nwebhooks-in-Publisher-Account/Store\">Payments and Store</a>, des paramètres \navancés sont disponibles. Ils apparaîtront automatiquement sous le bloc <a \nhref=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-Account/General-\nsettings\">General settings</a> après que vous aurez cliqué sur le bouton <b>Get \nwebhooks</b>.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si les paramètres avancés ne s'affichent pas, assurez-vous que la réception de webhook est connectée dans les paramètres généraux et que vous êtes sur l'onglet <b>Testing &gt; Payments and Store</b>.</p>\n</div>\n\nDans cette section, vous pouvez configurer la réception d'informations \nsupplémentaires dans les webhooks. Pour ce faire, réglez les bascules \ncorrespondantes en position active. La ligne de chaque autorisation indique les \nwebhooks qui seront affectés par la modification des paramètres.\n\n<table>\n<thead>\n    <tr>\n        <th>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Afficher infos sur le compte de paiement enregistré</td>\n        <td>Les informations relatives au mode de paiement enregistré sont passées à l'objet personnalisé <code>payment_account</code>.</td>\n    </tr>\n    <tr>\n        <td>Afficher infos sur transactions effectuées via modes de paiement enregistrés</td>\n        <td><p>Les informations sont passées dans les paramètres personnalisés suivants du webhook\_:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — le mode de paiement enregistré n'a pas été utilisé\_;</li><li><code>1</code> — le mode de paiement a été enregistré lors du paiement en cours\_;</li><li><code>2</code> — le mode de paiement précédemment enregistré est utilisé.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — paiement unique\_;</li><li><code>2</code> — paiement récurrent.</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Ajouter l'objet de la commande au webhook</td>\n        <td>Les informations relatives à la commande sont passées dans l'objet <code>order</code> du webhook <a href=\"/webhooks/operation/payment/\">Paiement</a>.</td>\n    </tr>\n    <tr>\n        <td>Envoyer paramètres utilisateur nécessaires seulement sans données sensibles</td>\n        <td><p>Seules les informations suivantes sur l'utilisateur sont passées dans le webhook\_:</p><ul><li>ID\_;</li><li>pays.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Envoyer paramètres personnalisés</td>\n        <td>Les informations relatives aux <a href=\"/api/pay-station/operation/create-token/\">paramètres du jeton personnalisé</a> sont passées dans le webhook.</td>\n    </tr>\n    <tr>\n        <td>Afficher BIN et suffixe de carte</td>\n        <td><p>Les informations suivantes sur le numéro de la carte bancaire sont passées dans le webhook\_:</p><ul><li>les 6\_premiers chiffres du paramètre <code>card_bin</code>\_;</li><li>les 4\_derniers chiffres du <code>card_suffix</code>.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Afficher marque de carte</td>\n        <td>La marque de la carte utilisée pour effectuer le paiement. Par exemple, Mastercard ou Visa.</td>\n    </tr>\n</tbody>\n</table>\n\n![Paramètres avancés](https://cdn.xsolla.net/developers/current/images/api_docs/advanced-settings-upd.png)\n\n# Tester les webhooks dans le Compte éditeur\n\nTester les webhooks permet de s'assurer de la bonne configuration du projet, \ntant de votre côté que du côté de Xsolla.\n\nSi les webhooks sont <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-\nPublisher-Account\">configurés</a> avec succès, une section de test des webhooks \ns'affiche sous celle de configuration des webhooks.\n\n![Section de test des \nwebhooks](https://cdn.xsolla.net/developers/current/images/api_docs/testing.png)\n\nLa section de test dans le Compte éditeur varie en fonction de l'option de \nréception du webhook.\n\n<b>Si vous recevez des webhooks combinés</b>\_:\n\n<table>\n<thead>\n    <tr>\n        <th>Nom de l'onglet pour le test du webhook</th>\n        <th>Nom et type du webhook</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Payments and store</b></td>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Services de jeux &gt; Webhooks combinés &gt; <a href=\"/webhooks/operation/successful-order-payment\">Paiement de commande réussi</a> (<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Services de jeux &gt; Webhooks combinés &gt; <a href=\"/webhooks/operation/order-cancellation\">Annulation de commande</a> (<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Subscriptions</b></td>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Payments &gt; <a href=\"/webhooks/operation/payment\">Paiement</a> (<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n\n<b>Si vous recevez des webhooks distincts</b>\_:\n\n<table>\n<thead>\n    <tr>\n        <th>Nom de l'onglet pour le test du webhook</th>\n        <th>Nom et type du webhook</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Store</b></td>\n        <td>Services de jeux &gt; Webhooks distincts &gt; <a href=\"/webhooks/operation/successful-order-payment-separate\">Paiement de commande réussi</a> (<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Services de jeux &gt; Webhooks distincts &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">Annulation de commande</a> (<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Payments</b></td>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Payments &gt; <a href=\"/webhooks/operation/payment\">Paiement</a> (<code>payment</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Subscriptions</b></td>\n        <td>Validation utilisateur &gt; <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Payments &gt; <a href=\"/webhooks/operation/payment\">Paiement</a> (<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si un avertissement indiquant que le test a échoué apparaît dans la section de test, vérifiez les paramètres de réponse du webhook dans votre <a href=\"/webhooks/overview/#section/Webhook-listener\">écouteur webhook</a>. Les raisons des erreurs dans les tests sont indiquées dans les résultats.</p>\n<p><b>Exemple\_:</b></p>\n<p>Vous utilisez le site spécialisé <a href=\"https://webhook.site/#!/\">webhook.site</a> pour effectuer des tests.</p>\n<p>Une erreur s'affiche dans la section <b>Testing response to invalid signature</b>.</p>\n<p>Cela se produit parce que Xsolla envoie un webhook avec une signature incorrecte et s'attend à ce que votre gestionnaire réponde avec un code HTTP <code>4xx</code> spécifiant le code d'erreur <code>INVALID_SIGNATURE</code>.</p>\n<p><a href=\"https://webhook.site/#!/\">webhook.site</a> renvoie un code HTTP <code>200</code> en réponse à tous les webhooks, y compris à ceux avec une signature incorrecte. Le code HTTP <code>4xx</code> attendu ne pouvant pas être obtenu, une erreur apparaît dans le résultat du test.</p>\n</div>\n\n![Erreur de test](https://cdn.xsolla.net/developers/current/images/api_docs/test-error.png)\n\nLe processus de test du scénario avec des webhooks combinés est décrit ci-\ndessous.\n\n## Payments and Store\n\nDans l'onglet <b>Payments and Store</b>, vous pouvez tester les webhooks \nsuivants\_:\n- <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> \n  (`user_validation`)\_;\n- <a href=\"/webhooks/operation/successful-order-payment\">Paiement de commande \n  réussi</a> (`order_paid`)\_;\n- <a href=\"/webhooks/operation/order-cancellation\">Annulation de commande</a> \n  (`order_canceled`).\n\nPour tester\_:\n1. Dans la section de test des webhooks, accédez à l'onglet <b>Payments and \n   Store</b>.\n2. Dans le menu déroulant, sélectionnez le type d'objet. Si l'objet du type \n   sélectionné n'est pas configuré dans le Compte éditeur, cliquez sur\_:\n   * <b>Connect</b> — si le module contenant des objets de ce type n'est pas \n     connecté\_;\n   * <b>Configure</b> — si vous avez connecté le module précédemment, mais n'avez \n     pas encore terminé la configuration.<br/>En cliquant sur le bouton, vous serez \n     redirigé vers la section correspondante du Compte éditeur selon le type d'objet \n     sélectionné. Après avoir créé l'objet, revenez à la section de test des \n     webhooks et passez à l'étape suivante.\n3. Remplissez les champs nécessaires\_: <ol type=\"a\"> <li>Sélectionnez l'UGS du \n   bien dans la liste déroulante et indiquez le montant. Pour choisir plusieurs \n   biens du même type, cliquez sur <b>+</b> et ajoutez-les sur une nouvelle ligne\_\n   ;</li> <li><b>ID utilisateur</b> — lors des tests, utilisez n'importe quelle \n   combinaison de lettres et de chiffres.</li> <li><b>ID utilisateur public</b> — \n   ID connu de l'utilisateur, par exemple, une adresse e-mail ou un pseudo. Ce \n   champ s'affiche si l'ID utilisateur public est activé dans votre projet dans \n   <b>Pay Station &gt; Paramètres</b>\_;</li> <li>Entrez n'importe quelle valeur \n   dans le champ <b>ID de commande Xsolla</b>\_;</li> <li><b>ID de facture \n   Xsolla</b> — ID de la transaction côté Xsolla. Lors des tests, utilisez \n   n'importe quelle valeur numérique\_;</li> <li><b>ID de facture</b> — ID de la \n   transaction du côté de votre jeu. Lors des tests, utilisez n'importe quelle \n   combinaison de lettres et de chiffres. Ce n'est pas un paramètre obligatoire \n   pour un paiement réussi, mais vous pouvez le passer pour lier l'ID de la \n   transaction de votre côté à l'ID de la transaction côté Xsolla\_;</li> \n   <li><b>Montant</b> — montant du paiement. Lors des tests, utilisez n'importe \n   quelle valeur numérique\_;</li> <li><b>Devise</b> — sélectionnez une devise dans \n   la liste déroulante.</li> </ol>\n\n4. Cliquez sur <b>Tester les webhooks</b>.\n\n\nLes webhooks <a href=\"/webhooks/operation/user-validation/\">Validation \nurilisateur</a>, <a href=\"/webhooks/operation/successful-order-\npayment\">Paiement de commande réussi</a> et <a href=\"/webhooks/operation/order-\ncancellation\">Annulation de commande</a> avec les données spécifiées sont \nenvoyés à l'URL fournie. Les résultats du test de chaque type de webhook sont \naffichés sous le bouton <b>Tester les webhooks</b>.\n\nSi l'ID utilisateur public est activé dans votre projet, les résultats de la \nvérification de la recherche utilisateur seront également visibles.\n\nIl est nécessaire de configurer le traitement des deux scénarios pour chaque \nwebhook\_: un scénario réussi et un scénario avec une erreur.\n\n![Section d'essai des \npaiements](https://cdn.xsolla.net/developers/current/images/api_docs/payments-tab.png)\n\n## Subscriptions\nDans l'onglet <b>Subscriptions</b>, vous pouvez tester les webhooks suivants\_:\n- <a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> \n  (`user_validation`)\_;\n- <a href=\"/webhooks/operation/payment\">Paiement</a> (`payment`).\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Dans le Compte éditeur, vous ne pouvez tester que les webhooks basiques\_: Validation utilisateur et Paiement. Pour tester d'autres types de webhooks, accédez à\_:</p>\n<p><ul><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_payment\">Tester l'achat d'un abonnement\_;</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\">Tester le renouvellement d'un abonnement\_;</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_cancelation\">Tester l'annulation d'un abonnement.</a></li></ul></p>\n</div>\n\n<p></p>\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Pour tester les webhooks, vous devez <a href=\"/doc/subscriptions/integration-guide/set-up-plan/\">avoir créé au moins un plan d'abonnement</a> dans la section <b>Compte éditeur&gt; Subscriptions &gt; Subscription Plans</b>.</p>\n</div>\n\nPour tester\_: <ol> <li>Dans la section de test, accédez à l'onglet \n<b>Subscriptions</b>.</li> <li>Remplissez les champs nécessaires\_: <ol \ntype=\"a\"> <li><b>ID utilisateur</b> — lors des tests, utilisez n'importe quelle \ncombinaison de lettres et de chiffres\_;</li> <li><b>ID de facture Xsolla</b> — \nID de transaction côté Xsolla. Lors des tests, utilisez n'importe quelle valeur \nnumérique\_;</li> <li><b>ID utilisateur public</b> — ID connu de l'utilisateur, \npar exemple, une adresse e-mail ou un pseudo. Ce champ s'affiche si l'ID \nutilisateur public est activé dans votre projet dans la section Pay Station \n&gt; Paramètres &gt; Paramètres supplémentaires\_;</li> <li><b>Devise</b> — \nsélectionnez une devise dans la liste déroulante\_;</li> <li><b>ID de plan</b> — \nun plan d'abonnement. Choisissez un plan dans la liste déroulante\_;</li> \n<li><b>Produit d'abonnement</b> — choisissez un produit dans la liste \ndéroulante (facultatif)\_;</li> <li><b>Montant</b> — montant du paiement. Lors \ndes tests, utilisez n'importe quelle valeur numérique\_;</li> <li><b>ID de \nfacture</b> — ID de transaction du côté de votre jeu. Lors des tests, n'importe \nquelle combinaison de lettres et de chiffres est admissible. Ce paramètre n'est \npas nécessaire pour un paiement réussi, mais vous pouvez le passer pour lier \nl'ID de transaction de votre côté à l'ID de transaction côté Xsolla\_;</li> \n<li><b>Période d'essai</b> — pour tester l'<a href=\"/doc/subscriptions\n/integration-guide/get-subscription-\ninformation/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox\">acha\nt d'un abonnement sans période d'essai</a> ou le <a href=\"/doc/subscriptions\n/integration-guide/get-subscription-\ninformation/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\"\n>renouvellement d'un abonnement</a>, spécifiez la valeur <code>0</code>.</li> \n</ol> </li> <li>Cliquez sur <b>Tester les webhooks</b>.</li> </ol>\n\nVous recevrez des webhooks avec des données remplies à l'URL spécifiée. Les \nrésultats des tests de chaque webhook, pour un scénario réussi et un scénario \navec une erreur, sont affichés sous le bouton <b>Test webhooks</b>.\n\n<a id=\"webhook-listener\"></a>\n\n# Écouteur webhook\n\nL'écouteur webhook est un code de programme qui permet de recevoir des webhooks \nentrants à une adresse URL spécifiée, de <a href=\"/webhooks/overview/#section\n/Webhook-listener/Generation-of-signature\">générer une signature</a> et d'<a \nhref=\"/webhooks/overview/#section/Webhook-listener/Sending-responses-to-\nwebhook\">envoyer une réponse</a> au serveur webhook de Xsolla.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Vous pouvez utiliser la <a href=\"https://developers.xsolla.com/fr/sdk/php/\">bibliothèque Pay Station PHP SDK</a>, qui contient des classes prêtes à l'emploi, pour le traitement des 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\nDu côté de votre application, implémentez la réception des webhooks envoyés \ndepuis les adresses IP suivantes\_:\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 vous avez intégré le produit <a href=\"/doc/login/\">Login</a>, ajoutez \négalement le traitement des webhooks envoyés depuis les adresses IP suivantes\_:\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\nRestrictions\_:\n- La base de données de votre application ne doit pas contenir plusieurs \n  transactions réussies avec le même ID.\n- Si l'écouteur reçoit un webhook avec un ID qui existe déjà dans la base de \n  données, renvoyez le résultat précédent du traitement de cette transaction. Il \n  est déconseillé de créditer l'utilisateur pour un achat déjà effectué et de \n  créer des enregistrements en double dans la base de données.\n\n## Génération de la signature\n\nPour garantir la sécurité de la transmission des données, vérifiez que le \nwebhook provient bien du serveur Xsolla et qu’il n’a pas été altéré pendant le \ntransport. Pour ce faire, générez votre propre signature sur la base de la \ncharge utile du corps de la requête et comparez-la à celle fournie dans l’en-\ntête `authorization` de la requête entrante. Si les deux signatures \ncorrespondent, le webhook est authentique et peut être traité en toute sécurité.\n\nÉtapes de vérification\_:\n\n1. Récupérez la signature depuis l’en-tête `authorization` de la requête webhook \n   entrante. Le format de cet en-tête est\_: `Signature <signature_value>`.\n2. Récupérez le corps de la requête webhook au format JSON. <div \n   class=\"notice\"><p><strong>Remarque</strong></p><p>Utilisez la charge utile JSON \n   exactement telle qu’elle est reçue. Ne la parsez ni ne la réencodez, car cela \n   modifierait son formatage et entraînerait l’échec de la vérification de la \n   signature.</p></div><p></p>\n\n3. Générez votre propre signature à des fins de comparaison\_: <ol type=\"a\"> \n   <li>Concaténez la charge utile JSON avec la clé secrète de votre projet, en \n   ajoutant cette dernière à la fin de la chaîne.</li> <li>Appliquez la fonction \n   de hachage cryptographique SHA-1 à la chaîne obtenue. Le résultat sera une \n   chaîne hexadécimale en minuscules.</li> </ol>\n4. Comparez la signature que vous avez générée avec celle fournie dans l’en-tête \n   `authorization`. Si elles correspondent, le webhook est authentique.\n\nVoici des exemples d’implémentation de la génération de signatures pour les \nlangages suivants\_: C#, C++, Go, PHP et Node.js.\n\n### Exemple 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### Exemple 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### Exemple d'implémentation de la génération de signatures en C# (exemple général)\_:\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Ce code fonctionne avec .NET Framework 4.0 et versions ultérieures, .NET Core et d'autres versions récentes de .NET. La vérification des signatures utilise <code>ConstantTimeEquals</code> pour une comparaison en temps constant, réduisant le risque d'attaques temporelles.</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### Exemple C# d'implémentation de la génération de signatures (.NET 5.0 et versions supérieures)\_:\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>La méthode <code>Convert.ToHexString</code> nécessite .NET 5.0 ou ultérieure.<p></p>Avec .NET 7.0 ou ultérieure, vous pouvez aussi utiliser la méthode <code>CryptographicOperations.FixedTimeEquals</code> à la place 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### Exemple C# d'implémentation de la génération de signatures (.NET 7.0 et versions supérieures)\_:\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si vous disposez de .NET 7.0 ou ultérieure, vous pouvez utiliser la méthode <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### Exemple d'implémentation de la génération de signatures en C++\_:\n\n```c++\n#include <string>\n#include <sstream>\n#include <iomanip>\n#include <openssl/sha.h>\nclass XsollaWebhookSignature {\npublic:\n    static std::string computeSha1(const std::string& jsonBody, const std::string& secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        std::string dataToSign = jsonBody + secretKey;\n        unsigned char digest[SHA_DIGEST_LENGTH];\n        // Create SHA1 hash\n        SHA1(reinterpret_cast<const unsigned char*>(dataToSign.c_str()),\n             dataToSign.length(), digest);\n        // Convert to lowercase hexadecimal string\n        std::ostringstream hexStream;\n        hexStream << std::hex << std::setfill('0');\n        for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {\n            hexStream << std::setw(2) << static_cast<unsigned int>(digest[i]);\n        }\n        return hexStream.str();\n    }\n    static bool verifySignature(const std::string& jsonBody, const std::string& secretKey, const std::string& receivedSignature) {\n        std::string computedSignature = computeSha1(jsonBody, secretKey);\n        // Timing-safe comparison\n        if (computedSignature.length() != receivedSignature.length()) {\n            return false;\n        }\n        volatile unsigned char result = 0;\n        for (size_t i = 0; i < computedSignature.length(); ++i) {\n            result |= (computedSignature[i] ^ receivedSignature[i]);\n        }\n        return result == 0;\n    }\n};\n```\n\n### Exemple d'implémentation de la génération de signatures en Go\_:\n\n```go\npackage main\nimport (\n\t\"crypto/sha1\"\n    \"crypto/subtle\"\n\t\"encoding/hex\"\n\t\"strings\"\n)\ntype XsollaWebhookSignature struct{}\nfunc (x *XsollaWebhookSignature) ComputeSha1(jsonBody, secretKey string) string {\n\t// Concatenation of the JSON from the request body and the project's secret key\n\tdataToSign := jsonBody + secretKey\n\t// Create SHA1 hash\n\th := sha1.New()\n\th.Write([]byte(dataToSign))\n\tsignature := h.Sum(nil)\n\t// Convert to lowercase hexadecimal string\n\treturn strings.ToLower(hex.EncodeToString(signature))\n}\nfunc (x *XsollaWebhookSignature) VerifySignature(jsonBody, secretKey, receivedSignature string) bool {\n\tcomputedSignature := x.ComputeSha1(jsonBody, secretKey)\n\treceivedSignatureLower := strings.ToLower(receivedSignature)\n\t// Use constant time comparison to prevent timing attacks\n\treturn subtle.ConstantTimeCompare([]byte(computedSignature), []byte(receivedSignatureLower)) == 1\n}\n```\n\n### Exemple d'implémentation de la génération de signatures en PHP\_:\n\n```php\n<?php\nclass XsollaWebhookSignature\n{\n    /**\n     * Compute SHA1 signature from webhook JSON body and secret key\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key\n     * @return string The lowercase SHA1 signature\n     */\n    public static function computeSha1(string $jsonBody, string $secretKey): string\n    {\n        // Concatenation of the JSON from the request body and the project's secret key\n        $dataToSign = $jsonBody . $secretKey;\n        // Generate SHA1 signature\n        $signature = sha1($dataToSign);\n        return strtolower($signature);\n    }\n    /**\n     * Verify webhook signature using timing-safe comparison\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key  \n     * @param string $receivedSignature The signature from authorization header\n     * @return bool True if signature is valid, false otherwise\n     */\n    public static function verifySignature(string $jsonBody, string $secretKey, string $receivedSignature): bool\n    {\n        $computedSignature = self::computeSha1($jsonBody, $secretKey);\n        // Use hash_equals for timing-safe comparison\n        return hash_equals($computedSignature, strtolower($receivedSignature));\n    }\n}\n?>\n```\n\n### Exemple d'implémentation de la génération de signatures en Node.js\_:\n\n```js\nconst crypto = require('crypto');\nclass XsollaWebhookSignature {\n    // IMPORTANT: jsonBody must be the raw JSON string exactly as received from Xsolla\n    static computeSha1(jsonBody, secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        const dataToSign = jsonBody + secretKey;\n        // Create SHA1 hash\n        const hash = crypto.createHash('sha1');\n        hash.update(dataToSign, 'utf8');\n        // Convert to lowercase hexadecimal string\n        return hash.digest('hex').toLowerCase();\n    }\n    static verifySignature(jsonBody, secretKey, receivedSignature) {\n        const computedSignature = this.computeSha1(jsonBody, secretKey);\n        const cleanReceivedSignature = receivedSignature.toLowerCase();\n        // Check if signatures have the same length before using timingSafeEqual\n        if (computedSignature.length !== cleanReceivedSignature.length) {\n            return false;\n        }\n        try {\n            return crypto.timingSafeEqual(\n                Buffer.from(computedSignature, 'hex'),\n                Buffer.from(cleanReceivedSignature, 'hex')\n            );\n        } catch (error) {\n            // Return false if there's any error (e.g., invalid hex characters)\n            return false;\n        }\n    }\n}\n```\n\n## Envoi de réponses au webhook\n\nPour confirmer la réception du webhook, votre serveur doit renvoyer\_:\n* Un code HTTP `200`, `201` ou `204` en cas de réponse positive\_;\n* Un code HTTP `400` avec <a \n  href=\"/webhooks/overview/#section/Erreurs\">description du problème</a> au cas où \n  l'utilisateur spécifié n'a pas été trouvé ou une signature non valide a été \n  passée. Le gestionnaire de webhook peut également renvoyer un code HTTP `5xx` \n  en cas de problèmes temporaires sur votre serveur.\n\nSi le serveur Xsolla n'a pas reçu de réponse aux webhooks <a \nhref=\"/webhooks/operation/successful-order-payment\">Paiement de commande \nréussi</a> et <a href=\"/webhooks/operation/order-cancellation\">Annulation de \ncommande</a>, ou s'il reçoit une réponse contenant un code `5xx`, les webhooks \nsont renvoyés selon le calendrier suivant\_:\n* 2\_tentatives à intervalles de 5\_minutes\_;\n* 7\_tentatives à intervalles de 15\_minutes\_;\n* 10\_tentatives à intervalles de 60\_minutes.\n\nUn maximum de 20\_tentatives d'envoi de webhooks sont effectuées dans les 12\_\nheures suivant la première tentative.\n\nLa logique de réessai pour les webhooks <a \nhref=\"/webhooks/operation/payment\">Payment</a> et <a \nhref=\"/webhooks/operation/refund\">Refund</a> est décrite sur la page du webhook \nconcerné.\n\n<div class=\"notice\">\n<p><strong>Remarque</strong></p>\n<p>Le paiement sera quand même remboursé à l'utilisateur si toutes les conditions suivantes sont réunies\_:<ul><li>Xsolla a initié le remboursement.</li><li>En réponse au webhook, un code d'état <code>4xx</code> est renvoyé, ou aucune réponse n'est reçue après toutes les tentatives, ou un code d'état <code>5xx</code> est renvoyé.</li></ul></p>\n</div>\n\nSi le serveur Xsolla n'a pas reçu de réponse au webhook <a \nhref=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> ou s'il \na reçu une réponse contenant un code `400` ou `5xx`, le webhook <a \nhref=\"/webhooks/operation/user-validation/\">Validation utilisateur</a> n'est \npas renvoyé. Dans ce cas, l'utilisateur voit une erreur et les webhooks <a \nhref=\"/webhooks/operation/payment\">Paiement</a> et <a href=\"/webhooks/operation\n/successful-order-payment\">Paiement de commande réussi</a> ne sont pas envoyés.\n\n# Erreurs\n\nCodes d'erreur pour le code HTTP 400\_:\n\n<table>\n<thead>\n    <tr>\n        <th>Code</th>\n        <th>Message</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>INVALID_USER</td>\n        <td>Utilisateur non valide</td>\n    </tr>\n    <tr>\n        <td>INVALID_PARAMETER</td>\n        <td>Paramètre non valide</td>\n    </tr>\n    <tr>\n        <td>INVALID_SIGNATURE</td>\n        <td>Signature non valide</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_AMOUNT</td>\n        <td>Montant incorrect</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_INVOICE</td>\n        <td>Facture incorrecte</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# Liste des webhooks\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Le type de notification est passé dans le paramètre <code>notification_type</code>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Webhook</th>\n        <th>Type de notification</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-validation/\">Validation utilisateur</a></td>\n        <td><code>user_validation</code></td>\n        <td>Envoyé pour vérifier si l'utilisateur existe dans le jeu.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-search/\">Recherche utilisateur</a></td>\n        <td><code>user_search</code></td>\n        <td>Envoyé pour récupérer les informations sur l'utilisateur à partir de son ID utilisateur public.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment/\">Paiement</a></td>\n        <td><code>payment</code></td>\n        <td>Envoyé lorsque l'utilisateur effectue un paiement.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/refund/\">Remboursement</a></td>\n        <td><code>refund</code></td>\n        <td>Envoyé lorsqu'un paiement doit être annulé pour une raison quelconque.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/partial-refund/\">Remboursement partiel</a></td>\n        <td><code>partial_refund</code></td>\n        <td>Envoyé lorsqu'un paiement doit être partiellement annulé pour une raison quelconque.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment-declined/\">Paiement refusé</a></td>\n        <td><code>ps_declined</code></td>\n        <td>Envoyé lorsqu'un paiement est refusé par le système de paiement.</td>\n    </tr>\n    <tr>\n        <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/afs-rejected-transaction/\">Transaction rejetée par AFS</a></td>\n        <td><code>afs_reject</code></td>\n        <td>Envoyé lorsqu'une transaction est refusée lors d'un contrôle AFS.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/afs-rejected-blocklist/\">Mise à jour de la liste noire AFS</a></td>\n      <td><code>afs_black_list</code></td>\n      <td>Envoyé lorsque la liste noire AFS est mise à jour.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/created-subscription/\">Abonnement créé</a></td>\n      <td><code>create_subscription</code></td>\n      <td>Envoyé lorsque l'utilisateur crée un abonnement.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/updated-subscription/\">Abonnement mis à jour</a></td>\n      <td><code>update_subscription</code></td>\n      <td>Envoyé lors du renouvellement ou de la modification d'un abonnement.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/canceled-subscription/\">Abonnement annulé</a></td>\n      <td><code>cancel_subscription</code></td>\n      <td>Envoyé lorsqu'un abonnement est annulé.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/nonrenewing-subscription/\">Abonnement non renouvelable</a></td>\n      <td><code>non_renewal_subscription</code></td>\n      <td>Envoyé lorsque le statut est défini sur non renouvelable.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/add-payment-account/\">Ajout de compte de paiement</a></td>\n      <td><code>payment_account_add</code></td>\n      <td>Envoyé lorsque l'utilisateur ajoute ou enregistre un compte de paiement.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/remove-payment-account/\">Suppression de compte de paiement</a></td>\n      <td><code>payment_account_remove</code></td>\n      <td>Envoyé lorsque l'utilisateur supprime un compte de paiement des comptes enregistrés.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/user-validation-in-webshop\">Validation utilisateur dans Web Shop</a></td>\n      <td><code>-</code></td>\n      <td>Envoyé depuis le site d'un Web Shop pour vérifier si l'utilisateur existe dans le jeu.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/personalized-partner-catalog\">Personnalisation du catalogue côté partenaire</a></td>\n      <td><code>partner_side_catalog</code></td>\n      <td>Envoyé lorsque l'utilisateur interagit avec le magasin.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/successful-order-payment\">Paiement de commande réussi</a></td>\n      <td><code>order_paid</code></td>\n      <td>Envoyé lorsqu'une commande est payée.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/order-cancellation\">Annulation de commande</a></td>\n      <td><code>order_canceled</code></td>\n      <td>Envoyé lorsqu'une commande est annulée.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/fr/webhooks/operation/dispute\">Contestation</a></td>\n      <td><code>dispute</code></td>\n      <td>Envoyé lorsqu'une nouvelle contestation est ouverte.</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: Validation utilisateur
  - name: payments
    x-displayName: Payments
  - name: game-services
    x-displayName: Services de jeux
  - name: anti-fraud
    x-displayName: Anti-Fraud
  - name: subscriptions
    x-displayName: Subscriptions
  - name: combined-webhooks
    x-displayName: Webhooks combinés
  - name: separate-webhooks
    x-displayName: Webhooks distincts
  - name: personalization
    x-displayName: Webhook de personnalisation
webhooks:
  add-payment-account:
    post:
      description: >-
        Xsolla envoie un webhook de type `payment_account_add` à l'URL du
        webhook chaque fois que l'utilisateur ajoute un compte de paiement ou
        enregistre un compte de paiement lors d'un achat dans le jeu. Pour
        recevoir ce webhook, contactez votre responsable de réussite client ou
        envoyez un e-mail à <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: Détails de compte de paiement (objet).
                  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: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Ajout de compte de paiement
      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: >-
        Lorsque la liste de blocage du système Anti-fraud est mise à jour (ajout
        ou suppression d'un paramètre), Xsolla envoie un webhook de type
        `afs_black_list` à l'URL du webhook. L'ajout d'un paramètre est effectué
        automatiquement côté Xsolla ou sur demande. La suppression d'un
        paramètre n'est possible que sur demande. Pour recevoir ce webhook,
        contactez votre responsable de la réussite client ou envoyez un e-mail à
        <a href="mailto:csm@xsolla.com">csm@xsolla.com</a>.
      operationId: afs-rejected-blocklist
      requestBody:
        content:
          application/json:
            schema:
              properties:
                event:
                  description: Informations sur un événement lié à la liste noire AFS.
                  properties:
                    action:
                      description: Type d'événement.
                      enum:
                        - adding
                        - removing
                      type: string
                    date_of_last_action:
                      description: >-
                        Heure du dernier événement lié à la liste noire AFS
                        selon la norme [ISO
                        8601](https://en.wikipedia.org/wiki/ISO_8601).
                      type: string
                    parameter:
                      description: Nom du paramètre par lequel l'événement s'est produit.
                      enum:
                        - nick
                        - email
                        - ps_account
                        - ip_address
                        - card_issuer
                        - phone
                      type: string
                      x-enumDescriptions:
                        card_issuer: >-
                          banque émettrice de la carte de crédit de
                          l'utilisateur
                        email: adresse e-mail de l'utilisateur
                        ip_address: adresse IP de l'utilisateur
                        nick: pseudo de l'utilisateur
                        phone: numéro de téléphone de l'utilisateur
                        ps_account: compte de facturation de l'utilisateur
                    parameter_value:
                      description: >-
                        Valeur du paramètre par lequel l'événement s'est
                        produit.
                      type: string
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                    reason:
                      description: Cause de l'événement.
                      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: Filtre AFS (ajout)
                        chargeback: chargeback (ajout)
                        fraud_activity: fraude (ajout)
                        friendly_fraud: fraude amicale (ajout)
                        linked_chargeback: liaison au chargeback (ajout)
                        linked_parameter: paramètre lié dans la liste noire AFS (ajout)
                        other_data_in_blacklist: autres paramètres dans la liste noire AFS (ajout)
                        other_forgiveness_reason: autre motif de suppression (suppression)
                        partner_request: sur demande (ajout)
                        ps_reported_fraud: >-
                          notification du système de paiement en cas de fraude
                          (ajout)
                        removed_by_cs_review: >-
                          supprimé après avoir signalé le problème au support
                          technique Xsolla (suppression)
                        suspicious_activity: activité suspecte (ajout)
                        user_reported_fraud: rapport utilisateur au sujet d'une fraude (ajout)
                        wrongly_added: ajouté par erreur (suppression)
                    transaction_id:
                      description: >-
                        ID de transaction associé au paramètre par lequel
                        l'événement s'est produit.
                      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: Mettre à jour la liste de blocage Anti-fraud
      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: "Lorsqu'une transaction est refusée pendant un contrôle du système Anti-fraud, \nXsolla envoie les détails de la transaction via un webhook de type `afs_reject` \nà l'URL du webhook. Pour recevoir ce webhook, contactez votre responsable de la \nréussite client ou envoyez un e-mail à <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\nLorsque vous enregistrez l'URL du webhook dans le Compte éditeur, vous pouvez \nactiver les autorisations pour recevoir des informations détaillées dans les \nwebhooks. Pour ce faire, activez la bascule correspondante dans la section <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>Note</strong></p>\n<p>Si vous avez créé un Compte éditeur le 22\_janvier\_2025 ou avant, les bascules se trouvent dans la section <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>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Afficher infos sur transactions effectuées via modes de paiement enregistrés</td>\n        <td><p>Les informations sont passées dans les paramètres personnalisés suivants du webhook\_:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — le mode de paiement enregistré n'a pas été utilisé\_;</li><li><code>1</code> — le mode de paiement a été enregistré lors du paiement en cours\_;</li><li><code>2</code> — le mode de paiement précédemment enregistré est utilisé.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — paiement unique\_;</li><li><code>2</code> — paiement récurrent.</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n"
      operationId: afs-rejected-transaction
      requestBody:
        content:
          application/json:
            schema:
              properties:
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                refund_details:
                  description: Détails du remboursement (objet).
                  properties:
                    author:
                      description: Initiateur du remboursement.
                      type: string
                    code:
                      description: ID de code.
                      type: integer
                    reason:
                      description: Motif de remboursement.
                      type: string
                  type: object
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                transaction:
                  description: Détails de la transaction (objet).
                  properties:
                    agreement:
                      description: ID de contrat.
                      type: integer
                    dry_run:
                      description: >-
                        Transaction test. Le paramètre a la valeur 1 s'il s'agit
                        d'une transaction test ou n'est pas envoyé si la
                        transaction est réelle.
                      type: integer
                    external_id:
                      description: External ID de la transaction.
                      type: string
                    id:
                      description: ID de transaction.
                      type: integer
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Téléphone de l'utilisateur.
                      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: Transaction rejetée par le système 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: >-
        Lorsqu'un abonnement est annulé, Xsolla envoie un webhook de type
        `cancel_subscription` à l'URL du webhook.
      operationId: canceled-subscription
      requestBody:
        content:
          application/json:
            schema:
              properties:
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                subscription:
                  description: Informations de l'abonnement (objet).
                  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: Informations sur l'utilisateur (objet).
                  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: Abonnement annulé
      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: >-
        Lorsque l'utilisateur crée un abonnement, Xsolla envoie un webhook de
        type `create_subscription` à l'URL du webhook.
      operationId: created-subscription
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Vos paramètres personnalisés.
                  type: object
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                subscription:
                  description: Informations de l'abonnement (objet).
                  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: Période d'essai (objet).
                      properties:
                        type:
                          description: "Type de période d'essai\_: day."
                          type: string
                        value:
                          description: Période d'essai.
                          type: integer
                      type: object
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Abonnement créé
      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: >-
        Lorsqu'une nouvelle contestation est ouverte ou lorsqu'une contestation
        change de statut, Xsolla envoie un webhook contenant le type de
        `dispute` à l'URL du webhook. Pour recevoir ce webhook, contactez votre
        responsable de la réussite client ou envoyez un e-mail à <a
        href="mailto:csm@xsolla.com">csm@xsolla.com</a>.
      operationId: dispute
      requestBody:
        content:
          application/json:
            schema:
              properties:
                action:
                  description: Type d'action.
                  enum:
                    - adding
                    - updating
                  type: string
                  x-enumDescriptions:
                    adding: Nouvelle contestation ouverte.
                    updating: Changement de statut de contestation.
                dispute:
                  description: Objet contenant des informations sur la contestation.
                  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: >-
                    Objet contenant des informations sur les paramètres
                    personnalisés du projet.
                  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: Objet contenant des informations sur la transaction.
                  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: >-
                        Objet contenant des informations sur le montant de la
                        transaction.
                      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: Objet contenant des informations sur l'utilisateur.
                  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: Contestation
      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: >-
        Lorsqu'un statut d'abonnement est défini sur Non renouvelable, Xsolla
        envoie un webhook de type `non_renewal_subscription` à l'URL du webhook.
        Pour recevoir ce webhook, contactez votre responsable de la réussite
        client ou envoyez un e-mail à <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: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  required:
                    - project_id
                  type: object
                subscription:
                  description: Informations de l'abonnement (objet).
                  properties:
                    amount:
                      description: Prix en monnaie réelle.
                      format: float
                      type: number
                    currency:
                      $ref: '#/components/schemas/currency'
                    date_create:
                      $ref: '#/components/schemas/subscription.date_create'
                    date_next_charge:
                      description: >-
                        Prochaine date de facturation. Il s'agit de la date à
                        laquelle le prochain paiement était attendu avant que
                        l'abonnement de l'utilisateur ne soit ajusté pour ne pas
                        se renouveler. Date et heure selon la norme [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: Informations sur l'utilisateur (objet).
                  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: Abonnement non renouvelable
      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 envoie le webhook <code>order_canceled</code> à l'URL spécifiée lorsque \nle paiement est annulé par l'utilisateur, le partenaire ou automatiquement. Le \nwebhook inclut des informations sur les objets retournés, le paiement et la \ncommande annulée.\n\nLe webhook n'est pas envoyé si le paiement n'a pas abouti, par exemple\_:\n* l'interface de paiement a été ouverte, mais l'utilisateur n'a pas procédé au \n  paiement de la commande\_;\n* l'interface de paiement a été ouverte, mais des erreurs se sont produites lors \n  du paiement.\n\nLe temps de traitement recommandé pour le webhook est de 3\_secondes.\n"
      operationId: order-cancellation
      requestBody:
        content:
          application/json:
            schema:
              properties:
                billing:
                  description: Données de la transaction et du paiement.
                  properties:
                    notification_type:
                      $ref: '#/components/schemas/notification_type'
                    payment_details:
                      description: Informations sur le paiement (objet).
                      properties:
                        country_wht:
                          description: >-
                            Retenue à la source appliquée dans certains pays
                            pour les transactions transfrontalières (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: "Taux de retenue à la source du pays, en\_%."
                              format: float
                              type: number
                          type: object
                        direct_wht:
                          description: Retenue à la source directe.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de retenue à la source directe.
                              format: float
                              type: number
                          type: object
                        payment:
                          description: Montant payé par l'utilisateur (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payment_method_fee:
                          description: Frais du système de paiement.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payment_method_sum:
                          description: Montant débité du système de paiement.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payout:
                          description: Détails de virement (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payout_currency_rate:
                          description: >-
                            Taux de change entre les devises de paiement et de
                            virement.
                          type: string
                        repatriation_commission:
                          description: >-
                            Données sur les frais de rapatriement imposés à
                            Xsolla par des tiers.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        sales_tax:
                          description: "Taxe de vente (objet\_; États-Unis et Canada uniquement)."
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de taxe de vente.
                              format: float
                              type: number
                          type: object
                        user_acquisition_fee:
                          description: >-
                            Montant total de la commission d'acquisition
                            d'utilisateurs déduits pour les achats effectués via
                            les réseaux d'affiliation et les influenceurs
                            (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: "Taux de la commission d'acquisition de l'utilisateur, en\_%."
                              format: float
                              type: number
                          type: object
                        vat:
                          description: "Informations sur la TVA (objet\_; UE uniquement)."
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de TVA.
                              format: float
                              type: number
                          type: object
                        xsolla_balance_sum:
                          description: Montant débité du solde Xsolla.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        xsolla_fee:
                          description: Frais Xsolla (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                      type: object
                    purchase:
                      description: Informations sur l'achat (objet).
                      properties:
                        subscription:
                          description: Informations de l'abonnement (objet).
                          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: Prix total d'achat (objet).
                          properties:
                            amount:
                              description: Montant total du paiement.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                      required:
                        - total
                      type: object
                    refund_details:
                      description: Détails du remboursement (objet).
                      properties:
                        author:
                          description: "Initiateur du remboursement. La valeur du champ est passée conformément au \ntableau\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Initiateur du remboursement</th>\n        <th>Valeur du champ</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Jeu (via API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (remboursement automatique).</td>\n        <td>Adresse e-mail de l'utilisateur</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n"
                          type: string
                        code:
                          description: ID de code.
                          type: integer
                        reason:
                          description: Motif de remboursement.
                          type: string
                      type: object
                    settings:
                      description: Paramètres personnalisés de projet (objet).
                      properties:
                        merchant_id:
                          $ref: '#/components/schemas/settings.merchant_id'
                        project_id:
                          $ref: '#/components/schemas/settings.project_id'
                      type: object
                    transaction:
                      description: Détails de la transaction (objet).
                      properties:
                        agreement:
                          description: ID de contrat.
                          type: integer
                        dry_run:
                          description: >-
                            Transaction test. Le paramètre a la valeur 1 s'il
                            s'agit d'une transaction test ou n'est pas envoyé si
                            la transaction est réelle.
                          type: integer
                        external_id:
                          description: External ID de la transaction.
                          type: string
                        id:
                          description: ID de transaction.
                          type: integer
                        payment_method_order_id:
                          description: ID de paiement dans le système de paiement.
                          type: string
                      type: object
                  required:
                    - notification_type
                    - transaction
                    - payment_details
                  type: object
                custom_parameters:
                  description: Informations supplémentaires.
                  type: object
                items:
                  description: "Liste des objets achetés par l'utilisateur.\n\nL'ensemble des paramètres inclus dans le tableau dépend de la version du \nwebhook. La version 2 comprend des paramètres supplémentaires\_: `is_free`, \n`is_bonus` et `is_bundle_content`. Pour changer de version, passez son numéro \ndans le paramètre `version` de l'appel API [Update information about webhook \nsettings](/fr/api/igs/operation/update-webhook/).\n"
                  items:
                    oneOf:
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                        title: version = 1
                        type: object
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_bonus:
                            description: Si la valeur est `true`, l'objet est un bonus.
                            type: boolean
                          is_bundle_content:
                            description: >-
                              Si la valeur est `true`, l'objet fait partie d'un
                              lot.
                            type: boolean
                          is_free:
                            description: >-
                              Si ce paramètre est défini sur `true`, l'objet est
                              gratuit.
                            type: boolean
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                          - is_free
                          - is_bonus
                          - is_bundle_content
                        title: version = 2
                        type: object
                  type: array
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                order:
                  description: Informations sur commande.
                  properties:
                    amount:
                      description: >-
                        Coût total du panier en fonction de la devise
                        sélectionnée.
                      type: string
                    comment:
                      description: Commentaire de l'utilisateur sur la commande.
                      nullable: true
                      type: string
                    coupons:
                      description: >-
                        Coupons appliqués. Si aucun coupon n'a été appliqué, le
                        tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code du coupon appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    currency:
                      description: >-
                        Devise de commande. L'UGS est utilisée pour la monnaie
                        virtuelle et un code à trois lettres selon la norme [ISO
                        4217](https://en.wikipedia.org/wiki/ISO_4217) pour les
                        devises réelles.
                      type: string
                    currency_type:
                      $ref: '#/components/schemas/currency-type'
                    id:
                      description: >-
                        Identifiant unique de la commande de l'utilisateur côté
                        Xsolla.
                      type: integer
                    invoice_id:
                      description: >-
                        ID de facture pour les paiements en devises réelles. Les
                        paiements en monnaie virtuelle ou les biens gratuits ont
                        une valeur `null`.
                      nullable: true
                      type: string
                    mode:
                      description: >-
                        Mode de paiement. La valeur `default` est utilisée pour
                        les paiements réels et `sandbox` pour les paiements
                        test.
                      enum:
                        - default
                        - sandbox
                      type: string
                    platform:
                      description: "Plateforme de paiement. La valeur `xsolla` est utilisée pour les paiements via Xsolla. Pour les autres paiements, la valeur correspondant au nom de la plateforme de publication de jeux est utilisée\_: `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: >-
                        Codes promo appliqués. Si aucun code promo n'a été
                        appliqué, le tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code promo appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    promotions:
                      $ref: '#/components/schemas/order.promotions'
                    status:
                      description: Statut de la commande.
                      type: string
                  required:
                    - id
                    - mode
                    - currency_type
                    - currency
                    - amount
                    - status
                    - platform
                    - comment
                    - invoice_id
                    - promotions
                  type: object
                user:
                  description: Informations sur l'utilisateur.
                  properties:
                    country:
                      $ref: '#/components/schemas/user.country'
                    email:
                      description: Adresse e-mail de l'utilisateur.
                      type: string
                    external_id:
                      description: ID utilisateur.
                      type: string
                  required:
                    - external_id
                    - email
                  type: object
              required:
                - notification_type
                - items
                - order
                - user
                - transaction
                - payment_details
      responses:
        '200':
          description: Renvoyez pour indiquer un traitement réussi.
        '400':
          description: >-
            Renvoyez en cas d'erreur dans les informations fournies (par
            exemple, un paramètre requis manquant, une autorisation échouée,
            etc.).
      summary: Annulation de commande (avec données de paiement et de transaction)
      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 envoie le webhook <code>order_canceled</code> à l'URL spécifiée lorsque \nle paiement est annulé par l'utilisateur, le partenaire ou automatiquement. Le \nwebhook inclut des informations sur les objets retournés et la commande annulée.\n\nLe webhook n'est pas envoyé si le paiement n'a pas abouti, par exemple\_:\n* l'interface de paiement a été ouverte, mais l'utilisateur n'a pas procédé au \n  paiement de la commande\_;\n* l'interface de paiement a été ouverte, mais des erreurs se sont produites lors \n  du paiement.\n\nLe temps de traitement recommandé pour le webhook est de 3\_secondes.\n"
      operationId: order-cancellation-separate
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Informations supplémentaires.
                  type: object
                items:
                  description: "Liste des objets achetés par l'utilisateur.\n\nL'ensemble des paramètres inclus dans le tableau dépend de la version du \nwebhook. La version 2 comprend des paramètres supplémentaires\_: `is_free`, \n`is_bonus` et `is_bundle_content`. Pour changer de version, passez son numéro \ndans le paramètre `version` de l'appel API [Update information about webhook \nsettings](/fr/api/igs/operation/update-webhook/).\n"
                  items:
                    oneOf:
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                        title: version = 1
                        type: object
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_bonus:
                            description: Si la valeur est `true`, l'objet est un bonus.
                            type: boolean
                          is_bundle_content:
                            description: >-
                              Si la valeur est `true`, l'objet fait partie d'un
                              lot.
                            type: boolean
                          is_free:
                            description: >-
                              Si ce paramètre est défini sur `true`, l'objet est
                              gratuit.
                            type: boolean
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            description: >-
                              Promotions appliquées. Si aucune promotion n'a été
                              appliquée, un tableau vide est passé dans le
                              paramètre.
                            items:
                              properties:
                                amount_with_discount:
                                  description: >-
                                    Coût total des objets bénéficiant d'une
                                    remise.
                                  type: string
                                amount_without_discount:
                                  description: Coût total des objets sans remise.
                                  type: string
                                sequence:
                                  description: Ordre d'application de promotions
                                  type: integer
                              type: object
                            type: array
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                          - is_free
                          - is_bonus
                          - is_bundle_content
                        title: version = 2
                        type: object
                  type: array
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                order:
                  description: Informations sur commande.
                  properties:
                    amount:
                      description: >-
                        Coût total du panier en fonction de la devise
                        sélectionnée.
                      type: string
                    comment:
                      description: Commentaire de l'utilisateur sur la commande.
                      nullable: true
                      type: string
                    coupons:
                      description: >-
                        Coupons appliqués. Si aucun coupon n'a été appliqué, le
                        tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code du coupon appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    currency:
                      description: >-
                        Devise de commande. L'UGS est utilisée pour la monnaie
                        virtuelle et un code à trois lettres selon la norme [ISO
                        4217](https://en.wikipedia.org/wiki/ISO_4217) pour les
                        devises réelles.
                      type: string
                    currency_type:
                      $ref: '#/components/schemas/currency-type'
                    id:
                      description: >-
                        Identifiant unique de la commande de l'utilisateur côté
                        Xsolla.
                      type: integer
                    invoice_id:
                      description: >-
                        ID de facture pour les paiements en devises réelles. Les
                        paiements en monnaie virtuelle ou les biens gratuits ont
                        une valeur `null`.
                      nullable: true
                      type: string
                    mode:
                      description: >-
                        Mode de paiement. La valeur `default` est utilisée pour
                        les paiements réels et `sandbox` pour les paiements
                        test.
                      enum:
                        - default
                        - sandbox
                      type: string
                    platform:
                      description: "Plateforme de paiement. La valeur `xsolla` est utilisée pour les paiements via Xsolla. Pour les autres paiements, la valeur correspondant au nom de la plateforme de publication de jeux est utilisée\_: `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: >-
                        Codes promo appliqués. Si aucun code promo n'a été
                        appliqué, le tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code promo appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    promotions:
                      $ref: '#/components/schemas/order.promotions'
                    status:
                      description: Statut de la commande.
                      type: string
                  required:
                    - id
                    - mode
                    - currency_type
                    - currency
                    - amount
                    - status
                    - platform
                    - comment
                    - invoice_id
                    - promotions
                  type: object
                user:
                  description: Informations sur l'utilisateur.
                  properties:
                    country:
                      $ref: '#/components/schemas/user.country'
                    email:
                      description: Adresse e-mail de l'utilisateur.
                      type: string
                    external_id:
                      description: ID utilisateur.
                      type: string
                  required:
                    - external_id
                    - email
                  type: object
              required:
                - notification_type
                - items
                - order
                - user
      responses:
        '200':
          description: Renvoyez pour indiquer un traitement réussi.
        '400':
          description: >-
            Renvoyez en cas d'erreur dans les informations fournies (par
            exemple, un paramètre requis manquant, une autorisation échouée,
            etc.).
      summary: Annulation de commande (sans données de paiement et de transaction)
      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: "Lorsqu'un remboursement partiel est effectué, Xsolla envoie les détails de la \ntransaction annulée via un webhook de type `partial_refund` à l'URL du webhook. \nPour en savoir plus sur le processus de remboursement partiel, consultez ces \n[instructions](/fr/doc/pay-station/features/refund/#pay_station_features_refund_how_it_works_partial_refund_flow).\n\nLorsque vous enregistrez l'URL du webhook dans le Compte éditeur, vous pouvez \nactiver les autorisations pour recevoir des informations détaillées dans les \nwebhooks. Pour ce faire, activez la bascule correspondante dans la section <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>Note</strong></p>\n<p>Si vous avez créé un Compte éditeur le 22\_janvier\_2025 ou avant, les bascules se trouvent dans la section <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>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Afficher infos sur transactions effectuées via modes de paiement enregistrés</td>\n        <td><p>Les informations sont passées dans les paramètres personnalisés suivants du webhook\_:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — le mode de paiement enregistré n'a pas été utilisé\_;</li><li><code>1</code> — le mode de paiement a été enregistré lors du paiement en cours\_;</li><li><code>2</code> — le mode de paiement précédemment enregistré est utilisé.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — paiement unique\_;</li><li><code>2</code> — paiement récurrent.</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\nCodes de remboursement\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Code</th>\n        <th>Motif</th>\n        <th>Description</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancellation by the user request / the game request</td>\n        <td>Annulation initiée dans le Compte éditeur.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Problèmes d'intégration entre Xsolla et le jeu.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Transaction test suivie d'une annulation.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste de noire.</b></td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Paiement refusé par le système de paiement en raison d'une fraude potentielle.<br /><b>Recommandation\_: ajoutez l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Utilisateur non satisfait du jeu ou de l'achat pour quelque raison que ce soit.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Annulation demandée par le jeu.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    </tbody>\n</table>\n"
      operationId: partial-refund
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Vos paramètres personnalisés.
                  type: object
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                payment_details:
                  description: Informations sur le paiement (objet).
                  properties:
                    direct_wht:
                      description: Retenue à la source directe.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de retenue à la source directe.
                          format: float
                          type: number
                      type: object
                    payment:
                      description: Montant payé par l'utilisateur (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_fee:
                      description: Frais du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_sum:
                      description: Montant débité du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout:
                      description: Détails de virement (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout_currency_rate:
                      description: >-
                        Taux de change entre les devises de paiement et de
                        virement.
                      type: string
                    repatriation_commission:
                      description: >-
                        Données sur les frais de rapatriement imposés à Xsolla
                        par des tiers.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    sales_tax:
                      description: "Taxe de vente (objet\_; États-Unis et Canada uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de taxe de vente.
                          format: float
                          type: number
                      type: object
                    vat:
                      description: "Informations sur la TVA (objet\_; UE uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de TVA.
                          format: float
                          type: number
                      type: object
                    xsolla_balance_sum:
                      description: Montant débité du solde Xsolla.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    xsolla_fee:
                      description: Frais Xsolla (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  type: object
                purchase:
                  description: Informations sur l'achat (objet).
                  properties:
                    checkout:
                      description: Informations au moment du paiement (objet).
                      properties:
                        amount:
                          description: Montant de l'achat.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    total:
                      description: Prix total d'achat (objet).
                      properties:
                        amount:
                          description: Montant du remboursement partiel.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  required:
                    - total
                  type: object
                refund_details:
                  description: Détails du remboursement (objet).
                  properties:
                    author:
                      description: "Initiateur du remboursement. La valeur du champ est passée conformément au \ntableau\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Initiateur du remboursement</th>\n        <th>Valeur du champ</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Jeu (via API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (remboursement automatique).</td>\n        <td>Adresse e-mail de l'utilisateur</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n"
                      type: string
                    code:
                      description: ID de code.
                      type: integer
                    date:
                      description: Date de remboursement.
                      type: string
                    reason:
                      description: Motif de remboursement.
                      type: string
                  type: object
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                transaction:
                  description: Détails de la transaction (objet).
                  properties:
                    agreement:
                      description: ID de contrat.
                      type: integer
                    date:
                      description: Date de transaction.
                      type: string
                    dry_run:
                      description: >-
                        Transaction test. Le paramètre a la valeur 1 s'il s'agit
                        d'une transaction test ou n'est pas envoyé si la
                        transaction est réelle.
                      type: integer
                    external_id:
                      description: External ID de la transaction.
                      type: string
                    id:
                      description: ID de transaction.
                      type: integer
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Remboursement partiel
      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: "Lorsque l'utilisateur effectue un paiement, Xsolla envoie les informations sur \nle paiement via un webhook de type `payment` à l'URL du webhook.\n\nLes codes de réponse attendus sont décrits dans la section <b>Responses</b>, \nmais vous pouvez également utiliser d’autres codes de réponse\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Code de réponse</th>\n        <th>Description</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Réponse de réussite.</td>\n    </tr>\n    <tr>\n        <td><code>4xx</code></td>\n        <td>Une erreur s'est produite. Par exemple, si l'utilisateur spécifié est introuvable ou si une signature non valide a été passée.</td>\n    </tr>\n    <tr>\n        <td><code>5xx</code></td>\n        <td>Erreur serveur temporaire. Lorsque cette réponse est reçue, Xsolla réessaie automatiquement d’envoyer le webhook, en espaçant progressivement les tentatives jusqu’à ce que votre écouteur confirme la réception. Le nombre maximal de tentatives est de 12 sur une période de 48\_heures.</td>\n    </tr>\n    </tbody>\n</table>\n\nLorsque vous enregistrez l'URL du webhook dans le <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Compte \néditeur</a>, vous pouvez également configurer la réception d'informations \nsupplémentaires dans les webhooks.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si vous avez créé un Compte éditeur le 22\_janvier\_2025 ou avant, les bascules se trouvent dans le projet, sous la section <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Afficher infos sur le compte de paiement enregistré</td>\n        <td>Les informations relatives au mode de paiement enregistré sont passées à l'objet personnalisé <code>payment_account</code>.</td>\n    </tr>\n    <tr>\n        <td>Afficher infos sur transactions effectuées via modes de paiement enregistrés</td>\n        <td><p>Les informations sont passées dans les paramètres personnalisés suivants du webhook\_:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — le mode de paiement enregistré n'a pas été utilisé\_;</li><li><code>1</code> — le mode de paiement a été enregistré lors du paiement en cours\_;</li><li><code>2</code> — le mode de paiement précédemment enregistré est utilisé.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — paiement unique\_;</li><li><code>2</code> — paiement récurrent.</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Ajouter l'objet de la commande au webhook</td>\n        <td>Les informations relatives à la commande sont passées dans l'objet <code>order</code> du webhook <a href=\"/fr/webhooks/operation/payment/\">Paiement</a>.</td>\n    </tr>\n    <tr>\n        <td>Envoyer paramètres utilisateur nécessaires seulement sans données sensibles</td>\n        <td><p>Seules les informations suivantes sur l'utilisateur sont passées dans le webhook\_:</p><ul><li>ID\_;</li><li>pays.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Afficher BIN et suffixe de carte</td>\n        <td><p>Les informations suivantes sur le numéro de la carte bancaire sont passées dans le webhook\_:</p><ul><li>les 6\_premiers chiffres du paramètre <code>card_bin</code>\_;</li><li>les 4\_derniers chiffres du <code>card_suffix</code>.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Afficher marque de carte</td>\n        <td>La marque de la carte utilisée pour effectuer le paiement. Par exemple, Mastercard ou Visa.</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"notice\">\n<p><strong>Remarque</strong></p>\n<p>L'ensemble des champs envoyés dans un webhook dépend\_:<ul><li>des paramètres avancés configurés dans le Compte éditeur\_;</li><li>des paramètres personnalisés configurés côté Xsolla.</li></ul></p><p>Si vous avez des questions, contactez votre responsable de la réussite client ou envoyez un e-mail à <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n"
      operationId: payment
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Vos paramètres personnalisés.
                  type: object
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                payment_details:
                  description: Informations sur le paiement (objet).
                  properties:
                    country_wht:
                      description: >-
                        Retenue à la source appliquée dans certains pays pour
                        les transactions transfrontalières (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: "Taux de retenue à la source du pays, en\_%."
                          format: float
                          type: number
                      type: object
                    direct_wht:
                      description: Retenue à la source directe.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de retenue à la source directe.
                          format: float
                          type: number
                      type: object
                    payment:
                      description: Montant payé par l'utilisateur (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_fee:
                      description: Frais du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_sum:
                      description: Montant débité du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout:
                      description: Détails de virement (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout_currency_rate:
                      description: >-
                        Taux de change entre les devises de paiement et de
                        virement.
                      type: string
                    repatriation_commission:
                      description: >-
                        Données sur les frais de rapatriement imposés à Xsolla
                        par des tiers.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    sales_tax:
                      description: "Taxe de vente (objet\_; États-Unis et Canada uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de taxe de vente.
                          format: float
                          type: number
                      type: object
                    user_acquisition_fee:
                      description: >-
                        Montant total de la commission d'acquisition
                        d'utilisateurs déduits pour les achats effectués via les
                        réseaux d'affiliation et les influenceurs (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: "Taux de la commission d'acquisition de l'utilisateur, en\_%."
                          format: float
                          type: number
                      type: object
                    vat:
                      description: "Informations sur la TVA (objet\_; UE uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de TVA.
                          format: float
                          type: number
                      type: object
                    xsolla_balance_sum:
                      description: Montant débité du solde Xsolla.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    xsolla_fee:
                      description: Frais Xsolla (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  type: object
                purchase:
                  description: Informations sur l'achat (objet).
                  properties:
                    checkout:
                      description: Informations au moment du paiement (objet).
                      properties:
                        amount:
                          description: Montant de l'achat.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    coupon:
                      description: "Informations sur le coupon (objet\_; si un coupon a été utilisé lors de la création de l'abonnement)."
                      properties:
                        campaign_code:
                          description: Code de campagne.
                          type: string
                        coupon_code:
                          description: Code de coupon.
                          type: string
                      type: object
                    gift:
                      description: Informations sur le cadeau (objet).
                      properties:
                        giver_id:
                          description: ID du donneur.
                          type: string
                        hide_giver_from_receiver:
                          description: >-
                            Détermine l'affichage de l'identité du donneur au
                            destinataire.
                          type: string
                        message:
                          description: Message du donneur.
                          type: string
                        receiver_email:
                          description: Adresse e-mail du destinataire du cadeau.
                          type: string
                        receiver_id:
                          description: ID du destinataire du cadeau.
                          type: string
                      type: object
                    order:
                      $ref: '#/components/schemas/order'
                      properties:
                        id:
                          description: ID de commande.
                          type: integer
                        lineitems:
                          description: >-
                            Tableau de paramètres contenant des informations sur
                            les objets.
                          items:
                            properties:
                              price:
                                description: Informations sur le prix de l'objet.
                                properties:
                                  amount:
                                    description: >-
                                      Prix total de l'objet dans la devise
                                      sélectionnée.
                                    format: float
                                    type: number
                                  currency:
                                    description: Devise du prix de l'objet.
                                    type: string
                                type: object
                              quantity:
                                description: Quantité de l'objet.
                                type: integer
                              sku:
                                description: UGS de l'objet.
                                type: string
                            type: object
                          type: array
                    promotions:
                      description: Promotions appliquées à cette transaction.
                      items:
                        properties:
                          id:
                            description: ID de promotion.
                            type: integer
                          technical_name:
                            description: Nom technique de la promotion.
                            type: string
                        type: object
                      type: array
                    subscription:
                      description: Informations de l'abonnement (objet).
                      properties:
                        amount:
                          $ref: '#/components/schemas/amount-float'
                        currency:
                          $ref: '#/components/schemas/currency'
                        date_create:
                          $ref: '#/components/schemas/subscription.date_create'
                        date_next_charge:
                          description: >-
                            Prochaine date de facturation. Date et heure selon
                            la norme [ISO
                            8601](https://en.wikipedia.org/wiki/ISO_8601).
                          type: string
                        plan_id:
                          $ref: '#/components/schemas/subscription.plan_id'
                        product_id:
                          description: >-
                            ID de produit (s'il est passé dans le jeton
                            d'accès).
                          type: string
                        subscription_id:
                          $ref: '#/components/schemas/subscription.subscription_id'
                        tags:
                          $ref: '#/components/schemas/subscription.tags'
                      type: object
                    total:
                      description: Prix total d'achat (objet).
                      properties:
                        amount:
                          description: Montant total du paiement.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  required:
                    - total
                  type: object
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                transaction:
                  description: Détails de la transaction (objet).
                  properties:
                    agreement:
                      description: ID de contrat.
                      type: integer
                    dry_run:
                      description: >-
                        Transaction test. Le paramètre a la valeur 1 s'il s'agit
                        d'une transaction test ou n'est pas envoyé si la
                        transaction est réelle.
                      type: integer
                    external_id:
                      $ref: '#/components/schemas/external-id'
                    id:
                      description: ID de transaction.
                      type: integer
                    payment_date:
                      description: Date de paiement.
                      type: string
                    payment_method:
                      description: ID de mode de paiement.
                      type: integer
                    payment_method_name:
                      description: Nom de mode de paiement.
                      type: string
                    payment_method_order_id:
                      description: ID de paiement dans le système de paiement.
                      type: string
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Paiement
      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 une transaction est refusée par un système de paiement, Xsolla envoie les \ninformations de la transaction via un webhook de type `ps_declined` à l'URL de \nwebhook que vous avez configurée. Ce webhook est déclenché lors de l'étape \nd'autorisation ou de traitement du paiement. Dans ce cas, le webhook de \n[paiement](/fr/webhooks/operation/payment/)\\ [order_paid](/fr/webhooks/operation/successful-order-payment/) n'est pas envoyé. \n\nRaisons typiques de refus par le système de paiement\_:\n\n* L'autorisation de la carte a échoué (par exemple, le système de paiement n'a \n  pas pu finaliser l'opération en raison d'une erreur technique ou d'une absence \n  de réponse de la banque) ou a été refusée (par exemple, la banque a répondu, \n  mais a rejeté la transaction pour fonds insuffisants ou coordonnées de carte \n  non valides).\n* La vérification 3-D Secure a échoué, n'a pas été finalisée ou la confirmation \n  de l'utilisateur est expirée.  \n* Le processeur ou la banque acquéreuse est temporairement indisponible ou \n  renvoie un refus définitif en raison d'une erreur irréversible, comme un compte \n  fermé ou un numéro de carte non valide. Tenter de réexécuter la transaction \n  sans corriger le problème sous-jacent ne donnera pas de résultat positif.\n\nÀ ne pas confondre avec\_:\n\n* Les rejets Anti-Fraud, qui sont signalés via le webhook \n  [afs_reject](https://developers.xsolla.com/fr/webhooks/operation/afs-rejected-transaction/).\n* Les remboursements et remboursements partiels après un paiement réussi, qui \n  sont signalés via les webhooks \n  [refund](https://developers.xsolla.com/fr/webhooks/operation/refund/) et \n  [partial_refund](https://developers.xsolla.com/fr/webhooks/operation/partial-refund/).\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Pour recevoir le webhook <code>ps_declined</code>, contactez votre responsable de la réussite client ou envoyez un e-mail à <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n"
      operationId: payment-declined
      requestBody:
        content:
          application/json:
            schema:
              properties:
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                refund_details:
                  description: Détails du remboursement (objet).
                  properties:
                    author:
                      description: "Initiateur du remboursement. La valeur du champ est passée conformément au \ntableau\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Initiateur du remboursement</th>\n        <th>Valeur du champ</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Jeu (via API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (remboursement automatique).</td>\n        <td>Adresse e-mail de l'utilisateur</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n"
                      type: string
                    code:
                      description: ID de code.
                      type: integer
                    reason:
                      description: Motif de remboursement.
                      type: string
                  type: object
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                transaction:
                  description: Détails de la transaction (objet).
                  properties:
                    dry_run:
                      description: >-
                        Transaction test. Le paramètre a la valeur 1 s'il s'agit
                        d'une transaction test ou n'est pas envoyé si la
                        transaction est réelle.
                      type: integer
                    external_id:
                      description: External ID de la transaction.
                      type: string
                    id:
                      description: ID de transaction.
                      type: integer
                    payment_method:
                      description: ID de mode de paiement.
                      type: integer
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Paiement refusé
      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 enverra à l'URL du webhook un webhook <code>partner_side_catalog</code> \ncontenant les paramètres de l'utilisateur et du projet chaque fois que \nl'utilisateur interagit avec le magasin.\n\nEn réponse, renvoyez la liste des <code>item_id</code> ou des UGS des biens \ndisponibles pour l'utilisateur. Vous pouvez également inclure des informations \nsur la possibilité pour un utilisateur spécifique d'acheter certains biens un \ncertain nombre de fois. Cette fonctionnalité vous permet de contrôler le nombre \net le type de biens que l'utilisateur peut ajouter au panier et acheter.\n\nIl est recommandé de veiller à ce que la temps de traitement du webhook \n<code>partner_side_catalog</code> soit inférieur à 3\_secondes.\n"
      operationId: personalized-partner-catalog
      requestBody:
        content:
          application/json:
            schema:
              properties:
                user:
                  description: Informations sur l'utilisateur (objet).
                  properties:
                    country:
                      $ref: '#/components/schemas/user.country'
                    currency:
                      $ref: '#/components/schemas/currency'
                    locale:
                      $ref: '#/components/schemas/locale'
                    user_id:
                      description: >-
                        ID utilisateur. Si l'utilisateur n'est pas authentifié,
                        la valeur `null` est envoyée.
                      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: ugs
                    - 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: >-
            Renvoyez une liste de biens disponibles pour l'utilisateur et le
            nombre de fois qu'un utilisateur spécifique peut acheter un certain
            bien.
        '404':
          description: Utilisateur introuvable.
      summary: Personnalisation du catalogue côté partenaire
      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: "Lorsqu'un paiement est annulé, Xsolla envoie les informations de la transaction \nannulée dans un webhook de type `refund` à l'URL du webhook.\n\nLe mécanisme de réessai du webhook dépend de la personne qui a initié le \nremboursement\_:\n* Si vous initiez le remboursement de votre côté, aucun webhook n'est envoyé. Le \n  paiement est remboursé à l'utilisateur indépendamment de la réponse au webhook.\n* Si une tierce partie initie le remboursement, par exemple un système de \n  paiement ou l'équipe d'assistance Xsolla, et qu'un code d'état `5xx` est \n  renvoyé en réponse au webhook, Xsolla renvoie ce webhook à des intervalles \n  croissants. Le nombre maximal de tentatives est de 12 dans les 48\_heures \n  suivant la première tentative.\n\nPour obtenir des informations détaillées sur la procédure de remboursement, \nréférez-vous aux instructions [instructions](/fr/doc/pay-station/features/refund/).\n\n<div class=\"notice\">\n<p><strong>Remarque</strong></p>\n<p>Le paiement sera quand même remboursé à l'utilisateur si toutes les conditions suivantes sont réunies\_:<ul><li>Xsolla a initié le remboursement.</li><li>En réponse au webhook, un code d'état <code>4xx</code> est renvoyé, ou aucune réponse n'est reçue après toutes les tentatives, ou un code d'état <code>5xx</code> est renvoyé.</li></ul></p>\n</div>\n\nLorsque vous enregistrez l'URL du webhook dans le <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Compte \néditeur</a>, vous pouvez également configurer la réception d'informations \nsupplémentaires dans les webhooks.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si vous avez créé un Compte éditeur le 22\_janvier\_2025 ou avant, les bascules se trouvent dans le projet, sous la section <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Afficher infos sur transactions effectuées via modes de paiement enregistrés</td>\n        <td><p>Les informations sont passées dans les paramètres personnalisés suivants du webhook\_:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — le mode de paiement enregistré n'a pas été utilisé\_;</li><li><code>1</code> — le mode de paiement a été enregistré lors du paiement en cours\_;</li><li><code>2</code> — le mode de paiement précédemment enregistré est utilisé.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — paiement unique\_;</li><li><code>2</code> — paiement récurrent.</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\nCodes de remboursement\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Code</th>\n        <th>Motif</th>\n        <th>Description</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancellation by the user request / the game request</td>\n        <td>Annulation initiée dans le Compte éditeur.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>Chargeback pour une transaction demandé.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Problèmes d'intégration entre Xsolla et le jeu.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>Fraude soupçonnée.<br /><b>Recommandation\_: ajoutez l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Transaction test suivie d'une annulation.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste de noire.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>Facture en retard (utilisée pour le modèle de paiement différé).</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Paiement refusé par le système de paiement en raison d'une fraude potentielle.<br /><b>Recommandation\_: ajoutez l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>Annulation demandée par le système de paiement.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Utilisateur non satisfait du jeu ou de l'achat pour quelque raison que ce soit.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Annulation demandée par le jeu.<br /><b>Recommandation\_: n'ajoutez pas l'utilisateur à la liste noire.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>Le titulaire de compte déclare qu'il n'a pas effectué la transaction.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Fraude de type «\_Friendly fraud\_» signalée.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Transaction dupliquée pour la même facture.</td>\n    </tr>\n    </tbody>\n</table>\n"
      operationId: refund
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Vos paramètres personnalisés.
                  type: object
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                payment_details:
                  description: Informations sur le paiement (objet).
                  properties:
                    country_wht:
                      description: >-
                        Retenue à la source appliquée dans certains pays pour
                        les transactions transfrontalières (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: "Taux de retenue à la source du pays, en\_%."
                          format: float
                          type: number
                      type: object
                    direct_wht:
                      description: Retenue à la source directe.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de retenue à la source directe.
                          format: float
                          type: number
                      type: object
                    payment:
                      description: Montant payé par l'utilisateur (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_fee:
                      description: Frais du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payment_method_sum:
                      description: Montant débité du système de paiement.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout:
                      description: Détails de virement (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    payout_currency_rate:
                      description: >-
                        Taux de change entre les devises de paiement et de
                        virement.
                      type: string
                    repatriation_commission:
                      description: >-
                        Données sur les frais de rapatriement imposés à Xsolla
                        par des tiers.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    sales_tax:
                      description: "Taxe de vente (objet\_; États-Unis et Canada uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de taxe de vente.
                          format: float
                          type: number
                      type: object
                    user_acquisition_fee:
                      description: >-
                        Montant total de la commission d'acquisition
                        d'utilisateurs déduits pour les achats effectués via les
                        réseaux d'affiliation et les influenceurs (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: "Taux de la commission d'acquisition de l'utilisateur, en\_%."
                          format: float
                          type: number
                      type: object
                    vat:
                      description: "Informations sur la TVA (objet\_; UE uniquement)."
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Taux de TVA.
                          format: float
                          type: number
                      type: object
                    xsolla_balance_sum:
                      description: Montant débité du solde Xsolla.
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    xsolla_fee:
                      description: Frais Xsolla (objet).
                      properties:
                        amount:
                          description: Montant.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  type: object
                purchase:
                  description: Informations sur l'achat (objet).
                  properties:
                    checkout:
                      description: Informations au moment du paiement (objet).
                      properties:
                        amount:
                          description: Montant de l'achat.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                    subscription:
                      description: Informations de l'abonnement (objet).
                      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: Prix total d'achat (objet).
                      properties:
                        amount:
                          description: Montant total du paiement.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                      type: object
                  required:
                    - total
                  type: object
                refund_details:
                  description: Détails du remboursement (objet).
                  properties:
                    author:
                      description: "Initiateur du remboursement. La valeur du champ est passée conformément au \ntableau\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Initiateur du remboursement</th>\n        <th>Valeur du champ</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Jeu (via API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (remboursement automatique).</td>\n        <td>Adresse e-mail de l'utilisateur</td>\n    </tr>\n    <tr>\n        <td>Utilisateur du Compte éditeur (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (avec l'assistance du service client Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n"
                      type: string
                    code:
                      description: ID de code.
                      type: integer
                    reason:
                      description: Motif de remboursement.
                      type: string
                  type: object
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                transaction:
                  description: Détails de la transaction (objet).
                  properties:
                    agreement:
                      description: ID de contrat.
                      type: integer
                    dry_run:
                      description: >-
                        Transaction test. Le paramètre a la valeur 1 s'il s'agit
                        d'une transaction test ou n'est pas envoyé si la
                        transaction est réelle.
                      type: integer
                    external_id:
                      description: External ID de la transaction.
                      type: string
                    id:
                      description: ID de transaction.
                      type: integer
                    payment_method_order_id:
                      description: ID de paiement dans le système de paiement.
                      type: string
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Remboursement
      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: >-
        Lorsque l'utilisateur supprime un compte de paiement des comptes
        enregistrés, Xsolla envoie un webhook de type `payment_account_remove` à
        l'URL du webhook. Pour recevoir ce webhook, contactez votre responsable
        de la réussite client ou envoyez un e-mail à <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: Détails de compte de paiement (objet).
                  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: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Suppression de compte de paiement
      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 envoie le webhook <code>order_paid</code> à l'URL spécifiée lorsque \nl'utilisateur effectue le paiement de la commande avec succès.\n\nLe webhook <code>order_paid</code> contient des informations sur les objets \nachetés, les données du paiement et les détails de la transaction.\n\nLe webhook <code>order_paid</code> n'est pas envoyé si le paiement n'aboutit \npas, par exemple\_:\n* le formulaire de paiement a été ouvert, mais l'utilisateur n'a pas procédé au \n  paiement de la commande\_;\n* le formulaire de paiement a été ouvert, mais des erreurs se sont produites lors \n  du paiement.\n\nIl est recommandé de veiller à ce que la temps de traitement du webhook \n<code>order_paid</code> soit inférieur à 3\_secondes.\n\n<div class=\"notice\">\n<p><strong>Remarque</strong></p>\n<p>L'ensemble des champs envoyés dans un webhook dépend\_:<ul><li> des paramètres configurés dans le Compte éditeur dans la section <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Project settings &gt; Webhooks &gt; Advanced settings</a>\_;</li><li>des paramètres configurés côté Xsolla.</li></ul></p><p>Si vous avez des questions, contactez votre responsable de la réussite client ou envoyez un e-mail à <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n\nLes réponses attendues sont décrites dans la section <b>Réponses</b>. Vous \npouvez utiliser d'autres codes de réponse. En fonction du code de réponse et de \nla connexion à la fonctionnalité de remboursement automatique de paiement, la \nlogique de traitement du webhook côté Xsolla est la suivante\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Code de réponse</th>\n        <th>Remboursement automatique de paiement désactivé (par défaut)</th>\n        <th>Remboursement automatique de paiement activé</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>400</code>, <code>401</code>, <code>402</code>, <code>403</code>, <code>404</code>, <code>409</code>, <code>422</code>, <code>415</code></td>\n        <td>Aucune action</td>\n        <td>Remboursement automatique à l'utilisateur</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Aucune action</td>\n        <td>Aucune action</td>\n    </tr>\n    <tr>\n        <td>Code différent ou absence de réponse au webhook</td>\n        <td>Plusieurs webhooks sont envoyés à des intervalles de temps spécifiques\_: 2\_tentatives à intervalles de 5\_minutes, 7 tentatives à intervalles de 15\_minutes, 10\_tentatives à intervalles de 60\_minutes.</td>\n        <td>Plusieurs webhooks sont envoyés à des intervalles de temps spécifiques\_: 2\_tentatives à intervalles de 5 minutes, 7\_tentatives à intervalles de 15\_minutes, 10\_tentatives à intervalle de 60\_minutes. Si tous les webhooks sont envoyés mais qu'aucune réponse n'est reçue, l'utilisateur est automatiquement remboursé.</td>\n    </tr>\n    </tbody>\n</table>\n\nPour connecter la fonctionnalité de remboursement automatique, contactez vos \nresponsables de réussite client ou envoyez un e-mail à csm@xsolla.com.\n"
      operationId: successful-order-payment
      requestBody:
        content:
          application/json:
            schema:
              properties:
                billing:
                  description: Données de la transaction et du paiement.
                  properties:
                    notification_type:
                      $ref: '#/components/schemas/notification_type'
                    payment_details:
                      description: Informations sur le paiement (objet).
                      properties:
                        country_wht:
                          description: >-
                            Retenue à la source appliquée dans certains pays
                            pour les transactions transfrontalières (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: "Taux de retenue à la source du pays, en\_%."
                              format: float
                              type: number
                          type: object
                        direct_wht:
                          description: Retenue à la source directe.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de retenue à la source directe.
                              format: float
                              type: number
                          type: object
                        payment:
                          description: Montant payé par l'utilisateur (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payment_method_fee:
                          description: Frais du système de paiement.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payment_method_sum:
                          description: Montant débité du système de paiement.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payout:
                          description: Détails de virement (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        payout_currency_rate:
                          description: >-
                            Taux de change entre les devises de paiement et de
                            virement.
                          type: string
                        repatriation_commission:
                          description: >-
                            Données sur les frais de rapatriement imposés à
                            Xsolla par des tiers.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        sales_tax:
                          description: "Taxe de vente (objet\_; États-Unis et Canada uniquement)."
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de taxe de vente.
                              format: float
                              type: number
                          type: object
                        user_acquisition_fee:
                          description: >-
                            Montant total de la commission d'acquisition
                            d'utilisateurs déduits pour les achats effectués via
                            les réseaux d'affiliation et les influenceurs
                            (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: "Taux de la commission d'acquisition de l'utilisateur, en\_%."
                              format: float
                              type: number
                          type: object
                        vat:
                          description: "Informations sur la TVA (objet\_; UE uniquement)."
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Taux de TVA.
                              format: float
                              type: number
                          type: object
                        xsolla_balance_sum:
                          description: Montant débité du solde Xsolla.
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                        xsolla_fee:
                          description: Frais Xsolla (objet).
                          properties:
                            amount:
                              description: Montant.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                      type: object
                    purchase:
                      description: Informations sur l'achat (objet).
                      properties:
                        coupon:
                          description: "Informations sur le coupon (objet\_; si un coupon a été utilisé lors de la création de l'abonnement)."
                          properties:
                            campaign_code:
                              description: Code de campagne.
                              type: string
                            coupon_code:
                              description: Code de coupon.
                              type: string
                          type: object
                        gift:
                          description: Informations sur le cadeau (objet).
                          properties:
                            giver_id:
                              description: ID du donneur.
                              type: string
                            hide_giver_from_receiver:
                              description: >-
                                Détermine l'affichage de l'identité du donneur
                                au destinataire.
                              type: string
                            message:
                              description: Message du donneur.
                              type: string
                            receiver_email:
                              description: Adresse e-mail du destinataire du cadeau.
                              type: string
                            receiver_id:
                              description: ID du destinataire du cadeau.
                              type: string
                          type: object
                        promotions:
                          description: Promotions appliquées à cette transaction.
                          items:
                            properties:
                              id:
                                description: ID de promotion.
                                type: integer
                              technical_name:
                                description: Nom technique de la promotion.
                                type: string
                            type: object
                          type: array
                        subscription:
                          description: Informations de l'abonnement (objet).
                          properties:
                            amount:
                              $ref: '#/components/schemas/amount-float'
                            currency:
                              $ref: '#/components/schemas/currency'
                            date_create:
                              $ref: '#/components/schemas/subscription.date_create'
                            date_next_charge:
                              description: >-
                                Prochaine date de facturation. Date et heure
                                selon la norme [ISO
                                8601](https://en.wikipedia.org/wiki/ISO_8601).
                              type: string
                            plan_id:
                              $ref: '#/components/schemas/subscription.plan_id'
                            product_id:
                              description: >-
                                ID de produit (s'il est passé dans le jeton
                                d'accès).
                              type: string
                            subscription_id:
                              $ref: >-
                                #/components/schemas/subscription.subscription_id
                            tags:
                              $ref: '#/components/schemas/subscription.tags'
                          type: object
                        total:
                          description: Prix total d'achat (objet).
                          properties:
                            amount:
                              description: Montant total du paiement.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                          type: object
                      required:
                        - total
                      type: object
                    settings:
                      description: Paramètres personnalisés de projet (objet).
                      properties:
                        merchant_id:
                          $ref: '#/components/schemas/settings.merchant_id'
                        project_id:
                          $ref: '#/components/schemas/settings.project_id'
                      type: object
                    transaction:
                      description: Détails de la transaction (objet).
                      properties:
                        agreement:
                          description: ID de contrat.
                          type: integer
                        dry_run:
                          description: >-
                            Transaction test. Le paramètre a la valeur 1 s'il
                            s'agit d'une transaction test ou n'est pas envoyé si
                            la transaction est réelle.
                          type: integer
                        external_id:
                          $ref: '#/components/schemas/external-id'
                        id:
                          description: ID de transaction.
                          type: integer
                        payment_date:
                          description: Date de paiement.
                          type: string
                        payment_method:
                          description: ID de mode de paiement.
                          type: integer
                        payment_method_name:
                          description: Nom de mode de paiement.
                          type: string
                        payment_method_order_id:
                          description: ID de paiement dans le système de paiement.
                          type: string
                      type: object
                  required:
                    - notification_type
                    - transaction
                    - payment_details
                  type: object
                custom_parameters:
                  description: Informations supplémentaires.
                  type: object
                items:
                  description: "Liste des objets achetés par l'utilisateur.\n\nL'ensemble des paramètres inclus dans le tableau dépend de la version du \nwebhook. La version 2 comprend des paramètres supplémentaires\_: `is_free`, \n`is_bonus` et `is_bundle_content`. Pour changer de version, passez son numéro \ndans le paramètre `version` de l'appel API [Update information about webhook \nsettings](/fr/api/igs/operation/update-webhook/).\n"
                  items:
                    oneOf:
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                        title: version = 1
                        type: object
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_bonus:
                            description: Si la valeur est `true`, l'objet est un bonus.
                            type: boolean
                          is_bundle_content:
                            description: >-
                              Si la valeur est `true`, l'objet fait partie d'un
                              lot.
                            type: boolean
                          is_free:
                            description: >-
                              Si ce paramètre est défini sur `true`, l'objet est
                              gratuit.
                            type: boolean
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                          - is_free
                          - is_bonus
                          - is_bundle_content
                        title: version = 2
                        type: object
                  type: array
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                order:
                  description: Informations sur commande.
                  properties:
                    amount:
                      description: >-
                        Coût total du panier en fonction de la devise
                        sélectionnée.
                      type: string
                    comment:
                      description: Commentaire de l'utilisateur sur la commande.
                      nullable: true
                      type: string
                    coupons:
                      description: >-
                        Coupons appliqués. Si aucun coupon n'a été appliqué, le
                        tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code du coupon appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    currency:
                      description: >-
                        Devise de commande. L'UGS est utilisée pour la monnaie
                        virtuelle et un code à trois lettres selon la norme [ISO
                        4217](https://en.wikipedia.org/wiki/ISO_4217) pour les
                        devises réelles.
                      type: string
                    currency_type:
                      $ref: '#/components/schemas/currency-type'
                    id:
                      description: >-
                        Identifiant unique de la commande de l'utilisateur côté
                        Xsolla.
                      type: integer
                    invoice_id:
                      description: >-
                        ID de facture pour les paiements en devises réelles. Les
                        paiements en monnaie virtuelle ou les biens gratuits ont
                        une valeur `null`.
                      nullable: true
                      type: string
                    mode:
                      description: >-
                        Mode de paiement. La valeur `default` est utilisée pour
                        les paiements réels et `sandbox` pour les paiements
                        test.
                      enum:
                        - default
                        - sandbox
                      type: string
                    platform:
                      description: >-
                        Plateforme de paiement. La valeur `xsolla` est utilisée
                        pour les paiements via Xsolla. Pour les autres
                        paiements, la valeur correspondant au nom de la
                        plateforme de publication de jeux est utilisée.
                      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: >-
                        Codes promo appliqués. Si aucun code promo n'a été
                        appliqué, le tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code promo appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    promotions:
                      $ref: '#/components/schemas/order.promotions'
                    status:
                      description: Statut de la commande.
                      type: string
                  required:
                    - id
                    - mode
                    - currency_type
                    - currency
                    - amount
                    - status
                    - platform
                    - comment
                    - invoice_id
                    - promotions
                  type: object
                user:
                  description: Informations sur l'utilisateur.
                  properties:
                    country:
                      $ref: '#/components/schemas/user.country'
                    email:
                      description: Adresse e-mail de l'utilisateur.
                      type: string
                    external_id:
                      description: ID utilisateur.
                      type: string
                  required:
                    - external_id
                    - email
                  type: object
              required:
                - notification_type
                - items
                - order
                - user
                - transaction
                - payment_details
      responses:
        '200':
          description: Renvoyez pour indiquer un traitement réussi.
        '400':
          description: >-
            Renvoyez en cas d'erreur dans les informations fournies (par
            exemple, un paramètre requis manquant, une autorisation échouée,
            etc.).
      summary: Paiement de commande réussi (avec données de paiement et de transaction)
      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 envoie le webhook <code>order_paid</code> à l'URL spécifiée lorsque les \nconditions suivantes sont remplies\_:\n1. L'utilisateur a procédé au paiement de la commande avec succès.\n2. Xsolla a reçu une réponse de traitement réussi du webhook \n   [Paiement](/fr/webhooks/operation/payment/).\n\nLe webhook <code>order_paid</code> contient des informations sur les objets \nachetés et les détails de la transaction.\n\nLe webhook <code>order_paid</code> n'est pas envoyé si\_:\n* Le paiement n'a pas été effectué, par exemple\_:\n  * le formulaire de paiement a été ouvert, mais l'utilisateur n'a pas procédé au \n    paiement de la commande\_;\n  * le formulaire de paiement a été ouvert, mais des erreurs se sont produites lors \n    du paiement.\n* Aucune réponse de traitement réussi du webhook \n  [Paiement](/fr/webhooks/operation/payment/) n'a été reçue.\n\nIl est recommandé de veiller à ce que la temps de traitement du webhook \n<code>order_paid</code> soit inférieur à 3\_secondes.\n\nLes réponses attendues sont décrites dans la section <b>Réponses</b>. Vous \npouvez utiliser d'autres codes de réponse. En fonction du code de réponse et de \nla connexion à la fonctionnalité de remboursement automatique de paiement, la \nlogique de traitement du webhook côté Xsolla est la suivante\_:\n\n<table>\n    <thead>\n    <tr>\n        <th>Code de réponse</th>\n        <th>Remboursement automatique de paiement désactivé (par défaut)</th>\n        <th>Remboursement automatique de paiement activé</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>400</code>, <code>401</code>, <code>402</code>, <code>403</code>, <code>404</code>, <code>409</code>, <code>422</code>, <code>415</code></td>\n        <td>Aucune action</td>\n        <td>Remboursement automatique à l'utilisateur</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Aucune action</td>\n        <td>Aucune action</td>\n    </tr>\n    <tr>\n        <td>Code différent ou absence de réponse au webhook</td>\n        <td>Plusieurs webhooks sont envoyés à des intervalles de temps spécifiques\_: 2\_tentatives à intervalles de 5\_minutes, 7 tentatives à intervalles de 15\_minutes, 10\_tentatives à intervalles de 60\_minutes.</td>\n        <td>Plusieurs webhooks sont envoyés à des intervalles de temps spécifiques\_: 2\_tentatives à intervalles de 5 minutes, 7\_tentatives à intervalles de 15\_minutes, 10\_tentatives à intervalle de 60\_minutes. Si tous les webhooks sont envoyés mais qu'aucune réponse n'est reçue, l'utilisateur est automatiquement remboursé.</td>\n    </tr>\n    </tbody>\n</table>\n\nPour connecter la fonctionnalité de remboursement automatique, contactez vos \nresponsables de réussite client ou envoyez un e-mail à csm@xsolla.com.\n"
      operationId: successful-order-payment-separate
      requestBody:
        content:
          application/json:
            schema:
              properties:
                custom_parameters:
                  description: Informations supplémentaires.
                  type: object
                items:
                  description: "Liste des objets achetés par l'utilisateur.\n\nL'ensemble des paramètres inclus dans le tableau dépend de la version du \nwebhook. La version 2 comprend des paramètres supplémentaires\_: `is_free`, \n`is_bonus` et `is_bundle_content`. Pour changer de version, passez son numéro \ndans le paramètre `version` de l'appel API [Update information about webhook \nsettings](/fr/api/igs/operation/update-webhook/).\n"
                  items:
                    oneOf:
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                        title: version = 1
                        type: object
                      - properties:
                          amount:
                            description: >-
                              Coût total des objets en fonction de leur
                              quantité.
                            type: string
                          custom_attributes:
                            description: >-
                              Un JSON contenant les attributs des objets et
                              leurs valeurs.
                            type: object
                          is_bonus:
                            description: Si la valeur est `true`, l'objet est un bonus.
                            type: boolean
                          is_bundle_content:
                            description: >-
                              Si la valeur est `true`, l'objet fait partie d'un
                              lot.
                            type: boolean
                          is_free:
                            description: >-
                              Si ce paramètre est défini sur `true`, l'objet est
                              gratuit.
                            type: boolean
                          is_pre_order:
                            description: >-
                              Si la valeur est `true`, l'objet est en
                              précommande.
                            type: boolean
                          promotions:
                            $ref: '#/components/schemas/items.promotions'
                          quantity:
                            description: Quantité d'objets.
                            type: integer
                          sku:
                            $ref: '#/components/schemas/items.sku'
                          type:
                            $ref: '#/components/schemas/items.type'
                        required:
                          - sku
                          - type
                          - quantity
                          - amount
                          - promotions
                          - is_pre_order
                          - is_free
                          - is_bonus
                          - is_bundle_content
                        title: version = 2
                        type: object
                  type: array
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                order:
                  description: Informations sur commande.
                  properties:
                    amount:
                      description: >-
                        Coût total du panier en fonction de la devise
                        sélectionnée.
                      type: string
                    comment:
                      description: Commentaire de l'utilisateur sur la commande.
                      nullable: true
                      type: string
                    coupons:
                      description: >-
                        Coupons appliqués. Si aucun coupon n'a été appliqué, le
                        tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code du coupon appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    currency:
                      description: >-
                        Devise de commande. L'UGS est utilisée pour la monnaie
                        virtuelle et un code à trois lettres selon la norme [ISO
                        4217](https://en.wikipedia.org/wiki/ISO_4217) pour les
                        devises réelles.
                      type: string
                    currency_type:
                      $ref: '#/components/schemas/currency-type'
                    id:
                      description: >-
                        Identifiant unique de la commande de l'utilisateur côté
                        Xsolla.
                      type: integer
                    invoice_id:
                      description: >-
                        ID de facture pour les paiements en devises réelles. Les
                        paiements en monnaie virtuelle ou les biens gratuits ont
                        une valeur `null`.
                      nullable: true
                      type: string
                    mode:
                      description: >-
                        Mode de paiement. La valeur `default` est utilisée pour
                        les paiements réels et `sandbox` pour les paiements
                        test.
                      enum:
                        - default
                        - sandbox
                      type: string
                    platform:
                      description: >-
                        Plateforme de paiement. La valeur `xsolla` est utilisée
                        pour les paiements via Xsolla. Pour les autres
                        paiements, la valeur correspondant au nom de la
                        plateforme de publication de jeux est utilisée.
                      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: >-
                        Codes promo appliqués. Si aucun code promo n'a été
                        appliqué, le tableau n'est pas renvoyé.
                      items:
                        properties:
                          code:
                            description: Code promo appliqué.
                            type: string
                          external_id:
                            description: External ID.
                            type: string
                        type: object
                      type: array
                    promotions:
                      $ref: '#/components/schemas/order.promotions'
                    status:
                      description: Statut de la commande.
                      type: string
                  required:
                    - id
                    - mode
                    - currency_type
                    - currency
                    - amount
                    - status
                    - platform
                    - comment
                    - invoice_id
                    - promotions
                  type: object
                user:
                  description: Informations sur l'utilisateur.
                  properties:
                    country:
                      $ref: '#/components/schemas/user.country'
                    email:
                      description: Adresse e-mail de l'utilisateur.
                      type: string
                    external_id:
                      description: ID utilisateur.
                      type: string
                  required:
                    - external_id
                    - email
                  type: object
              required:
                - notification_type
                - items
                - order
                - user
      responses:
        '200':
          description: Renvoyez pour indiquer un traitement réussi.
        '400':
          description: >-
            Renvoyez en cas d'erreur dans les informations fournies (par
            exemple, un paramètre requis manquant, une autorisation échouée,
            etc.).
      summary: Paiement de commande réussi (sans données de paiement et de transaction)
      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: >-
        En cas de modification de certains paramètres de l'abonnement
        (`plan_id`, `date_next_charge`) et à chaque renouvellement d'abonnement,
        Xsolla envoie un webhook de type `update_subscription` à l'URL du
        webhook.
      operationId: updated-subscription
      requestBody:
        content:
          application/json:
            schema:
              properties:
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                subscription:
                  description: Informations de l'abonnement (objet).
                  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: Informations sur l'utilisateur (objet).
                  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: Abonnement mis à jour
      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> est un paramètre qui identifie l'utilisateur de
        manière unique et qui lui est connu, contrairement à <nt>User
        ID</nt>(<nt>Public User ID</nt> peut être une adresse e-mail, un pseudo,
        etc.). Xsolla envoie un webhook de type `user_search` lorsqu'un achat
        est effectué en dehors du magasin de jeu (par exemple, via des kiosques
        de paiement).
      operationId: user-search
      requestBody:
        content:
          application/json:
            schema:
              properties:
                notification_type:
                  $ref: '#/components/schemas/notification_type'
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Recherche d'utilisateur
      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 envoie un webhook de type `user_validation` à l'URL du webhook pour \nvérifier que l'utilisateur est enregistré dans le jeu. La requête est envoyée \nplusieurs fois pendant le processus de paiement\_:\n\n* lorsque l'utilisateur choisit un mode de paiement dans l'interface de paiement\_;\n* lorsque l'utilisateur saisit des données dans le formulaire de paiement, par \n  exemple les données de sa carte bancaire ou le code postal lors d'un paiement \n  via PayPal\_;\n* lorsque l'utilisateur clique sur **Pay now** pour procéder au paiement\_;\n* lorsque le processus de paiement est terminé et que le statut de la transaction \n  passe à `done`.\n\nLa requête est envoyée lors d'un paiement via n'importe quel mode de paiement.\n\nLorsque vous enregistrez l'URL du webhook dans le Compte éditeur, vous pouvez \nactiver les autorisations pour recevoir des informations détaillées dans les \nwebhooks. Pour ce faire, activez les bascules correspondantes dans la section \n<a href=\"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>Note</strong></p>\n<p>Si vous avez créé un Compte éditeur le 22\_janvier\_2025 ou avant, les bascules se trouvent dans la section <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>Bascule</th>\n        <th>Description</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Envoyer paramètres utilisateur nécessaires seulement sans données sensibles</td>\n        <td><p>Seules les informations suivantes sur l'utilisateur sont passées dans le webhook\_:</p><ul><li>ID\_;</li><li>pays.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Envoyer paramètres personnalisés</td>\n        <td>Les informations relatives aux <a href=\"/fr/api/pay-station/operation/create-token/\">paramètres du jeton personnalisé</a> sont passées dans le 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: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: Validation utilisateur
      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 envoie un webhook depuis le site d'un Web Shop pour vérifier si l'utilisateur existe dans le jeu. Le webhook est envoyé depuis l'adresse IP suivante\_: `34.102.38.178`.\n<div class=\"note\"><strong>Note</strong><br><br>\nLe webhook est utilisé uniquement pour la validation utilisateur dans Web Shop. Reportez-vous aux <a target=\"_blank\" href=\"https://developers.xsolla.com/fr/solutions/web-shop/authentication-and-analytics/set-up-authentication/\">instructions </a> pour plus d'informations sur la configuration de ce webhook dans Site Builder.</div>"
      operationId: user-validation-in-webshop
      requestBody:
        content:
          application/json:
            schema:
              properties:
                settings:
                  description: Paramètres personnalisés de projet (objet).
                  properties:
                    merchant_id:
                      $ref: '#/components/schemas/settings.merchant_id'
                    project_id:
                      $ref: '#/components/schemas/settings.project_id'
                  type: object
                user:
                  description: Informations sur l'utilisateur (objet).
                  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: >-
                      Attributs utilisateur utilisés pour la personnalisation.
                      Reportez-vous à la <a target="_blank"
                      href="https://developers.xsolla.com/fr/doc/login/features/user-attributes/#login_features_user_attributes">documentation</a>
                      pour des informations détaillées.
                    items:
                      properties:
                        key:
                          description: Nom d'attribut.
                          type: string
                        value:
                          description: Valeur d'attribut.
                      required:
                        - key
                        - value
                    type: array
                  removingKeys:
                    description: >-
                      Liste des attributs que vous voulez supprimer. Si vous
                      spécifiez le même attribut dans le paramètre `attributes`,
                      il ne sera pas supprimé.
                    items:
                      type: string
                    type: array
                  user:
                    description: Informations sur l'utilisateur (objet).
                    properties:
                      id:
                        description: ID utilisateur.
                        type: string
                      name:
                        description: Nom d'utilisateur.
                        type: string
                      picture:
                        description: Lien vers l'avatar de l'utilisateur.
                        type: string
                    required:
                      - id
                    type: object
                required:
                  - user
                type: object
          description: Renvoie des informations sur l'utilisateur.
        '404':
          description: Utilisateur introuvable.
      summary: Validation utilisateur dans 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: Type de notification.
      type: string
    payment_account.country:
      description: >-
        Pays du compte de paiement. Par exemple, le pays de la banque émettrice
        de la carte ou le pays indiqué lors de la création d'un compte
        PayPal.Code pays à deux lettres majuscules selon la norme [ISO 3166-1
        alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
      type: string
    payment_account.id:
      description: ID de compte de paiement.
      type: string
    payment_account.name:
      description: >-
        Le nom du compte de paiement dans le système de paiement (par exemple,
        numéro de carte de paiement, adresse e-mail).
      type: string
    payment_account.payment_method:
      description: ID de mode de paiement.
      type: integer
    payment_account.type:
      description: Type de compte de paiement (par exemple, carte, PayPal).
      type: string
    settings.merchant_id:
      description: ID de commerçant.
      type: integer
    settings.project_id:
      description: >-
        ID de projet. Ce paramètre se trouve dans le [Compte
        éditeur](https://publisher.xsolla.com/) à côté du nom du projet.
      type: integer
    user.country:
      description: >-
        Pays de l'utilisateur. Code pays à deux lettres majuscules selon la
        norme [ISO 3166-1
        alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
      type: string
    user.email:
      description: Adresse e-mail de l'utilisateur.
      type: string
    user.id:
      description: ID utilisateur.
      type: string
    user.ip:
      description: IP de l'utilisateur.
      type: string
    user.name:
      description: Nom d'utilisateur.
      type: string
    user.zip:
      description: ZIP ou code postal de l'utilisateur.
      type: string
    subscription.date_create:
      description: >-
        Date de création de l'abonnement. Date et heure selon la norme [ISO
        8601](https://en.wikipedia.org/wiki/ISO_8601).
      type: string
    subscription.date_end:
      description: >-
        Date de fin d'abonnement. Date et heure selon la norme [ISO
        8601](https://en.wikipedia.org/wiki/ISO_8601).
      type: string
    subscription.plan_id:
      description: ID de plan (externe si le plan a été créé via API).
      type: string
    subscription.product_id:
      description: ID de produit (s'il est passé dans le jeton d'accès).
      type: string
    subscription.subscription_id:
      description: ID d'abonnement dans la base de données Xsolla.
      type: integer
    subscription.tags:
      description: Balises du plan.
      items:
        type: string
      type: array
    subscription.date_next_charge:
      description: >-
        Prochaine date de facturation. Date et heure selon la norme [ISO
        8601](https://en.wikipedia.org/wiki/ISO_8601).
      type: string
    subscription.is_gift:
      description: >-
        Indique si l'abonnement a été offert. Le paramètre n'est passé que si la
        valeur est `true`.
      type: boolean
    dispute-date:
      description: >-
        Date d'ouverture de la contestation selon la norme [RFC
        3339](https://datatracker.ietf.org/doc/html/rfc3339).
      type: string
    dispute-reason:
      description: >-
        Motif de l'ouverture de la contestation. Référez-vous à la
        [documentation](/fr/solutions/payments/anti-fraud/chargeback/#payments_chargeback_reasons)
        pour une description des groupes de raisons.
      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: Statut de la contestation.
      enum:
        - new
        - accepted
        - no_actions_required
        - won
        - lost
      type: string
      x-enumDescriptions:
        accepted: <b>Accepté</b>
        lost: <b>Perdu</b>
        new: <b>Nouveau</b>
        no_actions_required: <b>En cours</b>
        won: <b>Gagné</b>
    dispute-type:
      description: Type de contestation.
      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: 1er chargeback.
        2nd_time_chargeback: 2e chargeback (pré-arbitrage).
        arbitration: >-
          Résolution d'une contestation entre la banque émettrice et le
          commerçant lorsque le premier et le deuxième chargebacks ont été
          rejetés.
        chargeback: 1er chargeback.
        chargeback_reversal: Le chargeback a été révoqué.
        claim: Contestation entre un client et un commerçant sur PayPal.
        dispute: >-
          Le titulaire de la carte a demandé les informations de paiement à la
          banque.
        inquiry: >-
          Le titulaire de la carte a demandé les informations de paiement à la
          banque.
        other: >-
          Utilisé pour les types de chargeback qui ne sont couverts par aucun
          autre type.
        reimbursement: Le remboursement a été effectué.
        reimbursement_reversal: Le chargeback a été révoqué.
        representment: >-
          L'équipe de gestion des chargebacks a envoyé les preuves au système de
          paiement.
        representment_reversal: Le chargeback a été révoqué.
        retrieval: >-
          Le titulaire de la carte a demandé les informations de paiement à la
          banque.
    date-create:
      description: Date de paiement.
      type: string
    external-id:
      description: >-
        External ID de la transaction. Pour obtenir des informations détaillée,
        reportez-vous à la
        [FAQs](/fr/doc/pay-station/references/faq/#faq_payments_q_new_transaction_external_id).
      type: string
    transaction-id:
      description: ID de transaction.
      type: integer
    dispute-payment-method:
      description: Mode de paiement.
      enum:
        - credit_debit_card
        - paypal
      type: string
      x-enumDescriptions:
        credit_debit_card: Carte de crédit ou de débit
        paypal: PayPal
    transaction-total-amount:
      description: Montant du paiement.
      format: float
      type: number
    currency:
      description: >-
        Devise. Code de devise à trois lettres selon la norme [ISO
        4217](https://en.wikipedia.org/wiki/ISO_4217).
      type: string
    amount-float:
      description: Prix en monnaie réelle.
      format: float
      type: number
    items.promotions:
      description: "Promotions s'appliquant à des objets spécifiques de la commande.\nLe tableau est renvoyé dans les cas suivants\_:\n - Une promotion par réduction est configurée pour un objet spécifique\_;\n - Un code promo avec le paramètre **Discount on selected items** est appliqué.\n\nSi aucune promotion n'est appliquée à un objet spécifique, un tableau vide est renvoyé."
      items:
        properties:
          amount_with_discount:
            description: Coût total des objets bénéficiant d'une remise.
            type: string
          amount_without_discount:
            description: Coût total des objets sans remise.
            type: string
          sequence:
            description: Ordre d'application de promotions.
            type: integer
        type: object
      type: array
    items.sku:
      description: >-
        ID unique de l'objet. Pour les objets de type `game_key`, une valeur au
        format `sku_drm` est utilisée.
      type: string
    items.type:
      description: "Type d'objet.\nPour les objets de type `bundle`, y compris les packages de monnaie virtuelle, le tableau `items` affichera‍\_‍:\n‌ ‌ - paramètres du lot ou du package de monnaie virtuelle‌ ‌ \nles objets inclus dans le lot ou la monnaie incluse dans le package de monnaie virtuelle\n \n Le type `value_point` est utilisé dans les opérations liées aux [points de fidélité(/solutions/loyalty-as-service/) lorsqu'ils sont dépensés ou attribués."
      enum:
        - virtual_good
        - virtual_currency
        - game_key
        - bundle
        - value_point
      type: string
    currency-type:
      description: >-
        Type de devise de paiement. Pour une commande gratuite, la valeur
        `unknown` est spécifiée.
      enum:
        - real
        - virtual
        - unknown
        - loyalty_point
      type: string
      x-enumDescriptions:
        loyalty_point: points de fidélité
        real: devise réelle
        unknown: commande gratuite
        virtual: monnaie virtuelle
    order.promotions:
      description: "Promotions s'appliquant à l'ensemble de la commande.\nLe tableau est renvoyé dans les cas suivants\_:\n - Une promotion affecte le montant total de l'achat, par exemple un code promo avec le paramètre **Discount on purchase**\_;\n - Aucune remise n'est appliquée à l'achat, mais des objets bonus sont ajoutés à la commande. Dans ce cas, les valeurs du coût avec remise ([amount_with_discount](/fr/webhooks/#operation/order-cancellation!path=order/promotions/amount_with_discount&t=request)) et sans remise ([amount_without_discount](/fr/webhooks/#operation/order-cancellation!path=order/promotions/amount_without_discount&t=request)) sont renvoyées et sont identiques, puisqu'aucune remise n'est appliquée.\n\nSi aucune promotion n'est appliquée à l'ensemble de la commande, un tableau vide est renvoyé."
      items:
        properties:
          amount_with_discount:
            description: Coût total des objets bénéficiant d'une remise.
            type: string
          amount_without_discount:
            description: Coût total des objets sans remise.
            type: string
          sequence:
            description: Ordre d'application de promotions.
            type: integer
        type: object
      type: array
    user.phone:
      description: Téléphone de l'utilisateur.
      type: string
    order:
      description: >-
        Objet contenant des informations sur une commande. Pour recevoir ces
        informations, réglez la bascule **Ajouter l'objet de la commande au
        webhook** sur **On** dans le [Compte
        éditeur](https://publisher.xsolla.com/) dans la section **Project
        settings &gt; Webhooks &gt; Advanced settings**.
      type: object
    locale:
      description: >-
        Langue de l'utilisateur. [Code de
        langue](https://developers.xsolla.com/fr/doc/pay-station/features/localization/)
        à deux lettres minuscules.
      type: string
    quantity:
      deprecated: true
      description: >-
        Nombre d'objets qu'un utilisateur unique peut acheter. Pour définir une
        quantité illimitée, passez `null`. Pour rendre l'objet visible dans le
        catalogue sans permettre l'achat, passez `0`.


        Si vous utilisez ce paramètre, les informations de limite d'achat ne
        sont pas affichées dans le catalogue. Pour afficher la limite d'achat
        dans le catalogue (par exemple, `7/10`), passez la paire `available`et
        `total`au lieu de `quantity`.
      type: integer
    available:
      description: >-
        Nombre d'objets restants que l'utilisateur peut acheter.


        Pour afficher les informations de limite d'achat dans le catalogue (par
        exemple, `7/10`), passez la paire `available` et `total`.
      type: integer
    total:
      description: >-
        Nombre maximum d'objets qu'un utilisateur unique peut acheter.


        Pour afficher les informations de limite d'achat dans le catalogue (par
        exemple, `7/10`), passez la paire `available` et `total`.
      exclusiveMinimum: 0
      type: integer
    bundle_content:
      description: >-
        Tableau d’objets avec le contenu du lot à afficher dans le catalogue. Ne
        peut être utilisé que pour le type de lot
        [partner_side_content](https://developers.xsolla.com/fr/api/shop-builder/operation/admin-create-bundle/).
      items:
        properties:
          description:
            description: >-
              Description de l’objet à afficher dans le catalogue comme
              composant du lot. Si elle n’est pas fournie, la valeur `null` est
              passée.
            maxLength: 255
            type: string
          image_url:
            description: >-
              URL de l’image de l’objet à afficher dans le catalogue comme
              composant du lot (seul le protocole HTTPS est pris en charge). Si
              elle n’est pas fournie, la valeur `null` est passée.
            format: uri
            maxLength: 255
            type: string
          name:
            description: >-
              Nom de l’objet à afficher dans le catalogue comme composant du
              lot. S’il n’est pas fourni, une chaîne vide est passée.
            maxLength: 255
            type: string
          quantity:
            default: 1
            description: Quantité de l’objet dans le lot.
            minimum: 1
            type: integer
        type: object
      type: array
    date_from:
      description: >-
        Date de début de disponibilité de l'objet à la vente. Formatée selon la
        norme [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339).
      type: string
    date_until:
      description: >-
        Date de début d'indisponibilité de l'objet à la vente. Formatée selon la
        norme [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339).
      type: string
    description:
      description: >-
        Description de l’objet à afficher dans le catalogue. Elle remplace la
        description stockée dans un objet.
      maxLength: 255
      type: string
    image_url:
      description: >-
        URL de l’image à afficher dans le catalogue. Elle remplace l’URL de
        l’image stockée dans un objet (seul le protocole HTTPS est pris en
        charge). Si l’URL n’est pas conforme aux exigences, elle sera ignorée.
      format: uri
      maxLength: 255
      type: string
    json_attributes:
      description: >-
        Un objet JSON contenant les attributs d’objet et leurs valeurs. Il
        remplace
        [custom_attributes](https://developers.xsolla.com/fr/webhooks/operation/successful-order-payment/#!path=items/0/custom_attributes&t=request)
        stocké dans un objet. Si le JSON n’est pas conforme aux exigences ou
        s’il est plus long que la longueur maximale, il sera ignoré.
      format: json
      maxLength: 500
      type: object
    name:
      description: >-
        Nom de l’objet à afficher dans le catalogue. Il remplace le nom stocké
        dans un objet.
      maxLength: 255
      type: string
    sku:
      description: >-
        ID unique de l'objet que vous avez indiqué dans le Compte éditeur.
        Passez soit le `sku`ou le `item_id`.
      type: string
    item_id:
      description: ID unique de l'objet côté Xsolla. Passez soit le `sku`ou le `item_id`.
      type: integer
    user.public_id:
      description: ID utilisateur public.
      type: string
  responses:
    '204':
      description: Renvoyez pour indiquer un traitement réussi.
    '400':
      content:
        application/json:
          schema:
            properties:
              error:
                properties:
                  code:
                    type: string
                  message:
                    type: string
                type: object
            type: object
      description: >-
        Renvoyez en cas d'erreur dans les informations fournies (par exemple, un
        paramètre requis manquant, une autorisation échouée, 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: Renvoyez pour indiquer des erreurs temporaires liées à vos serveurs.
    400-payment:
      content:
        application/json:
          schema:
            properties:
              error:
                properties:
                  code:
                    type: string
                  message:
                    type: string
                type: object
            type: object
      description: >-
        Renvoyez en cas d'erreur dans les informations fournies (par exemple, un
        paramètre requis manquant, une autorisation échouée, etc.). Dans ce cas,
        l'utilisateur est débité, mais l'achat échoue. Pour procéder au
        remboursement, contactez le service client Xsolla à support@xsolla.com.
      x-examples:
        application/json:
          INCORRECT_AMOUNT:
            summary: Incorrect amount
            value:
              error:
                code: INCORRECT_AMOUNT
                message: Incorrect amount
          INCORRECT_INVOICE:
            summary: Incorrect invoice
            value:
              error:
                code: INCORRECT_INVOICE
                message: Incorrect invoice
          INVALID_PARAMETER:
            summary: Invalid parameter
            value:
              error:
                code: INVALID_PARAMETER
                message: Invalid parameter
          INVALID_SIGNATURE:
            summary: Invalid signature
            value:
              error:
                code: INVALID_SIGNATURE
                message: Invalid signature
          INVALID_USER:
            summary: Invalid user
            value:
              error:
                code: INVALID_USER
                message: Invalid user
x-tagGroups:
  - name: Validation utilisateur
    tags:
      - user-validation
  - name: Payments
    tags:
      - payments
  - name: Services de jeux
    tags:
      - combined-webhooks
      - separate-webhooks
      - personalization
  - name: Anti-Fraud
    tags:
      - anti-fraud
  - name: Subscriptions
    tags:
      - subscriptions
