- Rate locking (60 seconds validity)
- Two flow modes: External wallet or Integrated wallet
- Automatic refunds on fiat transfer failure
- Multi-network crypto support (EVM, TRON, Lightning, Stellar)
1. Transaction Initiation & Rate Locking
2. Crypto Receipt
External Wallet Flow
User sends crypto from their own wallet.Integrated Wallet Flow
Platform wallet holds crypto, instant processing.3. Fiat Disbursement
Mobile Money Disbursement
Available Countries: All supported countries Networks: M-PESA, Airtel Money, MTN Mobile Money, Orange MoneyBank Transfer Disbursement
Available Countries: All supported countries Processing Time: Instant to 24 hours4. Automatic Refund (On Fiat Failure)
5. Webhook Notification
Transaction Statuses
| Status | Description |
|---|---|
PENDING | Awaiting crypto payment |
CRYPTO_RECEIVED | Crypto confirmed, preparing fiat transfer |
PROCESSING | Fiat disbursement in progress |
SUCCESS | Fiat delivered successfully |
FAILED | Transaction failed |
REFUND_PENDING | Refund queued (fiat failed, returning crypto) |
REFUNDED | Crypto returned to sender |
REFUND_FAILED | Refund attempts exhausted, manual intervention needed |
TIMEOUT | Crypto not received within timeout period |
Crypto Networks Supported
EVM Chains
- Networks: Ethereum, Polygon, Arbitrum, Base, Optimism, Celo
- Tokens: USDT, USDC, DAI
- Confirmations: 3 blocks required
TRON
- Tokens: USDT (TRC20)
- Confirmations: Verified via TronGrid
Lightning Network
- Use Case: Fast Bitcoin offramps
- Payment: Lightning invoice
Stellar
- Tokens: USDC, other Stellar assets
- Confirmations: Near-instant
Key Features
Rate Locking
- Exchange rate locked at transaction creation
- Valid for 60 seconds
- Must request new rate if expired
Automatic Refunds
- Triggered 5 minutes after fiat transfer failure
- Up to 3 retry attempts
- Returns crypto to original sender address
- Track via
/offramp/refund-status/:referenceId
Flexible Wallet Options
- External Wallet: User controls private keys
- Integrated Wallet: Platform-managed for instant processing
Error Handling
Rate Expired
Insufficient Crypto Amount
Fiat Transfer Failed (Auto-Refund)
Best Practices
- Pre-Check Rates: Use
/rates/offramp-ratebefore creating transaction - Validate Addresses: Ensure sender address format matches network
- Handle Callbacks: Implement webhook endpoint with HMAC verification
- Monitor Refunds: Check refund status via
/offramp/refund-status/:referenceId - Bank Transfers: Verify bank account details before submission
Testing
Use sandbox mode with test credentials provided in sandbox documentation. Test Scenarios:- Crypto amounts ending in
.00trigger success - Crypto amounts ending in
.99trigger fiat failure + refund - Crypto amounts ending in
.88trigger timeout