> ## Documentation Index
> Fetch the complete documentation index at: https://docs.natural.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> When building application code, use `@naturalpay/sdk` for TypeScript or `naturalpay` for Python.
> When searching Natural documentation, use the docs MCP at `https://docs.natural.com/mcp`.
> Use the Natural CLI for terminal and CI automation.
> Start integration development and testing in the sandbox. Do not use production unless the user explicitly requests it.
> For sandbox requests that require `customerPartyId`, list customers first. Reuse only the intended fixture; otherwise create a customer.
> REST and SDK amounts use integer minor units. Payments MCP amounts use decimal strings with a required currency code.

# Overview

> Save a payer's card under a mandate, with no charge now

> [!NOTE]
>
> Setup intents are part of Accept, which is in early access and subject to change. To request
> Accept access, contact [hi@natural.com](mailto:hi@natural.com).

A setup intent is a link where a payer saves a card and agrees to let you charge it later. Nothing is charged when they save it. When the payer finishes, the setup intent carries a [mandate](https://docs.natural.com/guides/concepts/mandates.md) (`mdt_*`) that you charge or [hold](https://docs.natural.com/guides/concepts/payment-intents.md#holds) under while the payer is away.

## Create a setup intent

[Create a setup intent](https://docs.natural.com/api-reference/setup-intents/create-setup-intent.md) with the mandate's terms in `terms`:

* `description`: what you charge for, shown to the payer. For example, "Damage deposit for your stay".
* `amountType` and `amount`: `fixed` charges exactly `amount`; `variable` charges up to `amount`, in cents.
* `usage`: `singleUse` allows one paid charge. `multiUse` allows any number of charges, each within `amount`, until `validUntil`. A `singleUse` mandate refuses a new hold or charge while one is open.
* `validUntil`: when the mandate ends.

`expiresAt` on the setup intent itself is when the link closes. It defaults to `validUntil` and can't be later.

Send the payer to `setupUrl`, or pass `clientSecret` to natural.js to show the form on your page. The payer verifies their phone, types a card and accepts the terms. Natural verifies the card with a zero-amount check. The setup intent doesn't return the terms. Once it completes, [get the mandate](https://docs.natural.com/api-reference/mandates/get-mandate.md) to read them.

## Statuses

* `open`: waiting for the payer, and again after a card fails.
* `processing`: Natural is verifying the card.
* `completed`: the card is saved and the mandate is active. `relationships.mandate` links the mandate.
* `declined`: five cards failed on the link. It saves no more.
* `canceled`: you canceled it.
* `expired`: `expiresAt` passed while it was open.

[Cancel a setup intent](https://docs.natural.com/api-reference/setup-intents/cancel-setup-intent.md) only while it's open. Canceling never ends a mandate it already created; [revoke the mandate](https://docs.natural.com/api-reference/mandates/revoke-mandate.md) for that.

## Events

`mandate.created` fires when the payer saves a card.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.