Passer au contenu principal
En tant que Commerçant d’Enregistrement, Dodo Payments gère le processus de litige et de rétrofacturation avec les réseaux de cartes en votre nom. Ces webhooks gardent vos systèmes synchronisés à mesure qu’un litige progresse dans son cycle de vie afin que vous puissiez révoquer l’accès, rassembler des preuves et concilier vos enregistrements.

Événements Webhook de Litige

Un litige émet un événement à chaque étape de son cycle de vie :
ÉvénementDéclenchementSignification habituelle
dispute.openedUn titulaire de carte ouvre un litige sur un paiementLes fonds sont retenus ; préparez-vous à répondre
dispute.challengedDes preuves ont été soumises pour contester le litigeLe litige est examiné par le réseau
dispute.acceptedLe litige a été accepté (pas contesté)Les fonds sont retournés au titulaire de la carte
dispute.cancelledLe litige a été retiré ou annuléAucune action supplémentaire requise
dispute.expiredLa fenêtre de réponse est passée sans résolutionGénéralement résolu contre vous
dispute.wonLe litige a été résolu en votre faveurLes fonds sont conservés
dispute.lostLe litige a été résolu en faveur du titulaire de la carteLes fonds sont retournés au titulaire de la carte
Les litiges résolus automatiquement via Visa Rapid Dispute Resolution (RDR) apparaissent comme dispute.lost avec is_resolved_by_rdr: true. C’est prévu — le remboursement a été émis automatiquement pour éviter une rétrofacturation formelle.

Gestion des Événements de Litige

Lorsque dispute.opened se déclenche, le montant contesté est retenu immédiatement. Utilisez l’événement pour mettre à jour vos enregistrements et, si vous avez l’intention de le contester, rassembler des preuves dans le tableau de bord.
Handling dispute events
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dispute.opened': {
      const dispute = event.data;
      // Record the dispute and consider revoking access while it is open
      await recordDispute(dispute.dispute_id, dispute.payment_id, dispute.amount);
      // Gather and submit evidence from the Dodo Payments dashboard (within 4 days)
      break;
    }
    case 'dispute.won': {
      // Funds retained — restore normal state in your records
      await markDisputeResolved(event.data.dispute_id, 'won');
      break;
    }
    case 'dispute.lost': {
      // Funds returned to the cardholder — reconcile and keep access revoked
      await markDisputeResolved(event.data.dispute_id, 'lost');
      break;
    }
  }

  res.json({ received: true });
});
Vérifiez toujours la signature du webhook avant de traiter — voir le guide des webhooks pour la configuration. Le gestionnaire ci-dessus omet la vérification pour des raisons de concision.
Vous avez 4 jours pour répondre à un litige après sa création. Voir Meilleures Pratiques de Réponse aux Litiges pour les preuves à rassembler et comment les formater.

Statut et Étape du Litige

L’objet de litige rend compte de ses progrès à travers deux champs :
ChampValeurs
dispute_statusdispute_opened, dispute_expired, dispute_accepted, dispute_cancelled, dispute_challenged, dispute_won, dispute_lost
dispute_stagepre_dispute, dispute, pre_arbitration

Connexe

Managing Disputes

Comment répondre aux litiges, soumettre des preuves, et comment RDR protège votre taux de litige.

Handle Payment Failures

Détectez et récupérez les paiements échoués avant qu’ils ne deviennent des litiges.

Schéma de Charge Utile du Webhook

amount
string
requis

The amount involved in the dispute, represented as a string to accommodate precision.

business_id
string
requis

The unique identifier of the business involved in the dispute.

created_at
string<date-time>
requis

The timestamp of when the dispute was created, in UTC.

currency
string
requis

The currency of the disputed amount, represented as an ISO 4217 currency code.

dispute_id
string
requis

The unique identifier of the dispute.

dispute_stage
enum<string>
requis

The current stage of the dispute process.

Options disponibles:
pre_dispute,
dispute,
pre_arbitration
dispute_status
enum<string>
requis

The current status of the dispute.

Options disponibles:
dispute_opened,
dispute_expired,
dispute_accepted,
dispute_cancelled,
dispute_challenged,
dispute_won,
dispute_lost
payment_id
string
requis

The unique identifier of the payment associated with the dispute.

is_resolved_by_rdr
boolean | null

Whether the dispute was resolved by Rapid Dispute Resolution

remarks
string | null

Remarks

Dernière modification le 18 juin 2026