Stripe now supports separately authorizing and capturing money on cards. It’s like two-phase commit for payments. This makes some new payment flows possible—most notably, capturing funds only when an order is ready for shipping.

To use it, you just set capture = false when you create the charge. Then, when you’re ready to actually accept the payment, you just call our new capture endpoint:

In addition to capturing the full amount, you can also capture less than the amount originally authorized by passing an amount parameter. An authorization left uncaptured for 7 days will be automatically reversed.

There are some caveats: occasionally, a bank will show an authorization as an actual charge. As such, using this in cases where the customer doesn’t expect to be charged can be confusing. It’s worth thinking carefully about your use-case. (We’re of course happy to help.)

We don’t charge any fees on uncaptured charges, and fees after you capture are the same as any other charge.