Bank Transfer Events
| Event | Trigger |
|---|---|
bank_transfer.debit | An outgoing bank transfer you initiated changed status |
bank_transfer.credit | An incoming bank transfer was received into one of your accounts |
bank_transfer.debit — Outgoing Transfer
Fired when you initiate a transfer via the transfer API and again on each provider status update. One event fires per status transition (Created, Processing, Successful, Failed) — the dedupe reference is <paymentReference>:<status>.
interface BankTransferDebitWebhook {
eventType: "bank_transfer.debit";
eventRef: string; // "<reference>:<status>" — unique per transition
transactionId: string;
reference: string; // your payment reference, e.g. "TXF-1700000000000-ab12-cd34"
amount: number;
timestamp: string;
transaction: { // the full wallet ledger transaction
_id: string;
transactionHash: string;
transactionSignature: string;
status: "successful" | "pending" | "failed";
type: "debit";
amount: string;
symbol: string; // e.g. "NGN"
category: string;
accountId: string;
appId: string;
from: string; // your business name
to: string; // "RECIPIENT NAME / accountNumber"
};
data: { // provider transfer details
type: "Outwards";
sessionId: string;
paymentReference: string;
provider: string; // e.g. "NIBSS"
providerChannel: string; // e.g. "NIP"
destinationInstitutionCode: string;
creditAccountName: string;
creditAccountNumber: string;
debitAccountName: string;
narration: string;
amount: number;
fees: number;
vat: number;
stampDuty: number;
status: "Created" | "Processing" | "Successful" | "Failed";
};
}Example
{
"eventType": "bank_transfer.debit",
"eventRef": "TXF-1700000000000-ab12-cd34:Successful",
"transactionId": "665f1c2e8b6a4a0012a4d940",
"reference": "TXF-1700000000000-ab12-cd34",
"amount": 50,
"timestamp": "2026-03-12T14:45:46.995Z",
"transaction": {
"_id": "665f1c2e8b6a4a0012a4d940",
"transactionHash": "090000000000000000000000000000",
"transactionSignature": "pre-1700000000000-xxxxxxxxx-debit-JOHN DOE / 0123456789-My Business",
"status": "successful",
"type": "debit",
"amount": "50",
"symbol": "NGN",
"category": "uncategorized",
"accountId": "665f0aa18b6a4a0012a4d100",
"appId": "62ee5dbfb029b7002d5b7453",
"from": "My Business",
"to": "JOHN DOE / 0123456789"
},
"data": {
"type": "Outwards",
"sessionId": "090000000000000000000000000000",
"paymentReference": "TXF-1700000000000-ab12-cd34",
"provider": "NIBSS",
"providerChannel": "NIP",
"destinationInstitutionCode": "100004",
"creditAccountName": "JOHN DOE",
"creditAccountNumber": "0123456789",
"debitAccountName": "ACME TECHNOLOGIES LIMITED / CURRENT",
"narration": "Payment for consulting services",
"amount": 50,
"fees": 10,
"vat": 0.75,
"stampDuty": 0,
"status": "Successful"
}
}Status lifecycle
data.status | Meaning |
|---|---|
Created | Transfer accepted and queued — not yet final |
Processing | Submitted to the interbank network, awaiting confirmation |
Successful | Funds delivered to the recipient |
Failed | Transfer failed — funds are reversed to your wallet |
Do not treat the first bank_transfer.debit event as final — it usually arrives with data.status: "Created". Wait for the Successful (or Failed) transition, or verify with the transfer verification API.
bank_transfer.credit — Incoming Transfer
Fired when a bank deposit is received and credited to your wallet.
interface BankTransferCreditWebhook {
eventType: "bank_transfer.credit";
transferId: string;
amount: number;
currency: string; // e.g. "NGN"
timestamp: string;
transaction: { // the full wallet ledger credit transaction
_id: string;
transactionHash: string;
status: "successful";
type: "credit";
amount: string;
symbol: string;
category: string;
accountId: string;
appId: string;
from: string;
to: string;
};
data: { // provider details (sender info)
sessionId: string;
debitAccountName: string; // sender name
creditAccountNumber: string;
narration: string;
fees: number;
status: string;
};
}Example
{
"eventType": "bank_transfer.credit",
"transferId": "665f1c2e8b6a4a0012a4d950",
"amount": 25000,
"currency": "NGN",
"timestamp": "2026-03-12T15:05:00.000Z",
"transaction": {
"_id": "665f1c2e8b6a4a0012a4d950",
"transactionHash": "100000000000000000000000000001",
"status": "successful",
"type": "credit",
"amount": "25000",
"symbol": "NGN",
"category": "fiatDeposit",
"accountId": "665f0aa18b6a4a0012a4d100",
"appId": "62ee5dbfb029b7002d5b7453",
"from": "JANE SMITH",
"to": "9876543210"
},
"data": {
"sessionId": "100000000000000000000000000001",
"debitAccountName": "JANE SMITH",
"creditAccountNumber": "9876543210",
"narration": "Transfer from Jane",
"fees": 0,
"status": "Completed"
}
}Sensitive provider fields (internal client/account identifiers, sender account numbers on debits) are stripped from data before delivery.
Last updated on