---
id: docs.preauthorize-and-capture
title: "Hold now, charge later"
canonical: https://docs.secureprocessing.app/preauthorize-and-capture
last_verified: 2026-11-06
---

# Hold now, charge later

For when the final amount is not known until the service is delivered.

## Place the hold

A hold reserves the money on the card without taking it. Ask for the most you might charge — you can capture less, and the rest is released.

```ts
const intent = await sp.paymentIntents.create({
  amount: 20000,               // the most you might charge
  currency: "usd",
  capture_method: "manual",
});
```

Once the customer has paid, the payment reaches `requires_capture` and `amount_capturable` tells you what is held.

## Take the money

```ts
await sp.paymentIntents.capture(intent.id, {
  amount_to_capture: 17500,    // capture less; the rest is released
});
```

## Or let it go

```ts
await sp.paymentIntents.cancel(intent.id);
```

> **Warning:** A hold does not last forever. How long it lasts is the card issuer’s decision, not ours, and we cannot tell you in advance — after that the money is released whether or not you captured it. Capture as soon as you know the amount, and do not treat a hold as a long-term reservation.

## Which events to expect

`payment_intent.amount_capturable_updated` when the hold is placed, then `payment_intent.succeeded` when you capture. Cancelling a hold sends no event: the response to the cancel is the record, with `status: "canceled"`.
