A dispute is a back-and-forth with the card network. After it opens, you may need to submit evidence by a deadline, and the outcome can be a chargeback or a resolution.
Webhook Rain sends youYour handler (ack 2xx)Action / API callCard networkConditional stepException (dispute)
dispute.created
Rain sends this webhook immediately after you successfully create a dispute. You can only have one active dispute (pending or in-review) per transaction. This webhook is informational only and does not require a response.
Payload
The
disputeType field can be one of these types:
dispute.updated
Rain sends this webhook whenever a dispute status changes or you update text evidence. This includes status changes to "inReview", "accepted", "rejected", "canceled", and "resolvedByMerchant", as well as updates to text evidence. This webhook is informational only and does not require a response.
Payload
dispute.updated payload uses the same dispute object as dispute.created, plus one field of its own. Rain populates the resolvedAt timestamp when the status is accepted, rejected, canceled, or resolvedByMerchant.
Status values
Thestatus field can be one of the following:
Automatic resolution from merchant refunds
When a merchant issues a refund on a transaction with an active dispute, Rain automatically resolves the dispute with status"resolvedByMerchant". This occurs when:
- A cardholder files a dispute on a transaction (status:
"pending"or"inReview") - The merchant independently processes a refund for that transaction
- Rain detects the merchant refund settlement
- The dispute status changes to
"resolvedByMerchant" - The credit to the cardholder equals the merchant refund amount
- Rain populates the
resolvedAttimestamp - You receive a
dispute.updatedwebhook with the new status - Rain credits the cardholder account with the refund amount
"accepted"- Dispute was won through the card network dispute process"rejected"- Dispute was denied through the card network dispute process"canceled"- Dispute was withdrawn or invalidated"resolvedByMerchant"- Dispute was automatically resolved because the merchant issued a direct refund
When a dispute is resolved by merchant refund, you do not receive a
dispute.chargebackCreated webhook because the credit comes from the merchant refund settlement, not from a chargeback process.dispute.evidenceRequested
Rain may request additional documentation to process a dispute. When this happens, you receive the dispute.evidenceRequested webhook. Check the message field to see what evidence is needed, then prompt the cardholder to submit it.
Rain does not currently emit this event; evidence requests reach you through your Rain contact instead. The schema below is reserved so you can build the handler ahead of time.
Payload
dispute.chargebackCreated
Rain sends this webhook after the card network accepts a dispute and Rain processes the reimbursement. It lets you directly link the chargeback transaction back to the original dispute without having to match amounts and timing. This webhook is informational only and does not require a response.
Payload
When is this webhook sent?
Rain sends thedispute.chargebackCreated webhook after:
- The card network accepts a dispute (status changes to
"accepted") - Rain creates the reimbursement transaction
- Rain credits the account
transaction.completed webhook for the chargeback transaction. The dispute.chargebackCreated webhook provides the explicit link between the chargeback and the dispute.
Dispute reimbursement
After the card network accepts a dispute (status changes to "accepted"), Rain automatically processes the reimbursement and credits the account.
Rain files and reimburses only disputes that meet the minimum dispute amount. See Dispute Thresholds and Fees for the thresholds, effective dates, and fee details.
When the reimbursement is processed, you will receive two webhooks:
dispute.chargebackCreated- Links the chargeback transaction directly to the dispute (see above)transaction.completed- Standard transaction webhook for the chargeback transaction
- Negative transaction amount (credit to the account)
- Amount matches the credit issued for the dispute
- Transaction appears in your transaction history
- Account balance updated to reflect the credit
Identify reimbursement transactions
You can identify reimbursement transactions by:- The
dispute.chargebackCreatedwebhook, which provides thetransactionIdlinked to thedisputeId - Negative transaction amount (credit)
- Transaction type of
"spend"
What’s next
Handle disputes & refunds
Walk through filing a dispute, the reimbursement process, and common questions.
Decline reasons
Look up what a
declinedReason value means and what to do about it.