QRIS
QR MPM Generate
API Generate QR MPM (Merchant Presented Mode) adalah layanan API yang dapat digunakan oleh Merchant untuk mendapatkan sebuah kode QR, Kemudian merchant dapat menampilkan kode QR tersebut untuk dapat menerima pembayaran dari pelanggan menggunakan aplikasi penyelenggara dengan cara melakukan scan.
- Method:
POST - Type:
application/json - Path:
/qris/v1.0/qr/qr-mpm-generate - Service Code:
47
Header QR MPM Generate
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| Content-Type | string | ✓ | string yang menunjukkan jenis media. | application/json |
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Doitpay SNAP API Documentation Authentication bagian symmetric signature | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Berikut list nilai yang bisa digunakan :NQ(Nobu) | SP |
| Authorization | string | ✓ | Otentikasi dengan bearer token lihat disini pada bagian access token | Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0 |
Request body QR MPM Generate
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| partnerReferenceNo | String(64) | ✓ | Nomor transaksi dari merchant. | INV123456 |
| validityPeriod | String(4) | ✓ | Waktu kadaluwarsa transaksi dalam ISO-8601. | 2022-09-16T13:00:00+07:00 |
| additionalInfo | Object | ✗ | Lihat tabel additionalInfo dibawah ini. | |
| amount | Object | ✓ | Lihat tabel amount dibawah ini. | |
| merchantId | String | ✗ | Merchant identifier that is unique per each merchant (MPAN) | |
| subMerchantId | String | ✗ | SubMerchantId Sub merchant id (MID) | |
| storeId | String | ✗ | StoreId this should be defined merchant to PG (NMID) |
Amount object QR MPM Generate
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | String | ✓ | ISO4217 dengan 2 desimal. | 10000.00 |
| currency | String(3) | ✓ | Kode mata uang, hanya menerima IDR. | IDR |
Contoh Request QR MPM Generate
{
"partnerReferenceNo": "1234567880",
"validityPeriod": "2022-09-16T13:00:00+07:00",
"additionalInfo": {
"deviceId": "12345679237",
"channel": "mobilephone"
},
"amount": {
"currency": "IDR",
"value": "10000.00"
},
"merchantId": "merchantId ",
"submerchantId": "submerchantId",
"storeId": "storeId"
}
Response Body QR MPM Generate
| Parameter | Tipe | Keterangan |
|---|---|---|
| responseCode | string | Kode response, lihat bagian daftar Response Code di bawah |
| responseMessage | string | Penjelasan terhadap response code yang diterima |
| referenceNo | string | Nomor transaksi dari provider. |
| partnerReferenceNo | string | Nomor transaksi dari merchant. |
| qrContent | string | string kode QR. |
| additionalInfo | string | |
| merchantName | string | Nama merchant |
| storeId | string | Nomor unik merchant (NMID) |
Response Code QR MPM Generate
| Code | Message | Keterangan |
|---|---|---|
| 2004700 | Success | Berhasil. |
| 4004700 | Service Not Implemented | Service tidak terdaftar pada request CHANNEL-ID. |
| 4004701 | Invalid Field Format | Nilai value yang tidak tepat untuk parameter tersebut. |
| 4004702 | Missing Mandatory Field, {PartnerReferenceNo} | Parameter PartnerReferenceNo tidak ada. |
| 4004702 | Missing Mandatory Field, {Amount} | Parameter Amount tidak ada. |
| 4004702 | Missing Mandatory Field, {AdditionalInfo.ReturnUrl} | Parameter ReturnUrl tidak ada. |
| 4014700 | Unauthorized Signature | Kekeliruan pada Signature. |
| 4014700 | Unauthorized stringToSign | Kekeliruan pada Signature. |
| 4014700 | Unauthorized Client | Kekeliruan pada PARTNER-ID. |
| 4014701 | Invalid Access Token | Access Token Kadaluarsa atau keliru. |
| 4044701 | Invalid Request | Nilai value yang tidak tepat untuk parameter. |
| 4044713 | Invalid Amount, Amount must be equal with total price item details | Kekeliruan pada value parameter amount dan price di item detail. |
| 4094700 | Conflict | Kekeliruan pada External ID. |
| 4094700 | The expired in field must be at least 30. | Untuk validityPeriod anda dapat mengaturnya minimal 30 menit |
QR MPM Query
API ini akan membantu Anda untuk pengecekan status dari transaksi yang telah dilakukan. Seperti yang Anda lihat pada urutan di atas. Anda mungkin perlu menanyakan kapan ada konfirmasi pembayaran dari pengguna. Atau sebagai pilihan keamanan, Anda mungkin menanyakan status setelah menerima Payment Notify. Ini membantu Anda memastikan status pembayaran asli.
- Method:
POST - Type:
application/json - Path:
/qris/v1.0/qr/qr-mpm-query - Service Code:
51
Header QR MPM Query
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| Content-Type | string | ✓ | string yang menunjukkan jenis media. | application/json |
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Doitpay SNAP API Documentation Authentication bagian symmetric signature | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Berikut list nilai yang bisa digunakan :NQ(Nobu) | SP |
| Authorization | string | ✓ | Otentikasi dengan bearer token lihat disini pada bagian access token | Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0 |
Request Body QR MPM Query
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| originalPartnerReferenceNo | string | ✓ | Nilai berasal dari parameter PartnerReferenceNo pada response debit payment. | INV123456 |
| originalReferenceNo | string | ✓ | Nilai berasal dari parameter ReferenceNo pada response API mpm generate | D00XXXWIG5BV1WW8F3RMF |
| serviceCode | string | ✓ | Indikator jenis transaksi (kode layanan permintaan transaksi). | SP |
Response Body QR MPM Query
| Parameter | Tipe | Keterangan |
|---|---|---|
| responseCode | string | Kode response, lihat bagian daftar Response Code di bawah |
| responseMessage | string | Penjelasan terhadap response code yang diterima |
| originalReferenceNo | string | Nomor transaksi dari provider. |
| serviceCode | string | Indikator jenis transaksi (kode layanan permintaan transaksi). |
| latestTransactionStatus | string | status transaksi |
| paidTime | string | waktu transaksi dengan format ISO-8601 |
| amount | object | lihat amount object di bawah |
| feeAmount | object | lihat amount object di bawah |
| additionalInfo | object | Lihat additional tabel di bawah ini |
Additional Information
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| retrievalReferenceNo | String | ✓ | Retrieval Reference Number (RRN) | 141014234567 |
Amount object QR MPM Query
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | String | ✓ | ISO4217 dengan 2 desimal. | 10000.00 |
| currency | String(3) | ✓ | Kode mata uang, hanya menerima IDR. | IDR |
Contoh Response Additional retrievalReferenceNo
{
"responseCode": "2005100",
"responseMessage": "Request has been processed successfully",
"originalReferenceNo": "ASD01K7P429W21EKXE7HDPF",
"serviceCode": "47",
"latestTransactionStatus": "00",
"paidTime": "2025-10-16T09:02:29Z",
"amount": {
"value": "993",
"currency": "IDR"
},
"feeAmount": {
"value": "7",
"currency": "IDR"
},
"additionalInfo": {
"retrievalReferenceNo": "141014234567"
}
}
Response Code QR MPM Query
| Code | Message | Keterangan |
|---|---|---|
| 2005100 | Success | Transaksi berhasil di proses. |
| 2005101 | Invalid Token:Anda Tidak Memiliki Akses | Kekeliruan pada Request credentialCode. |
| 4005101 | Invalid Field Format | Nilai value yang tidak tepat untuk parameter. |
| 4005102 | Missing Mandatory Field, {originalPartnerReferenceNo} | Parameter originalPartnerReferenceNo tidak ada. |
| 4005102 | Missing Mandatory Field, {originalReferenceNo} | Parameter originalReferenceNo tidak ada. |
| 4005102 | Missing Mandatory Field, {serviceCode} | Parameter serviceCode tidak ada. |
| 4005102 | Invalid Mandatory Header X-EXTERNAL-ID | Parameter X-EXTERNAL-ID tidak ada. |
| 4005102 | Invalid Mandatory Header CHANNEL-ID | Parameter CHANNEL-ID tidak ada. |
| 4015100 | Unauthorized Signature | Kekeliruan pada Signature. |
| 4015100 | Unauthorized stringToSign | Kekeliruan pada Signature. |
| 4015100 | Unauthorized Client | Kekeliruan pada PARTNER-ID. |
| 4015101 | Invalid Access Token | Access Token Kadaluarsa atau keliru. |
| 4045101 | Invalid Request | Kesalahan format pada saat request. |
| 5005101 | Internal Server Error | Error pada saat melakukan proses permohonan. |
Payment Notify (callback)
-
Method:
POST -
Type:
application/json -
URL:
https://yourdomain.com/v1.0/qr/qr-mpm-notify -
Endpoint:
/v1.0/qr/qr-mpm-notify -
Service Code:
52 -
Dukungan QRIS Static & Dynamic: Endpoint ini menangani notifikasi untuk kedua jenis transaksi:
-
Dynamic QR: Notifikasi dikirim berdasarkan transaksi yang di-generate melalui API /qr-mpm-generate.
-
Static QR: Notifikasi dikirim secara otomatis saat pelanggan memindai dan membayar QR Code Static yang sudah didaftarkan kepada Doitpay.
-
Symmetric Signature Payment Notification
Saat menerima notifikasi pembayaran, API anda perlu melakukan validasi signature untuk menjamin proses keamanan data. Berikut penjelasannya:
Formula :
stringToSign = HttpMethod + “:” + Endpoint + “:” + MerchantRef + “:” +
LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + “:” + Timestamp
hash = HMAC_SHA512(stringToSign, secretKey)
signature = Base64(hash)
Buatlah sebuah variabel stringToSign.
-
HttpMethodadalah string nama metode yang sedang digunakan. Bisa sajaPOST,PUT, atauDELETE. -
Endpointadalah relative URL atau full path URL yang mana tanpa host atau domainnya. -
MerchantRefadalah nilai token yang Anda dapatkan dari Merchant Reference. -
RequestBodyadalah payload yang ingin Anda kirim. -
Timestampmenggunakan ISO-8601. -
secretKeyadalah Merchant Reference.
Hash stringToSign menggunakan HMAC_SHA512 cryptographic dan secret key (nama lain saat ini adalah API key). Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE.
Header Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Symmetric Signature Payment Notification | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Nilai yang digunakan harus sesuai dengan detail transaksi yang telah di generate sebelumnya. Berikut list Nilai yang digunakan NQ | NQ |
Request Body Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| originalPartnerReferenceNo | string(64) | ✓ | Nilai berasal dari parameter PartnerReferenceNo pada response qris mpm generate | INV1708656785 |
| originalReferenceNo | string(64) | ✓ | Nilai berasal dari parameter ReferenceNo pada response qris mpm generate | D00XXXWIG5BV1WW8F3RMF |
| latestTransactionStatus | String(2) | ✓ | Kode dari status transaksi. | 00 |
| amount | Object | ✓ | Lihat tabel di bawah ini. | |
| additionalData | Object | ✓ | Lihat tabel di bawah ini. |
Amount object Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | String | ✓ | ISO4217 dengan 2 desimal. | 10000.00 |
| currency | String(3) | ✓ | Kode mata uang, hanya menerima IDR. | IDR |