Appearance
Payment Error Codes
Payment-specific status codes returned in the response body for transaction endpoints (e.g., v2/topup). To simulate an error, send a request with the provided "Test Account" number corresponding to the desired error type. This allows you to test your application's error handling in the staging environment.
INFO
This Test Account Number should only be used in staging environment and NOT production.
The status code is returned in data.statusCode in the response body.
Retry Column
- Y — Transaction is not yet final. Resubmit the same request (with the same
refid) to get the updated status. - N — Transaction status is final. No retry needed.
Requests are idempotent via the refid field — you can safely retry without creating duplicate transactions.
| Status Code | Status | Description | Retry | Test Account |
|---|---|---|---|---|
| 0 | Accepted | Transaction accepted and will be sent for processing | Y | |
| 1 | Processing | Transaction is still being processed | Y | |
| 20 | Succesful | Transaction is successful | N | |
| 40, 52 | Failed | Invalid account number or mobile number (barred/terminated) | N | 60123450052 |
| 41 | Failed | Client's account has been suspended or an unauthorized access has occurred | N | 60123450041 |
| 43 | Failed | Insufficient credit on client's wallet | N | 60123450043 |
| 44 | Failed | Incorrect format or an invalid product has been passed | N | 60123450044 |
| 45 | Failed | Product out of stock | N | 60123450045 |
| 47 | Failed | Service currently unavailable. Try again later | N | 60123450047 |
| 48 | Failed | Transaction rejected by provider | N | 60123450048 |
| 53 | Refund | Triggered when user requests to void/refund a transaction | N | |
| 54 | Failed | Duplicate transaction, or daily account transaction limit has been reached | N | 60123450464 |
| 55 | Failed | Transaction failed due to timeout | N | 60123450055 |
| 56 | Failed | Account blacklisted | N | 60123450056 |
| 57 | Failed | Customer's mobile number activated | N | 60123450057 |
| 58, 61 | Failed | Invalid denomination | N | 60123450861 |
| 62 | Failed | NRIC not eligible | N | 60123450062 |
Plan Code Validation (Mobile Data)
Mobile data products (for example Digi Internet, Celcom Internet, Hotlink Internet, U Mobile Internet) require a plan code. Select a plan from the Options API and send its code as extras.subproduct_code together with its denomination as amount (see Make Payment).
If the plan code is missing or does not match the selected plan, the request is rejected before a transaction is created: HTTP 400, statusCode 44, and one of the remarks below.
| Situation | remarks | What to do |
|---|---|---|
No extras.subproduct_code sent, and more than one plan has the requested amount | Multiple plans are available for this amount. Please provide a plan code. | Send the code of the plan the user selected |
extras.subproduct_code does not match any active plan for the product (codes are case-sensitive) | unknown or inactive option code '<code>'. Select an available plan and try again. | Refresh the plan list from /v2/options and send the exact code |
extras.subproduct_code is a valid plan, but its denomination is not equal to amount | option code '<code>' does not match amount <amount>. Select the plan for this amount and try again. | Send the plan's denomination as amount |
amount is not a denomination offered by the product | Invalid Denomination (status 58, not 44) | Use a denomination returned by /v2/options |
Because these are HTTP 400 responses, no transaction exists and the same refid can be reused once the request is corrected.
JomPAY Test Biller Codes
Use these dedicated JomPAY biller codes in the staging environment to simulate payment outcomes.
To simulate a real successful JomPAY scenario, use an actual account/reference number with its correct biller code instead of a test biller code.
INFO
These biller codes are for staging/testing only. Do not use them in production.
| Biller Code | Simulated Result |
|---|---|
9920 | Transaction Accepted |
9940 | Transaction Failed |
9941 | Account Suspended |
9943 | Insufficient Credit |
9944 | Incorrect Format |
9945 | Out of stock |
9947 | Network Error |
9948 | System Error |
9952 | Invalid Account No |
9954 | Duplicate. Try again later |
9955 | Timeout |
9956 | Number Blacklisted |
9958 | Invalid Denomination |
