# Decode

This API is used by PJP PIAS to decode the QR content generated by the Non-PJP Service User. It extracts structured payment information from the QR code, allowing further processing of the MPM transaction.

### Technical Specification <a href="#technical-specification" id="technical-specification"></a>

```
Service Code: 48
```

| Environment | Method | URL                                                   |
| ----------- | ------ | ----------------------------------------------------- |
| Development | POST   | <https://snapstag.finnet.co.id/v1.0/qr/qr-mpm-decode> |
| Production  | POST   | <https://snap.finnet.co.id/v1.0/qr/qr-mpm-decode>     |

### Required Headers <a href="#required-headers" id="required-headers"></a>

Use the standard Linkage authentication headers, signature, and device context on every request.

<table><thead><tr><th width="69.83335876464844">No</th><th width="209.83331298828125">Name</th><th width="110.16668701171875">Type</th><th width="109.83331298828125">Mandatory</th><th width="279.9999542236328">Description</th></tr></thead><tbody><tr><td>1</td><td>Content-Type</td><td>String</td><td>M</td><td>Fill with <code>application/json</code></td></tr><tr><td>2</td><td>Authorization</td><td>String</td><td>M</td><td>Access token B2B</td></tr><tr><td>3</td><td>Authorization-Customer</td><td>String</td><td>M</td><td>Access token B2B2C</td></tr><tr><td>4</td><td>X-TIMESTAMP</td><td>String</td><td>M</td><td>Timestamp in RFC3339 format: <code>yyyy-MM-ddTHH:mm:ssTZD</code></td></tr><tr><td>5</td><td>X-PARTNER-ID</td><td>String</td><td>M</td><td>Client ID provided by Finnet</td></tr><tr><td>6</td><td>X-SIGNATURE</td><td>String</td><td>M</td><td>BI SNAP symmetric signature. See <a href="/spaces/0e6BKtpYpb5u7FWksQC3/pages/BTR47insrKZNYAJfX8Mf">Signature</a> for details.</td></tr><tr><td>7</td><td>X-EXTERNAL-ID</td><td>String</td><td>M</td><td>Random string that must be unique within a day for each partner with max <code>36</code> characters</td></tr><tr><td>8</td><td>CHANNEL-ID</td><td>String</td><td>M</td><td>Device identification on which the API services is currently being accessed by the End User (Customer)</td></tr><tr><td>9</td><td>ORIGIN</td><td>String</td><td>M</td><td>The domain of the calling application</td></tr><tr><td>10</td><td>X-IP-ADDRESS</td><td>String</td><td>M</td><td>The IP address of the device</td></tr><tr><td>11</td><td>X-DEVICE-ID</td><td>String</td><td>M</td><td>The unique identifier of the device</td></tr><tr><td>12</td><td>X-LATITUDE</td><td>String</td><td>M</td><td>The latitude coordinate from the device’s GPS</td></tr><tr><td>13</td><td>X-LONGITUDE</td><td>String</td><td>M</td><td>The longitude coordinate from the device’s GPS</td></tr></tbody></table>

### Body Request <a href="#body-request" id="body-request"></a>

<table><thead><tr><th width="69.66670989990234">No</th><th width="149.66668701171875">Name</th><th width="109.66668701171875">Type</th><th width="109.66668701171875">Mandatory</th><th width="109.6666259765625">Min Length</th><th width="109.666748046875">Max Length</th><th width="169.666748046875">Description</th></tr></thead><tbody><tr><td>1</td><td>partnerReferenceNo</td><td>String</td><td>M</td><td>1</td><td>64</td><td>Transaction identifier on service consumer system</td></tr><tr><td>2</td><td>qrContent</td><td>String</td><td>M</td><td>1</td><td>512</td><td>Content of QRIS Scanned via user Mobile Phone</td></tr><tr><td>3</td><td>amount</td><td>Object</td><td>M</td><td>1</td><td>2</td><td>Transaction amount</td></tr><tr><td>4</td><td>amount.value</td><td>String</td><td>M</td><td>1</td><td>16,2</td><td>Filled with transaction amount value</td></tr><tr><td>5</td><td>amount.currency</td><td>String</td><td>M</td><td>3</td><td>3</td><td>Currency code. Fill with <code>IDR</code></td></tr><tr><td>6</td><td>scanTime</td><td>Timestamp</td><td>O</td><td>1</td><td>25</td><td>Timestamp while QRIS scanned</td></tr></tbody></table>

