Refund transactions
Cancel or refund Stripe Terminal payments.
Stripe Terminal supports both automatic and manual capture.
When the SDK returns a confirmed PaymentIntent to your app, the payment is authorised but not captured. You can cancel payments that are authorised and not captured. If the PaymentIntent has already been captured, you must refund the underlying charge created by the PaymentIntent, using the refunds API or Dashboard.
We recommend reconciling payments on your back end after a day’s activity to prevent unintended authorisations and uncollected funds.
Availability
Cancelling payments is available on Visa, Mastercard, American Express, Discover, and girocard. For single-message payment methods such as Interac and eftpos, PaymentIntents are automatically captured. Instead of cancelling PaymentIntents, make sure your application can allow initiating a refund at the end of the checkout flow.
Online refunds are available on all card networks except for Interac.
In-person refunds are only available on Interac.
Cancel payments Client-sideServer-side
You can cancel a card_
PaymentIntent at any time before it has been captured. Cancelling a PaymentIntent releases all uncaptured funds, and a cancelled PaymentIntent can no longer be used to perform charges.
Use this when, for example, your customer decides to use a different payment method or pay with cash after the payment has been processed. In your application’s UI, consider allowing the user to cancel after they confirm the payment, and before you finalise it and notify your back end to capture.
Client-side
Cancel a PaymentIntent
from your client using the iOS, Android, or React Native SDK:
Note
Client-side PaymentIntent
cancellation is possible with the iOS, Android, and React Native SDKs. If you’re using a server-driven integration, cancel the PaymentIntent
server-side.
Server-side
The JavaScript SDK and server-driven integration require you to cancel the PaymentIntent
on your server. For the other client SDKs, you can cancel the PaymentIntent
on your server if the information required to start a payment isn’t readily available in your app.
Perform refunds Server-side
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 by passing in the PaymentIntent ID or the charge ID. You can also optionally refund part of a payment by specifying an amount.
You can perform refunds with the API or through the Dashboard. For Interac transactions in Canada, the BBPOS WisePOS E reader and Stripe Reader S700 support in-person refunds instead.
Online refunds don’t require a cardholder to present their card again at the point of sale. The following example shows how to create a full refund by passing in the PaymentIntent ID.
To refund part of a PaymentIntent, provide an amount
parameter, as an integer in cents (or the charge currency’s smallest currency unit):