QR MPM Generate

Flow Generate QRIS MPM
Flow Generate QRIS MPM

Overview

Service to generate MPM (Merchant Presented Mode) QRIS code that can be displayed by merchants for customer payments.

Direction: Merchant to Manjo
Version: 1.0
Service Code: 47
HTTP Method: POST
Path: ../v1.0/qr/qr-mpm-generate


Request Structure

HTTP Headers

Field Attribute Type Description Example
Content-Type M String Media type of resource application/json
Authorization M String Access token with Bearer format Bearer YWFlNTQ4NTEyZTE5ZjZi...
X-TIMESTAMP M String Client's local timestamp (yyyy-MM-ddTHH:mm:ssTZD) 2025-11-27T08:10:57+07:00
X-SIGNATURE M String HMAC_SHA512 signature using clientSecret b93034610c5d5a565415b40...
ORIGIN O String Merchant domain www.yourdomain.com
X-IP-ADDRESS M String Merchant IP address 172.24.281.24
X-PARTNER-ID M String(36) Unique merchant ID MT60169117
X-EXTERNAL-ID M String(36) Unique reference number per day 5dfixGSe93fkfFVzV7qZCafHEbjPIpKAAiy
CHANNEL-ID M String(5) Device identification 05

X-SIGNATURE Formula:

stringToSign = HTTPMethod + ":" + EndpointUrl + ":" + AccessToken + ":" + Lowercase(HexEncode(SHA256(minify(RequestBody)))) + ":" + TimeStamp
signature = HMAC_SHA512(clientSecret, stringToSign)

Request Body

{
	"partnerReferenceNo": "DIRECT-API-NMS-6giumc6rde",
	"amount": {
		"value": "30000.00",
		"currency": "IDR"
	},
	"merchantId": "MT60169117",
	"subMerchantId": "test",
	"storeId": "123",
	"terminalId": "456",
	"validityPeriod": "111",
	"additionalInfo": {
		"paymentId": "99",
		"dynamicAmount": "N",
		"prodDesc": "mobile phone purchase"
	}
}

Parameter Details

Parameter Attribute Type Description Example
partnerReferenceNo M String(64) Transaction identifier from merchant DIRECT-API-NMS-6giumc6rde
amount.value M String(16,2) Transaction amount (2 decimals) "30000.00"
amount.currency M String(3) Currency (ISO4217) "IDR"
merchantId M String(64) Unique merchant identifier "MT60169117"
subMerchantId O String(32) Sub merchant ID "test"
storeId O String(64) Store code on merchant side "123"
terminalId O String(16) Terminal identification "456"
validityPeriod M String Validity period "111"
additionalInfo.paymentId M String(2) Transaction code (99 for Manjo QRIS) "99"
additionalInfo.dynamicAmount M String(1) Dynamic amount flag (Y/N) "N"
additionalInfo.prodDesc M String(100) Product description "mobile phone purchase"

Note on dynamicAmount:

  • "N": Transaction amount set by merchant (taken from amount parameter)
  • "Y": Amount input by user during payment (amount parameter ignored)

Response Structure

HTTP Headers Response

Content-Type: application/json
X-TIMESTAMP: 2020-01-15T17:01:18+07:00

Response Body

{
	"responseCode": "2004700",
	"responseMessage": "Successful",
	"referenceNo": "A0000001702",
	"partnerReferenceNo": "DIRECT-API-NMS-6giumc6rde",
	"qrContent": "00020101021226620015ID.CO.MANJO.WWW01189360085801751257030210MT601691170303UMI51530014ID.CO.QRIS.WWW0215ID102106515191704121.0.27.11.25520448165303360540850000.0055020357040.905802ID5910Prodaction6013JAKARTA PUSAT61059997362560525DIRECT-API-NMS-6giumc6rde0702450817Iphone 17 Pro Max6304FE20",
	"qrUrl": "-",
	"qrImage": "-",
	"redirectUrl": "-",
	"merchantName": "Prodaction",
	"storeId": "abcd",
	"terminalId": "45",
	"additionalInfo": {
		"paymentId": "99",
		"merchantCode": "MT60169117",
		"expiryDuration": "3600",
		"expireDate": "20251127144448",
		"amount": "50450.00"
	}
}

