Event Payloads
Detailed payload examples for each event type.
virtual_account.created
{
"id": "evt_abc123",
"type": "virtual_account.created",
"data": {
"accountId": 12345,
"accountName": "ESCA/John Doe",
"accountNumber": "8012345678",
"bankName": "Wema Bank",
"bankCode": "035",
"currency": "NGN",
"createdAt": "2026-01-18T10:00:00.000Z"
},
"createdAt": "2026-01-18T10:00:00.000Z"
}
| Field | Type | Description |
|---|---|---|
accountId |
integer | Unique account identifier |
accountName |
string | Name on the account |
accountNumber |
string | Virtual account number |
bankName |
string | Name of the bank |
bankCode |
string | Bank code |
currency |
string | Account currency (NGN, GHS) |
createdAt |
string | Account creation timestamp |
virtual_account.credited
{
"id": "evt_def456",
"type": "virtual_account.credited",
"data": {
"accountId": 12345,
"accountNumber": "8012345678",
"accountName": "ESCA/John Doe",
"amount": 50000.00,
"currency": "NGN",
"reference": "TRF123456789",
"narration": "Payment from John Doe",
"sender": "John Doe",
"senderAccountNumber": "0123456789",
"balance": 50000.00,
"creditedAt": "2026-01-18T10:30:00.000Z"
},
"createdAt": "2026-01-18T10:30:00.000Z"
}
| Field | Type | Description |
|---|---|---|
accountId |
integer | Account that received the funds |
accountNumber |
string | Virtual account number |
accountName |
string | Name on the account |
amount |
number | Amount credited |
currency |
string | Currency of the deposit |
reference |
string | Bank reference for the transaction |
narration |
string | Payment description/narration |
sender |
string | Name of the sender |
senderAccountNumber |
string | Sender's account number |
balance |
number | New account balance after credit |
creditedAt |
string | Credit timestamp |
transfer.initiated
{
"id": "evt_ghi789",
"type": "transfer.initiated",
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"accountId": 12345,
"amount": 10000.00,
"currency": "NGN",
"destinationBankCode": "000007",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "JANE SMITH",
"description": "Payment for services",
"initiatedAt": "2026-01-18T10:30:00.000Z"
},
"createdAt": "2026-01-18T10:30:00.000Z"
}
| Field | Type | Description |
|---|---|---|
uuid |
string | Unique transfer identifier |
accountId |
integer | Source account ID |
amount |
number | Transfer amount |
currency |
string | Transfer currency |
destinationBankCode |
string | Destination bank code |
destinationAccountNumber |
string | Destination account number |
destinationAccountName |
string | Destination account name |
description |
string | Transfer description |
initiatedAt |
string | Transfer initiation timestamp |
transfer.completed
{
"id": "evt_jkl012",
"type": "transfer.completed",
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"accountId": 12345,
"status": "SUCCESS",
"amount": 10000.00,
"fee": 10.75,
"currency": "NGN",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "JANE SMITH",
"destinationBankCode": "000007",
"destinationBankName": "Fidelity Bank Plc",
"description": "Payment for services",
"completedAt": "2026-01-18T10:30:05.000Z"
},
"createdAt": "2026-01-18T10:30:05.000Z"
}
| Field | Type | Description |
|---|---|---|
uuid |
string | Unique transfer identifier |
accountId |
integer | Source account ID |
status |
string | Transfer status (SUCCESS) |
amount |
number | Transfer amount |
fee |
number | Transfer fee charged |
currency |
string | Transfer currency |
destinationAccountNumber |
string | Destination account number |
destinationAccountName |
string | Destination account name |
destinationBankCode |
string | Destination bank code |
destinationBankName |
string | Destination bank name |
description |
string | Transfer description |
completedAt |
string | Transfer completion timestamp |
transfer.failed
{
"id": "evt_mno345",
"type": "transfer.failed",
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"accountId": 12345,
"status": "FAILED",
"amount": 10000.00,
"fee": 10.75,
"currency": "NGN",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "JANE SMITH",
"destinationBankCode": "000007",
"destinationBankName": "Fidelity Bank Plc",
"description": "Payment for services",
"failureReason": "Invalid account number",
"completedAt": "2026-01-18T10:30:10.000Z"
},
"createdAt": "2026-01-18T10:30:10.000Z"
}
| Field | Type | Description |
|---|---|---|
uuid |
string | Unique transfer identifier |
accountId |
integer | Source account ID |
status |
string | Transfer status (FAILED) |
amount |
number | Transfer amount |
fee |
number | Transfer fee (may be refunded) |
currency |
string | Transfer currency |
destinationAccountNumber |
string | Destination account number |
destinationAccountName |
string | Destination account name |
destinationBankCode |
string | Destination bank code |
destinationBankName |
string | Destination bank name |
description |
string | Transfer description |
failureReason |
string | Reason for failure |
completedAt |
string | Failure timestamp |
exchange.processing
{
"id": "evt_exch_abc123",
"type": "exchange.processing",
"data": {
"conversionId": "f7a8b9c0-d1e2-3456-abcd-ef7890123456",
"sourceCurrency": "NGN",
"targetCurrency": "USD",
"sourceAmount": 500000,
"targetAmount": 312.50,
"appliedRate": 1600,
"status": "PROCESSING",
"quoteId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"createdAt": "2026-01-18T10:30:00.000Z"
}
| Field | Type | Description |
|---|---|---|
conversionId |
string | UUID of the conversion |
sourceCurrency |
string | Source currency |
targetCurrency |
string | Target currency |
sourceAmount |
number | Amount in source currency |
targetAmount |
number | Expected amount in target currency |
appliedRate |
number | Exchange rate applied |
status |
string | Conversion status (PROCESSING) |
quoteId |
string | Quote UUID (only present if a quote was used) |
exchange.completed
{
"id": "evt_exch_def456",
"type": "exchange.completed",
"data": {
"conversionId": "f7a8b9c0-d1e2-3456-abcd-ef7890123456",
"sourceCurrency": "NGN",
"targetCurrency": "USD",
"sourceAmount": 500000,
"targetAmount": 312.50,
"appliedRate": 1600,
"status": "COMPLETED",
"quoteId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"createdAt": "2026-01-18T10:30:05.000Z"
}
| Field | Type | Description |
|---|---|---|
conversionId |
string | UUID of the conversion |
sourceCurrency |
string | Source currency |
targetCurrency |
string | Target currency |
sourceAmount |
number | Amount debited in source currency |
targetAmount |
number | Amount credited in target currency |
appliedRate |
number | Exchange rate applied |
status |
string | Conversion status (COMPLETED) |
quoteId |
string | Quote UUID (only present if a quote was used) |
exchange.failed
{
"id": "evt_exch_ghi789",
"type": "exchange.failed",
"data": {
"sourceCurrency": "NGN",
"targetCurrency": "USD",
"sourceAmount": 500000,
"quoteId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"reason": "Insufficient balance"
},
"createdAt": "2026-01-18T10:30:10.000Z"
}
| Field | Type | Description |
|---|---|---|
sourceCurrency |
string | Source currency |
targetCurrency |
string | Target currency |
sourceAmount |
number | Attempted conversion amount |
quoteId |
string | Quote UUID (only present if a quote was used) |
reason |
string | Reason for failure |
bulk_transfer.initiated
{
"id": "evt_bulk_abc123",
"type": "bulk_transfer.initiated",
"data": {
"batchId": "api-1705574400000-12345",
"transferCount": 3,
"transfers": [
{
"accountId": 12345,
"amount": 10000.00,
"currency": "NGN",
"destinationBankCode": "058",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "JOHN DOE",
"externalReference": "SAL-001"
},
{
"accountId": 12345,
"amount": 25000.00,
"currency": "NGN",
"destinationBankCode": "044",
"destinationAccountNumber": "9876543210",
"destinationAccountName": "JANE SMITH",
"externalReference": "SAL-002"
}
],
"initiatedAt": "2026-01-18T10:30:00.000Z"
},
"createdAt": "2026-01-18T10:30:00.000Z"
}
| Field | Type | Description |
|---|---|---|
batchId |
string | Unique batch identifier |
transferCount |
integer | Total number of transfers in the batch |
transfers |
array | Array of transfer objects in the batch |
transfers[].accountId |
integer | Source account ID |
transfers[].amount |
number | Transfer amount |
transfers[].currency |
string | Transfer currency |
transfers[].destinationBankCode |
string | Destination bank code |
transfers[].destinationAccountNumber |
string | Destination account number |
transfers[].destinationAccountName |
string | Destination account name |
transfers[].externalReference |
string | Your external reference (if provided) |
initiatedAt |
string | Batch initiation timestamp |
bulk_transfer.completed
Fired once per successful transfer within a bulk batch.
{
"id": "evt_bulk_def456",
"type": "bulk_transfer.completed",
"data": {
"batchId": "api-1705574400000-12345",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"accountId": 12345,
"status": "SUCCESS",
"amount": 10000.00,
"fee": 10.75,
"currency": "NGN",
"destinationAccountNumber": "0123456789",
"destinationAccountName": "JOHN DOE",
"destinationBankCode": "058",
"destinationBankName": "GTBank",
"description": "Salary payment",
"completedAt": "2026-01-18T10:30:05.000Z"
},
"createdAt": "2026-01-18T10:30:05.000Z"
}
| Field | Type | Description |
|---|---|---|
batchId |
string | Batch this transfer belongs to |
uuid |
string | Unique transfer identifier |
accountId |
integer | Source account ID |
status |
string | Transfer status (SUCCESS) |
amount |
number | Transfer amount |
fee |
number | Transfer fee charged |
currency |
string | Transfer currency |
destinationAccountNumber |
string | Destination account number |
destinationAccountName |
string | Destination account name |
destinationBankCode |
string | Destination bank code |
destinationBankName |
string | Destination bank name |
description |
string | Transfer description |
completedAt |
string | Transfer completion timestamp |
bulk_transfer.failed
Fired once per failed transfer within a bulk batch.
{
"id": "evt_bulk_ghi789",
"type": "bulk_transfer.failed",
"data": {
"batchId": "api-1705574400000-12345",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"accountId": 12345,
"status": "FAILED",
"amount": 25000.00,
"fee": 10.75,
"currency": "NGN",
"destinationAccountNumber": "9876543210",
"destinationAccountName": "JANE SMITH",
"destinationBankCode": "044",
"destinationBankName": "Access Bank",
"description": "Salary payment",
"failureReason": "Transfer failed",
"completedAt": "2026-01-18T10:30:10.000Z"
},
"createdAt": "2026-01-18T10:30:10.000Z"
}
| Field | Type | Description |
|---|---|---|
batchId |
string | Batch this transfer belongs to |
uuid |
string | Unique transfer identifier |
accountId |
integer | Source account ID |
status |
string | Transfer status (FAILED) |
amount |
number | Transfer amount |
fee |
number | Transfer fee (may be refunded) |
currency |
string | Transfer currency |
destinationAccountNumber |
string | Destination account number |
destinationAccountName |
string | Destination account name |
destinationBankCode |
string | Destination bank code |
destinationBankName |
string | Destination bank name |
description |
string | Transfer description |
failureReason |
string | Reason for failure |
completedAt |
string | Failure timestamp |
payout.initiated
{
"id": "evt_payout_abc123",
"type": "payout.initiated",
"data": {
"payoutId": "550e8400-e29b-41d4-a716-446655440000",
"type": "fiat",
"currency": "USD",
"amount": 500.00,
"fee": 5.00,
"status": "PENDING",
"bankName": "Chase Bank",
"bankAccountNumber": "****6789",
"initiatedAt": "2026-01-18T10:30:00.000Z"
},
"createdAt": "2026-01-18T10:30:00.000Z"
}
For crypto payouts, bankName and bankAccountNumber are replaced with protocol, address, and transactionHash.
| Field | Type | Description |
|---|---|---|
payoutId |
string | Unique payout identifier |
type |
string | Payout type (fiat or crypto) |
currency |
string | Payout currency |
amount |
number | Payout amount |
fee |
number | Payout fee |
status |
string | Payout status |
bankName |
string | Destination bank name (fiat only) |
bankAccountNumber |
string | Destination account number (fiat only) |
protocol |
string | Blockchain protocol (crypto only) |
address |
string | Wallet address (crypto only) |
transactionHash |
string | Transaction hash (crypto only) |
initiatedAt |
string | Payout initiation timestamp |
payout.completed
{
"id": "evt_payout_def456",
"type": "payout.completed",
"data": {
"payoutId": "550e8400-e29b-41d4-a716-446655440000",
"type": "fiat",
"currency": "USD",
"amount": 500.00,
"fee": 5.00,
"status": "SUCCESS",
"bankName": "Chase Bank",
"bankAccountNumber": "****6789",
"completedAt": "2026-01-18T10:30:05.000Z"
},
"createdAt": "2026-01-18T10:30:05.000Z"
}
| Field | Type | Description |
|---|---|---|
payoutId |
string | Unique payout identifier |
type |
string | Payout type (fiat or crypto) |
currency |
string | Payout currency |
amount |
number | Payout amount |
fee |
number | Payout fee charged |
status |
string | Payout status (SUCCESS) |
bankName |
string | Destination bank name (fiat only) |
bankAccountNumber |
string | Destination account number (fiat only) |
protocol |
string | Blockchain protocol (crypto only) |
address |
string | Wallet address (crypto only) |
transactionHash |
string | Transaction hash (crypto only) |
completedAt |
string | Payout completion timestamp |
payout.failed
{
"id": "evt_payout_ghi789",
"type": "payout.failed",
"data": {
"payoutId": "550e8400-e29b-41d4-a716-446655440000",
"type": "fiat",
"currency": "USD",
"amount": 500.00,
"fee": 5.00,
"status": "FAILED",
"bankName": "Chase Bank",
"bankAccountNumber": "****6789",
"failureReason": "Payout failed",
"completedAt": "2026-01-18T10:30:10.000Z"
},
"createdAt": "2026-01-18T10:30:10.000Z"
}
| Field | Type | Description |
|---|---|---|
payoutId |
string | Unique payout identifier |
type |
string | Payout type (fiat or crypto) |
currency |
string | Payout currency |
amount |
number | Payout amount |
fee |
number | Payout fee (may be refunded) |
status |
string | Payout status (FAILED) |
bankName |
string | Destination bank name (fiat only) |
bankAccountNumber |
string | Destination account number (fiat only) |
protocol |
string | Blockchain protocol (crypto only) |
address |
string | Wallet address (crypto only) |
transactionHash |
string | Transaction hash (crypto only) |
failureReason |
string | Reason for failure |
completedAt |
string | Failure timestamp |