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 to | Generate QRIS (/ordersnap/api/v1.0/qr/qr-mpm-generate) |
| Related APIs | Generate 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 Name | Field Type | Mandatory | Field Description |
|---|---|---|---|
| subMerchantId | String(64) | O | Identifier of the registered sub-merchant |
| additionalInfo.merchantNmid | String | O | Merchant NMID. Used when the merchant is registered through NMID |
| additionalInfo.subMerchantNmid | String | O | NMID of the sub-merchant |
| additionalInfo.subMerchantTerminalId | String | O | Terminal 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 Name | Field Type | Mandatory | Field Description |
|---|---|---|---|
| merchantId | String | O | Merchant identifier |
| subMerchantId | String | O | Sub-merchant identifier, returned when the transaction is a sub-merchant transaction |
| additionalInfo.merchantNmid | String | O | Returned for regular merchant transactions registered through NMID |
| additionalInfo.subMerchantNmid | String | O | Returned for sub-merchant transactions |
| additionalInfo.subMerchantTerminalId | String | O | Returned 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.