Response Parameter Details

Parameter Attribute Type Description Example
responseCode M String(7) Response code "2004700"
responseMessage M String(150) Response description "Successful"
referenceNo M String(64) Transaction identifier from Manjo "A0000001702"
partnerReferenceNo M String(64) Echo from request "DIRECT-API-NMS-6giumc6rde"
qrContent C String(512) MPM QR String "000201010212..."
qrUrl O String(256) URL to download QR image "-"
qrImage O String Base64 QR image "-"
redirectUrl O String(512) Redirect URL to PJSP "-"
merchantName M String(25) Merchant name "Prodaction"
storeId O String(64) Store code "abcd"
terminalId O String(16) Terminal ID "45"
additionalInfo.merchantCode O String(64) Merchant ID "MT60169117"
additionalInfo.paymentId O String(2) Transaction code "99"
additionalInfo.amount M String(16,2) Transaction amount "50450.00"
additionalInfo.expiryDuration M String(6) Validity duration (seconds) "3600"
additionalInfo.expireDate M String(20) Expiry date (yyyyMMddHHmmss) "20251127144448"

Error Codes

HTTP Code Service Code Case Code Message Description
200 47 00 Success Transaction successful
400 47 01 Invalid Field Format {field name} Invalid field format
400 47 02 Invalid Mandatory Field {field name} Missing/invalid mandatory field
401 47 00 Unauthorized. {reason} General unauthorized error
401 47 01 Invalid token Invalid/expired token
404 47 08 Invalid Merchant Merchant doesn't exist/abnormal status
409 47 00 Conflict X-EXTERNAL-ID already used today

Response Code Format: httpcode(3) + servicecode(2) + casecode(2)


Implementation Examples

Example Request

curl -X POST \
  'https://api.manjo.com/v1.0/qr/qr-mpm-generate' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YWFlNTQ4NTEyZTE5ZjZi...' \
  -H 'X-TIMESTAMP: 2025-11-27T08:10:57+07:00' \
  -H 'X-SIGNATURE: b93034610c5d5a565415b40...' \
  -H 'X-PARTNER-ID: MT60169117' \
  -H 'X-EXTERNAL-ID: 5dfixGSe93fkfFVzV7qZCafHEbjPIpKAAiy' \
  -H 'X-IP-ADDRESS: 172.24.281.24' \
  -H 'CHANNEL-ID: 05' \
  -d '{
    "partnerReferenceNo": "TRX-001",
    "amount": {
      "value": "50000.00",
      "currency": "IDR"
    },
    "merchantId": "MT60169117",
    "validityPeriod": "3600",
    "additionalInfo": {
      "paymentId": "99",
      "dynamicAmount": "N",
      "prodDesc": "Laptop Purchase"
    }
  }'

Example Success Response

{
	"responseCode": "2004700",
	"responseMessage": "Successful",
	"referenceNo": "A0000001703",
	"partnerReferenceNo": "TRX-001",
	"qrContent": "000201010212...",
	"qrUrl": "-",
	"qrImage": "-",
	"redirectUrl": "-",
	"merchantName": "Merchant Example",
	"storeId": "001",
	"terminalId": "01",
	"additionalInfo": {
		"paymentId": "99",
		"merchantCode": "MT60169117",
		"expiryDuration": "3600",
		"expireDate": "20251127151448",
		"amount": "50000.00"
	}
}

Important Notes

  1. X-EXTERNAL-ID must be unique per merchant per day
  2. Timestamp follows Indonesia timezone (WIB)
  3. Dynamic Amount: if set to "Y", customer can input custom amount during payment
  4. QR Content: contains MPM string ready for QR code generation
  5. Validity Period: in seconds to determine expiryDuration

Version: 1.0
Last Updated: November 2024
Service Owner: Manjo QRIS Team