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

# Transfers

> How transfers move money out of an account, which payment type to use, and how a transfer progresses from new to successful or failed.

A transfer debits an entity's account and sends the funds to a counterparty's payment details. Every transfer is asynchronous: the create response shows the initial state, and the final outcome arrives by webhook.

## Choose a payment type

The payment type decides the rail.

| Payment type | Use it to |
| - | - |
| `bank-transfer` | Pay a bank account over a local or international rail such as FPS, SEPA, ACH, wire or SWIFT. |
| `momo-transfer` | Pay a mobile money wallet in Kenya, Ghana or Tanzania. |
| `stablecoin-transfer` | Send USDC or USDT to an external wallet address. |
| `book-transfer` | Move funds to another Nuvion account. |

See [Send a payout](https://docs.nuvion.co/guides/send-a-payout.md) for the fields each rail needs.

## Lifecycle

| Status | Meaning |
| - | - |
| `new` | Recorded, before processing starts. |
| `pending` | Queued or waiting on an external step, such as the provider. |
| `successful` | Completed. |
| `failed` | Could not be completed. `status_reason` gives the cause. |

Subscribe to `outflows.created`, `outflows.completed`, `outflows.failed` and `outflows.cancelled` instead of polling. Treat the webhook as a prompt, then [retrieve the transfer](https://docs.nuvion.co/api-reference/transfers.md#get-a-transfer) and read its `status` before you act. See [Confirm state before acting](https://docs.nuvion.co/webhooks/overview.md#confirm-state-before-acting).

## Rules that affect your integration

* **Idempotency.** `unique_reference` identifies a transfer for your entity. A second request with the same reference returns `409 error_duplicate_resource` and does not return the original transfer.
* **Funds are checked at creation.** If the account can't cover the amount and fee, the request fails with `400 error_transfer_insufficient_funds` and the message states the available balance.
* **Currency conversion needs a quote.** When the source account currency differs from the transfer `currency`, pass an `fx_quote_id`. Each quote is single use. See [FX quotes](https://docs.nuvion.co/core-concepts/fx-quotes.md).
* **Payment details must be complete.** A USD transfer to a bank account needs the full `bank_address` on the payment detail: `line1`, `city`, `state`, `postal_code` and `country`. Otherwise the transfer returns `422 error_validation_required_field_missing` for the missing field.

## Next steps

* [Send a payout](https://docs.nuvion.co/guides/send-a-payout.md)
* [Cross-currency payouts](https://docs.nuvion.co/guides/cross-currency-payouts.md)
* [Transfers API reference](https://docs.nuvion.co/api-reference/transfers.md)


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