Refunding and canceling payments
You can refund charges made to your account, either in whole or in part. Refunds use your available Stripe balance—this 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.
If Stripe can’t debit the remaining amount from your bank account, your refunds may go into a pending status until you add funds to your Stripe balance. You can view a list of all your pending refunds in the Dashboard.
If the original charge underwent currency conversion, the refunded amount converts back using the same process. There are no fees to refund a charge, but the fees from the original charge aren’t returned.
We submit 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. Refunds can’t be canceled after they’re issued. Disputes and chargebacks aren’t possible on credit card charges that are fully refunded.
We’ll also send an email to your customer notifying them of the refund, if all of these conditions apply:
- The original charge was created on a
Customer
object in your Stripe account - The
Customer
object has a stored email address - You have Email customers for refunds enabled
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.
You can also find frequently asked questions (FAQs) for Refunds with Stripe in the Refunds FAQ.
Issuing refunds
Refunds can be issued using the API or the Dashboard and are processed immediately. When issued, refunds can’t be canceled.
You can issue more than one refund against a charge, but you can’t refund a total greater than the original charge amount.
Using the API
To refund a payment using the API, create a Refund and provide the ID of the charge or PaymentIntent to be refunded.
When you use a PaymentIntent to collect payment from a customer, Stripe creates a charge behind the scenes. To refund the customer’s payment after the PaymentIntent has succeeded, create a refund using the PaymentIntent, which is equivalent to refunding the underlying charge. You can also optionally refund part of their payment by specifying an amount. You can perform refunds with the API or through the Dashboard.
Note that this does not apply if you’re using separate authorization and capture, and you wish to refund a PaymentIntent that has a status of requires_capture
. In this case, the charge attached to the PaymentIntent is still uncaptured and can’t be refunded directly. You need to cancel the PaymentIntent instead.
To refund part of a PaymentIntent, provide an amount
parameter, as an integer in cents (or the charge currency’s smallest currency unit):
Canceling a PaymentIntent
You can cancel a PaymentIntent if you no longer intend to use it to collect payment from the customer. Canceling a PaymentIntent is optional, and it’s okay to keep a PaymentIntent in an incomplete status like requires_confirmation
or requires_payment_method
. Incomplete PaymentIntents are useful in understanding the conversion rate at checkout.
A PaymentIntent can only be canceled when it has one of the following statuses: requires_payment_method
, requires_capture
, requires_confirmation
, or requires_action
—a PaymentIntent can’t be canceled while it’s actively processing or after it has succeeded.
When a PaymentIntent is canceled, you can no longer use it to perform additional charges. Any operations that your application attempts to perform on a canceled PaymentIntent will fail with an error.
Using the Dashboard
To refund a payment using the Dashboard:
- Find the payment to be refunded in the payments overview page.
- Click the ••• icon to the right of the charge. From the resulting menu, select Refund payment.
- By default, you’ll issue a full refund. For a partial refund, enter a different amount to be refunded.
- Select a reason for the refund. If you select Other, you must provide an explanatory note that is attached to the refund.
- Click Refund.
Alternatively, you can go to the Dashboard page for the specific payment, and click Refund there. (Again, you’ll be given the choice of a full or partial refund and prompted to pick a reason.)
The Dashboard supports bulk refunding of full payments. Select the payments to refund by checking the box to the left of each payment—even over multiple pages of results. Then click Refund to be prompted for the reason. Note that you can only issue full refunds in this manner; partial refunds must be issued individually.
Refund destinations
Refunds can only be sent back to the original payment method used in a charge. It’s not possible to send a refund to a different destination (for example, 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 may fail.
Always attempt to refund card payments through Stripe and not using another method (for example, cash or check). If a payment is found to be fraudulent and a dispute is received, you can lose both the disputed amount and the amount you refunded separately.
For additional payment methods (ACH, iDEAL, and so on), refund handling can vary from bank to bank. If a customer has closed their method of payment, the bank may return the refund to us—at which point it’s marked as failed.
Handling failed refunds
A refund can fail if the customer’s bank or card issuer has been unable to process it correctly (for example, a closed bank account or a problem with the card). 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.
The Refund object’s status transitions to failed
and includes these attributes:
failure_reason
, the reason why the refund failedfailure_balance_transaction
, the ID of the balance transaction representing the amount returned to your Stripe balance
In the rare instance that a refund fails, we notify you using the charge.refund.updated
webhook event. You will then need to arrange an alternative way of providing your customer with a refund.
Tracing 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 may contact you if they don’t see the refund. A refund may 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 is not 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) corresponding to the refund. An ARN is a unique number assigned to a card transaction as it moves through the payment flow. Your customer can then take the ARN to their bank, which will be able to 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 only supported for Visa and Mastercard transactions.
- 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.
Where available, Stripe shows the ARN corresponding to a refund in the Dashboard on the payment detail page of the refunded payment.