Skip to content
Sign in
An image of the Stripe logo
/
Create account
Sign in
Home
Payments
Finance automation
Banking as a service
Developer tools
No-code
All products
Home
Payments
Finance automation
Home
Payments
Finance automation
Banking as a service
Developer tools
Overview
Get started
About Stripe payments
Start an integration
Payment Links
Checkout
Web Elements
Mobile Elements
Payment scenarios
During the payment
After the payment
    Overview
    Payouts
    Declines
    Refund and cancel payments
    Handle webhook events
Add payment methods
More payment scenarios
Faster checkout with Link
Other Stripe products
Connect
Terminal
Radar
Financial Connections
Crypto
Identity
Climate
Resources
About the APIs
Implementation guides
Regulation support
Testing
HomePaymentsAfter the payment

Refund and cancel payments

Learn how to cancel or refund a payment.

You can partially or fully refund any successful payment. (You can also cancel a payment when it’s in the appropriate state.) Refunds use your available Stripe balance, which doesn’t include any pending balance. If your available balance doesn’t cover the amount of the refund, Stripe debits the remaining amount from your bank account. To view a list of all your refunds, go to the Refunded payments page in the Dashboard.

It’s possible for a refund to be held in a pending state due to a negative balance on your account. In this situation, top up your account balance or enable auto-debits to process the refund. Read more about pending refunds on Stripe Support.

Depending on the payment method used, you might incur fees to refund a charge (for example, a full or partial refund of a bank transfer). Check our pricing page for more information. Additionally, Stripe doesn’t return processing fees from the original transaction if it’s refunded.

Refund requests

We submit 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. Disputes and chargebacks aren’t possible on credit card charges that are fully refunded.

If all of the following conditions apply, we send 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.

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.

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:

  1. Find the payment you want to refund in the Payments page.
  2. Click the overflow menu () to the right of the payment, then select Refund payment.
  3. By default, you’ll issue a full refund. For a partial refund, enter a different refund amount.
  4. Select a reason for the refund. If you select Other, you must add a note that explains the reason for the refund. Click Refund.

Alternatively, you can click on a specific payment and issue a refund from its details page.

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.

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 us—at which point it’s marked as failed.

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 us and we add 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_balance_transaction: The ID of the balance transaction representing the amount returned to your Stripe balance.
  • failure_reason: The reason why the refund failed. These reasons include:
    Failure reasonDescription
    charge_for_pending_refund_disputedA customer disputed the charge while the refund is pending. In this case, we recommend accepting or challenging the dispute instead of refunding to avoid duplicate reimbursements to the customer.
    declinedRefund declined by our financial partners.
    expired_or_canceled_cardPayment method is canceled by a customer or expired by the partner.
    insufficient_fundsRefund is pending due to insufficient funds and has crossed the pending refund expiry window.
    lost_or_stolen_cardRefund has failed due to loss or theft of the original card.
    merchant_requestRefund failed upon the business’s request.
    unknownRefund has failed due to an unknown reason.

In the rare instance that a refund fails, we notify you using the charge.refund.updated webhook event. You’ll then need to arrange an alternative way of providing your customer with a refund.

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 transit to a canceled status. As cancellations are a type of refund failure, the attributes failure_reason and failure_balance_transaction are included on the Refund.

To cancel a refund using the Dashboard:

  1. Find the payment associated with the refund in the Payments page.
  2. Click the overflow menu () to the right of the payment, then select Cancel refund.
  3. If there are multiple partial refunds, select the correct refund in the dropdown.
  4. Confirm the refund cancellation by selecting Yes, cancel refund.

Alternatively, you can click a specific payment and cancel the refund from its details page.

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 us and we add 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 Acquirer Reference Number (ARN) or System Trace Audit Number (STAN) corresponding to the refund. An ARN or STAN is a reference number assigned to a card transaction as it moves through the payment flow. Your customer can then take this reference to their bank, which can provide more information about when the refund will be available. Having a reference number can also increase your customer’s confidence that the refund has been initiated.

ARNs are available under the following conditions:

  • They’re supported for most card networks, and marked as unavailable otherwise.
  • It takes 1-3 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. Use the System Trace Audit Number (STAN) in this case.

Where available, Stripe shows the ARN or STAN in the Dashboard on the payment detail page of the refunded payment.

Cancel a payment

You can cancel a payment using the Dashboard only when it’s status is uncaptured. To cancel a payment with other statuses, you must use the API.

To cancel uncaptured payments using the Dashboard:

  1. Find the payment you want to cancel in the Payments page.
  2. Click the overflow menu () to the right of the payment, then select Cancel payment.
  3. Select a reason for canceling, and click Yes. If you select Other, you must add a note that explains the reason for canceling the payment.

Refund webhook 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 webhook events. You should 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 charge.refunded event.

The following table describes the most common events related to refunds.

charge.dispute.funds_reinstatedSent when funds are reinstated to your account after a dispute is closed, including partially refunded payments.
charge.refund.updatedSent when a charge is updated, on selected payment methods.
charge.refundedSent when a charge is refunded, including partial refunds.
refund.createdSent when a refund from a customer’s cash balance is created. Stripe only sends this in rare cases. For most use cases, listen for charge.refunded to know when a refund is complete.
refund.updatedSent for refunds without a corresponding charge, like a cash balance refund.
review.closedSent when a review is closed. See the reason field to understand why it was closed, one of: approved, disputed, refunded, or refunded_as_fraud.
source.refund_attributes_required DeprecatedSent when the refund attributes are required on a receiver source to process a refund or a mispayment.

See also

  • Add funds to your Stripe balance
  • Add funds to your platform balance
  • Currency conversion
Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Refund requests
Issue refunds
Refund destinations
Handle failed refunds
Cancel a refund
Trace a refund
Cancel a payment
Refund webhook events
See also
Related Guides
Bank transfer refunds
Currency conversion of disputes and refunds
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g., )
The Stripe Shell is best experienced on desktop.
$