External Transfer
Moves balance from one of your customer wallets to a customer wallet of another builder, identified by customer ID. Both sides must share the same channel, currency, and environment.
If the source or destination customer has wallets at more than one provider for the given channel + currency, pass fromProviderName or toProviderName to disambiguate. Use GET /v2/wallet/resolve/customer/:customerId to look up available providers before calling this endpoint.
Cross provider: both builders' treasury holdings are rebooked immediately. The underlying float movement between providers is handled by the operator out-of-band.
crossProvider: true is returned so you know to rebalance.Body
fromCustomerId
*StringYour customer to debit.
channel
*StringWallet channel — WALLET, ACCOUNT, STABLECOIN, or CBDC.
currency
*String3-letter currency code e.g. NGN.
toCustomerId
*StringThe destination customer ID (any builder).
amount
*NumberAmount to move in major units.
fromProviderName
StringRequired only when the source customer has wallets at multiple providers for the given channel + currency.
toProviderName
StringRequired only when the destination customer has wallets at multiple providers for the same channel + currency.
narration
StringOptional description recorded on both sides.
requestReference
StringIdempotency key — re-submitting the same key returns 409 instead of moving money twice.
Response
reference
StringUnique transfer reference.
from
ObjectcustomerId, walletId, and provider of the source.
to
ObjectcustomerId, walletId, and provider of the destination.
channel
StringChannel used.
currency
StringCurrency moved.
amount
NumberAmount moved.
crossProvider
Booleantrue when source and destination sit at different providers.
status
StringAlways COMPLETED on 201.
environment
StringSANDBOX or LIVE.
// Click 'Try now' to see the response