Place a hold on a cardPayment Intents API
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.
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:
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.