Deposits & Settlements
Understanding fiat deposits via virtual accounts and their crypto settlement lifecycle.
How it works
1. Create a virtual account for a user (POST /v1/virtual-accounts)
2. User sends fiat to the virtual account via bank transfer
3. IvoryPay detects the deposit → webhook: deposit.received
4. Settlement begins: fiat is converted to crypto
5. Crypto is sent to your configured wallet
6. Settlement lifecycle webhooks fire at each stageIntegration steps
1
2
Receive deposit notifications
{
"event": "deposit.received",
"data": {
"reference": "dep_abc123",
"processorReference": "prov_xyz789",
"accountNumber": "1234567890",
"accountName": "IvoryPay - User Name",
"currency": "NGN",
"receivedAmount": 100000,
"settledAmount": 99500,
"status": "SUCCESS",
"sourceAccountNumber": "0987654321",
"sourceAccountName": "Sender Name",
"sourceBankName": "GTBank",
"paymentDate": "2026-03-26T14:30:00.000Z"
}
}3
Track settlement lifecycle
Stage
Webhook event
Description
{
"event": "settlement.success",
"data": {
"reference": "set_abc123",
"settlementId": "uuid-here",
"depositId": "dep_abc123",
"fiatAmount": 99500,
"fiatCurrency": "NGN",
"cryptoAmount": 62.18,
"token": "USDT",
"chain": "BSC_MAINNET",
"destinationAddress": "0xYourWalletAddress...",
"conversionRate": 1600,
"platformFee": 0.31,
"businessFee": 0,
"gasFee": 0.5,
"transactionHash": "0xsettlement123...",
"status": "COMPLETED"
}
}Settlement lifecycle
DEPOSIT RECEIVED → AWAITING_SETTLEMENT_ACCOUNT → CONVERTING → PAYOUT_INITIATED
→ PAYOUT_PROCESSING → COMPLETED
→ FAILEDFrequently asked questions
Last updated