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
    Overview
    Payments for existing customers
    Authorise and capture a payment separately
    Build a two-step confirmation experience
    Collect payment details before creating an Intent
    Finalise payments on the server
    Take mail orders and telephone orders (MOTO)
    US and Canadian cards
    Forward card details to third-party API endpoints
    Payments line items
Flexible acquiring
Orchestration
In-person payments
Terminal
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsCustom payment flows

Place a hold on a payment method

Separate payment authorisation and capture to create a charge now, but capture funds later.

Copy page

When you create a payment, you can place a hold on an eligible payment method to reserve funds that you can capture later. For example, hotels often authorise a payment in full before a guest arrives, then capture the money when the guest checks out. This is sometimes referred to as manual capture.

Example code

See the sample app on GitHub.

Authorising a payment guarantees the amount by holding it on the customer’s payment method. If you’re using the API, the payment_method_details.card.capture_before attribute on the charge indicates when the authorisation expires.

You need to capture the funds before the authorisation expires. If the authorisation expires before you capture the funds, the funds are released and the payment status changes to canceled. Learn more about statuses for asynchronous payments.

Authorisation validity windows

The following tables outline validity windows for authorising different transaction types.

Card-not-present transactions

Card brandMerchant-Initiated Transaction authorisation validity windowCustomer-Initiated Transaction authorisation validity window
Visa5 days*7 days
Mastercard7 days7 days
American Express7 days7 days
Discover7 days7 days

  • The exact authorisation window is 4 days and 18 hours, to allow time for clearing processes.
  • Card-present transactions (in-person payments)

    Card brandAuthorisation validity window
    Visa5 days*
    Mastercard2 days
    American Express2 days
    Discover2 days

  • The exact authorisation window is 4 days and 18 hours, to allow time for clearing processes.
  • 30-day authorisation windows in Japan

    If your account is based in Japan, you can hold JPY-denominated transactions from Visa, Mastercard, JCB, Diners Club, and Discover for up to 30 days. Non-JPY and American Express transactions expire after the standard 7-day window.

    Note

    As of 14 April 2024, Visa shortened the authorisation window for online Merchant-Initiated Transactions from 7 days to 5 days. Visa also lengthened the authorisation window for in-person (Terminal) transactions from 2 days to 5 days.

    Payment method limitations

    Before implementing, understand the following limitations for authorising and capturing separately.

    • Only some payment methods support separate authorisation and capture. Some payment methods that support this include cards, Affirm, Afterpay, Cash App Pay, Klarna, and PayPal. Some payment methods that don’t support this include ACH and iDEAL. Read more about payment method feature support.

    • Beyond what is outlined in the tables above, other payment methods have different rules and authorisation windows:

      • Card payments: The amount is typically on hold for 7 days for online payments and 2 days for in-person Terminal payments (depending on the type of transaction and the card network). You can request an extended authorisation for certain online and Terminal payment authorisations that are eligible for extended validity periods. Card networks may also restrict 1 USD authorisations you don’t intend to capture.
      • Affirm: If Affirm requires a downpayment for very large order amounts, it charges the amount during authorisation and refund if the payment isn’t captured. You then have 30 days to capture the payment balance.
      • Afterpay / Clearpay: During authorisation, the customer pays the first repayment instalment. Afterpay refunds the payment if it’s never captured. You then have 13 days to capture the payment balance.
      • Cash App Pay: Valid authorisations must be captured within 7 days to complete a payment.
      • Klarna: You must capture the charge by midnight of the 28th calendar day after the charge request, otherwise the authorisation expires. For example, you’d need to capture a charge request at UTC 2020-10-01 14:00 by UTC 2020-10-29 00:00.
      • PayPal: Holds the amount for 10 days. Stripe automatically attempts to extend the hold for another 10 days, totalling 20 days. Your settlement preference might affect the authorisation period. See separate authorisation and capture for more information.

    Use the Dashboard to authorise and capture

    You can authorise a payment and capture funds separately without writing code.

    1. In the Dashboard, create a new payment. Select One-time.
    2. When you enter or select the payment method, select More options then Capture funds later.

    The payment appears in your payments page as Uncaptured.

    To capture the funds, go to the payment details page and click Capture.

    Tell Stripe to authorise only

    To indicate that you want separate authorisation and capture, specify capture_method as manual when creating the PaymentIntent. This parameter instructs Stripe to authorise the amount but not capture it on the customer’s payment method.

    Command Line
    cURL
    curl https://api.stripe.com/v1/payment_intents \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d capture_method=manual

    With the above approach, you tell Stripe that you can only use “capture after” for a PaymentIntent with eligible payment methods. For example, you can’t accept card payments and SEPA Direct Debit (which doesn’t support capture after) for a single PaymentIntent. To accept payment methods that might not all support capture after, you can configure capture-after-per-payment-method by configuring capture_method=manual on the payment_method_options[<payment_method_type>] object.

    For example, by configuring payment_method_options[card][capture_method]=manual, you’re placing only card payments on hold. You can manage payment methods from the Dashboard. Stripe handles the logic for dynamically displaying the most relevant eligible payment methods to each customer based on factors such as the transaction’s amount, currency, and payment flow.

    Command Line
    cURL
    curl https://api.stripe.com/v1/payment_intents \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d amount=1099 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d "payment_method_options[card][capture_method]"=manual

    Alternatively, you can list card and sepa_debit using payment method types like in the example below.

    Command Line
    cURL
    curl https://api.stripe.com/v1/payment_intents \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d amount=1099 \ -d currency=eur \ -d "payment_method_types[]"=card \ -d "payment_method_types[]"=sepa_debit \ -d "payment_method_options[card][capture_method]"=manual

    Before continuing to capture, attach a payment method with card details to the PaymentIntent, and authorise the card by confirming the PaymentIntent. You can do this by setting the payment_method and confirm fields on the PaymentIntent.

    Extended authorisations

    Usually, an authorisation for an online card payment is valid for 7 days. To increase the validity period, you can place an extended hold on an online card payment.

    Capture the funds

    After the payment method is authorised, the PaymentIntent status transitions to requires_capture. To capture the authorised funds, make a PaymentIntent capture request. This captures the total authorised amount by default. To capture less or (for certain online card payments) more than the initial amount, pass the amount_to_capture option. A partial capture automatically releases the remaining amount. If attempting to capture more than the initial amount for an online card payment, refer to the overcapture documentation.

    The following example demonstrates how to capture 7.50 USD of the authorised 10.99 USD payment:

    Command Line
    cURL
    curl https://api.stripe.com/v1/payment_intents/pi_123/capture \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d amount_to_capture=750

    Although some card payments are eligible for multicapture, you can only perform one capture on an authorised payment for most payments. If you partially capture a payment, you can’t perform another capture for the difference. (Instead, consider saving the customer’s payment method details for later and creating future payments as needed.)

    Card statements from some issuers and interfaces from payment methods don’t always distinguish between authorisations and captured (settled) payments, which can sometimes confuse customers.

    Additionally, when a customer completes the payment process on a PaymentIntent with manual capture, it triggers the payment_intent.amount_capturable_updated event. You can inspect the PaymentIntent’s amount_capturable property to see the total amount that you can capture from the PaymentIntent.

    Cancel the authorisation

    If you need to cancel an authorisation, you can cancel the PaymentIntent.

    See also

    • Separate authorisation and capture with Checkout
    • Place an extended hold on an online card payment
    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