Refund and cancel payments
Learn how to cancel or refund a payment.
You can cancel a payment before itâs completed at no cost. Or you can refund all or part of a payment after it succeeds, which might incur a fee. Stripeâs processing fees from the original transaction arenât returned. See the pricing page for more information.
Refunds use your available Stripe balance (not including pending amounts). If your available balance doesnât cover the amount of the refund, Stripe holds the refund as pending for card transactions (refunds for other payment method types fail) until your Stripe balance becomes sufficient. You can resolve a negative Stripe balance by collecting payments or topping up your account balance. In regions where applicable, Stripe might debit your bank accounts automatically to recover a negative Stripe balance.
Refund requests
Stripe submits refund requests to your customerâs bank or card issuer. Successful refunds appear on the bank statement of your customers in real time, depending on the card network and issuing bank.
If all of the following conditions apply, Stripe sends an email to your customer notifying them of the refund:
- The original charge was created on a customer in your Stripe account.
- The customer has a stored email address.
- You enabled Email customers for refunds in the Dashboard.
You can view your refunded payments in the Dashboard.
Issue refunds
You can issue refunds by using the Refunds API or the Dashboard. You can issue more than one refund against a charge, but you canât refund a total greater than the original charge amount.
To refund a payment using the Dashboard:
- Find the payment you want to refund in the Payments page.
- Click the overflow menu () to the right of the payment, then select Refund payment.
- By default, youâll issue a full refund. For a partial refund, enter a different refund amount.
- Select a reason for the refund. If you select Other, you must add a note that explains the reason for the refund. Click Refund.
Bulk refunds
The Dashboard supports the bulk refunding of full payments. Select what payments you want to refund by checking the box to the left of each paymentâeven over multiple pages of results. Then, click Refund and select a reason. You can only issue full refunds in this way; partial refunds must be issued individually.
Refunds through a Connect platform
Refund behavior depends on the Connect charge type used in your integration.
- Stripe debits the connected account directly for refunds to direct charge payments.
- Stripe debits your platform for refunds to destination charge or separate charge and transfer (with or without
on_) payments. Reverse the transfers associated with these charge types to recover the refund amount from your connected accounts.behalf_ of
Connect platforms can enable their connected accounts to provide refunds to customers from their site by using Connect embedded components such as the payments or the payment details component.
Refund destinations
Refunds can only be sent back to the original payment method used in a charge. You canât send a refund to a different destination, such as another card or bank account.
Refunds to expired or canceled cards are handled by the customerâs card issuer and, in most cases, credited to the customerâs replacement card. If no replacement exists, the card issuer usually delivers the refund to the customer using an alternate method (for example, check or bank account deposit). In rare cases, a refund back to a card might fail.
For other payment methods, like ACH and iDEAL, refund handling varies from bank to bank. If a customer has closed their method of payment, the bank might return the refund to Stripeâat which point itâs marked as failed.
Bank debit payment methods
For bank debit payment methods such as SEPA Direct Debit, Bacs Direct Debit, ACH Direct Debit, ACSS (Canadian PADs), AU BECS Direct Debit, and NZ bank account debits, thereâs a risk of double refund. If you proactively issue a refund while the customerâs bank also initiates a dispute, the customer might receive two credits for the same transaction. Refer to the refund guidelines for each payment method to avoid this situation.
Handle failed refunds
A refund can fail if the customerâs bank or card issuer canât process it. For example, a closed bank account or a problem with the card can cause a refund to fail. When this happens, the bank returns the refunded amount to Stripe, and Stripe adds it back to your Stripe account balance. This process can take up to 30 days from the post date.
When using the API, a Refund objectâs status transitions to failed and includes these attributes:
failure_: The ID of the balance transaction representing the amount returned to your Stripe balance.balance_ transaction failure_: The reason why the refund failed. These reasons include:reason
For some payment methods, the decline code provided by Stripeâs financial partners, which indicates the reason the refund failed, is available in the network_ field of the destination_ hash:
{ id: "pyr_1234", destination_details: { blik: { network_decline_code: "decline_code" }, type: 'blik', } }
In the rare instance that a refund fails, Stripe notifies you using the refund. event (see all refund-related events). If this occurs, you need to arrange an alternative way to provide your customer with a refund.
If your platform uses Connect with destination charges, funds from a failed refund deposit to your platform accountâs Stripe balance.
Cancel a refund
Depending on the type of refund, you might be able to cancel a refund before it reaches the customer. Some card refunds support cancellation for a short period of time. The refund must not have been processed as a charge reversal. Only Dashboard cancellations are currently supported for card refunds.
For some payment methods, Stripe reaches out to the customer to collect banking information before processing the refund. You can cancel these refunds while banking information hasnât been collected. Both the API and Dashboard cancellations are supported for this type of refund.
Canceled refunds transition to a canceled status. As cancellations are a type of refund failure, the attributes failure_ and failure_ are included on the Refund.
If your platform uses Connect with destination charges, funds from a canceled refund deposit to your platform accountâs Stripe balance.
To cancel a refund using the Dashboard:
- Find the payment associated with the refund in the Payments page.
- Click the overflow menu () to the right of the payment, then select Cancel refund.
- If there are multiple partial refunds, select the correct refund in the dropdown.
- Confirm the refund cancellation by selecting Yes, cancel refund.
Alternatively, you can click a specific payment and cancel the refund from its details page.
Refunds that require action
For some payment methods without native refund support (for example, Konbini, PromptPay, Boleto, and bank transfers), Stripe needs to collect bank account details from your customer before it can process the refund. In these cases, the refund enters the requires_ status and Stripe emails your customer to request their bank information.
When a refund has a status of requires_, the Refund objectâs next_ property describes what the refund needs to continue processing. The next_ object contains these fields:
next_: The type of next action (for example,action. type display_).details next_: Information about the email sent to the customer, including:action. display_ details. email_ sent email_: The timestamp when the email was sent.sent_ at email_: The recipientâs email address.sent_ to
next_: The timestamp when the refund request expires if the customer doesnât respond.action. display_ details. expires_ at
The refund status transitions as follows:
| Event | Refund status |
|---|---|
| Refund is created and customer is emailed | requires_ |
| Customer submits bank account details, and Stripe begins processing the refund | pending |
| Refund is expected to arrive in customerâs bank | succeeded |
| Customerâs bank returns the funds back to Stripe | requires_ |
| Customer doesnât respond before the expiration threshold | failed |
Refund is canceled while in requires_ state | canceled |
If the customerâs bank canât successfully complete the transfer (for example, the account holderâs name doesnât match or the bank account number has a typo), the funds are returned to Stripe and the refund transitions back to requires_. In this case, Stripe emails the customer again to request corrected bank account details.
You can cancel a refund while itâs in the requires_ state. For example, if you want to arrange an alternative way to return funds to the customer.
Refund and reversal
Some refundsâthose issued shortly after the original chargeâappear in the form of a reversal instead of a refund. In the case of a reversal, the original charge drops off the customerâs statement, and a separate credit isnât issued.
IC+ users might see a difference in cost between reversals and refunds because reversals usually incur lower network fees.
To verify if a refund goes through as a reversal on the Dashboard:
- Open the payment details page of the payment associated with the refund.
- In the Timeline, click View Details on the refund entry.
- If itâs a reversal, a corresponding message displays.
Trace a refund
After you initiate a refund, Stripe submits refund requests to your customerâs bank or card issuer. Your customer sees the refund as a credit approximately 5-10 business days later, depending upon the bank. A customer might contact you if they donât see the refund. A refund might not be visible to the customer for several reasons:
- Refunds issued shortly after the original charge appear in the form of a reversal instead of a refund. In the case of a reversal, the original charge drops off the customerâs statement, and a separate credit isnât issued.
- Refunds can fail if the customerâs bank or card issuer has been unable to process it correctly. The bank returns the refunded amount to Stripe, and Stripe adds it back to your Stripe account balance. This process can take up to 30 days from requesting the refund.
If a customer is asking about a refund, it can be helpful to give them the primary reference number corresponding to the refund. For card refunds, it can be an Acquirer Reference Number (ARN), System Trace Audit Number (STAN), or Retrieval Reference Number (RRN). An ARN, STAN, or RRN is a reference number assigned to a card transaction as it moves through the payment flow. For local payment method refunds, it can be a reference number generated by Stripe or its financial partners which is propagated to the beneficiary banks or institutions. Your customer can then take this reference to their bank, which can provide more information about when the refund is available. Having a reference number can also increase your customerâs confidence that the refund has been initiated.
Refund references are available under the following conditions:
- Theyâre supported for some financial partners, and marked as unavailable otherwise.
- It takes up to 7 business days after initiating the refund to receive the ARN from downstream banking partners.
- An ARN isnât available in the case of a reversal, since the original charge isnât processed. For card networks that donât support ARNs, Stripe attempts to provide other references such as System Trace Audit Number (STAN) or Retrieval Reference Number (RRN).
To find the reference of a refund using the Dashboard:
- Open the payment details page of the payment associated with the refund.
- In the Timeline, click View Details on the refund entry.
- Where available, Stripe shows the ARN or STAN on the clipboard.
Cancel a payment
You can cancel a payment using the Dashboard when its status is uncaptured, or when itâs a debit payment that hasnât been posted to the bank yet. To cancel a payment with other statuses, you must use the API.
To cancel payments using the Dashboard:
- Find the payment you want to cancel in the Payments page.
- Click the payment, then select Cancel.
- Select a reason for canceling, then click Yes. If you select Other, you must add a note that explains the reason for canceling the payment.
You can cancel a payment from the Dashboard when:
- The payment status is
uncaptured. - The payment is a debit payment that hasnât been posted to the bank yet.
Refund events
Stripe triggers events every time a refund is created or changed. Some other actions, like reviews closing, also trigger events that are relevant to refunds.
Make sure that your integration is set up to handle events and that you verify webhook signatures to confirm that incoming events are from Stripe. You must also build internal logic for notifying customers or your team about the state of the refund process. At a minimum, Stripe recommends that you listen for the refund. event.
The following table describes the most common events related to refunds.
Cost optimization
If your business processes a large volume of refunds close to the time of transaction, Stripe recommends using manual authorization and capture to reduce your refund costs. Manual authorization and capture lets you better control costs by canceling payments before theyâre captured, or by reducing your captured amount rather than processing a refund.
