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.
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. Only applicable for JOMPAY |
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
JomPAY Billers
Required: product_code=JOMPAY (optional: limit for pagination)
Query with product_code=JOMPAY to retrieve the full list of JomPAY billers.
subproduct_code→ JomPAY biller code (pass to Make Payment viaextras.biller_code)display_name→ Biller namemin/max→ Payment amount limits for this biller- Use
limitparameter for pagination (20,000+ billers available)
Pagination Fields
When querying with a limit, the response includes pagination:
| Field | Type | Description |
|---|---|---|
links | object | Pagination links |
links.first | string | URL to first page |
links.last | string | URL to last page |
links.prev | string | URL to previous page (null if on first page) |
links.next | string | URL to next page (null if on last page) |
meta | object | Pagination metadata |
meta.current_page | number | Current page number |
meta.from | number | First item index on this page |
meta.last_page | number | Total number of pages |
meta.path | string | Base path |
meta.per_page | number | Items per page |
meta.to | number | Last item index on this page |
meta.total | number | Total number of items |
Example Response:
json
{
"message": "success",
"data": [
{
"subproduct_code": "818625",
"display_name": "TADIKA DIDIKAN SOLEH PLT.",
"denomination": null,
"face_value": null,
"validity": null,
"description": null,
"account_number": null,
"additional_description": [],
"min": "1.00",
"max": "30000.00"
}
],
"links": {
"first": "/subproducts?page=1&limit=5",
"last": "/subproducts?page=4054&limit=5",
"prev": null,
"next": "/subproducts?page=2&limit=5"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4054,
"path": "/subproducts",
"per_page": 5,
"to": 5,
"total": 20266
}
}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
}
]
}