Documentation Index Fetch the complete documentation index at: https://docs.fyatu.com/llms.txt
Use this file to discover all available pages before exploring further.
Build seamless fiat-to-crypto and crypto-to-fiat flows for your exchange. FYATU provides the payment rails to connect African users to the crypto economy.
The Challenge
Crypto exchanges operating in Africa face significant hurdles:
Banking restrictions - Traditional banks often refuse to work with crypto businesses
Limited fiat rails - Few payment providers support crypto-related transactions
Slow settlements - Bank transfers can delay trading by days
High fees - International payment options are expensive
Regulatory complexity - Varying regulations across countries
The FYATU Solution
Fiat On-Ramp Accept fiat deposits from 1M+ Fyatu users paying from their Fyatu wallets
Fiat Off-Ramp Send fiat payouts instantly to users’ Fyatu wallet balances
P2P Escrow Power peer-to-peer trading with secure escrow
Instant Settlement Real-time payment confirmations for faster trading
Recommended Integration
On-Ramp Flow (Buy Crypto)
User initiates crypto purchase
↓
Calculate fiat amount + fees
↓
Create FYATU collection request
↓
User pays from their Fyatu wallet
↓
Webhook confirms payment instantly
↓
Execute crypto purchase/transfer
↓
Credit crypto to user's wallet
Off-Ramp Flow (Sell Crypto)
User initiates crypto sale
↓
Lock/debit crypto from wallet
↓
Calculate fiat payout amount
↓
Call FYATU Payouts API
↓
Fiat sent instantly to user's Fyatu wallet
↓
Webhook confirms delivery
↓
Complete transaction
Implementation Example
Fiat On-Ramp
// User wants to buy $100 worth of BTC
const cryptoAmount = await getCryptoPrice ( 'BTC' , 100 , 'USD' );
const deposit = await fyatu . collections . create ({
amount: 100.00 ,
currency: 'USD' ,
reference: `BUY- ${ userId } - ${ Date . now () } ` ,
description: `Purchase ${ cryptoAmount } BTC` ,
customer: {
email: user . email ,
name: user . fullName ,
externalId: userId
},
metadata: {
userId: userId ,
cryptoCurrency: 'BTC' ,
cryptoAmount: cryptoAmount ,
exchangeRate: 100 / cryptoAmount ,
type: 'on_ramp'
},
redirectUrl: 'https://yourexchange.com/buy/success' ,
webhookUrl: 'https://yourexchange.com/webhooks/fyatu'
});
return { checkoutUrl: deposit . checkoutUrl };
Fiat Off-Ramp
// User sells 0.005 BTC for fiat
const fiatAmount = await calculateFiatValue ( 'BTC' , 0.005 , 'USD' );
// First, lock the crypto
await lockCrypto ( userId , 'BTC' , 0.005 );
// Then initiate payout to user's Fyatu wallet
const payout = await fyatu . payouts . create ({
amount: fiatAmount ,
currency: 'USD' ,
reference: `SELL- ${ userId } - ${ Date . now () } ` ,
description: 'Crypto sale proceeds' ,
recipient: {
accountId: user . fyatuClientId // User's Fyatu account ID
},
metadata: {
userId: userId ,
cryptoCurrency: 'BTC' ,
cryptoAmount: 0.005 ,
type: 'off_ramp'
}
});
P2P Trading Integration
Power peer-to-peer crypto trading with FYATU as the fiat escrow:
P2P Buy Order Flow
// Buyer creates order to buy BTC from a seller
const order = await createP2POrder ({
buyer: buyerId ,
seller: sellerId ,
cryptoAmount: 0.01 ,
fiatAmount: 500 ,
currency: 'USD'
});
// Create collection for buyer's fiat payment
const payment = await fyatu . collections . create ({
amount: 500.00 ,
currency: 'USD' ,
reference: `P2P- ${ order . id } ` ,
description: `P2P BTC purchase - Order # ${ order . id } ` ,
customer: {
email: buyer . email ,
externalId: buyerId
},
metadata: {
orderId: order . id ,
type: 'p2p_escrow'
},
// Auto-expire if not paid
expiresAt: new Date ( Date . now () + 30 * 60 * 1000 ). toISOString ()
});
// Buyer pays, crypto released to buyer, fiat released to seller
P2P Settlement
// On payment confirmation, release crypto and fiat
app . post ( '/webhooks/fyatu' , async ( req , res ) => {
const event = req . body ;
if ( event . type === 'collection.completed' ) {
const orderId = event . data . metadata . orderId ;
const order = await getP2POrder ( orderId );
// Release crypto to buyer
await transferCrypto ( order . seller , order . buyer , order . cryptoAmount );
// Release fiat to seller
await fyatu . payouts . create ({
amount: order . fiatAmount * 0.99 , // Minus platform fee
currency: order . currency ,
reference: `P2P-SETTLE- ${ orderId } ` ,
recipient: { accountId: order . seller . fyatuAccountId }
});
await completeOrder ( orderId );
}
res . status ( 200 ). send ( 'OK' );
});
Key Features for Exchanges
Real-Time Confirmations
Fyatu wallet payments: Confirmed in seconds
Instant webhooks for automated processing
No payment delays or pending states
Multi-Currency Support
Accept local currencies and settle in USD:
Currency On-Ramp Off-Ramp USD ✅ ✅ CDF (DRC) ✅ ✅ KES (Kenya) ✅ ✅ UGX (Uganda) ✅ ✅ TZS (Tanzania) ✅ ✅ NGN (Nigeria) ✅ ✅
Transaction Limits
Configure limits based on user verification level:
Level Daily Limit Monthly Limit Basic (email only) $100 $500 Verified (ID) $1,000 $10,000 Enhanced (full KYC) $10,000 $100,000
Compliance Features
Transaction monitoring
Velocity checks
Suspicious activity alerts
Exportable reports for audits
Webhook events for AML systems
Handling Edge Cases
Payment Timeout
// Handle expired payment attempts
if ( event . type === 'collection.expired' ) {
const order = await getOrder ( event . data . metadata . orderId );
// Cancel the order
await cancelOrder ( order . id );
// Notify user
await sendNotification ( order . userId , 'Payment expired. Please try again.' );
}
Payout Failure
// Handle failed off-ramp payouts
if ( event . type === 'payout.failed' ) {
const trade = await getTrade ( event . data . metadata . tradeId );
// Reverse the crypto sale
await unlockCrypto ( trade . userId , trade . cryptoCurrency , trade . cryptoAmount );
// Notify user
await sendNotification ( trade . userId ,
`Payout failed: ${ event . data . failureReason } . Crypto has been returned.`
);
}
Security Considerations
Rate limiting - Prevent rapid-fire transactions
Amount verification - Validate amounts match expected values
Address whitelisting - For crypto withdrawals
Cooling periods - Delay large withdrawals
IP monitoring - Flag suspicious login locations
Why Fyatu for Crypto Exchanges?
Benefit Description 1M+ User Base Access Fyatu’s growing user base across Africa Instant On-Ramp Users pay from their Fyatu wallet in seconds Instant Off-Ramp Payouts arrive in users’ Fyatu wallets immediately No Banking Dependencies Direct wallet-to-wallet transfers Simple Integration One API for both on-ramp and off-ramp
Fyatu users can fund their wallets using various local payment methods, giving you access to African crypto traders without integrating multiple payment providers.
Getting Started
Apply for Business Account
Complete Compliance Review
Provide required documentation for crypto business verification
Configure APIs
Set up Collection App for on-ramp and Payouts for off-ramp
Implement Integration
Use our SDKs for faster integration
Test Thoroughly
Test all flows including edge cases in sandbox
Launch
Go live and start serving African crypto traders
Resources