#### Sample Request <a href="#sample-request" id="sample-request"></a>

```http
POST .../v1.0/qr/qr-mpm-decode HTTP/1.2
Content-type: application/json
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a"
Authorization-Customer: Bearer fa8sjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a"
X-TIMESTAMP: 2020-12-23T08:27:11+07:00
X-SIGNATURE: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5
ORIGIN: www.hostname.com
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
X-IP-ADDRESS: 172.24.281.24
X-DEVICE-ID: 09864ADCASA
X-LATITUDE: -6.108841
X-LONGITUDE: 106.7782137
CHANNEL-ID: 95221
{
"partnerReferenceNo":"2020102900000000000001",
              "qrContent":"00020101....",
              "amount":{
                             "value":"10000.00",
                             "currency":"IDR"
              },
              "scanTime":"2020-12-23T08:27:11+07:00"
}
```

### Body Response <a href="#body-response" id="body-response"></a>

<table><thead><tr><th width="69.66665649414062">No</th><th width="149.66665649414062">Name</th><th width="109.66668701171875">Type</th><th width="109.66668701171875">Mandatory</th><th width="109.6666259765625">Min Length</th><th width="109.6666259765625">Max Length</th><th width="169.66668701171875">Description</th></tr></thead><tbody><tr><td>1</td><td>responseCode</td><td>String</td><td>M</td><td>1</td><td>7</td><td>Response code</td></tr><tr><td>2</td><td>responseMessage</td><td>String</td><td>M</td><td>1</td><td>150</td><td>Response description</td></tr><tr><td>3</td><td>referenceNo</td><td>String</td><td>C</td><td>1</td><td>64</td><td>Transaction identifier on service provider system. Must be filled on successful transaction</td></tr><tr><td>4</td><td>partnerReferenceNo</td><td>String</td><td>O</td><td>1</td><td>64</td><td>Transaction identifier on service consumer system</td></tr><tr><td>5</td><td>redirectUrl</td><td>String</td><td>C</td><td>1</td><td>512</td><td>Redirect URL to go to PJSP page to process the payment. Mandatory if H2H mode</td></tr><tr><td>6</td><td>merchantName</td><td>String</td><td>C</td><td>1</td><td>25</td><td>Reference name Mandatory if H2H mode</td></tr><tr><td>7</td><td>merchantCategory</td><td>String</td><td>C</td><td>1</td><td>32</td><td>Merchant category. Mandatory for H2H mode</td></tr><tr><td>8</td><td>merchantLocation</td><td>String</td><td>C</td><td>1</td><td>25</td><td>Merchant location. Mandatory if H2H mode</td></tr><tr><td>9</td><td>merchantInfos</td><td>Array of Objects</td><td>O</td><td>1</td><td>2</td><td>Merchant account information</td></tr><tr><td>10</td><td>merchantInfos[].merchantPAN</td><td>Numeric</td><td>M</td><td>1</td><td>19</td><td>Merchant PAN. Mandatory if using H2H mode for transaction</td></tr><tr><td>11</td><td>merchantInfos[].acquirerName</td><td>String</td><td>M</td><td>1</td><td>50</td><td>Acquirer Name , Mandatory if using H2H mode for transaction</td></tr><tr><td>12</td><td>transactionAmount</td><td>Object</td><td>O</td><td>1</td><td>2</td><td></td></tr><tr><td>13</td><td>transactionAmount.value</td><td>String</td><td>M</td><td>1</td><td>16,2</td><td>Net amount of the transaction.<br>If it's IDR then value includes 2 decimal digits.<br>e.g. IDR 10.000,- will be placed with 10000.00</td></tr><tr><td>14</td><td>transactionAmount.currency</td><td>String</td><td>M</td><td>3</td><td>3</td><td>Currency (ISO4217)</td></tr><tr><td>15</td><td>feeAmount</td><td>Object</td><td>O</td><td>1</td><td>2</td><td></td></tr><tr><td>16</td><td>feeAmount.value</td><td>String</td><td>M</td><td>1</td><td>16,2</td><td>Net amount of the transaction.<br>If it's IDR then value includes 2 decimal digits.<br>e.g. IDR 10.000,- will be placed with 10000.00</td></tr><tr><td>17</td><td>feeAmount.currency</td><td>String</td><td>M</td><td>3</td><td>3</td><td>Currency (ISO4217)</td></tr><tr><td>18</td><td>additionalInfo</td><td>Object</td><td>O</td><td>1</td><td>3</td><td>Additional information for custom use that are not provided by SNAP</td></tr><tr><td>19</td><td>additionalInfo.pointOfMethod</td><td>String</td><td>M</td><td>2</td><td>2</td><td>Type of QRIS.<br><code>11</code> = Static,<br><code>12</code> = Dynamic</td></tr><tr><td>20</td><td>additionalInfo.tipsPercentage</td><td>String</td><td>C</td><td>1</td><td>16,2</td><td>Mandatory for percentage tips type. This is value of percentage tips</td></tr><tr><td>21</td><td>additionalInfo.tipsType</td><td>String</td><td>M</td><td>2</td><td>2</td><td><p>Type of fee.</p><p><code>00</code> = without fee,</p><p><code>01</code> = input fee,</p><p><code>02</code> = given fee,</p><p><code>03</code> = percentage fee</p></td></tr></tbody></table>

