Skip to content

Options API ​

Returns selectable items for select fields defined in the Catalog API. This is a unified endpoint — all product types use the same request/response structure.

Migrating from /v2/subproducts?

See the Migration Guide for field renames and a checklist.

Endpoint ​

http
GET https://api.iimmpact.com/v2/options

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 signing details.

Query Parameters ​

ParameterTypeRequiredDescription
product_codestringYesProduct code (e.g., D, HI, JOMPAY)
field_idstringYesField identifier from catalog (e.g., amount, plan, biller)
account_numberstringConditionalRequired by many dynamic fields (phone number, NRIC, etc.)
biller_codestringNoFilter by specific biller code (JomPAY only)
limitnumberNoItems per page (default: 100, max: 25,000)
per_pagenumberNoAlias for limit
pagenumberNoPage number for pagination (default: 1)
is_activebooleanNoFilter active status (applies to static options)
include_hiddenbooleanNoInclude hidden products when resolving options
include_inactivebooleanNoInclude inactive products when resolving options

Example Request ​

bash
curl -X GET "https://api.iimmpact.com/v2/options?product_code=D&field_id=amount" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "X-Timestamp: 1704067200" \
  -H "X-Nonce: req-1704067200-a1b2c3d4e5f6" \
  -H "X-API-Version: 2026-09-16" \
  -H "X-Signature: v1=BASE64_HMAC_SIGNATURE"

Response ​

json
{
  "product_code": "D",
  "field_id": "amount",
  "items": [
    {
      "code": "30",
      "label": "RM 30",
      "price": { "amount": "30.00", "currency": "MYR" },
      "cost": { "amount": "29.2500", "currency": "MYR" },
      "denomination": 30
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 1,
    "per_page": 100,
    "total": 5
  }
}
FieldTypeDescription
product_codestringEchoed product code
field_idstringEchoed field identifier
itemsarrayList of selectable items
metaobjectPagination metadata

Item Schema ​

Items have a consistent base structure with optional fields depending on product type:

FieldTypeDescriptionPresent For
codestringStable identifier for fulfillmentAll items
denominationnumberFace value or quantity sent as the payment amount; distinct from customer-facing price.amountOptions belonging to a role: "pricing", type: "select" field
labelstringDisplay text. For eligible Mobile Data Plan options, Plan Validity is removed from label and returned separately in validity.All items
validitystringPlan Validity, e.g. 7 days, 30 daysMobile Data Plan options when available
featuresarrayPlan feature labels, e.g. included quota, validity, or pass nameMobile Data Plan options when available
descriptionstringAdditional detailsOptional
priceMoneyEffective selling price after reseller adjustmentsPriced items
costMoneyYour wholesale costPriced items
rrpMoneyRecommended retail priceOptional
has_loss_riskbooleantrue when adjustment can produce a lossPriced items
account_numberstringAccount identifier for fulfillmentPTPTN accounts
min_amountMoneyMinimum payment amountJomPAY billers
max_amountMoneyMaximum payment amountJomPAY billers

Money objects have { "amount": "30.00", "currency": "MYR" } shape.

denomination is a JSON number, not a Money object. It is the face value or quantity to send as amount, distinct from price.amount, and is returned only for options of a pricing select field. Reference and account selectors do not receive it, even when an option code looks numeric. Returned when the request's X-API-Version is 2026-09-16 or later; it becomes the default for all requests on 2027-01-11.

Pricing Fields ​

Three pricing fields support flexible pricing strategies:

  • cost — Your wholesale cost (what you pay us). B2B only — do not expose to end users.
  • rrp — Recommended retail price (our suggested selling price)
  • price — Effective selling price after your reseller adjustment rules

For eligible Mobile Data Plan options, Plan Validity is returned separately in validity when available. Some Mobile Data Plan options, including Hotlink Internet (HI) plans, also return features as an array of display labels describing the plan. The code remains unchanged for fulfillment.

Example Mobile Data Plan option:

json
{
  "code": "Pantas RM10 10GB 7D",
  "label": "Pantas RM10 10GB",
  "validity": "7 days",
  "price": {
    "amount": "10",
    "currency": "MYR"
  },
  "cost": {
    "amount": "9.7000",
    "currency": "MYR"
  },
  "rrp": {
    "amount": "10",
    "currency": "MYR"
  },
  "has_loss_risk": false,
  "features": ["Pantas RM10 10GB", "7D"],
  "denomination": 10
}

price and cost are returned on all priced items. rrp is included when a recommended retail price is configured for the product. All three fields are omitted from the response when null. See Product Examples for complete responses per product type.

Pagination ​

For large lists (e.g. JomPAY with 21,000+ billers), use limit and page. Iterate until current_page equals last_page.

TIP

Generate fresh auth headers (timestamp, nonce, signature) for each paginated request.

Caching Large Lists

For JomPAY billers and similar large reference lists, cache the full list locally and refresh daily. This reduces API calls and improves lookup speed.

Error Responses ​

400 — Missing Parameters ​

json
{
  "message": "The given data was invalid.",
  "errors": {
    "product_code": ["The product_code field is required."],
    "field_id": ["The field_id field is required."]
  }
}

400 — Missing Account Number ​

When a dynamic field requires account_number:

json
{
  "message": "The given data was invalid.",
  "errors": {
    "account_number": [
      "This field depends on phone and requires account_number parameter."
    ]
  }
}

404 — Invalid Product or Field ​

json
{
  "message": "Options not found for INVALID/amount",
  "errors": {}
}

Product-Specific Examples ​

See Catalog Product Examples for complete end-to-end flows showing catalog fields, options responses, and resulting payment requests for each product type.

IIMMPACT API Documentation