DevelopersVirtual AccountList Virtual Account Transactions
List Virtual Account Transactions
Retrieve a paginated list of all inflow transactions across your virtual accounts. Use this endpoint for reconciliation, reporting, and auditing.
Endpoint
GET/virtual/transactions?offset=0&limit=20
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| offset | number | No | Number of records to skip. Use for pagination. |
| limit | number | No | Maximum number of records to return per page. |
Sample Request
Request
GET /virtual/transactions?offset=0&limit=20
secretKey: sk_staging_xxxxxxxxxxxxxxxxxxxxResponse Fields
| Field | Description |
|---|---|
| count | Total number of transactions available. |
| amount | Transaction amount in Naira. |
| status | Transaction outcome: success, failed, or pending. |
| session_id | Unique NIP session identifier. Use as a reconciliation and deduplication key. |
| external_reference | The reference you provided at virtual account creation. |
Sample Response
Response
{
"status": "success",
"data": {
"count": 150,
"transactions": [
{
"amount": 5000,
"status": "success",
"session_id": "090405261234567890",
"external_reference": "INV-2026-0001",
"date": "2026-03-06 14:23:11"
},
{
"amount": 12000,
"status": "success",
"session_id": "090405269876543210",
"external_reference": "INV-2026-0002",
"date": "2026-03-06 15:01:44"
}
]
}
}Pagination
Iterating through all results:
Pagination Pattern
const limit = 20;
let offset = 0;
let allTransactions = [];
while (true) {
const res = await fetch(
`/virtual/transactions?offset=${offset}&limit=${limit}`,
{ headers: { secretKey: process.env.KONGAPAY_SECRET_KEY } }
);
const { data } = await res.json();
allTransactions.push(...data.transactions);
if (allTransactions.length >= data.count) break;
offset += limit;
}Status Values
successPayment received and validated successfully.pendingPayment is still being processed by the interbank network.failedPayment was rejected โ typically an amount mismatch.