Appearance
Payment Notification SNAP
Information
This API is used by iFortePay to send payment notifications to the Merchant. The notification contains transaction details and the latest payment status, which the Merchant can use to update their system accordingly.
- For Dynamic QRIS, payment notifications will be delivered to the callback URL specified during the QR generation request.
- For Static QRIS, merchants must provide a Payment Notification URL to the Integration Support Team, which will then configure it in the system.
| Path | /v1.0/qr/qr-mpm-notify |
|---|---|
| HTTP Method | POST |
| Service Code | 52 |
| Type Format | JSON |
Request
Details
| Parameter | Data Type | Mandatory | Length | Description |
|---|---|---|---|---|
| responseCode | String | M | 7 | Response code |
| responseMessage | String | M | 150 | Response description |
| originalReferenceNo | String | C | 64 | Original transaction identifier on service provider system. Must be filled upon successful transaction |
| originalPartnerReferenceNo | String | M | 64 | Original transaction identifier on service consumer system |
| serviceCode | String | M | 2 | Transaction type indicator (service code of the original transaction request) |
| latestTransactionStatus | String | M | 2 | 00 - Success 01 - Initiated 04 - Refunded 05 - Canceled 07 - Not found Expire payment is mapped to Not found |
| transactionStatusDesc | String | M | 50 | Description status transaction |
| paidTime | yyyyMMddHHmmss | C | 255 | Transaction date (ISO-8601) |
| amount | Object | M | Amount object | |
| amount.value | String | M | 16,2 | Transaction amount (IDR includes 2 decimals, e.g. 10000.00) |
| amount.currency | String (ISO4217) | M | 3 | Currency |
| terminalId | String | O | 16 | Terminal Identification |
| additionalInfo | Object | O | Additional information | |
| additionalInfo.merchantId | String | M | Merchant identifier | |
| additionalInfo.merchantAccountNumber | String | O | Merchant PAN | |
| additionalInfo.paymentChannel | String | O | Acquirer payment channel | |
| additionalInfo.issuer | String | C | Returned for successful payment | |
| additionalInfo.retrievalReferenceNo | String | C | 64 | Reference number generated by Issuer |
| additionalInfo.invoiceNo | String | C | Reference number if payment is successful | |
| additionalInfo.customerName | String | O | Customer name from Issuer | |
| additionalInfo.customerNumber | String | O | Customer PAN from Issuer | |
| additionalInfo.paymentDetail | Object | M | Payment detail | |
| additionalInfo.paymentDetail.totalAmount | Object | M | Total amount | |
| additionalInfo.paymentDetail.totalAmount.value | String | M | 16,2 | Total transaction amount |
| additionalInfo.paymentDetail.totalAmount.currency | String | M | 3 | Currency |
| additionalInfo.createdTime | ISO-8601 | M | Created time | |
| additionalInfo.validityPeriod | ISO-8601 | M | Valid payment time | |
| additionalInfo.cancelTime | String | C | 25 | Cancel time (ISO-8601), required if canceled |
| additionalInfo.totalRefundedAmount | Object | C | Returned for refunded payment | |
| additionalInfo.totalRefundedAmount.value | String | M | 16,2 | Total refunded amount |
| additionalInfo.totalRefundedAmount.currency | String | M | 3 | Currency |
| additionalInfo.refundHistory | Array of Object | C | Refund history | |
| additionalInfo.refundHistory.refundAmount | Object | M | Refund amount | |
| additionalInfo.refundHistory.refundAmount.value | String | M | 16,2 | Refund amount value |
| additionalInfo.refundHistory.refundAmount.currency | String | M | 3 | Currency |
| additionalInfo.refundHistory.refundTime | String | M | ISO-8601 | |
| additionalInfo.callbackUrl | Text | M | Merchant payment notification URL | |
| additionalIfo.customerDetail | Object | O | Customer detail | |
| additionalIfo.customerDetail.email | String | O | 255 | Valid email format |
| additionalIfo.customerDetail.phone | String | O | 30 | Numbers only |
| additionalIfo.customerDetail.fullName | String | O | 100 | Customer full name |
| additionalIfo.itemDetails | Array of Objects | O | Purchased items | |
| additionalIfo.itemDetails.itemId | String(25) | C | 25 | Mandatory if item details exist |
| additionalIfo.itemDetails.name | String(50) | C | 100 | Product name |
| additionalIfo.itemDetails.amount | Object | C | Price per unit | |
| additionalIfo.itemDetails.amount.value | String | C | Mandatory if item details exist | |
| additionalIfo.itemDetails.amount.currency | String | C | 16,2 | Mandatory if item details exist |
| additionalIfo.itemDetails.qty | Int(10) | C | 8 | Quantity (max 99,999,999) |
| additionalIfo.itemDetails.description | String(255) | O | 255 | Product description |
| additionalIfo.payerName | String | O | 100 | Payer Name get from channel nobu only |
| additionalIfo.payerNumber | String | O | 50 | Payer Number get from channel nobu only |
Example Request
Details
sh
curl --location '.../v1.0/qr/qr-mpm-notify' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-12-23T08:46:11+07:00' \
--header 'X-SIGNATURE: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5' \
--header 'X-PARTNER-ID: MC2025024500' \
--header 'X-EXTERNAL-ID: 41807553358950093184162180797837' \
--header 'CHANNEL-ID: QR004' \
--data '{
"originalReferenceNo": "0196b437-86ab-7529-93ac-b6c1d92fefbf",
"originalPartnerReferenceNo": "69003543869326",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"issuer": "BCA",
"retrievalReferenceNo": "697350261088",
"paymentChannel": "IFORTEPAY",
"paymentDetail": {
"totalAmount": {
"value": "100000.00",
"currency": "IDR"
}
},
"createdTime": "2025-05-09T15:44:20+07:00",
"validityPeriod": "2025-05-09T15:59:20+07:00",
"paidTime": "2025-05-09T15:44:37+07:00",
"acquirerIssuerRelation": "off_us",
"callbackUrl": "https://testcallback.free.beeceptor.com",
"invoiceNo": "01746780277897819043",
"merchantId": "MC2025024500",
"merchantAccountNumber": "9360088802024078316",
"customerName": "Dummy Name",
"customerNumber": "9360002319993788396",
"issuerCode": "93600014",
"itemDetails": [
{
"itemId": "12345",
"name": "pulsa",
"amount": {
"value": "20000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian pulsa"
},
{
"itemId": "jbl789",
"name": "kuota internet",
"amount": {
"value": "80000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian kuota internet"
}
],
"customerDetail": {
"email": "[email protected]",
"fullName": "Customer name",
"phone": "08888888888"
}
}
}'go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := ".../v1.0/qr/qr-mpm-notify"
method := "POST"
payload := strings.NewReader(`{
"originalReferenceNo": "0196b437-86ab-7529-93ac-b6c1d92fefbf",
"originalPartnerReferenceNo": "69003543869326",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"issuer": "BCA",
"retrievalReferenceNo": "697350261088",
"paymentChannel": "IFORTEPAY",
"paymentDetail": {
"totalAmount": {
"value": "100000.00",
"currency": "IDR"
}
},
"createdTime": "2025-05-09T15:44:20+07:00",
"validityPeriod": "2025-05-09T15:59:20+07:00",
"paidTime": "2025-05-09T15:44:37+07:00",
"acquirerIssuerRelation": "off_us",
"callbackUrl": "https://testcallback.free.beeceptor.com",
"invoiceNo": "01746780277897819043",
"merchantId": "MC2025024500",
"merchantAccountNumber": "9360088802024078316",
"customerName": "Dummy Name",
"customerNumber": "9360002319993788396",
"issuerCode": "93600014",
"itemDetails": [
{
"itemId": "12345",
"name": "pulsa",
"amount": {
"value": "20000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian pulsa"
},
{
"itemId": "6789",
"name": "kuota internet",
"amount": {
"value": "80000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian kuota internet"
}
],
"customerDetail": {
"email": "[email protected]",
"fullName": "Customer name",
"phone": "08888888888"
}
}
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("X-TIMESTAMP", "2020-12-23T08:46:11+07:00")
req.Header.Add("X-SIGNATURE", "85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5")
req.Header.Add("X-PARTNER-ID", "IFP2024067944")
req.Header.Add("X-EXTERNAL-ID", "41807553358950093184162180797837")
req.Header.Add("CHANNEL-ID", "QR004")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}js
const axios = require('axios');
let data = JSON.stringify({
"originalReferenceNo": "0196b437-86ab-7529-93ac-b6c1d92fefbf",
"originalPartnerReferenceNo": "69003543869326",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"issuer": "BCA",
"retrievalReferenceNo": "697350261088",
"paymentChannel": "IFORTEPAY",
"paymentDetail": {
"totalAmount": {
"value": "100000.00",
"currency": "IDR"
}
},
"createdTime": "2025-05-09T15:44:20+07:00",
"validityPeriod": "2025-05-09T15:59:20+07:00",
"paidTime": "2025-05-09T15:44:37+07:00",
"acquirerIssuerRelation": "off_us",
"callbackUrl": "https://testcallback.free.beeceptor.com",
"invoiceNo": "01746780277897819043",
"merchantId": "MC2025024500",
"merchantAccountNumber": "9360088802024078316",
"customerName": "Dummy Name",
"customerNumber": "9360002319993788396",
"issuerCode": "93600014",
"itemDetails": [
{
"itemId": "12345",
"name": "pulsa",
"amount": {
"value": "20000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian pulsa"
},
{
"itemId": "6789",
"name": "kuota internet",
"amount": {
"value": "80000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian kuota internet"
}
],
"customerDetail": {
"email": "[email protected]",
"fullName": "Customer name",
"phone": "08888888888"
}
}
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: '.../v1.0/qr/qr-mpm-notify',
headers: {
'Content-Type': 'application/json',
'X-TIMESTAMP': '2020-12-23T08:46:11+07:00',
'X-SIGNATURE': '85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5',
'X-PARTNER-ID': 'IFP2024067944',
'X-EXTERNAL-ID': '41807553358950093184162180797837',
'CHANNEL-ID': 'QR004'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});rust
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::builder()
.build()?;
let mut headers = reqwest::header::HeaderMap::new();
headers.insert("Content-Type", "application/json".parse()?);
headers.insert("X-TIMESTAMP", "2020-12-23T08:46:11+07:00".parse()?);
headers.insert("X-SIGNATURE", "85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5".parse()?);
headers.insert("X-PARTNER-ID", "IFP2024067944".parse()?);
headers.insert("X-EXTERNAL-ID", "41807553358950093184162180797837".parse()?);
headers.insert("CHANNEL-ID", "QR004".parse()?);
let data = r#"{
"originalReferenceNo": "0196b437-86ab-7529-93ac-b6c1d92fefbf",
"originalPartnerReferenceNo": "69003543869326",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"issuer": "BCA",
"retrievalReferenceNo": "697350261088",
"paymentChannel": "IFORTEPAY",
"paymentDetail": {
"totalAmount": {
"value": "100000.00",
"currency": "IDR"
}
},
"createdTime": "2025-05-09T15:44:20+07:00",
"validityPeriod": "2025-05-09T15:59:20+07:00",
"paidTime": "2025-05-09T15:44:37+07:00",
"acquirerIssuerRelation": "off_us",
"callbackUrl": "https://testcallback.free.beeceptor.com",
"invoiceNo": "01746780277897819043",
"merchantId": "MC2025024500",
"merchantAccountNumber": "9360088802024078316",
"customerName": "Dummy Name",
"customerNumber": "9360002319993788396",
"issuerCode": "93600014",
"itemDetails": [
{
"itemId": "12345",
"name": "pulsa",
"amount": {
"value": "20000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian pulsa"
},
{
"itemId": "6789",
"name": "kuota internet",
"amount": {
"value": "80000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian kuota internet"
}
],
"customerDetail": {
"email": "[email protected]",
"fullName": "Customer name",
"phone": "08888888888"
}
}
}"#;
let json: serde_json::Value = serde_json::from_str(&data)?;
let request = client.request(reqwest::Method::POST, ".../v1.0/qr/qr-mpm-notify")
.headers(headers)
.json(&json);
let response = request.send().await?;
let body = response.text().await?;
println!("{}", body);
Ok(())
}php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '.../v1.0/qr/qr-mpm-notify',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"originalReferenceNo": "0196b437-86ab-7529-93ac-b6c1d92fefbf",
"originalPartnerReferenceNo": "69003543869326",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"issuer": "BCA",
"retrievalReferenceNo": "697350261088",
"paymentChannel": "IFORTEPAY",
"paymentDetail": {
"totalAmount": {
"value": "100000.00",
"currency": "IDR"
}
},
"createdTime": "2025-05-09T15:44:20+07:00",
"validityPeriod": "2025-05-09T15:59:20+07:00",
"paidTime": "2025-05-09T15:44:37+07:00",
"acquirerIssuerRelation": "off_us",
"callbackUrl": "https://testcallback.free.beeceptor.com",
"invoiceNo": "01746780277897819043",
"merchantId": "MC2025024500",
"merchantAccountNumber": "9360088802024078316",
"customerName": "Dummy Name",
"customerNumber": "9360002319993788396",
"issuerCode": "93600014",
"itemDetails": [
{
"itemId": "12345",
"name": "pulsa",
"amount": {
"value": "20000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian pulsa"
},
{
"itemId": "jbl789",
"name": "kuota internet",
"amount": {
"value": "80000.00",
"currency": "IDR"
},
"qty": 1,
"description": "pembelian kuota internet"
}
],
"customerDetail": {
"email": "[email protected]",
"fullName": "Customer name",
"phone": "08888888888"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-TIMESTAMP: 2020-12-23T08:46:11+07:00',
'X-SIGNATURE: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5',
'X-PARTNER-ID: IFP2024067944',
'X-EXTERNAL-ID: 41807553358950093184162180797837',
'CHANNEL-ID: QR004'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;Response
Details
| Parameter | Data Type | Mandatory | Length | Description |
|---|---|---|---|---|
| responseCode | String | M | 7 | Response code |
| responseMessage | String | M | 150 | Response description |
Example Response
Details
{
"responseCode":"2005200",
"responseMessage":"Request has been processed successfully"
}