Skip to content

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.

StatusCodeMeaning
INITIATED301Transaction has been initiated
PROCESSING302Transaction is being processed
PENDING303Transaction is pending processing
PARTIALLY_PAID315Transaction is partially paid
StatusCodeMeaning
SUCCESS304Transaction was successfully completed

SUCCESS is the only status that means you have been paid. Treat every other terminal status as unpaid.

StatusCodeMeaning
FAILED300Transaction has failed
TERMINATED305Transaction was terminated
TIME_OUT306Transaction timed out
CLOSED307Transaction is closed
CLOSED_PERIOD_ELAPSED307Closed by Pesepay — the transaction’s period elapsed
INSUFFICIENT_FUNDS308Transaction failed due to insufficient funds
CANCELLED309Transaction was cancelled
ERROR310An error occurred
DECLINED311Declined by the service provider
AUTHORIZATION_FAILED312Authorization failed at the customer’s service provider
SERVICE_UNAVAILABLE313The payment provider was unavailable
REVERSED314A 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.