payment.dispute_resolved
A payment dispute was resolved as won or lost.
Payload
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
The disputed payment transaction ID.
The invoice the payment collected, or null for payments without an invoice.
The human-readable invoice number, if available.
The customer ID, when the payment is linked to an invoice. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
The subscription ID, if the invoice is linked to a subscription.
The contested amount in cents (100 = $1.00).
The dispute currency code.
The provider's reason code, or null when none is given.
The resolution: "won" or "lost".
{
"event": "payment.dispute_resolved",
"timestamp": "2026-05-20T13:30:00.000Z",
"organizationId": "org_abc123",
"mode": "live",
"apiVersion": "2026-06-10",
"data": {
"paymentTransactionId": "ptx_q7r8s9",
"invoiceId": "inv_n4o5p6",
"invoiceNumber": "INV-0043",
"customerId": "user_123",
"subscriptionId": "sub_1a2b3c4d",
"disputeAmount": 9900,
"currency": "usd",
"disputeReason": "fraudulent",
"outcome": "won"
}
}When this fires
When the payment provider closes a dispute that previously fired payment.disputed. The payload carries the same identifiers plus the outcome:
won— the dispute was resolved in your favor; the frozen amount is restored to your payout balance and the payment returns to succeeded.lost— the chargeback stands; the disputed amount stays deducted.
Use it to close the internal flag you opened on payment.disputed, and on lost to revoke whatever the original payment was funding.
How is this guide?