Skip to main content
Rain sends webhook notifications when disputes are created or updated. These webhooks work the same way for both consumer and corporate programs. The following events are available: 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)
OpenEvidenceResolution
🌧️Rain (issuer · processor)
🌐Card network
👤Cardholder
🖥️Partner backend (you)
1CardholderDisputes a charge
2Webhook · openeddispute.created
3Handleack 2xx
4Webhook · action neededdispute.evidenceRequested
5RespondSubmit evidence (representment)
6Webhook · stage changedispute.updated
7Handleack 2xx
8NetworkNetwork decision
9Webhook · if dispute accepteddispute.chargebackCreated
10Handleack 2xx
11Webhook · resolveddispute.updated
12Handleack 2xx

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
The 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

The status 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:
  1. A cardholder files a dispute on a transaction (status: "pending" or "inReview")
  2. The merchant independently processes a refund for that transaction
  3. Rain detects the merchant refund settlement
When Rain detects the refund:
  • The dispute status changes to "resolvedByMerchant"
  • The credit to the cardholder equals the merchant refund amount
  • Rain populates the resolvedAt timestamp
  • You receive a dispute.updated webhook with the new status
  • Rain credits the cardholder account with the refund amount
This status is distinct from other terminal states:
  • "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 the dispute.chargebackCreated webhook after:
  1. The card network accepts a dispute (status changes to "accepted")
  2. Rain creates the reimbursement transaction
  3. Rain credits the account
You will also receive a 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:
  1. dispute.chargebackCreated - Links the chargeback transaction directly to the dispute (see above)
  2. transaction.completed - Standard transaction webhook for the chargeback transaction
The chargeback transaction has:
  • 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.chargebackCreated webhook, which provides the transactionId linked to the disputeId
  • Negative transaction amount (credit)
  • Transaction type of "spend"
Use the dispute.chargebackCreated webhook for the most reliable way to link chargeback transactions back to disputes.

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.