Supported corridors
Transaction Limits
Most currency and scheme combinations do not enforce fixed transaction limits. However, the schemes listed below enforce the following limits:Step 1: Create a counterparty
A counterparty represents the recipient — their identity (name, address, email) lives here, separate from their banking details. UsePOST /counterparties.
id — you’ll use it as counterparty_id throughout the remaining steps.
Counterparties also support
type: "business". See the Counterparties guide for the full schema.Step 2: Add payment details
Attach the counterparty’s banking or wallet routing information usingPOST /payment-details. The scheme is inferred automatically from currency and country for most rails — set scheme explicitly only when a currency supports multiple options (e.g. USD supports both ach and wire).
Base fields
string
required
The transfer method. One of
bank-transfer, momo-transfer, stablecoin-transfer, or book-transfer.string
required
ISO 4217 currency code. e.g.
GBP, USD, EUR, KES.string
required
Full legal name of the recipient account holder.
string
required
The ID of the entity on whose behalf the payout is being sent.
string
required
The ID of the recipient counterparty
string
ISO 3166-1 alpha-2 destination country code. Required for all bank transfer rails. e.g.
US, GB, DE.object
Bank address Optional.
string
The payment scheme. Required only when a currency supports multiple schemes. For USD, specify
ach or wire. One of: fps, sepa, ach, wire, becs, eft, nip, rtc, fast, hk_fps, uae_local, ke_eft, ug_eft, gh_eft, tz_eft, br_ted, mx_spei, cn_local, cemac, swift, mpesa, mtn, airtel, telkom, vodafone, vodacom, halotel, tigo, nuvion_direct.object
Optional key-value metadata.
Rail-specific fields
For mobile money,
country is not required — Nuvion infers the destination from currency and schemeSchemes available per currency:TZS: halotel, airtel, tigo, vodacomKES: mpesa, airtel, telkomGHS: mtn, vodafone, airtelUGX: mpesa, airtelRequest examples
Response
id — pass it as payment_detail_id when initiating the transfer.
Step 3: Initiate the transfer
For cross currency payments, obtain an FX quote before intitiating the transfer. See Cross Currency Payouts for full details.
POST /transfers for bank and SWIFT rails, mobile money, and for stablecoin sends. Use specific payment type to specify the type of payment.
string
required
The ID of the source account to debit.
string
required
The
id returned by POST /payment-details.number
required
Amount in the smallest currency unit.
10000 = $100.00 USD or £100.00 GBP.string
required
ISO 4217 currency code. e.g.
GBP, USD, EUR, KES.
This is the from_currency for cross-currency transfers. See Cross Currency Payouts for cross-currency transfers.string
required
Transfer description. Passed to the recipient’s bank statement where supported.
string
required
The payment type of the transfer. It can be bank-transfer, momo-transfer, stablecoin-transfer, and book-transfer.
string
required
Idempotency key. Resubmitting the same reference returns the original transfer rather than creating a duplicate.
object
Optional key-value metadata.
Transfer statuses
All amounts are in the smallest currency unit.
10000 = $100.00 USD, £100.00 GBP, or ₦10,000 NGN.Webhooks
Listen fortransfers.updated to track status changes in real time. Nuvion fires this event each time a transfer moves to a new status.
What’s next
Counterparties
Full counterparty management — create, update, list, and deactivate.
Accept a payment
Receive funds into an account via bank transfer.
Transfers API reference
Full endpoint documentation for transfers.
