> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.fluveo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.fluveo.com/_mcp/server.

# Authorize now, capture later

By default Fluveo captures funds automatically the moment a PaymentIntent is
confirmed (`capture_method=automatic`). When you need to charge *after* a delay —
shipping physical goods, finalizing a hotel folio, accepting a marketplace order —
set `capture_method=manual` to **authorize** the card now and **capture** it
later, within the authorization window.

This is a scenario guide. For the per-field contract see the
[API Reference](/api-reference); for first-run setup see the
[Quickstart](/quickstart).

## Which capture method?

| `capture_method`      | Funds move                | Reach for it when                    |
| --------------------- | ------------------------- | ------------------------------------ |
| `automatic` (default) | immediately on confirm    | digital goods, instant fulfilment    |
| `manual`              | when you call **capture** | you fulfil or verify before charging |

## 1. Authorize (create + confirm, manual)

Create the PaymentIntent with `capture_method=manual` and confirm it with a
payment method. It lands in `requires_capture` — the funds are held, not taken.

**`curl`**

```bash title="curl"
curl https://api.devfluveo.com/v1/payment_intents \
  -u sk_test_123: \
  -d amount=4242 \
  -d currency=usd \
  -d capture_method=manual \
  -d confirm=true \
  -d payment_method=pm_card_visa
```

In test mode, `payment_method` also takes Stripe's documented test PaymentMethods,
such as `pm_card_visa`; Fluveo resolves each to its test card. On a Brazilian account the
result follows the acquirer's test rules instead (see
[Testing](/guides/testing#brazilian-brl-accounts)). A live request naming
one answers `resource_missing`. Inline card details (`payment_method_data[card]`) are hidden from public `/v1` (see
[Payments](/resources/payments#hidden-from-the-public-api)).

In production the card is collected in the browser via VGS Collect and you pass a
vault alias, never a raw PAN — see the [card vault](/overview#external-card-vault-vgs-outbound-proxy).

## 2. Capture (full or partial)

When you're ready to take the money, capture up to the authorized amount. Omit
`amount_to_capture` for a full capture; a **partial** capture automatically
refunds the held remainder.

**`curl`**

```bash title="curl"
curl https://api.devfluveo.com/v1/payment_intents/pi_1A9e8AzB2xQRH9JfQu5N/capture \
  -u sk_test_123: \
  -d amount_to_capture=4242
```

## 3. Release without charging

To let an authorization go (the customer cancelled, the item is out of stock),
cancel the intent — the hold is released and nothing is captured.

**`curl`**

```bash title="curl"
curl -X POST https://api.devfluveo.com/v1/payment_intents/pi_1A9e8AzB2xQRH9JfQu5N/cancel \
  -u sk_test_123:
```

## Next

* [Handle payment authentication](/guides/handling-authentication) — when a card needs 3DS.
* [API Reference](/api-reference) — every PaymentIntent field, status, and error.
* [Go-live checklist](/guides/go-live-checklist) — before you switch to live keys.