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

# Collect Bank Accounts

> Save and manage your users' bank accounts as reusable payment methods

Before a user can cash out, you [save their bank account](/api-reference/headless/payment-methods/create-payment-method) as a **payment method**. Saved payment methods are reusable across Crossmint products, so a user enters their details once.

## Save a bank account

The request body depends on the payment method `type`. See [The Payment Method Object](/api-reference/headless/payment-methods/payment-method-object) for the full list of types and fields.

<Note>The examples below use the staging URL, `https://vault.staging.crossmint.com`. In production, use `https://vault.crossmint.com`. See [Launch in Production](/offramp/guides/going-to-production) for all the differences between environments.</Note>

<Tabs>
  <Tab title="US">
    ```bash theme={null}
    curl -X POST 'https://vault.staging.crossmint.com/api/unstable/payment-methods' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{
        "type": "bank-account-us",
        "userLocator": "userId:<USER_ID>",
        "bankAccount": {
          "accountNumber": "6349881141",
          "routingNumber": "026009593",
          "accountType": "checking",
          "bankName": "Chase",
          "bankAddress": {
            "line1": "420 Montgomery St",
            "city": "San Francisco",
            "stateOrRegion": "CA",
            "postalCode": "94104",
            "country": "US"
          },
          "currency": "usd",
          "country": "US",
          "entityType": "individual",
          "billing": {
            "name": "Alice Smith",
            "phone": "+13055551234",
            "address": {
              "line1": "701 S Miami Ave",
              "city": "Miami",
              "stateOrRegion": "FL",
              "postalCode": "33156",
              "country": "US"
            }
          }
        }
      }'
    ```
  </Tab>

  <Tab title="Europe">
    ```bash theme={null}
    curl -X POST 'https://vault.staging.crossmint.com/api/unstable/payment-methods' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{
        "type": "bank-account-sepa-iban",
        "userLocator": "userId:<USER_ID>",
        "bankAccount": {
          "iban": "DE89370400440532013000",
          "bic": "COBADEFFXXX",
          "currency": "eur",
          "country": "DE",
          "entityType": "individual",
          "billing": {
            "name": "Hans Müller",
            "phone": "+4915112345678",
            "address": {
              "line1": "Unter den Linden 1",
              "city": "Berlin",
              "stateOrRegion": "BE",
              "postalCode": "10117",
              "country": "DE"
            }
          }
        }
      }'
    ```
  </Tab>

  <Tab title="Mexico">
    ```bash theme={null}
    curl -X POST 'https://vault.staging.crossmint.com/api/unstable/payment-methods' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{
        "type": "bank-account-mx-clabe",
        "userLocator": "userId:<USER_ID>",
        "bankAccount": {
          "accountNumber": "138180000123459719",
          "currency": "mxn",
          "country": "MX",
          "entityType": "individual",
          "billing": {
            "name": "Javier Toledo",
            "phone": "+525512345678",
            "address": {
              "line1": "Av. Reforma 1",
              "city": "Mexico City",
              "stateOrRegion": "CDMX",
              "postalCode": "06600",
              "country": "MX"
            }
          }
        }
      }'
    ```
  </Tab>

  <Tab title="Colombia">
    ```bash theme={null}
    curl -X POST 'https://vault.staging.crossmint.com/api/unstable/payment-methods' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{
        "type": "bank-account-co",
        "userLocator": "userId:<USER_ID>",
        "bankAccount": {
          "accountNumber": "123456787890",
          "bankCode": "001",
          "accountType": "savings",
          "documentType": "CC",
          "documentNumber": "1234567890",
          "currency": "cop",
          "country": "CO",
          "entityType": "individual",
          "billing": {
            "name": "Carlos Gómez",
            "phone": "+573001234567",
            "address": {
              "line1": "Carrera 7",
              "city": "Bogotá",
              "stateOrRegion": "DC",
              "postalCode": "110010",
              "country": "CO"
            }
          }
        }
      }'
    ```
  </Tab>
</Tabs>

The response returns the saved payment method, including its `paymentMethodId`, the resolved `bankName`, and a masked `accountSuffix` (banks use `accountSuffix`, not `last4`). Pass the `paymentMethodId` as the `recipient` when you [create an order](/offramp/quickstarts/rest-api). For a complete list of fields and supported bank account types, see [The Payment Method Object](/api-reference/headless/payment-methods/payment-method-object) in the API reference.

<Accordion title="Example response">
  ```json theme={null}
  {
    "paymentMethodId": "d5e5c48a-7dec-44b1-8cf4-4615bf00c8fc",
    "default": false,
    "displayName": "Chase ••1141",
    "createdAt": "2026-06-17T21:25:56.542Z",
    "updatedAt": "2026-06-17T21:25:56.542Z",
    "type": "bank-account-us",
    "bankAccount": {
      "billing": {
        "name": "Alice Smith",
        "phone": "+13055551234",
        "address": {
          "line1": "701 S Miami Ave",
          "city": "Miami",
          "stateOrRegion": "FL",
          "postalCode": "33156",
          "country": "US"
        }
      },
      "bankName": "Chase",
      "accountSuffix": "1141",
      "currency": "usd",
      "country": "US",
      "entityType": "individual",
      "bankAddress": {
        "line1": "420 Montgomery St",
        "city": "San Francisco",
        "stateOrRegion": "CA",
        "postalCode": "94104",
        "country": "US"
      },
      "routingNumber": "026009593",
      "accountType": "checking"
    }
  }
  ```
</Accordion>

<Note>Saving an account does not require the user to be verified yet, but creating an order does. Before you offramp with this account, verify the user and link the wallet they will pay from. See the [Quickstart](/offramp/quickstarts/rest-api).</Note>

### Field reference (US)

| Field                  | Description                                        |
| :--------------------- | :------------------------------------------------- |
| `accountNumber`        | The account number (tokenized at the vault).       |
| `routingNumber`        | Nine-digit ABA routing number.                     |
| `accountType`          | `checking` or `savings`.                           |
| `billing.name`         | Account holder name. Must match the verified user. |
| `currency` / `country` | `usd` / `US`.                                      |
| `entityType`           | Required. `individual` or `business`.              |

## List, update, and remove

Reads and non-sensitive updates go through the standard API. Use it to [list a user's payment methods](/api-reference/headless/payment-methods/list-payment-methods), [fetch one](/api-reference/headless/payment-methods/get-payment-method), [update billing details](/api-reference/headless/payment-methods/update-payment-method), or [remove an account](/api-reference/headless/payment-methods/delete-payment-method).

## Next steps

<CardGroup cols={2}>
  <Card title="Quickstart" icon="bolt" href="/offramp/quickstarts/rest-api">
    Use a saved account in an offramp
  </Card>

  <Card title="KYC & Compliance" icon="id-card" href="/offramp/concepts/kyc-and-compliance">
    Verification requirements
  </Card>
</CardGroup>
