Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
    Overview
    Accept in-person payments
    Integration design
    Select your reader
    Design an integration
    Quickstart
    Example applications
    Testing
    Terminal setup
    Set up your integration
    Connect to a reader
    Accepting a payment
    Collect card payments
    Additional payment methods
    Accept offline payments
    Mail order and telephone order payments
    Regional considerations
    During checkout
    Collect tips
    Collect and save payment details for future use
    Flexible authorizations
    After checkout
    Refund transactions
    Provide receipts
    Customize checkout
    Cart display
    Collect on-screen inputs
    Collect swiped data
    Collect tapped data for NFC instruments
    Apps on devices
    Manage readers
    Order, return, replace readers
    Register readers
    Manage locations and zones
    Configure readers
    Encryption
    References
    API references
    Mobile readers
    Smart readers
    SDK migration guide
    Deployment checklist
    Stripe Terminal reader product sheets
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsTerminal

Refund transactions

Cancel or refund Stripe Terminal payments.

Copy page

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.

Availability

Canceling payments is available on Visa, Mastercard, American Express, Discover, and girocard. For single-message payment methods like Interac and eftpos, PaymentIntents are automatically captured. In lieu of canceling 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

SDK Reference

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

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.

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 finalize it and notify your backend 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

API Reference

  • Cancel a PaymentIntent

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.

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

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.

Command Line
cURL
curl https://api.stripe.com/v1/refunds \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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
curl https://api.stripe.com/v1/refunds \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d payment_intent=pi_Aabcxyz01aDfoo \ -d amount=1000

See also

  • Cart display
  • Receipts
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc