Transfer flow
Complete guide to executing transfers across traditional banking, mobile money, and cryptocurrency networks. This overview covers the universal steps required for all transfer types, with specific handling for crypto transactions that require blockchain signing.
Overview
All transfers follow the same foundational steps regardless of transfer type. The process branches only when cryptocurrency networks are involved, requiring additional transaction signing steps for blockchain security.
Universal Steps (All Transfers):
- Discover available channels - Get supported rails and currencies
- Create payment recipients - Set up destination account details for outbound transfers
- Generate pricing quotes - Get real-time fees and exchange rates
- Create transfers - Initialize the payment with quote and recipient
- Complete transfer - Follow payment instructions or sign crypto transactions
Transfer Types:
- Fiat → Fiat: Traditional banking and mobile money transfers
- Crypto → Fiat: Cryptocurrency off-ramp to bank accounts
- Fiat → Crypto: Bank account funding to cryptocurrency wallets
Step-by-Step Flow
1. Get Available Channels
Discover which payment rails and currencies are available for your transfers.
GET /channels
Purpose: Understand supported combinations of rails (ACH, SEPA, Ethereum, etc.) and currencies (USD, EUR, USDC, etc.) with their current fees and processing speeds.
See: Payment Channels Documentation
2. Create Recipients (Outbound Transfers Only)
Set up payment destinations with the required account details for your chosen rails.
POST /recipients
Purpose: Create reusable payment destinations with properly formatted account details (bank accounts, crypto addresses, mobile money accounts). Only required for outbound transfers where you're sending money to external accounts.
3. Generate Quote
Get real-time pricing for your specific transfer amount and rail combination.
POST /transfers/quote
Purpose: Calculate exact fees, exchange rates, and amounts. Quotes are valid for 2 minutes and required for transfer creation.
See: Quotes Documentation
4. Create Transfer
Initialize the transfer using your quote token and recipient details.
POST /transfers
Request:
{
"quote": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"sender": "wallet_1234567890abcdef",
"recipient": "recipient_1234567890abcdef",
"memo": "Invoice #12345"
}
Purpose: Create the transfer record with TransferStatusAwaitingFunds
status. Transfer expires in 5 minutes.
5. Transfer Completion (Branches by Type)
The final step depends on whether your transfer involves cryptocurrency networks:
For Fiat-to-Fiat Transfers
Follow deposit instructions provided in the transfer response to fund your transfer through banking or mobile money networks.
For Crypto Transfers
Create transfer intent to generate blockchain transaction data for signing:
POST /transfers/{transfer_id}/intent
Then sign and submit the blockchain transaction using your wallet infrastructure.
Transfer Flow Diagram

Payout flow (crypto-fiat)

Payin flow (crypto - fiat)
Transfer Types Explained
Fiat-to-Fiat Transfers
Examples: USD ACH → EUR SEPA, mobile money transfers, domestic bank transfers
Completion: Follow the deposit instructions provided in the transfer response. This typically involves:
- Bank wire transfers with provided routing details
- Mobile money deposits to specified accounts
- ACH transfers using provided account information
Crypto-to-Fiat Transfers
Examples: USDC → USD bank account, ETH → EUR SEPA transfer
Completion: Create a transfer intent to generate blockchain transaction data, then:
- Sign the transaction with your crypto wallet
- Submit the signed transaction to the blockchain network
- Monitor transaction confirmation
Fiat-to-Crypto Transfers
Examples: USD bank → USDC wallet, EUR → ETH address
Completion: Similar to crypto-to-fiat, requiring transfer intent creation and blockchain transaction signing for the destination crypto network.
Important Timing Considerations
Component | Validity Period | Purpose |
---|---|---|
Quotes | 2 minutes | Ensure rate accuracy for volatile markets |
Transfers | 5 minutes | Allow reasonable time for funding completion |
Transfer Intents | Varies | Blockchain-specific expiration times |
Best Practices:
- Generate quotes immediately before transfer creation
- Complete crypto transaction signing promptly after intent creation
- Monitor transfer status for successful completion confirmation
Updated 4 days ago