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