{
  "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>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## 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/\">Project \n   settings &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. Générez une clé secrète :\n\n<ol><ol type=\"a\">\n<li>Dans la section <strong>Secret keys</strong>, appuyez sur <strong>Add key</strong>.</li>\n<li>Dans la fenêtre modale qui s'ouvre, entrez un nom pour identifier facilement la clé dans la liste générale.</li>\n<li>Appuyez sur <strong>Create key</strong>.</li>\n<li>Appuyez sur <strong>Copy secret</strong> et enregistrez la clé générée de votre côté.</li>\n<li>Appuyez sur <strong>Done</strong>.</li>\n<li>Confirmez que vous avez bel et bien enregistré la clé et appuyez sur <strong>Ok, close</strong>.</li>\n</ol></ol>\n\n![Ajoutez une \nclé](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-key.svg)\n\n<div class=\"notice\">\n<p><strong>Important</strong></p>\n<p>Recommandations concernant la clé :<ul>\n<li><strong>Enregistrez la clé secrète générée de votre côté.</strong> Elle s'affichera qu'une seule fois dans le Compte éditeur, au moment de sa création.</li>\n<li>Ne communiquez votre clé secrète à personne.</li>\n<li>La clé secrète doit être stockée sur votre serveur et jamais dans des binaires ni côté client.</li></ul>\n</p>\n</div>\n\n4. Appuyez sur **Enable webhooks**.\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/\">Project \n   settings &gt; Webhooks</a>.\n2. Cliquez sur <b>Disable webhooks</b>.\n\n## Rotation des clés secrètes\n\nLa rotation régulière des clés secrètes renforce la sécurité de votre \nintégration. Créez jusqu'à 5 clés secrètes par projet afin de faciliter leur \nrotation. Pour ce faire, suivez les étapes ci-dessous :\n\n1. Dans la section <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Project \n   settings &gt; Webhooks</a>, appuyez sur **Add key**.\n\n![Ajoutez une \nclé](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-new-key.svg)\n\n2. Dans la fenêtre modale qui s'ouvre, entrez un nom pour identifier facilement la \n   clé dans la liste générale.\n3. Appuyez sur **Create key**.\n4. Appuyez sur **Copy secret** et enregistrez la clé générée de votre côté.\n5. Appuyez sur **Done**.\n6. Confirmez que vous avez bel et bien enregistré la clé et appuyez sur **Ok, \n   close**.\n\n<div class=\"notice\">\n<p><strong>Important</strong></p>\n<p>Recommandations concernant la clé :<ul>\n<li><strong>Enregistrez la clé secrète générée de votre côté.</strong> Elle s'affichera qu'une seule fois dans le Compte éditeur, au moment de sa création.</li>\n<li>Ne communiquez votre clé secrète à personne.</li>\n<li>La clé secrète doit être stockée sur votre serveur et jamais dans des binaires ni côté client.</li></ul>\n</p>\n</div>\n\nIl ne peut y avoir qu'une seule clé secrète active par projet. Pour la \nmodifier, appuyez sur **Set as active** sur la ligne d'une autre clé, puis \nconfirmez l'action. Une fois la migration vers la nouvelle clé effectuée, nous \nvous recommandons de supprimer les clés désactivées.\n\n![Changez une clé \nactive](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/activate-key.svg)\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 les informations du compte de paiement enregistré (visible uniquement si votre Compte éditeur a été créé au plus tard le 22 janvier 2025 et si vous recevez des webhooks distincts).</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 les informations relatives aux transactions effectuées via les 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 <code>order</code> au webhook (affiché uniquement si votre Compte éditeur a été créé au plus tard le 22 janvier 2025 et que vous recevez des webhooks distincts).</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 uniquement des paramètres utilisateur nécessaires 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 des 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 le BIN et le suffixe de la 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    <tr>\n        <td>Afficher des informations sur le motif du remboursement.</td>\n        <td>Informations détaillées sur les motifs de remboursement.</td>\n    </tr>\n    <tr>\n        <td>Afficher les frais de retenue à la source par pays et les frais d'acquisition utilisateur.</td>\n        <td>Les objets <code>payment_details.​country_wht</code> et <code>payment_details.​user_acquisition_fee</code> seront passés dans le webhook. Cette option est activée par défaut.</td>\n    </tr>\n    <tr>\n        <td>Envoyer les informations 3DS.</td>\n        <td>L'objet <code>cards</code> contenant des données sur la vérification 3-D Secure sera passé dans le webhook.</td>\n    </tr>\n</tbody>\n</table>\n\n![Paramètres \navancés](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/advanced-settings.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/webhooks/testing-section.svg)\n\nLa section de test dans le Compte éditeur varie en fonction de l'option de \nréception du webhook.\n\nSi vous avez enregistré votre Compte éditeur après le 22 janvier 2025, vous \nrecevrez des webhooks combinés :\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\nSi vous avez enregistré votre Compte éditeur avant ou le 22 janvier 2025, vous \nrecevrez des webhooks distincts :\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\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 les webhooks :\n1. Dans la section de test des webhooks, accédez à l'onglet <b>Payments and \n   Store</b>.\n2. Dans la liste déroulante, sélectionnez le type d'objet. Si ce type n'est pas \n   encore configuré dans le Compte éditeur, appuyez sur le bouton pour le \n   configurer. Une fois l'objet créé, revenez à la section de test des webhooks et \n   passez à l'étape suivante.\n3. Remplissez les champs nécessaires :\n   * **User ID** — lors des tests, vous pouvez utiliser n'importe quelle combinaison \n     de lettres et de chiffres.\n   * Entrez une valeur aléatoire dans le champ **Xsolla order ID**\n   * **Xsolla invoice ID** — ID de transaction côté Xsolla. Lors des tests, vous \n     pouvez utiliser n'importe quelle valeur numérique.\n   * **Invoice ID** — ID de transaction côté de votre jeu. Lors des tests, vous \n     pouvez utiliser n'importe quelle combinaison de lettres et de chiffres. Ce \n     n'est pas un paramètre requis pour un paiement réussi, mais vous pouvez le \n     transmettre pour lier l'ID de transaction de votre côté à l'ID de transaction \n     côté Xsolla.\n   * **Amount** — montant du paiement. Lors des tests, vous pouvez utiliser \n     n'importe quelle valeur numérique.\n   * **Currency** — sélectionnez une devise dans la liste déroulante.\n   * Sélectionnez l'UGS de l'objet dans la liste déroulante et indiquez le montant. \n     Pour choisir plusieurs objets du même type, appuyez sur **+** et ajoutez-les \n     sur une nouvelle ligne.\n4. Appuyez sur **Test webhooks**.\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 la case <b>Use public user ID</b> est cochée dans la section <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/advanced\">Project settings \n> Integration settings</a>, le webhook <a href=\"/webhooks/user-validation/user-\nsearch\">User search</a> sera également envoyé à l'URL de votre serveur de \nwebhooks et le résultat du test s'affichera.\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 de test des \npaiements](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-results.svg)\n\n## Subscriptions\n\n<div class=\"note\">\n<p><strong>Remarque</strong></p>\n<p>Pour tester les webhooks, vous devez avoir au moins un <a href=\"/sell-subscriptions/integration-guide/set-up-plan/\">plan d'abonnement créé</a> dans le Compte éditeur dans la section <a href=\"https://publisher.xsolla.com/0/projects/0/subscriptions/plans\">Items catalog&gt; Subscriptions</a>.</p>\n</div>\n\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>Remarque</strong></p>\n<p>Vous trouverez des informations détaillées sur le test d'autres scénarios de gestion des abonnements dans le <a href=\"/sell-subscriptions/integration-guide/set-up-plan/#guides_subscriptions_set_up_plan_testing_purchase\">guide d'intégration</a>.</p>\n</div>\n\nPour tester les webhooks :\n\n1. Dans la section de test, accédez à l'onglet **Subscriptions**.\n2. Remplissez les champs nécessaires :\n   * **User ID** — lors des tests, vous pouvez utiliser n'importe quelle combinaison \n     de lettres et de chiffres.\n   * **Xsolla invoice ID** — ID de transaction côté Xsolla. Lors des tests, vous \n     pouvez utiliser n'importe quelle valeur numérique.\n   * **Public user ID** — ID connu de l'utilisateur, par exemple, un e-mail ou un \n     pseudo. Ce champ s'affiche si vous avez coché la case **Use public user ID** \n     dans le projet dans la section [Project settings > Integration \n     settings](https://publisher.xsolla.com/0/projects/0/edit/advanced).\n   * **Amount** — montant du paiement. Lors des tests, vous pouvez utiliser \n     n'importe quelle valeur numérique.\n   * **Currency** — sélectionnez une devise dans la liste déroulante.\n   * **Plan ID** — un plan d'abonnement. Choisissez un plan dans la liste déroulante.\n   * **Subscription product** — choisissez un produit dans la liste déroulante \n     (facultatif). La liste s'affiche si des [produits](/fr/sell-subscriptions/integration-guide/get-started/#guides_subscriptions_glossary_product) sont \n     configurés dans le projet.\n   * **Invoice ID** — ID de transaction côté de votre jeu. Lors des tests, vous \n     pouvez utiliser n'importe quelle combinaison de lettres et de chiffres. Ce \n     n'est pas un paramètre requis pour un paiement réussi, mais vous pouvez le \n     transmettre pour lier l'ID de transaction de votre côté à l'ID de transaction \n     côté Xsolla.\n   * **Trial period**. Pour tester l'[achat d'un abonnement sans période d'essai\n     ](/fr/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox) ou \n     pour tester le [renouvellement d'un abonnement](/fr/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal)\n     , spécifiez la valeur `0`.\n3. Appuyez sur **Test**.\n\nÀ l'URL spécifiée, vous recevrez des webhooks avec les données remplies. 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</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# Bonnes pratiques\n\n## Sécurité\n\nSuivez ces lignes directrices :\n\n* Utilisez uniquement le protocole HTTPS, avec un certificat valide.\n* Vérifiez toujours la signature à partir du corps brut de la requête ; \n  n'analysez pas et ne réencodez pas les données.\n* Ne passez pas de données sensibles dans les URL et évitez de divulguer des \n  détails techniques dans les messages d'erreur.\n* Exemptez le point de terminaison du webhook du middleware \n  [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery). Les requêtes \n  entrantes de Xsolla n'incluent pas de jeton CSRF et seront rejetées sans ce \n  paramètre.\n* Liste blanche [Adresses IP de Xsolla](/fr/webhooks/section/webhook-listener).\n\n\n## Architecture du gestionnaire de webhook\n\nSuivez ces lignes directrices :\n\n1. Acceptez la requête `POST` avec son corps et ses en-têtes tels quels, **sans \n   modification**.\n2. [Vérifiez la signature du webhook](/fr/webhooks/section/webhook-listener/generation-of-signature) et renvoyez le code d'état approprié :\n   * `4xx` : si les signatures ne correspondent pas ;\n   * `2xx` : en cas de succès. Nous recommandons de renvoyer 204 `No Content` \n     **avant** d'exécuter la logique métier principale. `200 OK` est également \n     acceptable.\n3. Passez la charge utile à une tâche asynchrone ou à une file d'attente pour un \n   traitement ultérieur.\n4. Implémentez \n   l'[idempotence](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning). Vous devez vous assurer que votre système est capable de gérer la \n   [réception d'un même webhook plusieurs fois](/fr/webhooks/section/webhook-listener/sending-responses-to-webhook).\n\n**Exemple de flux :**\n\n```http\nHTTP POST /webhooks/xsolla\n  read raw_body, headers\n  if !verify_signature(raw_body, headers['authorization']):\n     return 400 {\"error\":{\"code\":\"INVALID_SIGNATURE\",\"message\":\"Invalid signature\"}}\n  enqueue(raw_body)\n  return 204  # or 200\n```\n\n## Idempotence et doublons\n\nSuivez ces lignes directrices :\n\n* Utilisez l'ID de transaction et/ou l'[ID externe](/fr/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id), ainsi que \n  l'ID de commande comme clés d'idempotence.\n* Enregistrez les identifiants traités et renvoyez le résultat précédent en cas \n  de doublon.\n* Évitez les réattributions d'objets, les doublons en base de données et les \n  doubles facturations.\n* Gardez à l'esprit qu'avec une livraison séquentielle, un échec sur un événement \n  antérieur bloque le traitement de tous les suivants.\n\n## Résilience du système\n\nSuivez ces lignes directrices :\n\n* Utilisez des files d'attente et un traitement asynchrone pour les opérations \n  gourmandes en ressources, comme les appels à des API tierces, la facturation et \n  l'attribution d'objets.\n* Définissez des délais d'expiration pour le gestionnaire de webhook (1 à 3 s). \n  En cas d'échecs temporaires, appuyez-vous sur le [mécanisme de réessai de \n  Xsolla](/fr/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* N'implémentez pas de tentatives de réessai dans le gestionnaire de webhook : \n  cela est pris en charge par Xsolla.\n* Enregistrez les horodatages de livraison des webhooks et les statuts de \n  traitement ; configurez des alertes en cas de pics d'erreurs `5xx` et de \n  nouvelles tentatives de passage.\n* Transférez les ID de corrélation du webhook vers vos journaux et votre système \n  de surveillance (APM).\n* Configurez la journalisation et le suivi des erreurs. En cas d'échec non \n  récupérable, transférez les tâches vers une file de messages morts (DLQ). \n  Développez un outil sécurisé de relecture des événements, protégé par un \n  mécanisme d'idempotence.\n\n## Exemples d'implémentation\n\n**Achat réussi — objet obtenu dès la première tentative :**\n\n![Achat](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/purchase-v2.svg)\n\n**Livraison en double (timeout du partenaire lors de la première tentative) :**\n\n![Timeout](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/timeout-v2.svg)\n\n**Remboursement :**\n\n![Remboursement](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/refund-v2.svg)\n\n**Interruption de service chez un partenaire** :\n\n![Interruption de service chez un \npartenaire](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/server-error.svg)\n\n# FAQ\n\n## Ai-je besoin d'utiliser HTTPS pour un protocole de webhook ?\n\nOui.\n\n## Puis-je recevoir des webhooks de paiement sur plusieurs URL ?\n\nNon. Les webhooks de paiement utilisent un protocole serveur à serveur et sont \nenvoyés à une URL unique définie dans les [paramètres du \nprojet](/fr/webhooks/section/set-up-webhooks-in-publisher-account). Si vous \nsouhaitez recevoir des notifications dans votre jeu, site web ou application \nmobile, configurez les webhooks sur votre serveur pour assurer l'échange de \ndonnées entre Xsolla et votre application. Vous pouvez également les tester \ndepuis la console développeur.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>Si vous testez l'intégration localement, les requêtes `POST` de Xsolla n'atteignent pas des URLs comme <code>http://localhost:3000/my-webhook-endpoint</code>. Utilisez des services tels que <a href=\"https://ngrok.com/\">Ngrok</a> pour créer un tunnel d'accès externe et recevoir les requêtes Xsolla localement. Vous pouvez en savoir plus dans la <a href=\"https://ngrok.com/docs/guides/share-localhost/webhooks#test-webhooks-locally\">documentation Ngrok</a>.</p>\n</div>\n\n## Pourquoi la notification Xsolla n'a-t-elle pas été envoyée à l'URL du webhook ?\n\nAssurez-vous que votre serveur de webhooks prend en charge les types de \nrequêtes HTTP `POST` et `GET`.\n\n## Comment éviter les doublons d'identifiants de transaction lors du traitement ?\n\nUtilisez l'ID externe : il s'agit de l'identifiant de transaction dans votre \njeu, attribué à la commande dans votre système. Côté Xsolla, l'ID externe est \nassocié à l'ID de transaction, ce qui permet d'éviter les paiements en double \npour une même transaction. Pour en savoir plus sur la configuration, consultez \nnotre [documentation](/fr/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id).\n\n##  Existe-t-il de bonnes pratiques pour l'utilisation des webhooks ?\n\nNous vous recommandons :\n\n* Retourner le code `204` ou `200` immédiatement après la vérification de la \n  signature.\n* Vérifier la signature du webhook par rapport au corps brut de la requête, sans \n  modification.\n* Implémenter l'idempotence pour toutes les opérations.\n* Enregistrer tous les événements et configurer un système de surveillance des \n  erreurs.\n* Éviter d'inclure des données sensibles dans les URL et de divulguer des détails \n  techniques dans les messages d'erreur.\n\nConsultez la section [Meilleures pratiques](/fr/webhooks/section/best-practices) \npour plus d'informations.\n\n# Liste de contrôle pour l'intégration des webhooks\n\nPour que le bon fonctionnement des webhooks, assurez-vous que les éléments \nsuivants sont bien en place avant de passer en production :\n\n* Le protocole HTTPS est utilisé.\n* La [vérification de la signature](/fr/webhooks/section/webhook-listener/generation-of-signature) du webhook s'effectue à partir du corps brut de la requête, sans \n  aucune modification.\n* Une réponse `204/200` est renvoyée dès que la signature est confirmée.\n* L'idempotence est assurée pour toutes les opérations.\n* La journalisation et la surveillance des erreurs sont configurées.\n* Les données sensibles ne sont pas transmises dans les URL, et les messages \n  d'erreur ne divulguent aucun détail technique.\n* Les tentatives de réenvoi des webhooks sont prises en charge conformément à la \n  [logique de réessai de Xsolla](/fr/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* L'ensemble du processus d'intégration est documenté.\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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\":\"payment_account_add\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\",\n        \"zip\": \"12345\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"country\": \"US\",\n        \"type\": \"paypal\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 255\ncontent-type:   application/json\nauthorization:  Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843\n\n{\n    \"notification_type\": \"payment_account_add\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\",\n        \"zip\": \"12345\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"country\": \"US\",\n        \"type\": \"paypal\"\n    }\n}"
          }
        ]
      }
    },
    "afs-rejected-blocklist": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'authorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6' \\\n-d '{\n  \"event\": {\n    \"action\": \"adding\",\n    \"date_of_last_action\": \"2020-11-27T10:09:05+03:00\",\n    \"parameter\": \"email\",\n    \"parameter_value\": \"email@example.com\",\n    \"reason\": \"ps_reported_fraud\",\n    \"transaction_id\": \"111111111\",\n    \"project_id\": \"123456\"\n  },\n  \"notification_type\": \"afs_black_list\"\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 233\nauthorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6\n\n{\n  \"event\": {\n    \"action\": \"adding\",\n    \"date_of_last_action\": \"2020-11-27T10:09:05+03:00\",\n    \"parameter\": \"email\",\n    \"parameter_value\": \"email@example.com\",\n    \"reason\": \"ps_reported_fraud\",\n    \"transaction_id\": \"111111111\",\n    \"project_id\": \"123456\"\n  },\n  \"notification_type\": \"afs_black_list\"\n}"
          }
        ]
      }
    },
    "afs-rejected-transaction": {
      "post": {
        "description": "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. 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.\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",
                        "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.",
                        "format": "int64",
                        "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' \\\n-X POST \\\n-d '{\n  \"notification_type\": \"afs_reject\",\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"phone\": \"18777976552\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"name\": \"John Smith\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": 1,\n    \"external_id\": 1,\n    \"dry_run\": 1,\n    \"agreement\": 1\n  },\n  \"refund_details\": {\n    \"code\": 4,\n    \"reason\": \"Potential fraud\"\n  }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n  'notification_type' => 'afs_reject',\n  'settings' => array(\n    'project_id' => 18404,\n    'merchant_id' => 2340\n  ),\n  'user' => array(\n    'ip' => '127.0.0.1',\n    'phone' => '18777976552',\n    'email' => 'email@example.com',\n    'id' => '1234567',\n    'country' => 'US'\n  ),\n  'transaction' => array(\n    'id' => 87654321,\n    'payment_method' => 1380,\n    'dry_run' => 1\n  ),\n  'refund_details' => array(\n    'code' => 4,\n    'reason' => 'Potential fraud'\n  )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n  \"notification_type\": \"afs_reject\",\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"phone\": \"18777976552\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"name\": \"John Smith\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": 1,\n    \"external_id\": 1,\n    \"dry_run\": 1,\n    \"agreement\": 1\n  },\n  \"refund_details\": {\n    \"code\": 4,\n    \"reason\": \"Potential fraud\"\n  }\n}"
          }
        ]
      }
    },
    "canceled-subscription": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"cancel_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_end\": \"2015-01-22T19:25:25+04:00\"\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'cancel_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_create' => '2014-09-22T19:25:25+04:00',\n        'date_end' => '2015-01-22T19:25:25+04:00',\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"cancel_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\":{\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_create\": \"2014-09-22T19:25:25+04:00\",\n        \"date_end\": \"2015-01-22T19:25:25+04:00\"\n    }\n}"
          }
        ]
      }
    },
    "created-subscription": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"create_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n            \"trial\": {\n                    \"value\": 90,\n                    \"type\": \"day\"\n                },\n            \"is_gift\": true\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'create_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_create' => '2014-09-22T19:25:25+04:00',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00',\n        'trial' =>  array(\n                'value' =>  90,\n                'type' =>  'day'\n            ),\n        'is_gift' => true,\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nHost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"create_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_create\": \"2014-09-22T19:25:25+04:00\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n        \"trial\": {\n                \"value\": 90,\n                \"type\": \"day\"\n            },\n        \"is_gift\": true\n    }\n}"
          }
        ]
      }
    },
    "dispute": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'authorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6' \\\n-d '{\n  \"notification_type\": \"dispute\",\n  \"action\": \"adding\",\n  \"transaction\": {\n    \"id\": 123456789,\n    \"date_create\": \"2023-08-24T10:21:00+04:00\",\n    \"total\": {\n      \"amount\": 1,\n      \"currency\": \"EUR\"\n    },\n    \"payment_method\": \"credit_debit_card\"\n  },\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"id\": \"1234567\",\n    \"email\": \"email@example.com\",\n    \"country_code\": \"US\"\n  },\n  \"dispute\": {\n    \"incoming_date\": \"2024-01-25T01:02:03+04:00\",\n    \"reason\": \"not_as_described\",\n    \"type\": \"retrieval\",\n    \"status\": \"new\"\n  }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-Type: application/json\ncontent-Length: 578\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n  \"notification_type\": \"dispute\",\n  \"action\": \"adding\",\n  \"transaction\": {\n    \"id\": 123456789,\n    \"date_create\": \"2023-08-24T10:21:00+04:00\",\n    \"total\": {\n      \"amount\": 1,\n      \"currency\": \"EUR\"\n    },\n    \"payment_method\": \"credit_debit_card\"\n  },\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"id\": \"1234567\",\n    \"email\": \"email@example.com\",\n    \"country_code\": \"US\"\n  },\n  \"dispute\": {\n    \"incoming_date\": \"2024-01-25T01:02:03+04:00\",\n    \"reason\": \"not_as_described\",\n    \"type\": \"retrieval\",\n    \"status\": \"new\"\n  }\n}"
          }
        ]
      }
    },
    "nonrenewing-subscription": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"non_renewal_subscription\",\n        \"settings\": {\n          \"project_id\": 12345,\n          \"merchant_id\": 1234\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"email\": \"email@example.com\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"a1bcd2e3\",\n            \"subscription_id\": \"10\",\n            \"date_create\": \"2014-12-22T15:25:25+04:00\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 0.03\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'non_renewal_subscription',\n    'settings' => array(\n      'project_id' => 12345,\n      'merchant_id' => 1234\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'email' => 'email@example.com'\n    ),\n    'subscription' => array(\n        'plan_id' => 'a1bcd2e3',\n        'subscription_id' => '10',\n        'date_create' => '2014-12-22T15:25:25+04:00',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00',\n        'currency' => 'USD',\n        'amount' => 0.03\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"non_renewal_subscription\",\n    \"settings\": {\n      \"project_id\": 12345,\n      \"merchant_id\": 1234\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"email\": \"email@example.com\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"a1bcd2e3\",\n        \"subscription_id\": \"10\",\n        \"date_create\": \"2014-12-22T15:25:25+04:00\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n        \"currency\": \"USD\",\n        \"amount\": 0.03\n    }\n}"
          }
        ]
      }
    },
    "order-cancellation": {
      "post": {
        "description": "Xsolla 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": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "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.",
                            "format": "int64",
                            "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"refund\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n              \"subscription\": {\n                  \"plan_id\": \"b5dac9c8\",\n                  \"subscription_id\": \"10\",\n                  \"date_create\": \"2014-09-22T19:25:25+04:00\",\n                  \"currency\": \"USD\",\n                  \"amount\": 9.99\n              },\n              \"total\":{\n                  \"currency\": \"USD\",\n                  \"amount\": 200\n              }\n          },\n      \"transaction\": {\n              \"id\": 1,\n              \"external_id\": 1,\n              \"dry_run\": 1,\n              \"agreement\": 1\n          },\n      \"refund_details\": {\n              \"code\": 4,\n              \"reason\": \"Potential fraud\"\n          },\n      \"payment_details\": {\n              \"sales_tax\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 0\n              },\n              \"direct_wht\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 0.70\n              },\n              \"xsolla_fee\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"10\"\n              },\n              \"payout\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"200\"\n              },\n              \"payment_method_fee\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"20\"\n              },\n              \"payment\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"230\"\n              },\n              \"repatriation_commission\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 10\n              }\n          }\n    }\n}"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"refund\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          }\n      },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"refund_details\": {\n          \"code\": 4,\n          \"reason\": \"Potential fraud\"\n      },\n      \"payment_details\": {\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0.70\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": \"10\"\n          },\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": \"200\"\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": \"20\"\n          },\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": \"230\"\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n        }\n      }\n    }"
          }
        ]
      }
    },
    "order-cancellation-separate": {
      "post": {
        "description": "Xsolla 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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    }\n\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "partial-refund": {
      "post": {
        "description": "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.",
                        "format": "int64",
                        "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' \\\n-X POST \\\n-d '{\n        \"notification_type\": \"partial_refund\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"purchase\": {\n            \"checkout\": {\n                \"currency\": \"USD\",\n                \"amount\": 50\n            },\n            \"total\":{\n                \"currency\": \"USD\",\n                \"amount\": 200\n            }\n        },\n        \"user\": {\n            \"ip\": \"127.0.0.1\",\n            \"phone\": \"18777976552\",\n            \"email\": \"email@example.com\",\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\",\n            \"country\": \"US\"\n        },\n        \"transaction\": {\n            \"id\": 1,\n            \"external_id\": 1,\n            \"dry_run\": 1,\n            \"agreement\": 1,\n            \"date\": \"2022-03-01 10:53:15\"\n        },\n        \"refund_details\": {\n            \"author\": \"email@example.com\",\n            \"date\": \"2022-03-01 10:56:48\"\n        },\n        \"payment_details\": {\n            \"sales_tax\": {\n                \"currency\": \"USD\",\n                \"amount\": 0\n            },\n            \"direct_wht\": {\n                \"currency\": \"USD\",\n                \"amount\": 0.70\n            },\n            \"xsolla_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"10\"\n            },\n            \"payout\": {\n                \"currency\": \"USD\",\n                \"amount\": \"200\"\n            },\n            \"payment_method_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"20\"\n            },\n            \"payment\": {\n                \"currency\": \"USD\",\n                \"amount\": \"230\"\n            },\n            \"repatriation_commission\": {\n                \"currency\": \"USD\",\n                \"amount\": 10\n            }\n        }\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'partial_refund',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'dry_run' => 1,\n        'date' => '2022-03-31 10:53:15'\n    ),\n    'refund_details' => array(\n            'author' => 'email@example.com',\n            'date' => '2022-03-01 10:56:48'\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => 1,\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n    \"notification_type\": \"partial_refund\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"dry_run\": 1,\n        \"agreement\": 1,\n        \"date\": \"2022-03-31 10:53:15\"\n    },\n    \"refund_details\": {\n        \"author\": \"email@example.com\",\n        \"date\": \"2022-03-31 10:56:48\"\n    },\n    \"payment_details\": {\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0.70\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"10\"\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": \"200\"\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"20\"\n        },\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": \"230\"\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    }\n}"
          }
        ]
      }
    },
    "payment": {
      "post": {
        "description": "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    <tr>\n        <td>Afficher les frais de retenue à la source par pays et les frais d'acquisition utilisateur.</td>\n        <td>Les objets <code>payment_details.​country_wht</code> et <code>payment_details.​user_acquisition_fee</code> seront passés dans le webhook. Cette option est activée par défaut.</td>\n    </tr>\n    <tr>\n        <td>Envoyer les informations 3DS.</td>\n        <td>L'objet <code>cards</code> contenant des données sur la vérification 3-D Secure sera passé dans le webhook.</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": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "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.",
                        "format": "int64",
                        "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' \\\n-X POST \\\n-d '{\n    \"notification_type\": \"payment\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"promotions\": [{\n            \"technical_name\": \"Demo Promotion\",\n            \"id\": 853\n        }],\n        \"coupon\": {\n            \"coupon_code\": \"ICvj45S4FUOyy\",\n            \"campaign_code\": \"1507\"\n        },\n        \"order\": {\n          \"id\": 1234\n          \"lineitems\": [\n          {\n            \"sku\": \"com.xsolla.item_1\",\n            \"quantity\": 1,\n            \"price\": {\n              \"currency\": \"EUR\",\n              \"amount\": 6.5\n              }\n          }\n          ]\n          }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n        \"payment_method\": 1,\n        \"payment_method_name\": \"PayPal\",\n        \"payment_method_order_id\": 1234567890123456789,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"payment_details\": {\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": 230\n        },\n        \"vat\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 20\n        },\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"payout_currency_rate\": \"1\",\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"country_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 10\n        },\n        \"user_acquisition_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 1\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 20\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'payment',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'payment_method_name' => 'PayPal'\n        'payment_method_order_id' => 1234567890123456789,\n        'dry_run' => 1\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => '1',\n        'country_wht ' => array(\n            'currency' => 'USD',\n            'amount' => 2,\n            'percent' => 10\n        ),\n        'user_acquisition_fee' => array(\n            'currency' => 'USD',\n            'amount' => 2,\n            'percent' => 1\n        ),\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1721\nauthorization: Signature 34553d151e656110c656696c919f9a10e05de542\n\n{\n    \"notification_type\": \"payment\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\":{\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"promotions\": [{\n            \"technical_name\": \"Demo Promotion\",\n            \"id\": 853\n        }],\n        \"coupon\": {\n            \"coupon_code\": \"ICvj45S4FUOyy\",\n            \"campaign_code\": \"1507\"\n        },\n        \"order\": {\n          \"id\": 1234\n          \"lineitems\": [\n          {\n            \"sku\": \"com.xsolla.item_1\",\n            \"quantity\": 1,\n            \"price\": {\n              \"currency\": \"EUR\",\n              \"amount\": 6.5\n              }\n          }\n          ]\n          }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n        \"payment_method\": 1,\n        \"payment_method_name\": \"PayPal\"\n        \"payment_method_order_id\": 1234567890123456789,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"payment_details\": {\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": 230\n        },\n        \"vat\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 20\n        },\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"payout_currency_rate\": \"1\",\n        \"country_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 10\n        },\n        \"user_acquisition_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 1\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 20\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n    }\n}"
          }
        ]
      }
    },
    "payment-declined": {
      "post": {
        "description": "Si 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.\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",
                        "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.",
                        "format": "int64",
                        "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' \\\n-X POST \\\n-H 'Accept: application/json' \\\n-H 'Content-Type: application/json' \\\n-H 'Authorization: Signature 80543ba63e1e50cf05f15150fe75e7245da9a898' \\\n-d '{\n  \"notification_type\": \"ps_declined\",\n  \"settings\": {\n    \"project_id\": \"18404\",\n    \"merchant_id\": \"2340\"\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": \"1\",\n    \"dry_run\": \"1\",\n    \"payment_method\": \"1\"\n  },\n  \"refund_details\": {\n    \"author\": \"support@xsolla.com\",\n    \"code\": \"8\",\n    \"reason\": \"Cancellation by the PS request\",\n    \"reason_detail\": \"Insufficient funds\"\n  }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n  'notification_type' => 'ps_declined',\n  'settings' => array(\n    'project_id' => '18404',\n    'merchant_id' => '2340',\n  ),\n  'user' => array(\n    'ip' => '127.0.0.1',\n    'email' => 'email@example.com',\n    'id' => '1234567',\n    'country' => 'US',\n  ),\n  'transaction' => array(\n    'id' => '1',\n    'dry_run' => '1',\n    'payment_method' => '1',\n  ),\n  'refund_details' => array(\n    'author' => 'support@xsolla.com',\n    'code' => '8',\n    'reason' => 'Cancellation by the PS request',\n    'reason_detail' => 'Insufficient funds',\n  ),\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 338\nauthorization: Signature 80543ba63e1e50cf05f15150fe75e7245da9a898\n\n{\n  \"notification_type\": \"ps_declined\",\n  \"settings\": {\n    \"project_id\": \"18404\",\n    \"merchant_id\": \"2340\"\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": \"1\",\n    \"dry_run\": \"1\",\n    \"payment_method\": \"1\"\n  },\n  \"refund_details\": {\n    \"author\": \"support@xsolla.com\",\n    \"code\": \"8\",\n    \"reason\": \"Cancellation by the PS request\",\n    \"reason_detail\": \"Insufficient funds\"\n  }\n}"
          }
        ]
      }
    },
    "personalized-partner-catalog": {
      "post": {
        "description": "Xsolla 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\n<div class=\"notice\">\n<p><strong>Avis</strong></p>\n<p>Lors du traitement du webhook, tenez compte des limitations suivantes :<ul><li>Le webhook doit être traité en moins de 3 secondes. Si le traitement prend plus de temps, les appels API <a href=\"/fr/api/catalog/virtual-items-currency-catalog/get-virtual-items\">récupérer la liste des objets virtuels</a>, <a href=\"/api/catalog/payment-server-side/admin-create-payment-token\">créer un jeton de paiement</a>, et <a href=\"/api/catalog/payment-client-side/create-order\">créer une commande</a> renvoient une erreur.</li><li>La taille de la réponse au webhook ne doit pas dépasser 64 Ko. Les réponses dépassant cette limite ne sont pas traitées : l'utilisateur voit un catalogue vide et ne peut pas acheter d'objets. Pour modifier la taille maximale de la réponse, contactez votre responsable de la réussite client ou envoyez un e-mail à <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</li></ul></p>\n</div>\n",
        "operationId": "personalized-partner-catalog",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "user": {
                    "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d90d319f05df7b0f86d2485f48e7079f0f752523' \\\n-d '{\n        \"notification_type\": \"partner_side_catalog\",\n        \"user\": {\n            \"user_id\": \"12345\",\n            \"country\": \"US\"\n        }\n    }'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n{\n    \"notification_type\": \"partner_side_catalog\",\n    \"user\": {\n      \"user_id\": \"12345\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "refund": {
      "post": {
        "description": "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    <tr>\n        <td>Afficher des informations sur le motif du remboursement.</td>\n        <td>Informations détaillées sur les motifs de remboursement.</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": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "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.",
                        "format": "int64",
                        "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' \\\n-X POST \\\n-d '{\n        \"notification_type\": \"refund\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"purchase\": {\n            \"subscription\": {\n                \"plan_id\": \"b5dac9c8\",\n                \"subscription_id\": \"10\",\n                \"date_create\": \"2014-09-22T19:25:25+04:00\",\n                \"currency\": \"USD\",\n                \"amount\": 9.99\n            },\n            \"checkout\": {\n                \"currency\": \"USD\",\n                \"amount\": 50\n            },\n            \"total\":{\n                \"currency\": \"USD\",\n                \"amount\": 200\n            }\n        },\n        \"user\": {\n            \"ip\": \"127.0.0.1\",\n            \"phone\": \"18777976552\",\n            \"email\": \"email@example.com\",\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\",\n            \"country\": \"US\"\n        },\n        \"transaction\": {\n            \"id\": 1,\n            \"external_id\": 1,\n            \"dry_run\": 1,\n            \"agreement\": 1\n        },\n        \"refund_details\": {\n            \"code\": 4,\n            \"reason\": \"Potential fraud\"\n        },\n        \"payment_details\": {\n            \"sales_tax\": {\n                \"currency\": \"USD\",\n                \"amount\": 0\n            },\n            \"direct_wht\": {\n                \"currency\": \"USD\",\n                \"amount\": 0.70\n            },\n            \"xsolla_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"10\"\n            },\n            \"payout\": {\n                \"currency\": \"USD\",\n                \"amount\": \"200\"\n            },\n            \"payment_method_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"20\"\n            },\n            \"payment\": {\n                \"currency\": \"USD\",\n                \"amount\": \"230\"\n            },\n            \"repatriation_commission\": {\n                \"currency\": \"USD\",\n                \"amount\": 10\n            }\n        }\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'refund',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'dry_run' => 1\n    ),\n    'refund_details' => array(\n            'code' => 4,\n            'reason' => 'Potential fraud'\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => 1,\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n    \"notification_type\": \"refund\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"refund_details\": {\n        \"code\": 4,\n        \"reason\": \"Potential fraud\"\n    },\n    \"payment_details\": {\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0.70\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"10\"\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": \"200\"\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"20\"\n        },\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": \"230\"\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    }\n}"
          }
        ]
      }
    },
    "remove-payment-account": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"payment_account_remove\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"type\": \"paypal\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"payment_account_remove\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"type\": \"paypal\"\n    }\n}"
          }
        ]
      }
    },
    "successful-order-payment": {
      "post": {
        "description": "Xsolla 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": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "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.",
                            "format": "int64",
                            "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"payment\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"product_id\": \"Demo Product\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"promotions\": [{\n              \"technical_name\": \"Demo Promotion\",\n              \"id\": 853\n          }],\n          \"coupon\": {\n              \"coupon_code\": \"ICvj45S4FUOyy\",\n              \"campaign_code\": \"1507\"\n          }\n        },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n          \"payment_method\": 1,\n          \"payment_method_name\": \"PayPal\",\n          \"payment_method_order_id\": 1234567890123456789,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"payment_details\": {\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": 230\n          },\n          \"vat\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 20\n          },\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"payout_currency_rate\": \"1\",\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"country_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 10\n          },\n          \"user_acquisition_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 1\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 20\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n      }\n    }\n ,\n  \"custom_parameters\": {\n    \"parameter1\": \"value1\",\n    \"parameter2\": \"value2\"\n  }\n}"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"payment\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\":{\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"product_id\": \"Demo Product\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"promotions\": [{\n              \"technical_name\": \"Demo Promotion\",\n              \"id\": 853\n          }],\n          \"coupon\": {\n              \"coupon_code\": \"ICvj45S4FUOyy\",\n              \"campaign_code\": \"1507\"\n          }\n      },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n          \"payment_method\": 1,\n          \"payment_method_name\": \"PayPal\",\n          \"payment_method_order_id\": 1234567890123456789,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"payment_details\": {\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": 230\n          },\n          \"vat\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 20\n          },\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"payout_currency_rate\": \"1\",\n          \"country_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 10\n          },\n          \"user_acquisition_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 1\n          },\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 20\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n      }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n        }\n    }"
          }
        ]
      }
    },
    "successful-order-payment-separate": {
      "post": {
        "description": "Xsolla 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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    }\n\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "updated-subscription": {
      "post": {
        "description": "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"update_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\"\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'update_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"update_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\"\n    }\n}"
          }
        ]
      }
    },
    "user-search": {
      "post": {
        "description": "<nt>Public User ID</nt> 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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n    \"notification_type\": \"user_search\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"public_id\": \"email@example.com\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'user_search',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'public_id' => 'email@example.com'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"user_search\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"public_id\": \"email@example.com\"\n    }\n}"
          }
        ]
      }
    },
    "user-validation": {
      "post": {
        "description": "Xsolla 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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n    \"notification_type\":\"user_validation\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'user_validation',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email'=> 'email@example.com',\n        'id'=> '1234567',\n        'country' => 'US'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"user_validation\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "user-validation-in-webshop": {
      "post": {
        "description": "Xsolla 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": {
                    "appPlayerId": "cuid12345",
                    "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": {
                        "appPlayerId": {
                          "$ref": "#/components/schemas/appPlayerId"
                        },
                        "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' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-d '{\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"country\": \"US\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\n\n{\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "notification_type": {
        "description": "Type 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/payment-ui-and-flow/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.",
        "format": "int64",
        "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"
      },
      "country_whc": {
        "description": "Objet contenant les données sur les retenues à la source appliquées dans certains pays pour les transactions transfrontalières.",
        "properties": {
          "amount": {
            "description": "Montant.",
            "format": "float",
            "type": "number"
          },
          "currency": {
            "$ref": "#/components/schemas/currency"
          },
          "percent": {
            "description": "Pourcentage du taux de retenue à la source.",
            "format": "float",
            "type": "number"
          }
        },
        "type": "object"
      },
      "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`.\n\nSi 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.\n\nPour 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.\n\nPour 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"
      },
      "appPlayerId": {
        "description": "Identifiant utilisateur attribué par le propriétaire de l’application lors de l’inscription (ID utilisateur client).\n<div lang=\"en\" class=\"note\"><strong>Note</strong><br><br>Xsolla transmet ces données dans l’objet <code>custom_parameters</code> lors de l’appel pour obtenir un jeton de paiement.</div>",
        "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"
      ]
    }
  ]
}