Appearance
What's Changing
Two things are new:
New field "denomination" on pricing options. "/v2/options" and "/v2/catalog" can now return a numeric "denomination" for each pricing option, the face value or quantity to send as the top-up "amount". The "price.amounts" remains the customer-facing selling price. This is available now with an API version header and becomes the default on 11 January 2027.
One way to buy a mobile data plan. Every mobile data product now works the way Hotlink Internet (HI) and Tune Talk Internet (TI) already do, Select a plan from "/v2/options", send its "code" as "extras.subproduct_code" and its "denomination" as "amount". This now includes Digi Internet (DI), Digi Internet PIN (DIP) and Celcom Internet(CEL), which previously accepted an amount alone. "POST /v2/topup" will validates the plan code.
Before (Current)
GET /v2/options?product_code=DI&field_id=plan without the version header:
{
"code": "Digi Power 35",
"label": "Digi Power 35",
"price": {
"amount": "35.00",
"currency": "MYR"
}
}A Digi Internet purchase sent the amount alone:
{
"refid": "<your_unique_id>",
"product": "DI",
"account": "60123456789",
"amount": 30
}After
The same Options request with X-API-Version: 2026-09-16 returns denomination:
{
"code": "Digi Power 35",
"label": "Digi Power 35",
"price": {
"amount": "35.00",
"currency": "MYR"
},
"denomination": 35 //new field
}The purchase sends the selected plan's code and denomination, exactly as for HI and TI:
{
"refid": "<your_unique_id>",
"product": "DI",
"account": "60123456789",
"amount": 35,
"extras": {
"subproduct_code": "Digi Power 35"
}
}With the same header on "/v2/catalog", the fulfilment mapping takes amount from denomination and adds "extras.subproduct_code" from the selected plan's code:
{
"fulfillment": {
"account": { "from_field": "phone" },
"amount": { "from_field": "plan", "path": "denomination" },
"extras": {
"subproduct_code": { "from_field": "plan", "path": "code" }
}
}
}Why Migrate
Plan codes identify a plan but amounts do not. Digi Internet now has two RM35 plans (Digi Power 35 and Digi Hyper 35). A request for RM35 without a plan code cannot be fulfilled and is rejected with HTTP 400, statusCode 44, remarks Multiple plans are available for this amount. Please provide a plan code. No transaction is created.
Existing integrations that send amount only continue to work while the amount identifies exactly one plan. This is retained for backward compatibility.
Products Affected Today
Digi Internet (DI) and Digi Internet PIN (DIP): four new plans, two of them RM35. A separate notice with the plan details follows.
Celcom Internet (CEL): plan codes are now names rather than amounts. If you stored the numeric codes, replace them:
Old Code | New Code |
|---|---|
15 | Celcom Internet 15 |
25 | Celcom Internet 25 |
38 | Celcom Internet 38 |
39 | Celcom Internet 39 |
40 | Celcom Internet 40 |
45 | Celcom Internet 45 |
48 | Celcom Internet 48 |
49 | Celcom Internet 49 |
Validation Rules
"extras.subproduct_code" must exactly match an active "/v2/options" code for the product (case-sensitive), and that plan's denomination must equal amount.
Unknown or inactive code: HTTP 400, statusCode 44, remarks
unknown or inactive option code '<code>'. Select an available plan and try again.Code and amount do not match: HTTP 400, statusCode 44, remarks
option code '<code>' does not match amount <amount>. Select the plan for this amount and try again.Amount not offered by the product: statusCode 58, Invalid Denomination, as before.
Important: Retry Behavior for HTTP 400
HTTP 400 responses mean no transaction was created. Your refId is not consumed and can be safely reused after correcting the request parameters. This is different from HTTP 200 + Failed, which indicates a final transaction failure requiring a new refId.
Early Opt-In with API Header Versioning
Add this header to requests for "/v2/options" and "/v2/catalog" to receive denomination now:
X-API-Version: 2026-09-16
Send X-API-Version: 2026-09-16 or a later version to receive denomination immediately.
Omit the header to continue receiving the current response.
On 11 January 2027, denomination is returned by default regardless of the header.
Plan code validation on "POST /v2/topup" is already live and does not depend on this header.
Action Required
For every mobile data product, select the plan from "/v2/options" and send its code as "extras.subproduct_code" with its denomination as amount.
If you stored plan codes, refresh them from "/v2/options".
Adopt "X-API-Version: 2026-09-16" or later before 11 January 2027 and read denomination as the top-up amount for pricing options.
For full details, refer to the Make Payment API, Options API, Payment Errors and Catalog Migration Guide. The legacy "/v2/subproducts" endpoint remains available, but "/v2/options" is recommended.
Questions?
Contact support@iimmpact.com for assistance.
