Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
Security
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
How cards work
Sample integration
Accept a payment
More payment scenarios
Set up future payments
Save a card during payment
Place a hold on a card
Finalize payments server-side
3D Secure authentication
Card brand choice
Supported card brands
U.S. and Canadian cards
Testing
payments
·
HomePaymentsOnline paymentsMore payment scenarios

Place a hold on a card
Payment Intents API

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

See how it works

Check out an example, or see the code on GitHub.

Place a hold on a card to reserve funds now but only capture them after your business completes the service. For example, a hotel may authorize a payment in full prior to a guest’s arrival, then move the money when the guest checks out.

When a payment is authorized, the bank guarantees the amount and holds it on the customer’s card for up to seven days.

If the payment is not captured in this time, the authorization is canceled and the funds are released. When this happens, the PaymentIntent status transitions to canceled.

For in-person payments made with Terminal, the PaymentIntent must be captured within 24 hours.

Tell Stripe to authorize only

To indicate that you want separate authorization and capture, set the value of capture_method option to manual when creating the PaymentIntent. This parameter instructs Stripe to only authorize the amount on the customer’s card.

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

Capture the funds

After the card is authorized, the PaymentIntent status will transition to requires_capture. To capture the authorized funds, make a PaymentIntent capture request. The total authorized amount is captured by default—you can’t capture more than this. To capture less than the initial amount, pass the amount_to_capture option. Partially capturing automatically releases the remaining amount.

The following example demonstrates how to capture $7.50 of the authorized $10.99 payment:

Terminal
curl https://api.stripe.com/v1/payment_intents/pi_ANipwO3zNfjeWODtRPIg/capture \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d amount_to_capture=750

Authorized payments can only be captured once. If you partially capture a payment, you cannot perform another capture for the difference. Depending on your requirements, you may be better served by saving customer’s card details for later and creating future payments as needed.

Card statements from some issuers do not 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_intent.amount_capturable_updated event. You can inspect the PaymentIntent’s amount_capturable property to see the total amount that can be captured from the PaymentIntent.

OptionalCancel the authorization

Only card payments support separate authorization and capture. Other payment methods (e.g., ACH or iDEAL) cannot be first authorized and then captured.

Was this page helpful?
Questions? Contact us.
Developer tutorials on YouTube.
You can unsubscribe at any time. Read our privacy policy.
On this page
Tell Stripe to authorize only
Capture the funds
Cancel the authorization