The dispute object
Timestamps use ISO 8601. The dispute object has no amount or currency—read
amount and currency_code from the disputed payment with GET /payments/{id}.
Dispute details
details carries the processor’s own values for reference. Which keys appear depends on the processor, and a key with no value is null.
Dispute stages
A dispute can start as a retrieval request and move to a formal dispute. The stage changes independently of the status.
PayPal’s pre-arbitration and arbitration stages are both reported as
DISPUTE. PayPal’s own stage value stays available in details.paypal_dispute_life_cycle_stage.
Dispute statuses
A dispute usually moves fromNEEDS_RESPONSE through EVIDENCE_SUBMITTED and UNDER_REVIEW to a final status. It can also reach a final status straight from NEEDS_RESPONSE. Dashed arrows show a dispute reopening.
- Once a dispute reaches a final status, it never changes again, and
resolved_atrecords when that happened. - A dispute can already be final when PayNext first records it.
- An open dispute can move back to
NEEDS_RESPONSEfromUNDER_REVIEWorEVIDENCE_SUBMITTEDwhen your response is needed again.
There is no
EXPIRED status. A dispute whose response deadline passes without a response is reported as LOST.Dispute reasons
List and retrieve disputes
UseGET /disputes to list your organization’s disputes and GET /disputes/{id} to retrieve one.
data (an array of dispute objects) and meta, which includes the pagination fields page, pages, limit, and total.
page * limit can’t exceed 10000. A request past that returns 400, and meta.pages never exceeds 10000 / limit.
GET /disputes/{id} returns 404 for a dispute that belongs to another organization.
Disputes on a payment
Payments returned byGET /payments and GET /payments/{id} include a disputes array with a summary of each dispute linked to the payment: id, external_id, stage, status, reason, and disputed_at.
Payment webhook payloads don’t include
disputes. To find payments by dispute status or stage, use the dispute.status and dispute.stage fields in search.
Required API key permission
GET /disputes and GET /disputes/{id} require the Disputes: Read permission. A scoped API key without it receives 403. See API keys.