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
    Overview
    Capture a payment multiple times
    Capture more than the authorized amount on a payment
    Place an extended hold on an online card payment
    Increment an authorization
    Partially authorize a payment
    Migrate from beta
Orchestration
In-person payments
Terminal
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsFlexible acquiring

Capture more than the authorized amount on a payment

Use overcapture to capture more than the authorized amount for a PaymentIntent.

Copy page

Overcapture allows you to capture with an amount that’s higher than the authorized amount for a card payment. Unlike incremental authorizations, overcapture doesn’t result in additional authorizations with the card networks. When you overcapture a PaymentIntent, your customer won’t see any immediate updates on their credit card statement. After the captured amount settles, the initial pending authorization gets updated with the final captured amount.

Availability

When using overcapture, be aware of the following restrictions:

  • Only available with Visa, Mastercard, American Express, or Discover.
  • Only eligible for online card payments. For in-person card payments see how to collect tips.
  • Card brands limit the amount that you can overcapture (generally calculated as a percentage of the authorized amount), and impose additional constraints, including country, card type, and merchant category restrictions (see below).
  • mode is set to payment and capture_method is set to manual on the CheckoutSession

IC+ feature

We offer overcapture to users on IC+ pricing. If you’re on standard Stripe pricing and want access to this feature, learn more at support.stripe.com.

Availability by card network, merchant country, and merchant category

Card brandMerchant countryMerchant categoryPercent limit
Visa*GlobalTaxicabs and limousines; eating places and restaurants; drinking places (alcoholic beverages); fast food restaurants; beauty and barber shops; health and beauty spas+20%
GlobalCar rentalsGreater of +15% or +75 USD (or local currency equivalent)
GlobalLodging; cruise lines+15%
Global**All other merchant categories+15%
MastercardUS***Eating places and restaurants; fast food restaurants+30%
American ExpressGlobal****Eating places and restaurants; drinking places (alcoholic beverages); fast food restaurants+30%
GlobalTaxicabs and limousines; beauty and barber shops; health and beauty spas+20%
GlobalLodging; car rentals; truck and utility trailer rentals; motor home and recreational vehicle rentals; grocery stores; retail stores+15%
DiscoverGlobalTaxicabs and limousines; eating places and restaurants; drinking places (alcoholic beverages); fast food restaurants; beauty and barber shops; health and beauty spas+20%
GlobalLodging; car rentals+15%

* Excludes merchants in the European Economic Area (EEA)

** For cardholder-initiated transactions

*** Card must also be issued in the United States

**** The percent limit for debit and prepaid card payments is 20%

Networks with limited support (beta)

Overcapture with Strong Customer Authentication (SCA)

If you and the cardholder are in a country that has Strong Customer Authentication (SCA) requirements, keep in mind the limitations of overcapture availability.

  • Under SCA requirements, you generally need to authenticate an amount that’s greater than or equal to the amount that you eventually capture. For this reason, you need to authenticate and authorize for the highest estimated amount that you plan to capture, rather than using overcapture as outlined elsewhere on this page. Subsequently, you can capture up to the full amount authenticated, depending on the total amount for the goods or services provided. If you find it necessary to capture an amount beyond the originally authorized and authenticated amount, you must cancel the original payment and create a new one with the correct amount. However, there are some exceptions to this requirement (see below).
  • There are a number of transaction exemptions for SCA where overcapture might be permissible. For example, merchant-initiated transactions (MIT) where the customer isn’t physically present during the checkout flow are potentially exempt. See when to categorize a transaction as MIT.

You need to familiarize yourself with the complete documentation to gain a comprehensive understanding of overcapture and SCA requirements. See our SCA guide for more information.

You can use the custom_text field when creating a new CheckoutSession to display additional text on the checkout page to help meet compliance requirements.

Compliance

You’re responsible for your compliance with all applicable laws, regulations, and network rules when using overcapture. Make sure to review the rules for the card networks that you plan to use this feature with to make sure your sales comply with the applicable rules, which vary by network. For example, some card networks don’t allow overcapture for transactions where the final transaction amount should be known at the time of authorization.

The information provided on this page relating to your compliance with these requirements is for your general guidance, and isn’t legal, tax, accounting, or other professional advice. Consult with a professional if you’re unsure about your obligations.

Create a Checkout Session

Add a checkout button to your website that calls a server-side endpoint to create a Checkout Session.

checkout.html
<html> <head> <title>Buy cool new product</title> </head> <body> <!-- Use action="/create-checkout-session.php" if your server is PHP based. --> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>

A Checkout Session is the programmatic representation of what your customer sees when they’re redirected to the payment form. You can configure it with options such as:

  • Line items to charge
  • Currencies to use

You must populate success_url with the URL of a page on your website that Checkout returns your customer to after they complete the payment. You can optionally also provide a cancel_url of a page on your website that Checkout returns your customer to if they terminate the payment process before completion.

Note

Checkout Sessions expire 24 hours after creation by default.

After creating a Checkout Session, redirect your customer to the URL returned in the response.

To enable the overcapture feature, set request_overcapture to if_available.

Ruby
# This example sets up an endpoint using the Sinatra framework. # Watch this video to get started: https://youtu.be/8aA9Enb8NVc. require 'json' require 'sinatra' require 'stripe' # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt', }, unit_amount: 2000, }, quantity: 1, }], payment_method_options: { card: { request_overcapture: 'if_available', }, }, mode: 'payment', # These placeholder URLs will be replaced in a following step. success_url: 'https://example.com/success', cancel_url: 'https://example.com/cancel', }) redirect session.url, 303 end

After the customer completes checkout, look at the overcapture.status field on the latest_charge in the PaymentIntent to determine if overcapture is available for the payment based on availability. If available, the maximum_amount_capturable field indicates the maximum amount capturable for the PaymentIntent. If unavailable, the maximum_amount_capturable is the amount authorized.

// PaymentIntent response { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, "amount_received": 0, "status": "requires_capture", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000 "overcapture": { "status": "available", // or "unavailable" "maximum_amount_capturable": 1200 } } } ... } ... }

Capture the PaymentIntent

To capture more than the currently authorized amount on a PaymentIntent, use the capture endpoint and provide an amount_to_capture up to the maximum_amount_capturable.

If you need to capture an amount larger than the maximum_amount_capturable, perform an incremental authorization to increase the authorized amount, where available.

Command Line
cURL
curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount_to_capture=1200 \ -d "expand[]"=latest_charge

The amount_capturable and amount_received fields update accordingly in the PaymentIntent capture response for a successful overcapture. The captured PaymentIntent that returns has an updated amount to reflect the total monetary amount moved for this payment. Use the amount_authorized field on the associated Charge to reference the initial amount authorized for a successfully overcaptured payment.

// PaymentIntent response { "id": "pi_xxx", "object": "payment_intent", "amount": 1200, "amount_capturable": 0, "amount_received": 1200, "status": "succeeded", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000, "overcapture": { "maximum_amount_capturable": 1200, "status": "available" // or "unavailable" } } } ... } ... }

Test your integration

Use the Stripe test cards below with any CVC and future expiration date to request and perform overcaptures while testing. If overcapture is available on payments for a given network while testing, it’s also available on live payments.

Card brandNumberPayment method
Visapm_card_visa
Mastercardpm_card_mastercard
Amexpm_card_amex
Discoverpm_card_discover
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