Transaction statuses
transactionStatus tells you where a payment stands. It appears in
Check Payment Status responses and in the
result callback, alongside
transactionStatusCode (the numeric equivalent) and
transactionStatusDescription (a human-readable message).
Terminal statuses are final — the payment will not change again, and a result callback fires when one is reached. Stop polling once you see one.
In progress (keep checking)
Section titled “In progress (keep checking)”| Status | Code | Meaning |
|---|---|---|
INITIATED | 301 | Transaction has been initiated |
PROCESSING | 302 | Transaction is being processed |
PENDING | 303 | Transaction is pending processing |
PARTIALLY_PAID | 315 | Transaction is partially paid |
Terminal — paid
Section titled “Terminal — paid”| Status | Code | Meaning |
|---|---|---|
SUCCESS | 304 | Transaction was successfully completed |
SUCCESS is the only status that means you have been paid. Treat every
other terminal status as unpaid.
Terminal — not paid
Section titled “Terminal — not paid”| Status | Code | Meaning |
|---|---|---|
FAILED | 300 | Transaction has failed |
TERMINATED | 305 | Transaction was terminated |
TIME_OUT | 306 | Transaction timed out |
CLOSED | 307 | Transaction is closed |
CLOSED_PERIOD_ELAPSED | 307 | Closed by Pesepay — the transaction’s period elapsed |
INSUFFICIENT_FUNDS | 308 | Transaction failed due to insufficient funds |
CANCELLED | 309 | Transaction was cancelled |
ERROR | 310 | An error occurred |
DECLINED | 311 | Declined by the service provider |
AUTHORIZATION_FAILED | 312 | Authorization failed at the customer’s service provider |
SERVICE_UNAVAILABLE | 313 | The payment provider was unavailable |
REVERSED | 314 | A previously successful payment was reversed |
REVERSED is what you see when an
EcoCash payment above the $500 limit
was collected in several legs and one of them failed: the legs that
succeeded were refunded automatically.
DECLINED, INSUFFICIENT_FUNDS, AUTHORIZATION_FAILED, TIME_OUT, and
CANCELLED are all normal, expected outcomes — handle them gracefully in
your UI rather than treating them as integration bugs.
See Checking Payment Status for how to read this field via the result callback or Check Payment Status.