QRIS
QRIS is the QR Code standard used for payments in Indonesia QRIS stands for Quick Response Code Indonesian Standard
QRIS Transaction
Generate QRIS MPM
This service is used to create QRIS using the Merchant Presented Mode (MPM) method
Service Info
| Service Code | 47 | 
| Http Method | POST | 
| Path | .../v1.0/qr/qr-mpm-generate | 
Payload Create QRIS Payment
| Parameters | Data Type | Mandatory | Description | 
|---|---|---|---|
| partnerReferenceNo | String | Y | Transaction number merchant Length: 5-50Allowed Chars: a-z A-Z 0-9 - _ | 
| terminalId | String | N | ID terminal Length: 3-16Allowed Chars: a-z A-Z 0-9 - _ | 
| amount | Object | Y | Object amount | 
| value | String | Y | Transaction value Length: 1-14Allowed Chars: numeric | 
| currency | String | Y | Currency code Length: 3Allowed Value: IDR | 
| validityPeriod | String | C | Transaction time ends Format: YYYY-MM-DDTHH:mm:ssZ(ISO8601)Mandatory if additionalInfo.isStatic = falseMust be more than 1 minute and a maximum of 3 months from the time of request | 
| additionalInfo | Object | Y | Object additionalInfo | 
| isStatic | Boolean | Y | Status QRIS true= Staticfalse= Dynamic | 
{
  "partnerReferenceNo": "ref00000000001",
  "terminalId": "TERM GIGIH",
  "subMerchantId": "170041",
  "amount": {
    "value": "50000.00",
    "currency": "IDR"
  },
  "validityPeriod": "2023-09-06T23:08:56+07:00",
  "additionalInfo": {
    "isStatic": false
  }
}
Response Create QRIS Payment
| Parameters | Data Type | Description | 
|---|---|---|
| responseCode | String | Response COde | 
| responseMessage | String | Message response | 
| partnerReferenceNo | String | Merchant Transaction Number | 
| qrContent | Null/String | If the merchant is only ISO, the QRIS will display ISO text | 
| qrUrl | String | QR Image Url | 
| terminalId | String | ID terminal | 
| additionalInfo | Object | Object additionalInfo | 
| contractId | String | Generated transaction identifier in Winpay system | 
| expiredAt | String | Transaction expiration time in ISO8601 string Format | 
| isStatic | Boolean | Status QRIS | 
{
  "responseCode": "2004700",
  "responseMessage": "Success",
  "partnerReferenceNo": "ref00000000001",
  "qrContent": null,
  "qrUrl": "https://sandbox-payment.winpay.id/scqr/get_image_qr?payid=1309cd8ceef30410ed1664c8c8c0bb76",
  "terminalId": "TERM GIGIH",
  "additionalInfo": {
    "contractId": "qr2300a3fe-68b8-414b-bf00-8f44ce1cf5d3",
    "expiredAt": "2023-09-06T23:08:56+07:00",
    "isStatic": false
  }
}
List Response Code Create Payment QRIS
| Response Code | Response Message | Description | 
|---|---|---|
| 2004700 | Success | |
| 4004700 | Invalid response from biller | Check responseMessagefor detail error | 
| 4004701 | Invalid field format { field name } | |
| 4004702 | Invalid mandatory field {field name} | |
| 4014700 | Invalid signature | X-Signaturewrong | 
| 4044716 | Partner not found | X-Partner-IDnot registered | 
| 4094700 | Cannot use same X-EXTERNAL-ID in same day | X-External-IDhave been used on the same day | 
| 4094701 | Duplicate partnerReferenceNo | partnerReferenceNoalready used | 
Query Payment
This service is used to check the payment status of QRIS
Service Info
| Service Code | 51 | 
| Http Method | POST | 
| Path | .../v1.0/qr/qr-mpm-query | 
Payload Query Payment
| Field Name | Data Type | Mandatory | Description | 
|---|---|---|---|
| originalPartnerReferenceNo | String | Y | Transaction number according to the field partnerReferenceNoat the time of create paymentLength: 5-50Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-) | 
| serviceCode | String | Y | Code service Create QRIS Payment | 
| additionalInfo | Object | Y | Object additionalInfo | 
| additionalInfo.contractId | String | Y | Generated transaction identifier in Winpay system | 
{
  "originalPartnerReferenceNo": "gigih-00000081",
  "serviceCode": "47",
  "additionalInfo": {
    "contractId": "qr1906dc67-2e28-4d8a-9546-7cb30d73db2c"
  }
}
Response Query Payment
| Parameters | Data Type | Description | 
|---|---|---|
| responseCode | String | Response Code | 
| responseMessage | String | Message Response | 
| originalPartnerReferenceNo | String | Transaction ID on the Merchant's system. | 
| serviceCode | String | Create QRIS Payment service code | 
| latestTransactionStatus | String | 00 - Success, 01 - Initiated, 02 - Paying, 03 - Pending, 04 - Refunded, 05 - Canceled, 06 - Failed, 07 - Not found. | 
| amount | Object | |
| value | String | The total amount of the transaction amount. | 
| currency | String | Currency. | 
| feeAmount | Object | |
| value | String | The nominal amount of admin. | 
| currency | String | Currency. | 
| terminalId | String | NMID code from QRIS merchant. | 
| additionalInfo | Object | Additional information. | 
| issuer | String | Brand Name issuer. | 
| rrn | String | Kode rrn from issuer. | 
| buyerRef | String | Username from issuer. | 
{
  "responseCode": "2005100",
  "responseMessage": "Success",
  "originalPartnerReferenceNo": "gigih-00000081",
  "serviceCode": "47",
  "latestTransactionStatus": "00",
  "transactionStatusDesc": "Success",
  "paidTime": "2023-08-24T17:03:33+07:00",
  "amount": {
    "value": "2000.00",
    "currency": "IDR"
  },
  "feeAmount": {
    "value": "14.00",
    "currency": "IDR"
  },
  "terminalId": "",
  "additionalInfo": {
    "issuer": "Dana",
    "rrn": "810534941939",
    "buyerReff": "Winpay"
  }
}
List Response Code Query Payment QRIS
| Response Code | Response Message | Description | 
|---|---|---|
| 2005100 | Success | |
| 4005100 | Invalid response from biller | Check responseMessagefor detail error | 
| 4005101 | Invalid field format { field name } | |
| 4005102 | Invalid mandatory field {field name} | |
| 4015100 | Invalid signature | X-Signaturewrong | 
| 4045116 | Partner not found | X-Partner-IDnot registered | 
| 4095100 | Cannot use same X-EXTERNAL-ID in same day | X-External-IDhave been used on the same day | 
| 4095101 | Duplicate partnerReferenceNo | partnerReferenceNoalready used | 
Cancel Payment
This service is used to cancel the payment of QRIS
Service Info
| Service Code | 77 | 
| Http Method | POST | 
| Path | .../v1.0/qr/qr-mpm-cancel | 
Payload Cancel Payment
| Field Name | Data Type | Mandatory | Description | 
|---|---|---|---|
| originalPartnerReferenceNo | String | Y | Transaction ID on the Merchant's system Length: 5-50Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-) | 
| reason | String | Y | Reason to cancel the payment | 
| additionalInfo | Object | Y | Object additionalInfo | 
| additionalInfo.contractId | String | Y | Generated transaction identifier in Winpay system | 
{
   "originalPartnerReferenceNo":"abctoxfzxctpww",
   "reason":"Gagal",
   "additionalInfo":{
       "contractId": "qre9162f14-b282-4325-a72b-25c755db7322"
   }
}
Response Cancel Payment
| Parameter | Data Type | Description | 
|---|---|---|
| responseCode | String | Response Code | 
| responseMessage | String | Response Message | 
| originalPartnerReferenceNo | String | Transaction ID on the Merchant's system | 
| cancelTime | String | Cancelation time | 
| additionalInfo | Object | Object additionalInfo | 
| additionalInfo.contractId | String | Generated transaction identifier in Winpay system | 
{
    "responseCode": "2007700",
    "responseMessage": "Request has been processed successfully",
    "originalPartnerReferenceNo": "abctoxfzxctpww",
    "cancelTime": "2024-05-30T18:08:05+07:00",
    "additionalInfo": {
        "contractId": "qre9162f14-b282-4325-a72b-25c755db7322"
    }
}
List Response Code Cancel Payment QRIS
| Response Code | Response Message | Description | 
|---|---|---|
| 2007700 | Success | |
| 4007700 | Invalid response from biller | Check responseMessagefor detail error | 
| 4007701 | Invalid field format { field name } | |
| 4007702 | Invalid mandatory field {field name} | |
| 4017700 | Invalid signature | X-Signaturewrong | 
| 4047716 | Partner not found | X-Partner-IDnot registered | 
| 4097700 | Cannot use same X-EXTERNAL-ID in same day | X-External-IDhave been used on the same day | 
| 4097701 | Duplicate partnerReferenceNo | partnerReferenceNoalready used | 
Refund QR
This service is used to refund the payment of QRIS
Service Info
| Service Code | 78 | 
| Http Method | POST | 
| Path | .../v1.0/qr/qr-mpm-refund | 
Payload Refund QR
| Field Name | Data Type | Mandatory | Description | 
|---|---|---|---|
| originalPartnerReferenceNo | String | Y | system Transaction ID on the Merchant's system Length: 5-50Allowed Characters: letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-) | 
| partnerRefundNo | String | Y | The transaction ID on the service provider | 
| refundAmount | Object | Y | refundAmount information | 
| value | String | Y | Transaction value | 
| currency | String | Y | Currency code | 
| reason | String | Y | Reason to refund the payment | 
{
   "originalPartnerReferenceNo":"73960",
   "partnerRefundNo":"QlUNRhxJPh2",
   "refundAmount":{
      "value":"10000.00",
      "currency":"IDR"
   },
   "reason":"Refund QRIS Test"
}
Response Refund QR
| Parameter | Data Type | Description | 
|---|---|---|
| responseCode | String | Response Code | 
| responseMessage | String | Response Message | 
| originalPartnerReferenceNo | String | The transaction ID on the service provider system | 
| referenceNo | String | Reference code on the service provider system | 
| partnerRefundNo | String | Transaction ID on the Merchant's system | 
| refundAmount | Object | refundAmount information | 
| value | String | Transaction value | 
| currency | String | Currency code | 
| refundTime | String | Refund time | 
{
    "responseCode": "2007800",
    "responseMessage": "Request has been processed successfully",
    "originalPartnerReferenceNo": "73960",
    "referenceNo": "17225167794af1ea705908578b138fe268",
    "partnerRefundNo": "QlUNRhxJPh2",
    "refundAmount": {
        "value": "10000.00",
        "currency": "IDR"
    },
    "refundTime": "2024-08-01T19:52:59+07:00"
}
List Response Code Refund QR
| Response Code | Response Message | Description | 
|---|---|---|
| 2007800 | Success | |
| 4007800 | Invalid response from biller | Check responseMessagefor detail error | 
| 4007801 | Invalid field format { field name } | |
| 4007802 | Invalid mandatory field {field name} | |
| 4017800 | Invalid signature | X-Signaturewrong | 
| 4047816 | Partner not found | X-Partner-IDnot registered | 
| 4097800 | Cannot use same X-EXTERNAL-ID in same day | X-External-IDhave been used on the same day | 
| 4097801 | Duplicate partnerReferenceNo | partnerReferenceNoalready used | 
Terminal ID Registration
Merchants can use the Terminal ID feature according to merchant needs with a note that the Terminal ID sent has been registered with Winpay. For Terminal ID registration, you can fill in the following documents: [link]
Handle Payment Callback
After the customer makes a payment, Winpay will send a callback to the merchant to notify the payment status. Merchants must implement services to receive callbacks from Winpay.
We will send a callback to the merchant 3x until the merchant responds with the expected response. However, when the first callback attempt is appropriate, we will not send any more callbacks.
Callback Info
| Service Code | 52 | 
| HTTP Method | POST | 
| Path | {{yoururl}}/v1.0/qr/qr-mpm-notify | 
Header Structure
| Header | Value | Description | 
|---|---|---|
| Content-Type | application/json | |
| X-Timestamp | 2023-08-24T17:07:05+07:00 | ISO8601 String | 
| X-Partner-ID | {partnerId} | |
| X-Signature | {signature} | |
| X-External-ID | {externalId} | |
| Channel-ID | {channelId} | 
Callback Payload
| Parameters | Data Type | Description | 
|---|---|---|
| originalReferenceNo | String | The transaction ID on the service provider system. | 
| originalPartnerReferenceNo | String | Transaction ID on the Merchant's system. | 
| latestTransactionStatus | String | 00 - Success 01 - Initiated 02 - Paying 03 - Pending 04 - Refunded 05 - Canceled 06 - Failed 07 - Not found. | 
| amount | Object | |
| value | String | The total amount of the transaction amount. | 
| currency | String | Currency. | 
| additionalInfo | Object | Additional information. | 
| channel | String | The bank code of the bank to which you want to pay. | 
| contractId | String | The reference code for the corresponding request. | 
| brandName | String | Brand Name issuer. | 
| rrn | String | Kode rrn from issuer. | 
| buyerRef | String | Username from issuer. | 
| nmid | String | NMID Code from QRIS merchant. | 
| terminalId | String | NMID Code from QRIS merchant. | 
| feeAmount | String | Winpay admin fee | 
| nettAmount | String | Total value received by merchants | 
{
  "originalReferenceNo": "54083",
  "originalPartnerReferenceNo": "abctoxfzxctpq",
  "latestTransactionStatus": "00",
  "amount": {
    "value": "10002.00",
    "currency": "IDR"
  },
  "additionalInfo": {
    "channel": "QRIS",
    "contractId": "qrabf1e3e0-7e30-4ebf-a38f-8cc5d4453fb7",
    "brandName": "DANA",
    "rrn": "527420057612",
    "buyerRef": "WINPAY",
    "terminalId": "A01",
    "feeAmount": "70.01",
    "nettAmount": "9931.99"
  }
}
Expected Results
The expected response from the merchant is as follows:
{
  "responseCode": "2005200",
  "responseMessage": "success"
}