Place a hold on a payment method
Separate payment authorization and capture to create a charge now, but capture funds later.
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 authorize a payment in full before a guest arrives, then capture the money when the guest checks out.
Authorizing 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 authorization expires.
You need to capture the funds before the authorization expires. If the authorization expires before you capture the funds, the funds are released and the payment status changes to canceled
. Learn more about statuses for asynchronous payments.
Note
As of April 14, 2024, Visa has shortened the authorization window for online Merchant-Initiated Transactions from 7 days to 5 days, and they have lengthened the authorization window for in-person (Terminal) transactions from 2 days to 5 days.
Authorization validity windows for card-not-present transactions
Card brand | Merchant-Initiated Transaction authorization validity window | Customer-Initiated Transaction authorization validity window |
---|---|---|
Visa | 5 days* | 7 days |
Mastercard | 7 days | 7 days |
American Express | 7 days | 7 days |
Discover | 7 days | 7 days |
* The exact authorization window is 4 days and 18 hours, to allow time for clearing processes.
Authorization validity windows for card-present transactions (Terminal)
Card brand | Authorization validity window |
---|---|
Visa | 5 days* |
Mastercard | 2 days |
American Express | 2 days |
Discover | 2 days |
* The exact authorization window is 4 days and 18 hours, to allow time for clearing processes.
Before implementing, understand the following limitations for authorizing and capturing separately.
Limitations
Use the Dashboard to authorize and capture
You can authorize a payment and capture funds separately without writing code.
- In the Dashboard, create a new payment. Select One-time.
- 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 authorize only
To indicate that you want separate authorization and capture, specify capture_method as manual
when creating the PaymentIntent. This parameter instructs Stripe to authorize the amount but not capture it on the customer’s payment method.
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 Giropay (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_
on the payment_
object. For example, by configuring payment_
, you’re placing only card payments on hold. You can manage payment methods from the Dashboard. Stripe handles the return of eligible payment methods based on factors such as the transaction’s amount, currency, and payment flow.
Alternatively, you can list card
and giropay
using payment method types like in the example below.
Before continuing to capture, attach a payment method with card details to the PaymentIntent, and authorize the card by confirming the PaymentIntent. You can do this by setting the payment_
and confirm
fields on the PaymentIntent.
Extended Authorizations
Usually, an authorization 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 authorized, the PaymentIntent status transitions to requires_
. To capture the authorized funds, make a PaymentIntent capture request. This captures the total authorized 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 authorized 10.99 USD payment:
While some card payments are eligible for multicapture, you can only perform one capture on an authorized 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 authorizations 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_
event. You can inspect the PaymentIntent’s amount_capturable property to see the total amount that you can capture from the PaymentIntent.