Skip to content

POS Checkout

Information

PoS Checkout is a feature for confirming installment tenure and payment with Indodana BNPL

Path/v1.0/bnpl/qr-checkout
HTTP MethodPOST
Service Code92
Type FormatJSON

Request Body

ParameterData TypeMandatoryLengthDescription
partnerReferenceNoStringM64Transaction identifier is generated by the merchant and must be unique per request.
Allowed alphanumeric and special characters -
paymentDetailsObjectM
paymentDetails.amountObjectM
paymentDetails.amount.valueStringM16,2Total amount of customer’s transaction
paymentDetails.amount.currencyStringM3
itemDetailsArray of ObjectsM
itemDetails.itemIdStringM64Can be product SKU. For item fee such as: shipping fee, admin fee etc you have to use one of these:
shippingfee, adminfee, taxfee,
discount, additionalfee, insurancefee.
itemDetails.nameStringM128Product name
itemDetails.amountObjectMProduct price
itemDetails.amount.valueStringM16,2If it's IDR then the value includes 2 decimal digits.
e.g. IDR 10.000,- will be placed with 10000.00 with 2 decimal
itemDetails.amount.currencyStringM3Currency (Format: ISO4217), fixed value: IDR
itemDetails.categoryenumM4Category type of the product
itemDetails.qtyIntegerM8Quantity of the product
customerDetailsObjectMCustomer details
customerDetails.firstNameStringM16Customer’s first name
customerDetails.lastNameStringO16Customer’s last name
customerDetails.emailStringM64The customer’s email that is registered in the merchant site/platform
customerDetails.phoneStringM16The customer’s phone that is registered in the merchant site/platform
sellersArray of ObjectsODetail of the sellers. May contain more than 1 seller.
sellers.idStringO16Seller’s ID
sellers.nameStringO16Seller’s name
sellers.urlStringO256Seller’s shop URL
sellers.sellerIdNumberStringO32Seller’s identifier number (KTP / SIM / etc)
sellers.emailStringO64Seller’s email
sellers.addressObjectOSeller’s address
sellers.address.firstNameStringM16Seller’s first name
sellers.address.lastNameStringO16Seller’s last name
sellers.address.addressStringM256Seller’s address
sellers.address.cityStringM32Seller’s city
sellers.address.postalCodeStringM8Seller’s postal code
sellers.address.phoneStringM16Seller’s phone number
sellers.address.countryCodeStringM16Seller’s country code, using ISO
callbackUrlStringMMerchant payment notification URL.
validityPeriodStringOThe time when the payment is valid.
Use format ISO-8601.
Minimum and default expiry time is 15 minutes
Maximum expiry time is 1x24 hours

Example Request

