Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
No-code
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
Online payments
Products and prices
Invoicing
Subscriptions
Quotes
In-person payments
    Overview
    What is Terminal
    Design an integration
    Example applications
    Quickstart
    Accept an in-person payment
    Set up your reader
    Set up your integration
    Connect to a reader
    Collect payments
    Regional considerations
    Supported card brands
    Terminal payments features
    Multiparty payments with Connect
    Collect tips
    Save cards for future use
    Refund transactions
    Provide receipts
    Cart display
    Incremental authorizations
    Extended authorizations
    Operate offline
    Deploy at scale
    Order hardware
    Manage locations
    Configure readers
    References
    API references
    Bluetooth readers
    Smart readers
    SDK migration guide
    Testing
    Deployment checklist
    Stripe Terminal reader product sheets
Multiparty payments
After the payment
Add payment methods
Payment Links
Stripe Checkout
Stripe Elements
About the APIs
Regulation support
Implementation guides
Testing
Terminal
·
HomePaymentsIn-person payments

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 authorized but not captured. You can cancel payments that are authorized 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 backend after a day’s activity to prevent unintended authorizations and uncollected funds.

Interac is a single-message network; interac_present PaymentIntents are automatically captured. In lieu of canceling PaymentIntents, your application should allow initiating an in-person refund at the end of the checkout flow.

Cancel payments Client-sideServer-side

SDK reference

  • cancelPaymentIntent (iOS)
  • cancelPaymentIntent (Android)
  • cancelPaymentIntent (React Native)

You can cancel a card_present PaymentIntent at any time before it has been captured. Canceling a PaymentIntent releases all uncaptured funds, and a canceled PaymentIntent can no longer be used to perform charges.

This can be useful if, 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 processing the payment, before finalizing the payment and notifying your backend to capture.

Client-side

Cancel a PaymentIntent from your client using the iOS, Android, or React Native SDK:

Client-side PaymentIntent cancellation is possible with the iOS, Android, or React Native SDKs. If you’re using server-driven integration, cancel the PaymentIntent server-side.

Server-side

API Reference

  • Cancel a PaymentIntent

The JavaScript SDK and server-driven integration require you to cancel the PaymentIntent on your server. For iOS, Android, or React Native, you can cancel the PaymentIntent on your server if the information required to start a payment isn’t readily available in your app.

Command Line
curl -X POST https://api.stripe.com/v1/payment_intents/pi_ANipwO3zNfjeWODtRPIg/cancel \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:

Perform refunds Client-sideServer-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 supports 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.

Command Line
curl https://api.stripe.com/v1/refunds \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d payment_intent=pi_Aabcxyz01aDfoo

To refund part of a PaymentIntent, provide an amount parameter, as an integer in cents (or the charge currency’s smallest currency unit):

Command Line
curl https://api.stripe.com/v1/refunds \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d payment_intent=pi_Aabcxyz01aDfoo \ -d amount=1000

See also

  • Cart display
  • Receipts
Was this page helpful?
Questions? Contact us.
Watch our developer tutorials.
Check out our product changelog.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Cancel payments
Perform refunds
See also
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login 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.
$