Developer Docs
Status & Error Codes
One shape for success, one for failure.
Every API answers in the same envelope, so a single handler in your code covers the whole catalogue.
Sample guide
This shows how it works across our APIs. Exact header names, values and any extra steps are confirmed with your sandbox credentials.
The response envelope
Check success first. When it is true the result is in data; when it is false the reason is in error.
Success
{
"success": true,
"data": {
"referenceId": "KRXB71Q2M8",
"status": "SUCCESS"
}
}Failure
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "billerId is required"
}
}HTTP status codes
Branch on error.code, not on the message — messages are written for people and may be reworded.
| Status | Code | What it means |
|---|---|---|
| 400 | VALIDATION_ERROR | A field is missing or malformed. The message names the field. |
| 401 | UNAUTHORIZED | The API key is missing, wrong, or for the other environment. |
| 404 | NOT_FOUND | No resource with that ID or reference exists. |
| 409 | DUPLICATE_REFERENCE | This clientReference was already used. Safe to treat as a repeat of the first call. |
| 429 | RATE_LIMITED | Too many requests. Back off and retry after the Retry-After header. |
| 503 | UPSTREAM_UNAVAILABLE | The biller, bank or network is down. Retry later; nothing was charged. |
What to retry, and what not to
| Status | Do this |
|---|---|
| 400 | Fix the request. Retrying the same body will fail the same way. |
| 401 | Check the key and which environment it belongs to. |
| 409 | Nothing to do — the first call with this clientReference already went through. |
| 429 | Wait for the Retry-After header, then try again. |
| 503 | Retry later with the same clientReference. Nothing was charged. |
Transaction statuses
A successful request is not always a finished transaction. The status field tells you where it stands.
| Status | APIs | Meaning |
|---|---|---|
| PENDING | Bill payments, card payments | Accepted and in progress. The final result arrives by webhook or the status call. |
| SUCCESS | Bill payments, card payments | Completed. Safe to show the customer a receipt. |
| FAILED | Bill payments, card payments | Did not go through. Show the reason; the customer can try again. |
| RECEIVED | Cash collections | Cash taken at the counter, not yet on the account. |
| CREDITED | Cash collections | Landed on the loan or customer account. |
| REVERSED | Cash collections | A credited collection was reversed. |
🚧 A timeout is not a failure
If your request times out, the transaction may still have gone through. Do not mark it failed, and do not retry with a new reference. Check its status — or resend with the same
clientReference, which returns the first result instead of charging twice.
Translate