Appearance
Sub Products
Deprecated
This endpoint is being replaced by the Options API, which provides a unified structure for all product types with consistent field naming, structured Money objects, and pagination. We recommend migrating to the Options API for new integrations. See the Migration Guide for details.
Retrieve sub-product options for products that require additional selection before making a payment. This is a single endpoint used across multiple product types — the response structure varies depending on the product_code.
Check the has_subproduct field from the Product Listing API to determine if this call is needed.
JomPAY billers moved
For JomPAY biller selection, use the dedicated JomPAY Billers API.
TIP
For a step-by-step integration walkthrough, see the Sub Products Guide.
API Endpoint
http
GET https://api.iimmpact.com/v2/subproductsRequest Headers
| Header | Description | Required |
|---|---|---|
X-Api-Key | Your API key | Yes |
X-Timestamp | Unix timestamp in seconds | Yes |
X-Nonce | Unique request identifier | Yes |
X-Signature | HMAC-SHA256 signature (v1=...) | Yes |
See API Key Authentication for how to sign your requests.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_code | string | Yes | Product code from the Product Listing API |
account_number | string | No | Account number or phone number. Required for Mobile Data and PTPTN |
limit | string | No | Number of results per page. Leave blank to return all. |
Response 200
Common Fields
These fields are returned for all product types:
| Field | Type | Description |
|---|---|---|
message | string | Response status (e.g., success) |
data | array | Array of sub-product objects |
data[].subproduct_code | string | Sub-product code — pass this to Make Payment via extras.subproduct_code |
data[].display_name | string | Display name for the sub-product |
data[].denomination | number | Denomination amount. null if not applicable |
data[].face_value | number | Face value. null if not applicable |
data[].validity | string | Validity period. null if not applicable |
data[].description | string | Product description or category |
data[].account_number | string | Account number. null if not applicable |
data[].additional_description | array | Additional details. null if not applicable |
data[].min | string | Minimum amount (-1 for no limit). null if not applicable |
data[].max | string | Maximum amount (-1 for no limit). null if not applicable |
Response 400
| Field | Type | Description |
|---|---|---|
message | string | Error description |
errors | object | Validation errors |
errors.product_code | array | Product code validation errors |
Example Response:
json
{
"message": "The given data was invalid",
"errors": {
"product_code": []
}
}Product-Specific Usage
Mobile Data Plans
INFO
This section only applies to mobile data / internet products.
Required: product_code + account_number (phone number)
Query with product_code and account_number (phone number) to retrieve personalized data plans.
Internet plans are uniquely tailored to individual phone numbers based on the user's eligibility. Available plans can differ substantially across users, making each experience personalized. Ensure that only eligible plans are displayed to users — this minimizes failed transactions and enhances user experience.
Applicable product codes:
| Product Code | Product Name |
|---|---|
CEL | Celcom Internet |
DI | Digi Internet |
HI | Hotlink Internet |
UMI | Umobile Internet |
TI | Tunetalk Internet |
OXI | Onexox Internet |
YESI | Yes Internet |
subproduct_code→ Data plan code (pass to Make Payment viaextras.subproduct_code)denomination→ Plan pricevalidity→ Data plan validity perioddescription→ Plan description- Plans are personalized per phone number — available plans can differ across users
Example Response:
json
{
"message": "success",
"data": [
{
"subproduct_code": "Everything Unlimited with Unlimited Weekly Pass RM12",
"display_name": "Hotlink Internet",
"denomination": 12,
"face_value": 12,
"validity": "7 day",
"description": "Everything Unlimited with Unlimited Weekly Pass RM12",
"account_number": null,
"additional_description": null,
"min": null,
"max": null
}
]
}PTPTN / SSPN
INFO
This section only applies to PTPTN products.
Required: product_code=PTPTN + account_number (NRIC)
Query with product_code=PTPTN and account_number (NRIC) to retrieve the user's loan/savings accounts.
Four sub-product types:
| Product Name | Category | Sub Product Code |
|---|---|---|
| Konvensional | PTPTN | K |
| Ujrah | PTPTN | U |
| SSPN Prime | SSPN Prime | S |
| SSPN Plus | SSPN Prime | SP |
subproduct_code→ Account type code (pass to Make Payment viaextras.subproduct_code)description→ Category for grouping (e.g., "PTPTN", "SSPN Prime")account_number→ Account number (pass to Make Payment asaccount)display_name→ Loan/savings description- A single NRIC may have multiple accounts
Example Response (multiple accounts):
json
{
"message": "success",
"data": [
{
"subproduct_code": "K",
"display_name": "DIPLOMA SEPENUH MASA",
"denomination": null,
"face_value": null,
"validity": null,
"description": "PTPTN",
"account_number": "12345678",
"additional_description": null,
"min": null,
"max": null
},
{
"subproduct_code": "U",
"display_name": "IJAZAH SARJANA MUDA",
"denomination": null,
"face_value": null,
"validity": null,
"description": "PTPTN",
"account_number": "87654321",
"additional_description": null,
"min": null,
"max": null
},
{
"subproduct_code": "S",
"display_name": "SSPN PRIME",
"denomination": null,
"face_value": null,
"validity": null,
"description": "SSPN Prime",
"account_number": "11223344",
"additional_description": null,
"min": null,
"max": null
}
]
}