hoHellOOpass

Payment Statuses

Every HellOOpass payment status, what it means, and how payments transition between them.

Placeholder API contract

Path, headers, and fields below are illustrative until the final HellOOpass API contract is published.

Every payment resource carries a status field. This page defines each value and how your integration should handle it.

Statuses

StatusMeaningAction
pendingCreated; awaiting customer action on hosted checkout.Wait — do not fulfill.
processingCustomer payment underway; funds being confirmed.Wait — do not fulfill.
succeededPayment completed successfully.Fulfill the order exactly once.
failedTerminal failure, e.g. a declined payment method.Show a retry option; initialize a new payment.
cancelledExplicitly ended, by you or the customer.Treat as unpaid.
expiredPassed its expires_at without completing.Treat as unpaid; re-initialize if the customer returns.

Transitions

  • pending → processing — the customer submitted payment on hosted checkout.
  • processing → succeeded — HellOOpass confirmed the payment.
  • pending / processing → failed — declined or terminally errored.
  • pending → cancelled — cancelled through the API or by the customer.
  • pending → expired — the expiry timestamp elapsed.
  • Terminal states — succeeded, failed, cancelled, expired — never change again.

Only succeeded is paid

Do not fulfill, grant access, or release funds while a payment is pending or processing — either can still end as failed.

Common scenarios

ScenarioTypical final statusWhat to do
Customer abandons hosted checkout.expired, or pending until expiryOffer a new payment if the customer returns.
Payment method declined.failedShow a retry that initializes a new payment.
Webhook beats the return redirect.succeededFulfill once from the webhook; keep the return handler idempotent.

Where status appears

status appears in Retrieve Payment Details and inside webhook deliveries (shape illustrative):

{
  "type": "success",
  "data": {
    "id": "pay_01HZX9K2EXAMPLE",
    "status": "succeeded",
    "amount": 1000,
    "currency": "ETB",
    "reference": "order_1024"
  }
}

Webhooks can arrive more than once and out of order — record the payment id and latest status so a stale event never rolls a completed order backward. See Webhook Payload Structure.

Related: Verify Payment · Cancellation and Expiration · Payment Errors

Was this page helpful?