> ## 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 operating Natural directly for a user, use the payments MCP at `https://mcp.natural.com`.
> When searching Natural documentation, use the docs MCP at `https://docs.natural.com/mcp`.
> Use the Natural CLI for terminal and CI automation.
> Use REST only for unsupported languages or when the user explicitly requests raw HTTP.
> 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.

# Use the Vault

> A reserve wallet agents can fund but never spend from

Keep reserves in the Vault, a wallet (`wal_*`) with `walletType` `vault` that any agent can fund but none can spend from. For wallet basics, read the [Wallets overview](/guides/concepts/wallets).

<Snippet file="shared/prerequisites.mdx" />

<Snippet file="shared/mcp-callout.mdx" />

## What the Vault is

Every wallet has a `walletType` of `standard` or `vault`. A standard wallet is the everyday, spendable one. The Vault is the locked-down reserve.

List your wallets with [`GET /wallets`](/api-reference/wallets/list-wallets) to see the field. The Vault sits alongside your standard wallets, set apart only by its `walletType`.

<CodeGroup>
  ```python Python theme={null}
  from naturalpay import Natural

  client = Natural()
  wallets = client.wallets.list()
  for wallet in wallets.data:
      print(wallet.id, wallet.attributes.display_name, wallet.attributes.wallet_type)
  ```

  ```typescript TypeScript theme={null}
  import Natural from "@naturalpay/sdk";

  const client = new Natural();
  const wallets = await client.wallets.list();
  for (const wallet of wallets.data) {
    console.log(wallet.id, wallet.attributes.displayName, wallet.attributes.walletType);
  }
  ```

  ```bash CLI theme={null}
  natural wallets list
  ```

  ```text MCP theme={null}
  List my Natural wallets and show each one's type and balance.
  ```

  ```bash cURL theme={null}
  curl https://api.natural.com/wallets \
    -H "Authorization: Bearer $NATURAL_API_KEY"
  ```
</CodeGroup>

The response carries each wallet with its `walletType`:

<Snippet file="api-examples/wallets.list.response.mdx" />

## How the Vault differs

The Vault behaves differently from a standard wallet in three ways.

**1. You cannot create one through the API.** The Vault is provisioned once after onboarding.

**2. Agents cannot be attached to the Vault or move money out of it.** Attaching an agent to the Vault returns `vault_not_allowed`. Agents can still fund the Vault by transferring in from a standard wallet.

**3. It cannot be your default wallet.** Keep a standard wallet as your default so calls that omit `walletId` resolve somewhere spendable.


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