Skip to main content

Troubleshooting Guide

A decision-tree style guide to diagnosing failed requests.

Step 1: Look At The HTTP Status​

StatusMeaningWhere To Look Next
2xxRequest reached the API and was processedCheck responseCode and successful in the body.
400Bad requestCheck the responseMessage and the field you sent.
401Token missing/expired/invalidRefresh and retry. If still 401, re-authenticate.
403ForbiddenWrong role for endpoint, or product not active for you.
404Not foundVerify path and any {id} segments.
409ConflictDuplicate merchantReference with different content.
429Rate limitedBackoff and retry.
5xxServer errorBackoff, retry, then poll for the transaction's actual state.

Step 2: Look At The responseCode​

If the HTTP status is 2xx but successful: false, the body will carry a Pagamio business responseCode. Look it up in the Error Code Reference.

The most common ones to handle explicitly:

  • 1005 — phone number format wrong.
  • 1009 — product not active for your account.
  • 1103 — insufficient balance.
  • 1204 — provider timeout (poll, don't blind-retry).
  • 1006 — duplicate transaction.

Step 3: For Lost / Timed-Out Transactions, Always Poll​

If you don't have a definitive answer (network timeout, retries exhausted), call POST /transactions with the merchantReference you used. Treat the platform's view as authoritative.

Step 4: When To Open A Support Ticket​

  • A transaction has been PROCESSING for over 5 minutes.
  • You receive 5xx errors persistently for more than a few minutes.
  • You receive a responseCode you cannot find in the Error Code Reference.
  • You believe a product should be active for your account but 1009 says otherwise.

When raising a ticket, always include:

  • The transactionId (if returned).
  • Your merchantReference.
  • The full request and response (with credentials redacted).
  • Timestamp in SAST.

See Getting Help.


Last updated: April 2026