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
OverviewExplore all products
Start building
Start developing
Sample projects
About the APIs
    API tour
    Payment Intents API
    Setup Intents API
    Payment Methods
    Products and prices
    Older APIs
      Charges
        Migrate to the new APIs
        Accept a card payment
        Save a card
        Place a hold on a card
        Charges with Connect
      Sources
    Release phases
Build with LLMs
Use Stripe without code
Set up Stripe
Create an account
Web Dashboard
Mobile Dashboard
Migrate to Stripe
Manage fraud risk
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
HomeGet startedAbout the APIsOlder APIsCharges

Placing a hold on a cardCharges API

Copy page

Legacy API

The content of this section refers to a Legacy feature. Use the Payment Intents API instead.

The Charges API doesn’t support the following features, many of which are required for credit card compliance:

  • Merchants in India
  • Bank requests for card authentication
  • Strong Customer Authentication

Use the Charges API to authorize a payment now, capture funds later.

Stripe supports two-step card payments so you can first authorise a charge, then wait to settle (capture) it later. When a charge is authorised, the card issuer guarantees the funds and holds the amount on the customer’s card for, usually, up to 7 days, or 2 days for in-person payments using Terminal. The payment_method_details.card.capture_before attribute on the charge indicates the time when the authorisation expires.

If the charge isn’t captured within this time, the authorization is canceled and funds released.

Authorize a payment

To authorize a payment without capturing it, make a charge request that also includes the capture parameter with a value of false. This instructs Stripe to only authorize the amount on the customer’s card.

Caution

Only some payment methods support separate authorisation and capture. For example, card payments, Afterpay, and Klarna support separating these steps. With payment methods that don’t support this functionality, like ACH or iDEAL, you can’t capture manually. Refer to the full list of payment methods that support manual capture.

If you need to cancel an authorisation, you can release it by refunding the relevant Charge object.

Command Line
curl
curl https://api.stripe.com/v1/charges \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "capture"="false"

Capture the funds

To settle an authorised charge, make a capture charge request. The total authorised amount is captured by default, and you can’t capture more than this. To capture less than the initial amount (for example, 8 USD of a 10 USD authorisation), pass the amount parameter. Partially capturing a charge automatically releases the remaining amount.

Command Line
cURL
curl -X POST https://api.stripe.com/v1/charges/{{CHARGE_ID}}/capture \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"

Card statements from some issuers do not distinguish between authorisations and captured (settled) charges, which can sometimes lead to confusion for your customers. In addition, authorised charges can only be captured once. If you partially capture a charge, you can’t 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 charges as needed.

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