Skip to content

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 MethodPOST
Service Code52
Type FormatJSON

Request

Details
ParameterData TypeMandatoryLengthDescription
originalReferenceNoStringM64Transaction identifier on service provider system
originalPartnerReferenceNoStringM64Transaction identifier on service consumer system
latestTransactionStatusStringM2Transaction Status Code. Only send payment notify to merchant for status 00 - Success
transactionStatusDescStringM50Description status transaction
amountObjectM
amount.valueStringM16,2Amount of the transaction. If it's IDR then the value includes 2 decimal digits. e.g. IDR 10.000,- will be placed with 10000.00
amount.currencyStringM3Currency (Format: ISO4217)
additionalInfoObjectMAdditional information
additionalInfo.merchantIdStringMIdentifier merchant
additionalInfo.merchantAccountNumberStringOMerchant PAN
additionalInfo.paymentChannelStringM
additionalInfo.issuerStringM
additionalInfo.retrievalReferenceNoStringM64Reference number generated by Issuer. The value will be returned for successful payment.
additionalInfo.invoiceNoStringMReference number if payment is successful.
additionalInfo.customerNameStringOCustomer name from Issuer
additionalInfo.customerNumberStringOCustomer PAN from Issuer
additionalInfo.paymentDetailObjectM
additionalInfo.paymentDetail.totalAmountObjectM
additionalInfo.paymentDetail.totalAmount.valueStringM16,2Total amount of the transaction. If it's IDR then the value includes 2 decimal digits. e.g. IDR 10.000,- will be placed with 10000.00 with 2 decimal
additionalInfo.paymentDetail.totalAmount.currencyStringM3Currency
additionalInfo.itemDetailsArray of ObejctsOExplain the items purchased
additionalInfo.itemDetails.itemIdString(25)C25ID of product.
additionalInfo.itemDetails.nameString(150)C100Name of product.
additionalInfo.itemDetails.amountObjectC13
additionalInfo.itemDetails.amount.valueObjectCPrice per unit.
additionalInfo.itemDetails.amount.currencyStringC3
additionalInfo.itemDetails.qtyIntC10Number of product units.
additionalInfo.itemDetails.descriptionStringO255Description of product
additionalInfo.createdTimeStringMCreated time
additionalInfo.validityPeriodStringMValid time for payment
additionalInfo.paidTimeStringCThe value will be returned for successful payment.
additionalInfo.acquirerIssuerRelationStringO8
additionalInfo.callbackUrlStringMURL Notify payment

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": "test@gmail.com",
      "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": "test@gmail.com",
      "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": "test@gmail.com",
      "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": "test@gmail.com",
      "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": "test@gmail.com",
      "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
ParameterData TypeMandatoryLengthDescription
responseCodeStringM7Response code
responseMessageStringM150Response description

Example Response

Details
{
   "responseCode":"2005200",
   "responseMessage":"Request has been processed successfully"
}

iFortepay API Documentation