QoinHub

Sub-Merchant & Aggregator

Terakhir diperbarui 6 Oktober 2026

Di halaman ini

QoinHub supports the aggregator model, where a parent merchant processes QRIS MPM transactions on behalf of registered sub-merchants. This is intended for partners such as aggregators, platforms, or PJPs that onboard multiple merchants under a single integration.

Applies toGenerate QRIS (/ordersnap/api/v1.0/qr/qr-mpm-generate)
Related APIsGenerate QRIS, QR MPM Query

When to Use Sub-Merchant Fields

Send the sub-merchant fields when the transaction must be recorded under a sub-merchant instead of the parent merchant. If subMerchantId is omitted, the transaction is processed as a regular merchant transaction.

The NMID fields are used when the merchant or sub-merchant is registered through NMID.

Request Fields

Field NameField TypeMandatoryField Description
subMerchantIdString(64)OIdentifier of the registered sub-merchant
additionalInfo.merchantNmidStringOMerchant NMID. Used when the merchant is registered through NMID
additionalInfo.subMerchantNmidStringONMID of the sub-merchant
additionalInfo.subMerchantTerminalIdStringOTerminal ID of the sub-merchant

Example Request

json
{
  "partnerReferenceNo": "INV-20261006-0001",
  "amount": {
    "value": "10002.00",
    "currency": "IDR"
  },
  "merchantId": "9360000000001",
  "subMerchantId": "9360000000099",
  "terminalId": "",
  "validityPeriod": "2026-10-06T12:30:00+07:00",
  "additionalInfo": {
    "acquirer": 36,
    "items": [
      {
        "id": "susumaniskaleng",
        "price": {
          "value": "10002.00",
          "currency": "IDR"
        },
        "quantity": "1",
        "name": "HOLYCOW 1KG T-bone",
        "brand": "Makan makan 1OMS",
        "category": "Food",
        "merchantName": ""
      }
    ],
    "customerDetails": {
      "email": "naufal@qoin.com",
      "firstName": "Naufal",
      "lastName": "Firaas",
      "phone": "6285749350426"
    },
    "merchantNmid": "",
    "subMerchantNmid": "ID1020000000099",
    "subMerchantTerminalId": "A02"
  }
}

Response Fields

Field NameField TypeMandatoryField Description
merchantIdStringOMerchant identifier
subMerchantIdStringOSub-merchant identifier, returned when the transaction is a sub-merchant transaction
additionalInfo.merchantNmidStringOReturned for regular merchant transactions registered through NMID
additionalInfo.subMerchantNmidStringOReturned for sub-merchant transactions
additionalInfo.subMerchantTerminalIdStringOReturned for sub-merchant transactions

Example Response

json
{
  "responseCode": "2004700",
  "responseMessage": "Successful",
  "referenceNo": "202610061200001",
  "partnerReferenceNo": "INV-20261006-0001",
  "qrContent": "00020101021226...",
  "qrUrl": "",
  "qrImage": "",
  "merchantName": "HOLYCOW STEAK",
  "merchantId": "9360000000001",
  "subMerchantId": "9360000000099",
  "storeId": "",
  "terminalId": "",
  "additionalInfo": {
    "acquirer": 36,
    "amount": {
      "value": "10002.00",
      "currency": "IDR"
    },
    "transactionType": "MERCHANT_TRANSACTION",
    "recurring": false,
    "merchantCrossRefId": "",
    "merchantNmid": "",
    "subMerchantNmid": "ID1020000000099",
    "subMerchantTerminalId": "A02"
  }
}

Notes

  • The sub-merchant must already be registered before its identifier can be used in a transaction.
  • All other request and response fields are identical to the regular Generate QRIS flow. The transaction status can be checked through QR MPM Query.