#### Sample Response <a href="#sample-response" id="sample-response"></a>

```json
{
"responseCode":"2004800",
"responseMessage":"Request has been processed successfully",
"referenceNo":"2020102977770000000009",  -> conf
"partnerReferenceNo":"2020102900000000000001",
"redirectUrl":" https://fm.f1n.me/prem?uuid=f47ac10b-58cc-4372-a567-0e02b2c3d479&sessionToken=abcde12345",
"merchantName":"Baso Malang",
"merchantCategory":"Food & Beverage",
"merchantLocation":"Jakarta",
"merchantInfos":[{
	"merchantPAN":"9360077710000000009",
 	"acquirerName":"FINPAY"
}, 
{
 	"merchantPAN":"9360001310000000001",
 	"acquirerName":"PERMATA"
}],
"transactionAmount":{
 	"value":"12345678.00",
 	"currency":"IDR"
},
"feeAmount":{ -> tipsAmount
 	"value":"12345678.00",
  	"currency":"IDR"
},
"additionalInfo":{
 	"pointOfMethod":" static", -> 11 static , 12 dynamic
 	"tipsPercentage": "12345678.00",
 	"tipsType":"00",  -> 01 tips enabled,  02 fixed fee by merchant 03 percentage fee by merchant, 00 without tips input
}
}
```

### Response Code & Message <a href="#response-code-message" id="response-code-message"></a>

<table><thead><tr><th width="70.33334350585938">No</th><th width="170">HTTP Code</th><th width="170.33331298828125">Code</th><th>Message</th></tr></thead><tbody><tr><td>1</td><td>200</td><td>2004800</td><td>Successful</td></tr><tr><td>2</td><td>400</td><td>4004800</td><td>Bad request</td></tr><tr><td>3</td><td>400</td><td>4004801</td><td>Invalid field format <code>{field}</code></td></tr><tr><td>4</td><td>400</td><td>4004802</td><td>Invalid mandatory field <code>{field}</code></td></tr><tr><td>5</td><td>401</td><td>4014801</td><td>Invalid token (B2B)</td></tr><tr><td>6</td><td>401</td><td>4014800</td><td>Unauthorised. <code>[Reason]</code></td></tr><tr><td>7</td><td>403</td><td>4034801</td><td>Feature not allowed</td></tr><tr><td>8</td><td>500</td><td>5004800</td><td>General error</td></tr><tr><td>9</td><td>504</td><td>5044800</td><td>Timeout</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.finpay.id/api-reference/finpay-money/linkage/qris-mpm/decode.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
