Skip to main content
All Singapay API responses include a response_code field that indicates whether your API request was received and processed correctly by the server.
Response codes are not transaction statuses. A response_code tells you the result of the request itself — whether the server accepted it, rejected it due to validation, or encountered an error. It does not tell you whether the underlying payment succeeded, is pending, or failed. To track the actual payment outcome, use the transaction_status object in the response body or wait for the webhook callback. See Transaction Status for the full lifecycle.
For example, a disbursement request may return response_code: "SP000" (request accepted successfully) while the payment itself is still "Initiated" — the money has not moved yet. Conversely, a webhook may arrive with response_code: "SP001" to notify you that a previously accepted transaction has now failed at the provider.

Response format


Response code dictionary

Each code below describes a request-level outcome — not the state of the payment or transfer.

Success

Transaction request errors

Lookup errors

Authentication & authorization errors

Request errors


HTTP status code mapping

Singapay REST API endpoints also return standard HTTP status codes. Here is how they map to common scenarios:
v2 endpoints (Card, E-Wallet Native v2, Disbursement v2, QRIS Issuer) return both an HTTP status code and an SP response code in the body. Always check the response_code field for the definitive result.

Handling response codes

1

Check the response code

Parse response_code from the JSON body. SP000 means the request was accepted — proceed to check the transaction_status for the actual payment outcome.
2

Handle known errors

Match against the tables above. Errors like SP003 (insufficient balance) or SP004 (duplicate reference) have clear resolutions.
3

Handle known request errors

Match against the tables above. Errors like SP003 (insufficient balance) or SP004 (duplicate reference) have clear resolutions.
4

Don't confuse request success with payment success

SP000 confirms the server accepted your request. The payment may still be Initiated, Paying, or Pending. Always read the transaction_status object or wait for the webhook callback to determine the final payment outcome. See Transaction Status for the full lifecycle.
5

Use inquiry-status for uncertain outcomes

For SP001, SP002, and SP005, the transaction may still be in progress. Call the relevant inquiry-status endpoint before retrying.
6

Contact support for persistent errors

If SP007, SP017, or SP019 persists, contact Singapay support with the full request and response payloads.
Never retry a transaction blindly after a failure. Always call the inquiry-status endpoint first to confirm the final state. Retrying without checking can result in duplicate transfers.