Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
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
Handle multiple currencies
Custom payment flows
Flexible acquiring
    Overview
    Capture a payment multiple times
    Capture more than the authorised amount on a payment
    Place an extended hold on an online card payment
    Increment an authorisation
    Partially authorise a payment
    Migrate from beta
Orchestration
In-person payments
Terminal
Beyond payments
Incorporate your company
Crypto
Financial Connections
Climate
HomePaymentsFlexible acquiring

Capture more than the authorised amount on a payment

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

Overcapture allows you to capture with an amount that’s higher than the authorised amount for a card payment. Unlike incremental authorisations, overcapture doesn’t result in additional authorisations 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 authorisation 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 authorised 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; lorry 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 authorise 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 authorised 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 categorise a transaction as MIT.

    You need to familiarise 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 you 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 authorisation.

    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 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. 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 authorised.

    // 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 authorised 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 authorisation to increase the authorised 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 authorised 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 expiry 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 programme.
    • Check out our changelog.
    • Questions? Contact Sales.
    • LLM? Read llms.txt.
    • Powered by Markdoc