Check a transaction
Check-transaction answers one question: what happened to the ledger debit behind a reference you hold, on your own account or on an agent’s you debited. Call it when a money-moving request timed out before you read the reply, when you were told 0009, or before you retry anything.
Request
Section titled “Request”| Field | Type | Required | Description |
|---|---|---|---|
transactionRef |
string | Yes | Either the transactionRef you supplied on the original call, or the retRef BankCore returned. |
The lookup tries your reference first, then BankCore’s. Where several transactions share your reference (an interbank transfer’s principal plus its fee, VAT and stamp duty lines), the principal leg is the one answered for.
curl -X POST https://api.bankcore.ng/api/legacy/provider/wallets/transactions/checktran \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactionRef": "SAL-20260401-001" }'{ "transactionRef": "SAL-20260401-001" }Response
Section titled “Response”{ "code": "0000", "desc": "COMPLETED", "retRef": "TRF20260401143000A1B2", "clientRef": "SAL-20260401-001", "fromAccount": "6020000001", "toAccount": "6020012345", "transdatetime": "20260401143000"}| Field | Description |
|---|---|
code |
Derived from the transaction’s status; see the table below. |
desc |
The status name: COMPLETED, PENDING, HELD, FAILED or REVERSED. |
retRef |
BankCore’s reference. |
clientRef |
The reference stored against the transaction. For a transaction you created, your transactionRef. |
fromAccount, toAccount |
Whichever sides the transaction has. A one-sided debit (a bill payment, an interbank principal) has no toAccount. |
transdatetime |
When it was posted, or created if not yet posted. yyyyMMddHHmmss. |
Status semantics
Section titled “Status semantics”| Code | Status | Meaning |
|---|---|---|
0000 |
COMPLETED |
Posted. The balance moved. |
0009 |
PENDING, HELD |
In flight. Money may have moved or been held: a high-value transfer awaiting the bank’s approval, for instance. Do not resend. |
0096 |
FAILED, REVERSED |
Terminal. Funds were restored where they had been taken. A retry needs a new reference, because the old one stays reserved. |
0012 |
— | No transaction carries that reference. If you sent the original request and never got a reply, the request did not reach posting; resend it with the same reference. |
Polling guidance for 0009
Section titled “Polling guidance for 0009”- Keep the original reference. It is the only key you need.
- Poll every 5 seconds for the first minute, then every 30 seconds. There is no benefit in polling faster; the state changes when the bank acts, not when you ask.
- Stop on
0000or0096. A high-value approval can take as long as a bank officer takes; after a few hours, raise it with your relationship manager rather than continuing to poll. - Never re-submit the payment while the answer is
0009. Re-submitting with the same reference is refused with0094; re-submitting with a new one pays twice.
Agent twin
Section titled “Agent twin”Same body. Two differences: it looks up BankCore’s reference only (the retRef), not your own, and it always answers 0000 with the status in desc when found, 0012 when not. The X-Agent-Account header is not read by this call.
{ "code": "0000", "desc": "COMPLETED" }Prefer the customer endpoint even for agent transactions: it accepts your reference and maps the status into the code.
In the portal
Section titled “In the portal”The Transactions register shows every posting with its status, and the Interbank transfers page shows where a NIP payment actually is.