Skip to content

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/subproducts

Request Headers

HeaderDescriptionRequired
X-Api-KeyYour API keyYes
X-TimestampUnix timestamp in secondsYes
X-NonceUnique request identifierYes
X-SignatureHMAC-SHA256 signature (v1=...)Yes

See API Key Authentication for how to sign your requests.

Query Parameters

ParameterTypeRequiredDescription
product_codestringYesProduct code from the Product Listing API
account_numberstringNoAccount number or phone number. Required for Mobile Data and PTPTN
limitstringNoNumber 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:

FieldTypeDescription
messagestringResponse status (e.g., success)
dataarrayArray of sub-product objects
data[].subproduct_codestringSub-product code — pass this to Make Payment via extras.subproduct_code
data[].display_namestringDisplay name for the sub-product
data[].denominationnumberDenomination amount. null if not applicable
data[].face_valuenumberFace value. null if not applicable
data[].validitystringValidity period. null if not applicable
data[].descriptionstringProduct description or category
data[].account_numberstringAccount number. null if not applicable
data[].additional_descriptionarrayAdditional details. null if not applicable
data[].minstringMinimum amount (-1 for no limit). null if not applicable
data[].maxstringMaximum amount (-1 for no limit). null if not applicable

Response 400

FieldTypeDescription
messagestringError description
errorsobjectValidation errors
errors.product_codearrayProduct 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 via extras.biller_code)
  • display_name → Biller name
  • min / max → Payment amount limits for this biller
  • Use limit parameter for pagination (20,000+ billers available)

Pagination Fields

When querying with a limit, the response includes pagination:

FieldTypeDescription
linksobjectPagination links
links.firststringURL to first page
links.laststringURL to last page
links.prevstringURL to previous page (null if on first page)
links.nextstringURL to next page (null if on last page)
metaobjectPagination metadata
meta.current_pagenumberCurrent page number
meta.fromnumberFirst item index on this page
meta.last_pagenumberTotal number of pages
meta.pathstringBase path
meta.per_pagenumberItems per page
meta.tonumberLast item index on this page
meta.totalnumberTotal 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 CodeProduct Name
CELCelcom Internet
DIDigi Internet
HIHotlink Internet
UMIUmobile Internet
TITunetalk Internet
OXIOnexox Internet
YESIYes Internet
  • subproduct_code → Data plan code (pass to Make Payment via extras.subproduct_code)
  • denomination → Plan price
  • validity → Data plan validity period
  • description → 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 NameCategorySub Product Code
KonvensionalPTPTNK
UjrahPTPTNU
SSPN PrimeSSPN PrimeS
SSPN PlusSSPN PrimeSP
  • subproduct_code → Account type code (pass to Make Payment via extras.subproduct_code)
  • description → Category for grouping (e.g., "PTPTN", "SSPN Prime")
  • account_number → Account number (pass to Make Payment as account)
  • 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
    }
  ]
}

IIMMPACT API Documentation