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

# Register Bank Accounts for Fiat Transfers

> Link a customer's fiat bank account to SpherePay to enable on-ramp and off-ramp transfers via ACH, Wire, SEPA, or PIX payment rails.

A bank account in SpherePay is a registration of your customer's existing fiat bank account. SpherePay does not open or manage bank accounts — it links an account your customer already holds to their SpherePay profile so it can be used as the source or destination for fiat transfers. You must register at least one bank account before creating any transfer that involves fiat currency.

<Note>
  SpherePay registers an existing bank account — it does not open a new account on your customer's behalf. The account must already exist at the customer's bank before registration.
</Note>

## Register a bank account

`POST https://api.spherepay.co/v2/bank-account`

For the full request and response schema, see the [Create Bank Account API reference](/api-reference/bank-account/post).

## Supported rails and currencies

| Currency | Supported Rails |
| -------- | --------------- |
| USD      | ACH, Wire       |
| EUR      | SEPA            |
| BRL      | PIX             |

## Required fields by currency

The fields required to register a bank account depend on the currency. Use the tabs below to see the required fields and a request example for each.

<Tabs>
  <Tab title="USD">
    Both ACH and Wire use the same account details. Include both in `networks` to register for both rails with a single request.

    | Field                            | Required                                          |
    | -------------------------------- | ------------------------------------------------- |
    | `customerId`                     | Yes                                               |
    | `bankName`                       | Yes                                               |
    | `accountName`                    | Yes                                               |
    | `accountOwner.accountHolderName` | Yes                                               |
    | `accountOwner.address`           | Yes                                               |
    | `currency`                       | Yes — `"usd"`                                     |
    | `accountDetails.accountNumber`   | Yes                                               |
    | `accountDetails.routingNumber`   | Yes                                               |
    | `accountDetails.accountType`     | Yes — `"checking"` or `"savings"`                 |
    | `networks`                       | Yes — `["ach"]`, `["wire"]`, or `["ach", "wire"]` |

    ```json theme={"dark"}
    {
      "customerId": "customer_1234567890",
      "bankName": "Chase",
      "accountName": "Jane Doe Checking",
      "accountOwner": {
        "accountHolderName": "Jane Doe",
        "address": {
          "line1": "233 South Wacker Drive",
          "city": "Chicago",
          "state": "IL",
          "postalCode": "60606",
          "country": "USA"
        }
      },
      "currency": "usd",
      "accountDetails": {
        "accountNumber": "1234567890",
        "routingNumber": "123456789",
        "accountType": "checking"
      },
      "networks": ["ach", "wire"]
    }
    ```
  </Tab>

  <Tab title="EUR">
    EUR accounts use IBAN and BIC for SEPA transfers.

    | Field                            | Required         |
    | -------------------------------- | ---------------- |
    | `customerId`                     | Yes              |
    | `bankName`                       | Yes              |
    | `accountName`                    | Yes              |
    | `accountOwner.accountHolderName` | Yes              |
    | `accountOwner.address`           | Yes              |
    | `currency`                       | Yes — `"eur"`    |
    | `accountDetails.iban`            | Yes              |
    | `accountDetails.bic`             | Yes              |
    | `networks`                       | Yes — `["sepa"]` |

    ```json theme={"dark"}
    {
      "customerId": "customer_1234567890",
      "bankName": "Deutsche Bank",
      "accountName": "Jane Doe SEPA",
      "accountOwner": {
        "accountHolderName": "Jane Doe",
        "address": {
          "line1": "10 Rue de Rivoli",
          "city": "Paris",
          "postalCode": "75001",
          "country": "FRA"
        }
      },
      "currency": "eur",
      "accountDetails": {
        "iban": "DE89370400440532013000",
        "bic": "COBADEFFXXX"
      },
      "networks": ["sepa"]
    }
    ```
  </Tab>

  <Tab title="BRL">
    BRL accounts use PIX, Brazil's instant payment network. Instead of an account number and routing number, you provide a PIX key and key type.

    | Field                            | Required                                                     |
    | -------------------------------- | ------------------------------------------------------------ |
    | `customerId`                     | Yes                                                          |
    | `bankName`                       | Yes                                                          |
    | `accountName`                    | Yes                                                          |
    | `accountOwner.accountHolderName` | Yes                                                          |
    | `accountOwner.address`           | Yes — `postalCode` is required                               |
    | `currency`                       | Yes — `"brl"`                                                |
    | `accountDetails.pixKey`          | Yes                                                          |
    | `accountDetails.pixKeyType`      | Yes — `"cpf"`, `"cnpj"`, `"email"`, `"phone"`, or `"random"` |
    | `networks`                       | Yes — `["pix"]`                                              |

    ```json theme={"dark"}
    {
      "customerId": "customer_1234567890",
      "bankName": "Itaú",
      "accountName": "Alice Santos PIX",
      "accountOwner": {
        "accountHolderName": "Alice Santos",
        "address": {
          "line1": "Rua Augusta 100",
          "city": "Sao Paulo",
          "state": "SP",
          "postalCode": "01304-001",
          "country": "BRA"
        }
      },
      "currency": "brl",
      "accountDetails": {
        "pixKey": "alice@example.com",
        "pixKeyType": "email"
      },
      "networks": ["pix"]
    }
    ```

    <Note>
      BRL transfers require a separate verification profile (`kyc_profile_b` for individuals, `kyb_profile_b` for businesses). Contact your SpherePay representative to enable BRL/PIX access. See [BRL/PIX transfer constraints](/concepts/transfers/overview#brlpix-transfer-constraints) for the full list of rules.
    </Note>
  </Tab>
</Tabs>

## Using the returned ID

The `id` returned in the response is your persistent reference to this bank account. Store it against the customer record and pass it as the `source.id` or `destination.id` when creating transfers.

```json theme={"dark"}
{
  "id": "bank_account_abc123",
  "customerId": "customer_1234567890",
  "currency": "usd",
  "networks": ["ach", "wire"],
  ...
}
```
