Skip to content

dispute.closed

POST

A dispute was decided, and closed says when. Its status is final:

  • won: the case was decided for you, or the network reversed the chargeback. The disputed amount is returned to you, and so is the chargeback cost if the card provider returned it: cost_returned says how much.
  • lost: the case was decided for the customer. Nothing is returned.
  • accepted: you, or the operations team, accepted the chargeback. Nothing is returned.

Nothing is sent for a dispute after this.

Media typeapplication/json
object
id
required

Deduplicate on this; the same event may arrive more than once.

string
object
required
string
Allowed value: event
type
required
string
created
required

A Unix timestamp.

integer
api_version
required
string
Allowed value: v1
livemode
required
boolean
tenant_id
string
merchant_id
string | null
data
required
object
object

The object as the API shows it, as of this event.

object
data
required
object
object

A customer’s challenge to one of your card payments, as you see it. The payment itself never changes: it stays succeeded, and the dispute is its own object.

object
id
required
string
object
required
string
Allowed value: dispute
amount
required

The amount disputed, in the currency’s minor unit: all of the payment, or part of it. It is taken from the funds due to you when the dispute opens, and returned if you win.

integer
currency
required

A three-letter ISO 4217 code, in lower case.

string
/^[a-z]{3}$/
payment_intent
required

The payment intent disputed.

string
status
required

open when the chargeback arrives; under_review while the operations team work the case; then won, lost or accepted, each final. See Disputes.

string
Allowed values: open under_review won lost accepted
reason
required

What kind of dispute it is, from the network’s reason code. fraud: the cardholder says they did not make the payment. authorization: the payment was not properly authorized. processing_error: it was processed wrongly, such as charged twice, late or in the wrong amount. consumer_dispute: the customer says what they paid for was not received, not as described, or cancelled, or that a refund was not given. other: a code not in these.

string
Allowed values: fraud authorization processing_error consumer_dispute other
network_reason_code
required

The card network’s own reason code for the dispute, as it gave it.

string
case_reference
required

The card network’s reference for the case. Quote it when you talk to the operations team about the dispute.

string
chargeback_cost
required

What the card provider charges for the chargeback, in the dispute’s currency and minor unit, taken from the funds due to you with amount. 0 when it charges nothing.

integer
admin_fee
required

Your platform’s own fee for handling a chargeback, if it sets one for the payment method, taken with amount. Fixed when the dispute opens. 0 when there is none. It is not returned when you win.

integer
cost_returned
required

What a won dispute gave back of chargeback_cost, in the same minor unit: returned to you with amount. 0 until the dispute is won and the card provider returns its cost, and 0 for one that is lost or accepted.

integer
debited
required

What came off your balance for the chargeback: amount, chargeback_cost and admin_fee together. 0 when charged_to is platform. It stays the same once the dispute is decided: what a win returns is amount and cost_returned. In test mode nothing moves, but it says what would have.

integer
charged_to
required

Who bore the chargeback. you: it came off your balance, as debited says. platform: the platform you take payments under bore it, and nothing came off your balance.

string
Allowed values: you platform
evidence_due_date
required

The last day to respond with evidence, as a calendar date (YYYY-MM-DD) in your platform’s time zone. It may be moved while the dispute is worked. null until it is known.

string | null format: date
evidence_request
required

What the operations team asked you to send for the case, if they asked. null otherwise.

string | null
livemode
required
boolean
created
required

When the dispute opened, as a Unix timestamp.

integer
closed
required

When it was decided, as a Unix timestamp. null while it is open or under_review.

integer | null
Example
{
"id": "evt_0199f1a4c2b86e3d7a50c9f2b1e4",
"object": "event",
"type": "dispute.closed",
"created": 1792558800,
"api_version": "v1",
"livemode": false,
"tenant_id": "7d2e4f61-3a8b-4c95-b0e7-2f1a9c6d8e43",
"merchant_id": "c4a91e2b-6f37-4d08-9b5c-e0d2f8a17b36",
"data": {
"object": {
"id": "dp_0199c3f2a1b47c1e9a20d4b8f35e",
"object": "dispute",
"amount": 10000,
"currency": "php",
"payment_intent": "pi_01j9x2p4d6f8h0k2m4n6q8s0t2",
"status": "won",
"reason": "fraud",
"network_reason_code": "10.4",
"case_reference": "CB-2026-0001842",
"chargeback_cost": 50000,
"admin_fee": 0,
"cost_returned": 50000,
"debited": 60000,
"charged_to": "you",
"evidence_due_date": "2026-10-18",
"evidence_request": "Proof of delivery signed by the customer, and the order's invoice.",
"livemode": false,
"created": 1791446400,
"closed": 1792558800
}
}
}

Received. Answer with any 2xx within 10 seconds.