Statuses
An operation's life cycle, from click to settlement.
| Status | Terminal | Meaning |
|---|---|---|
initiated |
no | Created; the payer has not acted yet |
pending |
no | The payer acted; awaiting the rail's confirmation |
success |
yes | Collected — the funds are credited to your balance |
failed |
yes | Refused or failed at the rail |
cancelled |
yes | Cancelled (by the payer or by you) before collection |
expired |
yes | The link or payment session expired with no action |
Rules
- A terminal status never changes again.
successdoes not becomefailed; a disputed collection produces a new resource (a refund, a dispute), never a rewrite of history. pendingcan last — some payers confirm their USSD code several minutes later. Never treatpendingas a failure.- The transition you care about arrives by webhook; the read
(
GET /v1/payments/{id}) is the safety net, not the main mechanism.
Do not derive your state from ours
A status describes our operation. What your order should become is your decision: a success
does not mean "ship", it means "the funds are with you". Keep your own state machine and advance it
on events, not the other way round.