Skip to content

Payment Status Codes ​

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. Every code belongs to one of three groups, and the group tells you what to do next:

GroupStatus codesSend the same refid again?
Final20 and all other codesNo. The result never changes. Use a new refid for a new attempt.
In progress0, 1Yes. Check again with the same refid; the status changes on its own.
Not processed43, 44, 49, 58 (HTTP 400)Yes, after fixing the cause. Nothing was charged; resending with the same refid processes the request.

Final statuses ​

The transaction has finished. Sending the same refid again always returns this same status, whatever parameters you send. The only later change is a void or refund, which shows as status 53. To try again, use a new refid.

Status CodeStatusDescriptionTest Account
20SuccesfulTransaction is successful
40, 52FailedInvalid account number or mobile number (barred/terminated)60123450052
41FailedClient's account has been suspended or an unauthorized access has occurred60123450041
43FailedInsufficient credit (reported by the provider)60123450043
44FailedIncorrect format or invalid product (reported by the provider)60123450044
45FailedProduct out of stock60123450045
47FailedService currently unavailable60123450047
48FailedTransaction rejected by provider60123450048
53FailedTransaction was voided/refunded (remarks is Refund)
54FailedDuplicate transaction, or daily account transaction limit has been reached60123450464
55FailedTransaction failed due to timeout60123450055
56FailedAccount blacklisted60123450056
57FailedCustomer's mobile number activated60123450057
58, 61FailedInvalid denomination (reported by the provider)60123450861
62FailedNRIC not eligible60123450062

43, 44 and 58 can mean two things

Usually these codes mean the request was not processed (see below). They are final only when the transaction went through and the provider then failed it. You can tell from the response: a final transaction always includes IIMMPACT's transaction ID in data.transaction_id; a request that was not processed never does.

In progress ​

Status CodeStatusDescription
0AcceptedTransaction accepted and will be sent for processing
1ProcessingTransaction is still being processed

Send the same request with the same refid to get the latest status (every 5–10 seconds), or wait for the callback. It always ends in a final status.

Not processed ​

These come back with HTTP 400. We did not process the request and did not charge your wallet. Fix the cause, then send the request again with the same refid: the status changes once the request can be processed.

Status CodeReasonWhat to do before resending with the same refid
43Insufficient credit on your walletTop up your wallet
44Incorrect format or invalid productCorrect the request parameters
49Temporary system errorWait a few seconds, then resend it unchanged
58Invalid denominationUse a valid amount

If you decide not to retry, close the order on your side and never send that refid again: a later resend would be processed as a new purchase.

Plan codes for mobile data (status 44) ​

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.

SituationremarksWhat to do
No extras.subproduct_code sent, and more than one plan has the requested amountMultiple 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 amountoption 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 productInvalid Denomination (status 58, not 44)Use a denomination returned by /v2/options

Nothing was processed, so resend with the same refid once the request is corrected.

Product-specific rules ​

The rules above apply to every product. The products below have extra rules on top of them.

Fund Disbursement (FD) ​

FD has a daily limit for each recipient account and bank. When an FD request is accepted for checking, its amount is reserved against that day's limit under your refid, until midnight Malaysia time.

  • Not processed before the reservation (for example a 44 for a missing field): correct the request and resend with the same refid, as above.
  • Not processed after the reservation (for example a 49): resend the exact same request with the same refid.
  • Changing the amount: the same refid with a different amount for the same account and bank returns 44 until midnight. Use a new refid for a different amount.
  • 44 with remarks FD daily capping limit exceeded: that refid keeps returning 44 for the same account and bank until midnight. To try a smaller amount before then, use a new refid; the daily limit still applies.

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 CodeSimulated Result
9920Transaction Accepted
9940Transaction Failed
9941Account Suspended
9943Insufficient Credit
9944Incorrect Format
9945Out of stock
9947Network Error
9948System Error
9952Invalid Account No
9954Duplicate. Try again later
9955Timeout
9956Number Blacklisted
9958Invalid Denomination

IIMMPACT API Documentation