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

# Bank Transfers

Use the Payouts API to send funds to recipient bank accounts. Set `paymentMethodId` to `"banktransfer"` and provide a `recipient` object with `type: "bank_account"`.

## Request Shape

Set `paymentMethodId` to `"banktransfer"` and provide `recipient` with the following structure:

| Field               | Required | Description                                                                                                               |
| ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |
| `type`              | **Yes**  | Must be `"bank_account"`                                                                                                  |
| `accountNumber`     | **Yes**  | The recipient's bank account number. Format may vary by country (see [format notes](#format-and-validation-notes) below). |
| `bankCode`          | **Yes**  | Bank identifier code (e.g., sort code, routing number).                                                                   |
| `accountHolderName` | **Yes**  | Name on the bank account.                                                                                                 |
| `country`           | **Yes**  | 3-letter ISO country code (e.g., NGA, EGY).                                                                               |
| `phoneNumber`       | **No**   | Phone number in international format (optional).                                                                          |

Top-level required fields for every payout:

* **Required:** `merchantId`, `merchantReference`, `destinationValue` (with `minorAmount` and `currency`), `paymentMethodId` (`"banktransfer"`), `paymentLocation`, `recipient`, `sender` (with `fullName`, `identity`, `identityNumber`)
* **Optional:** `attributes`

## Example Request

```json
{
  "merchantId": "your-merchant-id",
  "merchantReference": "PAYOUT-2024-001",
  "destinationValue": {
    "minorAmount": 1000000,
    "currency": "NGN"
  },
  "paymentMethodId": "banktransfer",
  "paymentLocation": "NGA",
  "recipient": {
    "type": "bank_account",
    "accountNumber": "0123456789",
    "bankCode": "044",
    "accountHolderName": "John Doe",
    "country": "NGA"
  },
  "sender": {
    "fullName": "Jane Smith",
    "identity": "passport",
    "identityNumber": "A12345678"
  },
  "attributes": {}
}
```

**Note:** `minorAmount: 1000000` = 10,000.00 NGN (NGN has 2 decimal places).

## Required vs Optional Summary

* **Required for `recipient` (bank_account):** `type` (`"bank_account"`), `accountNumber`, `bankCode`, `accountHolderName`, `country`
* **Optional for `recipient`:** `phoneNumber`
* **Required at request level:** `merchantId`, `merchantReference`, `destinationValue`, `paymentMethodId`, `paymentLocation`, `recipient`, `sender` (with `fullName`, `identity`, `identityNumber`)
* **Optional at request level:** `attributes`

The [API reference](/api-reference/payouts/payouts/payouts/initiate-payout) is the source of truth for the schema.

## Format and Validation Notes

The authoritative list of banks and their codes for a country comes from `GET /v1/payout/banks?country={ISO3}` — it returns `{banks: [{code, name}]}` straight from the processors, so it never drifts. Use it to populate bank pickers.

* **Nigeria (NGN):** Account numbers are typically 10 digits. `bankCode` is the bank identifier code — fetch the live list via `GET /v1/payout/banks?country=NGA`, or see [Nigeria Bank Codes](/payout-nigeria-bank-codes) for a reference list.
* **South Africa (ZAR):** Use the bank's 6-digit universal (any-branch) code (e.g. `632005` for Absa). See [South Africa](/payout-market-south-africa#bank-codes-south-africa) for the full list of valid `bankCode` values. Account numbers are 9–13 digits.
* **Egypt (EGP):** Account number format as required by the local rail; IBAN is supported and required for some banks (e.g. USD transfers). `bankCode` is required. Valid bank codes include `BDC`, `CIB`, `POST`; see [Egypt](/payout-market-egypt#bank-codes-egypt) for details. Egypt typically needs additional **sender** fields—see [Egypt](/payout-market-egypt) and the API reference.
* **Other currencies:** Use the account number and bank code formats accepted by the local clearing system. The `bankCode` field is required for all bank transfers.

**Amount Format:** Amounts are specified in **minor units** (integer), per the currency's ISO 4217 exponent — for example, `minorAmount: 1000000` = 10,000.00 NGN, while zero-decimal currencies like XOF and XAF need no conversion. See [Single Payouts](/payout-single#amount-format) for details.

## Where Bank Transfers Are Supported

Not every currency supports bank payouts. See [Supported Destinations](/payout-supported-destinations) for a table of currencies, countries, and supported rails (bank vs mobile wallet).

## Next Steps

* [Single Payouts](/payout-single) — Create one-off bank payouts
* [Bulk Payouts](/payout-bulk) — Send multiple payouts in one request
* [Supported Destinations](/payout-supported-destinations) — Currencies and rails by destination
* [Payout Trigger Endings](/payout-sandbox-testing) — Test scenarios using account-number endings