Hoppa till huvudinnehåll
Som din Merchant of Record, hanterar Dodo Payments tvist- och återdebiteringsprocessen med kortnätverken å dina vägnar. Dessa webhooks håller dina system synkroniserade när en tvist går igenom sin livscykel så att du kan återkalla åtkomst, samla bevis och stämma av dina register.

Dispute Webhook Events

En tvist avger en händelse i varje steg av dess livscykel:
HändelseUtlöses närVad det vanligtvis betyder
dispute.openedEn kortinnehavare öppnar en tvist på en betalningPengar hålls; förbered att svara
dispute.challengedBevis har lämnats in för att bestrida tvistenTvisten granskas av nätverket
dispute.acceptedTvisten accepterades (inte bestridd)Pengarna återförs till kortinnehavaren
dispute.cancelledTvisten drogs tillbaka eller avbrötsIngen ytterligare åtgärd behövs
dispute.expiredSvarsperioden passerade utan resolutionAvgörs vanligtvis mot dig
dispute.wonTvisten löstes till din fördelPengarna behålls
dispute.lostTvisten löstes till kortinnehavarens fördelPengarna återförs till kortinnehavaren
Tvister som automatiskt löses genom Visa Rapid Dispute Resolution (RDR) visas som dispute.lost med is_resolved_by_rdr: true. Detta är förväntat — återbetalningen utfärdades automatiskt för att förhindra en formell återdebitering.

Hantering av tvist-händelser

När dispute.opened utlöstes, spärras det bestridda beloppet omedelbart. Använd händelsen för att uppdatera dina register och, om du avser att bestrida den, samla in bevis i dashboarden.
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 });
});
Verifiera alltid webhook-signaturen innan du behandlar — se Webhooks guide för installation. Hanteraren ovan utelämnar verifiering för korthetens skull.
Du har 4 dagar på dig att svara på en tvist efter att den skapats. Se Dispute Response Best Practices för de bevis som ska samlas in och hur man formaterar dem.

Tviststatus och steg

Tvistobjektet rapporterar sin utveckling genom två fält:
FältVärden
dispute_statusdispute_opened, dispute_expired, dispute_accepted, dispute_cancelled, dispute_challenged, dispute_won, dispute_lost
dispute_stagepre_dispute, dispute, pre_arbitration

Relaterat

Managing Disputes

Hur man svarar på tvister, skickar in bevis och hur RDR skyddar din tvisthastighet.

Handle Payment Failures

Upptäck och återställ misslyckade betalningar innan de blir tvister.

Webhook Payload Schema

amount
string
obligatorisk

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

business_id
string
obligatorisk

The unique identifier of the business involved in the dispute.

created_at
string<date-time>
obligatorisk

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

currency
string
obligatorisk

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

dispute_id
string
obligatorisk

The unique identifier of the dispute.

dispute_stage
enum<string>
obligatorisk

The current stage of the dispute process.

Tillgängliga alternativ:
pre_dispute,
dispute,
pre_arbitration
dispute_status
enum<string>
obligatorisk

The current status of the dispute.

Tillgängliga alternativ:
dispute_opened,
dispute_expired,
dispute_accepted,
dispute_cancelled,
dispute_challenged,
dispute_won,
dispute_lost
payment_id
string
obligatorisk

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

Senast ändrad 18 juni 2026