Skip to main content

Checking Transaction Status and Recovering Pending Payments

Use TSQ to confirm transfers, bulk payments, bills, and dynamic account collections before retrying.

Written by Nosa O

Some financial operations are asynchronous. A request can be received, pending, delayed, timed out, or ambiguous before the final outcome is known.

Use Transaction Status Query (TSQ) before retrying any uncertain money movement request.

Why TSQ matters

TSQ helps you avoid:

  • duplicate transfers

  • duplicate bill purchases

  • incorrect customer fulfillment

  • false failure states

  • manual reconciliation delays

Always store the original requestRef when submitting a money movement request.

Which TSQ service to use

Original flow

Original service

Status-query service

Single transfer

SINGLE_FUND_TRANSFER

TRANSACTION_STATUS_QUERY

Bulk payment

MAIN_ACCOUNT_BULK_PAYMENT

BULK_PAYMENT_TSQ

Bill payment

ADMIN_PURCHASE_BILL

BILL_TSQ

Dynamic account collection

ADMIN_CREATE_DYNAMIC_COLLECTION_ACCOUNT

DYNAMIC_COLLECTION_ACCOUNT_TSQ

Single transfer TSQ

Use the original transfer requestRef as transactionRequestReference.

{
  "serviceType": "TRANSACTION_STATUS_QUERY",
  "requestRef": "TSQ20260603001",
  "data": {
    "isThirdPartyBankTransfer": false,
    "transactionRequestReference": "TRF20260603001"
  }
}

If the original transfer timed out, wait 30 to 60 seconds before checking.

Bulk payment TSQ

For BULK_PAYMENT_TSQ, use the original bulk payment requestRef as the top-level requestRef. You can omit data.

{
  "serviceType": "BULK_PAYMENT_TSQ",
  "requestRef": "BULK20260603001"
}

Use the response to inspect each beneficiary status.

Bill payment TSQ

Use both references when available.

{
  "serviceType": "BILL_TSQ",
  "requestRef": "BTSQ20260603001",
  "data": {
    "billResponseReference": "BMfoobar",
    "BillRequestRef": "BILL20260603001"
  }
}

For bills, K00 or k00 can mean the request was received. It does not always mean final biller fulfillment. Use BILL_TSQ when final status matters.

Dynamic account TSQ

Use the account creation reference, account number, or both.

{
  "serviceType": "DYNAMIC_COLLECTION_ACCOUNT_TSQ",
  "requestRef": "DYTSQ20260603001",
  "data": {
    "accountCreationRequestRef": "DVA20260603001",
    "accountNumber": "3020000000"
  }
}

Sending both fields makes reconciliation easier.

Recovery workflow

When a request is uncertain:

  1. Do not submit a replacement request immediately.

  2. Look up the original requestRef.

  3. Run the matching TSQ service.

  4. Store the TSQ response.

  5. Classify the outcome as successful, pending, failed, reversed, or unresolved.

  6. Retry only when the original request is confirmed failed or not accepted.

  7. Escalate with the original request, response, and TSQ result when still unclear.

Common status meanings

Code or status

Meaning

Action

00

Successful or accepted as successful

Store response; confirm with TSQ when final settlement matters.

01

Pending

Wait and check again.

91 or k91

Timeout

Run TSQ with the original reference.

K00 or k00 for bills

Request received

Use BILL_TSQ for final bill status.

K12 or k12 for bills

Aggregator pending

Use BILL_TSQ later.

k25

Record not found

Confirm identifiers and timing; for recent attempts, wait and check again.

k26

Duplicate reference

Check the original request outcome before retrying.

What to log

For every money movement request, log:

  • environment

  • serviceType

  • requestRef

  • request payload

  • response payload

  • user or business context

  • timestamps

  • TSQ response

  • final internal status

Avoid logging full access tokens or API keys.

When to contact support

Contact support when:

  • TSQ remains pending beyond the expected window

  • TSQ responses are inconsistent

  • a customer was debited but fulfillment is unclear

  • a reversal is expected but not visible

  • you cannot reconcile a transaction with stored references

Include the original requestRef, timestamps, service type, environment, and TSQ response.

Did this answer your question?