Overview
A transfer moves money from a source account to a destination account, optionally converting between currencies. Transfers support:- Fiat to crypto — Deposit fiat, receive stablecoins
- Crypto to fiat — Deposit stablecoins, receive fiat via SWIFT, SEPA, ACH, etc.
- Crypto to crypto — Move between chains or stablecoins. Same-asset USDC/USDT across supported chains settles at par — see Same-asset bridging
- Fiat to fiat — Cross-border fiat payments
Creating a Transfer
Every transfer requires a source, destination, amount, and payment reason:Key Fields
Response
Transfer Status
If funds have already been received and the transfer needs manual review before it can be settled or returned, the transfer remains
IN_REVIEW externally until it reaches COMPLETED or REVERSED.
Transfer Legs
Transfers are broken into legs (steps) that represent each segment of the payment flow. For example, a crypto-to-fiat transfer might have:- Crypto deposit leg — Customer deposits stablecoins
- Conversion leg — Stablecoins converted to fiat
- Fiat payout leg — Fiat sent to bank account
PENDING, IN_PROGRESS, COMPLETED, FAILED, SKIPPED) and is visible in the transfer response under the legs array.
Deposit Instructions
When a transfer requires the customer to deposit funds (e.g. crypto or fiat), the response includesdepositInstructions.
One-off POST /v1/transfers onramps often reuse the same bank coordinates for a customer. There is no unique memo or transaction reference on those fiat instructions, so concurrent deposits cannot be told apart by bank details — matching is by amount. Parallel onramps at the same amount will collide.
For concurrent or recurring USD→crypto, create a unique virtual bank account per destination with POST /v1/fixed-routes/virtual-bank-accounts and sweepTargetAccountId set to that wallet. Each route gets its own account number, so the deposit identifies itself. Listen for transfer.* webhooks on the auto-created sweep — no per-deposit create-transfer needed. The same pattern applies to crypto offramps via POST /v1/fixed-routes/virtual-wallets (unique deposit address per destination).
Crypto Deposit
Fiat Deposit
Amounts
All amounts in the API use theMoneyOutput format:
valueis the amount in the smallest unit (cents, base units)exponentis the number of decimal placesdisplayValueis the human-readable decimal
MoneyInput:
Tracking Transfers
Webhooks
Subscribe to transfer events for real-time updates:transfer.created— Transfer createdtransfer.processing— Transfer is being processedtransfer.completed— Transfer completed successfullytransfer.failed— Transfer failed before funds were receivedtransfer.cancelled— Transfer was cancelledtransfer.refund_initiated— Refund was initiatedtransfer.refund_completed— Refund completed
Next Steps
Quotes and Transfers
Learn about quoting and rate locking
SWIFT Payouts
Crypto-to-fiat via SWIFT wire transfers
Same-asset bridging
USDC or USDT from one chain to another at par