Details
sh
curl --location 'https://api-stage.ifortepay.id/v1.1/bnpl/qr-checkout' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-12-18T10:55:00+07:00' \
--header 'X-SIGNATURE: l/pk9PCr83BdMJ/r6RSRMxFk8kKt4vYPNwNy5PJl1p7Y9k0M+NijyFV97/MbyBtv4jO7FKbj83odFb32iYNyKnI/rai6QnovnoOBKSl3dg41sMb7RRediwt6JWa8VjFdkWaJQX4YGeP4SNG2QTT0ALAmL6fwr1pWi1V3fsPi73js1qNKbhEirCaT+o3uM8GKSreDnhWHDCSUWWMKHXAYGm68eOxLmUw1APqziHnYEFhbpv+kINX2zT94L2oi2AEIcVCl7UwZh/7ujf1oHj72GR30tvEyj6MTkGGTXNbkrH1aGd0BxuCwoU0JCme3bO34jjPInXlWTthNbeIbIdqwFQ==' \
--header 'X-PARTNER-ID: MC2025059906' \
--header 'X-EXTERNAL-ID: 69046731945362' \
--header 'CHANNEL-ID: PL001' \
--data-raw '{
    "partnerReferenceNo": "41199219261288",
    "paymentDetails": {
        "amount": {
            "value": "250000.00",
            "currency": "IDR"
        },
    },
    "itemDetails": [
        {
            "itemId": "FOOD01",
            "name": "RUJAK",
            "amount": {
                "value": "250000.00",
                "currency": "IDR"
            },
            "category": "0017",
            "qty": 1
        }
    ],
    "customerDetails": {
        "firstName": "Quality",
        "lastName": "Assurance",
        "email": "qa@ifortepay.id",
        "phone": "089121313131"
    },
    "sellers": [
        {
            "id": "123",
            "name": "Qa Tester",
            "url": "https://www.google.com/",
            "sellerIdNumber": "121313141",
            "email": "qa@ifortepay.id",
            "address": {
                "firstName": "Quality",
                "lastName": "Assurance",
                "address": "Jakarta",
                "city": "Jaksel",
                "postalCode": "testing9",
                "phone": "089121313131",
                "countryCode": "121313"
            }
        }
    ],
    "callbackUrl": "https://mcpid.proxy.beeceptor.com/BNPL",
    "validityPeriod": ""
}'
go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "https://api-stage.ifortepay.id/v1.1/bnpl/qr-checkout"
  method := "POST"

  payload := strings.NewReader(`{
    "partnerReferenceNo": "41199219261288",
    "paymentDetails": {
        "amount": {
            "value": "250000.00",
            "currency": "IDR"
        }
    },
    "itemDetails": [
        {
            "itemId": "FOOD01",
            "name": "RUJAK",
            "amount": {
                "value": "250000.00",
                "currency": "IDR"
            },
            "category": "0017",
            "qty": 1
        }
    ],
    "customerDetails": {
        "firstName": "Quality",
        "lastName": "Assurance",
        "email": "qa@ifortepay.id",
        "phone": "089121313131"
    },
    "sellers": [
        {
            "id": "123",
            "name": "Qa Tester",
            "url": "https://www.google.com/",
            "sellerIdNumber": "121313141",
            "email": "qa@ifortepay.id",
            "address": {
                "firstName": "Quality",
                "lastName": "Assurance",
                "address": "Jakarta",
                "city": "Jaksel",
                "postalCode": "testing9",
                "phone": "089121313131",
                "countryCode": "121313"
            }
        }
    ],
    "callbackUrl": "https://mcpid.proxy.beeceptor.com/BNPL",
    "validityPeriod": ""
}`)

  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-18T10:55:00+07:00")
  req.Header.Add("X-SIGNATURE", "l/pk9PCr83BdMJ/r6RSRMxFk8kKt4vYPNwNy5PJl1p7Y9k0M+NijyFV97/MbyBtv4jO7FKbj83odFb32iYNyKnI/rai6QnovnoOBKSl3dg41sMb7RRediwt6JWa8VjFdkWaJQX4YGeP4SNG2QTT0ALAmL6fwr1pWi1V3fsPi73js1qNKbhEirCaT+o3uM8GKSreDnhWHDCSUWWMKHXAYGm68eOxLmUw1APqziHnYEFhbpv+kINX2zT94L2oi2AEIcVCl7UwZh/7ujf1oHj72GR30tvEyj6MTkGGTXNbkrH1aGd0BxuCwoU0JCme3bO34jjPInXlWTthNbeIbIdqwFQ==")
  req.Header.Add("X-PARTNER-ID", "MC2025059906")
  req.Header.Add("X-EXTERNAL-ID", "69046731945362")
  req.Header.Add("CHANNEL-ID", "PL001")

  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({
  "partnerReferenceNo": "41199219261288",
  "paymentDetails": {
    "amount": {
      "value": "250000.00",
      "currency": "IDR"
    }
  },
  "itemDetails": [
    {
      "itemId": "FOOD01",
      "name": "RUJAK",
      "amount": {
        "value": "250000.00",
        "currency": "IDR"
      },
      "category": "0017",
      "qty": 1
    }
  ],
  "customerDetails": {
    "firstName": "Quality",
    "lastName": "Assurance",
    "email": "qa@ifortepay.id",
    "phone": "089121313131"
  },
  "sellers": [
    {
      "id": "123",
      "name": "Qa Tester",
      "url": "https://www.google.com/",
      "sellerIdNumber": "121313141",
      "email": "qa@ifortepay.id",
      "address": {
        "firstName": "Quality",
        "lastName": "Assurance",
        "address": "Jakarta",
        "city": "Jaksel",
        "postalCode": "testing9",
        "phone": "089121313131",
        "countryCode": "121313"
      }
    }
  ],
  "callbackUrl": "https://mcpid.proxy.beeceptor.com/BNPL",
  "validityPeriod": ""
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://api-stage.ifortepay.id/v1.1/bnpl/qr-checkout',
  headers: { 
    'Content-Type': 'application/json', 
    'X-TIMESTAMP': '2020-12-18T10:55:00+07:00', 
    'X-SIGNATURE': 'l/pk9PCr83BdMJ/r6RSRMxFk8kKt4vYPNwNy5PJl1p7Y9k0M+NijyFV97/MbyBtv4jO7FKbj83odFb32iYNyKnI/rai6QnovnoOBKSl3dg41sMb7RRediwt6JWa8VjFdkWaJQX4YGeP4SNG2QTT0ALAmL6fwr1pWi1V3fsPi73js1qNKbhEirCaT+o3uM8GKSreDnhWHDCSUWWMKHXAYGm68eOxLmUw1APqziHnYEFhbpv+kINX2zT94L2oi2AEIcVCl7UwZh/7ujf1oHj72GR30tvEyj6MTkGGTXNbkrH1aGd0BxuCwoU0JCme3bO34jjPInXlWTthNbeIbIdqwFQ==', 
    'X-PARTNER-ID': 'MC2025059906', 
    'X-EXTERNAL-ID': '69046731945362', 
    'CHANNEL-ID': 'PL001'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});
php
<?php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api-stage.ifortepay.id/v1.1/bnpl/qr-checkout',
  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 =>'{
    "partnerReferenceNo": "41199219261288",
    "paymentDetails": {
        "amount": {
            "value": "250000.00",
            "currency": "IDR"
        }
    },
    "itemDetails": [
        {
            "itemId": "FOOD01",
            "name": "RUJAK",
            "amount": {
                "value": "250000.00",
                "currency": "IDR"
            },
            "category": "0017",
            "qty": 1
        }
    ],
    "customerDetails": {
        "firstName": "Quality",
        "lastName": "Assurance",
        "email": "qa@ifortepay.id",
        "phone": "089121313131"
    },
    "sellers": [
        {
            "id": "123",
            "name": "Qa Tester",
            "url": "https://www.google.com/",
            "sellerIdNumber": "121313141",
            "email": "qa@ifortepay.id",
            "address": {
                "firstName": "Quality",
                "lastName": "Assurance",
                "address": "Jakarta",
                "city": "Jaksel",
                "postalCode": "testing9",
                "phone": "089121313131",
                "countryCode": "121313"
            }
        }
    ],
    "callbackUrl": "https://mcpid.proxy.beeceptor.com/BNPL",
    "validityPeriod": ""
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'X-TIMESTAMP: 2020-12-18T10:55:00+07:00',
    'X-SIGNATURE: l/pk9PCr83BdMJ/r6RSRMxFk8kKt4vYPNwNy5PJl1p7Y9k0M+NijyFV97/MbyBtv4jO7FKbj83odFb32iYNyKnI/rai6QnovnoOBKSl3dg41sMb7RRediwt6JWa8VjFdkWaJQX4YGeP4SNG2QTT0ALAmL6fwr1pWi1V3fsPi73js1qNKbhEirCaT+o3uM8GKSreDnhWHDCSUWWMKHXAYGm68eOxLmUw1APqziHnYEFhbpv+kINX2zT94L2oi2AEIcVCl7UwZh/7ujf1oHj72GR30tvEyj6MTkGGTXNbkrH1aGd0BxuCwoU0JCme3bO34jjPInXlWTthNbeIbIdqwFQ==',
    'X-PARTNER-ID: MC2025059906',
    'X-EXTERNAL-ID: 69046731945362',
    'CHANNEL-ID: PL001'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Response

ParameterData TypeMandatoryLengthDescription
responseCodeStringM7Response code
responseMessageStringM150Response description
partnerReferenceNoStringM64ID transaction generated by the merchant
referenceNoStringM64ID transaction generated by Ifortepay
paymentChannelStringM30Description name payment channel
paymentDetailsObjectM
paymentDetails.amountObjectAmount of the transaction
paymentDetails.amount.valueStringM16,2
paymentDetails.amount.currencyStringM3
paymentDetails.totalAmountObjectTotal amount of the transaction
paymentDetails.totalAmount.valueStringM16,2If it's IDR then value includes 2 decimal digits. e.g. IDR 10.000,- = 10000.00
paymentDetails.totalAmount.currencyStringM3Currency
qrContentStringMQR string
qrUrlStringMQR URL for downloading QR image
latestTransactionStatusStringM2Refer to Appendix 1 - Transaction Status for specific transaction statuses
transactionStatusDescStringM50Description of transaction status
createdAtStringM25Created time
validityPeriodStringM

Example Response

Details
{
    "responseCode": "2009200",
    "responseMessage": "Successful",
    "partnerReferenceNo": "41199219261288",
    "referenceNo": "01970fb5-cd98-77f2-96c2-9ca28f5d83a4",
    "paymentChannel": "INDODANA",
    "paymentDetails": {
        "amount": {
            "value": "250000.00",
            "currency": "IDR"
        },
        "totalAmount": {
            "value": "250000.00",
            "currency": "IDR"
        }
    },
    "qrContent": "0002I101021226890015id.indodana.www011926f38e41-16b6-11f0-023626f38e41-16b6-11f0-b541-3f3594b467ec030326f5802ID5913Ifortepay POS62400136c181bdc3-3aa7-11f0-8b92-a12b471c87b0",
    "qrUrl": "https://storage.googleapis.com/com-indodanafinance-sandbox/offline/qr/c181bdc3-3aa7-11f0-8b92-a12b471c87b0.jpg?GoogleAccessId=offline-sandbox-signedurl@tmf-stg.iam.gserviceaccount.com&Expires=1748315863&Signature=ghZGj8XdMTli0KLr%2BqxCWUXgprw5NAfeBR8dDYTm4fB7HYVQbikMJkMIvgFm2ClIRrJzm%2B6jIvqsZexPwz9UjDcc28YFnVxcnX%2BjyZz8WhLjj7mGAC5itg0kSeh0y8OfPOm3hhuH2CRvqe0ZPXJpOChiHMYdWbxTr25maOvPugFqoPaw6npEInqlXz9uGktTxKp6%2BFLtV5ckVkCN%2FORGS9rZR5UC4Da0HcVmJ4enR931tPrv7szfq1P%2FhkmXC7k9A2L5rpEAqWCvjwjaaL0kPBMl9Huyi0Fvsjei3zO4xL8ALwBOjuSm%2F%2F213eWGzpApBfHOK%2BlofG2H7cWq%2BuTCHA%3D%3D",
    "latestTransactionStatus": "01",
    "transactionStatusDesc": "Initiated",
    "createdAt": "2025-05-27T10:07:43+07:00",
    "validityPeriod": "2025-05-27T10:22:42+07:00"
}

iFortepay API Documentation