Appearance
Generate Checkout URL
Information
Generate Checkout Transaction is a feature used to confirm the installment tenure and payment with PayLater.
The Generate Checkout URL method is designed for online transactions. The merchant generates a payment URL through the API and presents the URL to the customer.
When the customer opens the payment URL, they will be redirected to the payment page within the selected PayLater application to complete the transaction.
| Field | Value |
|---|---|
| Path | /{version}/bnpl/generate-checkout-url |
| HTTP Method | POST |
| Service Code | 91 |
| Version | v1.1 |
| Type Format | JSON |
Request Body
Details
| Parameter | Data Type | Mandatory | Length | Description |
|---|---|---|---|---|
| partnerReferenceNo | String | M | 64 | Transaction identifiers are generated by the merchant and must be unique per request. |
| paymentDetails | Object | M | ||
| paymentDetails.amount | Object | M | ||
| paymentDetails.amount.value | String | M | 16,2 | Total amount of customer’s transaction |
| paymentDetails.amount.currency | String | M | 3 | Currency (Format: ISO4217), fixed value: IDR |
| itemDetails | Array of Objects | M | ||
| itemDetails.itemId | String | M | 64 | Can 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.name | String | M | 128 | Product name |
| itemDetails.amount | Object | M | Product price | |
| itemDetails.amount.value | String | M | 16,2 | If it's IDR then the value includes 2 decimal digits. e.g. IDR 10.000,- will be placed with 10000.00 |
| itemDetails.amount.currency | String | M | 3 | Currency (Format: ISO4217), fixed value: IDR |
| itemDetails.url | String | M | 256 | URL of the product on the merchant’s site/platform |
| itemDetails.imageUrl | String | O | 256 | URL of the image product on the merchant’s site/platform |
| itemDetails.category | Enum | M | 4 | Category of the product refer to BNPL - Table Category |
| itemDetails.qty | Integer | M | 8 | Quantity of the product |
| itemDetails.parentType | String | M | Possible values: SELLER | |
| itemDetails.parentId | String | M | It will correspond to the SELLER ID if the parentType is SELLER | |
| customerDetails | Object | M | Customer details | |
| customerDetails.firstName | String | M | 16 | Customer’s first name |
| customerDetails.lastName | String | O | 16 | Customer’s last name |
| customerDetails.email | String | M | 64 | The customer’s email that is registered in the merchant site/platform |
| customerDetails.phone | String | M | 16 | The customer’s phone that is registered in the merchant site/platform |
| sellers | Array of Objects | M | Detail of the sellers. May contain more than 1 seller. | |
| sellers.id | String | M | 16 | Seller’s ID |
| sellers.name | String | M | 16 | Seller’s name |
| sellers.url | String | M | 256 | Seller’s shop URL |
| sellers.sellerIdNumber | String | O | 32 | Seller's identifier number (KTP / SIM / etc) |
| sellers.email | String | M | 64 | Seller’s email |
| sellers.address | Object | O | Seller’s address | |
| sellers.address.firstName | String | M | 16 | Seller’s first name |
| sellers.address.lastName | String | O | 16 | Seller’s last name |
| sellers.address.address | String | M | 256 | Seller’s address |
| sellers.address.city | String | M | 32 | Seller’s city |
| sellers.address.postalCode | String | M | 8 | Seller’s postal code |
| sellers.address.phone | String | M | 16 | Seller’s phone number |
| sellers.address.countryCode | String | M | 16 | Seller’s country code, using ISO 3166-1 alpha-3 (e.g. IDN) |
| billingAddress | Object | M | Customer billing address for the transaction | |
| billingAddress.firstName | String | M | 16 | The first name of the customer’s billing address |
| billingAddress.lastName | String | O | 16 | The last name of the customer’s billing address |
| billingAddress.address | String | M | 256 | The address of the customer’s billing address |
| billingAddress.city | String | M | 32 | The city of the customer’s billing address |
| billingAddress.postalCode | String | M | 8 | The postal code of the customer’s billing address |
| billingAddress.phone | String | M | 16 | The phone number of the customer’s billing address |
| billingAddress.countryCode | String | M | 16 | The country code of the customer’s billing address |
| shippingAddress | Object | M | Customer shipping address for the transaction. (Required only for goods; for service/digital product is not required) | |
| shippingAddress.firstName | String | M | 16 | The first name of the customer’s shipping address |
| shippingAddress.lastName | String | O | 16 | The last name of the customer’s shipping address |
| shippingAddress.address | String | M | 256 | The address of the customer’s shipping address |
| shippingAddress.city | String | M | 32 | The city of the customer’s shipping address |
| shippingAddress.postalCode | String | M | 8 | The postal code of the customer’s shipping address |
| shippingAddress.phone | String | M | 16 | The phone number of the customer’s shipping address |
| shippingAddress.countryCode | String | M | 16 | The country code of the customer’s shipping address |
| callbackUrl | String | M | Merchant payment notification URL | |
| cancelReturnUrl | String | O | Redirect to the merchant URL if the customer chooses to cancel the payment before completion | |
| returnUrl | String | O | Redirect to the merchant URL after the transaction is complete | |
| validityPeriod | String | O | Payment validity time (ISO-8601). Min: 15 mins, Max: 24 hours |
Example Request
Details
sh
curl --location 'https://api-stage.ifortepay.id/v1.1/bnpl/generate-checkout-url' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-12-18T10:55:00+07:00' \
--header 'X-SIGNATURE: BVg81WjD/pwjOKcoG967LC+vk0BKgxAipx3a7oRLigV2Mo4eVOjgvv/GGzLRyCOBlkN5wFvC59o4ctLRgrWWDWK5o3UT49y4P084tWRZyWSHQI+LOQBtg+U7b5rCCyvoYLskw0YCAK+8gjqPjrMZ+lQI4s51EhBxc/4uMmGhmM/taN3/0xSEUtYCxQf8hkLR7lYlAKSmExG8NQvzQUltQxkcjfpQBsOoSQfVrkqa2Kg74QlidD39t2JIW9t3fCEjPt8oHB8oxOkqe5lviEVgqDn2ZZXSrpgnpNPlWJqqrH+nXRLjEhGZNs/00l4+ApTUBIDy7z2xjEhf+G5JjyIaMg==' \
--header 'X-PARTNER-ID: MC2025059906' \
--header 'X-EXTERNAL-ID: 13953302921462' \
--header 'CHANNEL-ID: PL001' \
--data-raw '{
"partnerReferenceNo": "96943614172822",
"paymentDetails": {
"amount": {
"value": "350000.00",
"currency": "IDR"
}
},
"itemDetails": [
{
"itemId": "FOOD01",
"name": "RUJAK",
"amount": {
"value": "350000.00",
"currency": "IDR"
},
"url": "https://www.google.com/",
"imageUrl": "",
"category": "0017",
"qty": 1,
"parentType": "SELLER",
"parentId": "123"
}
],
"customerDetails": {
"firstName": "Quality",
"lastName": "Assurance",
"email": "[email protected]",
"phone": "089121313131"
},
"sellers": [
{
"id": "123",
"name": "Qa Tester",
"url": "https://www.google.com/",
"sellerIdNumber": "121313141",
"email": "[email protected]",
"address": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
}
}
],
"billingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"shippingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"callbackUrl": "https://merchant-callback-url.com/",
"cancelReturnUrl": "https://www.google.com/",
"returnUrl": "https://www.google.com/",
"validityPeriod": ""
}'go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-stage.ifortepay.id/v1.1/bnpl/generate-checkout-url"
method := "POST"
payload := strings.NewReader(`{
"partnerReferenceNo": "96943614172822",
"paymentDetails": {
"amount": {
"value": "350000.00",
"currency": "IDR"
}
},
"itemDetails": [
{
"itemId": "FOOD01",
"name": "RUJAK",
"amount": {
"value": "350000.00",
"currency": "IDR"
},
"url": "https://www.google.com/",
"imageUrl": "",
"category": "0017",
"qty": 1,
"parentType": "SELLER",
"parentId": "123"
}
],
"customerDetails": {
"firstName": "Quality",
"lastName": "Assurance",
"email": "[email protected]",
"phone": "089121313131"
},
"sellers": [
{
"id": "123",
"name": "Qa Tester",
"url": "https://www.google.com/",
"sellerIdNumber": "121313141",
"email": "[email protected]",
"address": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
}
}
],
"billingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"shippingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"callbackUrl": "https://merchant-callback-url.com/",
"cancelReturnUrl": "https://www.google.com/",
"returnUrl": "https://www.google.com/",
"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", "BVg81WjD/pwjOKcoG967LC+vk0BKgxAipx3a7oRLigV2Mo4eVOjgvv/GGzLRyCOBlkN5wFvC59o4ctLRgrWWDWK5o3UT49y4P084tWRZyWSHQI+LOQBtg+U7b5rCCyvoYLskw0YCAK+8gjqPjrMZ+lQI4s51EhBxc/4uMmGhmM/taN3/0xSEUtYCxQf8hkLR7lYlAKSmExG8NQvzQUltQxkcjfpQBsOoSQfVrkqa2Kg74QlidD39t2JIW9t3fCEjPt8oHB8oxOkqe5lviEVgqDn2ZZXSrpgnpNPlWJqqrH+nXRLjEhGZNs/00l4+ApTUBIDy7z2xjEhf+G5JjyIaMg==")
req.Header.Add("X-PARTNER-ID", "MC2025059906")
req.Header.Add("X-EXTERNAL-ID", "13953302921462")
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": "96943614172822",
"paymentDetails": {
"amount": {
"value": "350000.00",
"currency": "IDR"
}
},
"itemDetails": [
{
"itemId": "FOOD01",
"name": "RUJAK",
"amount": {
"value": "350000.00",
"currency": "IDR"
},
"url": "https://www.google.com/",
"imageUrl": "",
"category": "0017",
"qty": 1,
"parentType": "SELLER",
"parentId": "123"
}
],
"customerDetails": {
"firstName": "Quality",
"lastName": "Assurance",
"email": "[email protected]",
"phone": "089121313131"
},
"sellers": [
{
"id": "123",
"name": "Qa Tester",
"url": "https://www.google.com/",
"sellerIdNumber": "121313141",
"email": "[email protected]",
"address": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
}
}
],
"billingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"shippingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"callbackUrl": "https://merchant-callback-url.com/",
"cancelReturnUrl": "https://www.google.com/",
"returnUrl": "https://www.google.com/",
"validityPeriod": ""
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://api-stage.ifortepay.id/v1.1/bnpl/generate-checkout-url',
headers: {
'Content-Type': 'application/json',
'X-TIMESTAMP': '2020-12-18T10:55:00+07:00',
'X-SIGNATURE': 'BVg81WjD/pwjOKcoG967LC+vk0BKgxAipx3a7oRLigV2Mo4eVOjgvv/GGzLRyCOBlkN5wFvC59o4ctLRgrWWDWK5o3UT49y4P084tWRZyWSHQI+LOQBtg+U7b5rCCyvoYLskw0YCAK+8gjqPjrMZ+lQI4s51EhBxc/4uMmGhmM/taN3/0xSEUtYCxQf8hkLR7lYlAKSmExG8NQvzQUltQxkcjfpQBsOoSQfVrkqa2Kg74QlidD39t2JIW9t3fCEjPt8oHB8oxOkqe5lviEVgqDn2ZZXSrpgnpNPlWJqqrH+nXRLjEhGZNs/00l4+ApTUBIDy7z2xjEhf+G5JjyIaMg==',
'X-PARTNER-ID': 'MC2025059906',
'X-EXTERNAL-ID': '13953302921462',
'CHANNEL-ID': 'PL001'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api-stage.ifortepay.id/v1.1/bnpl/generate-checkout-url',
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": "96943614172822",
"paymentDetails": {
"amount": {
"value": "350000.00",
"currency": "IDR"
}
},
"itemDetails": [
{
"itemId": "FOOD01",
"name": "RUJAK",
"amount": {
"value": "350000.00",
"currency": "IDR"
},
"url": "https://www.google.com/",
"imageUrl": "",
"category": "0017",
"qty": 1,
"parentType": "SELLER",
"parentId": "123"
}
],
"customerDetails": {
"firstName": "Quality",
"lastName": "Assurance",
"email": "[email protected]",
"phone": "089121313131"
},
"sellers": [
{
"id": "123",
"name": "Qa Tester",
"url": "https://www.google.com/",
"sellerIdNumber": "121313141",
"email": "[email protected]",
"address": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
}
}
],
"billingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"shippingAddress": {
"firstName": "Quality",
"lastName": "Assurance",
"address": "Jakarta",
"city": "Jaksel",
"postalCode": "17152",
"phone": "089121313131",
"countryCode": "121313"
},
"callbackUrl": "https://merchant-callback-url.com/",
"cancelReturnUrl": "https://www.google.com/",
"returnUrl": "https://www.google.com/",
"validityPeriod": ""
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-TIMESTAMP: 2020-12-18T10:55:00+07:00',
'X-SIGNATURE: BVg81WjD/pwjOKcoG967LC+vk0BKgxAipx3a7oRLigV2Mo4eVOjgvv/GGzLRyCOBlkN5wFvC59o4ctLRgrWWDWK5o3UT49y4P084tWRZyWSHQI+LOQBtg+U7b5rCCyvoYLskw0YCAK+8gjqPjrMZ+lQI4s51EhBxc/4uMmGhmM/taN3/0xSEUtYCxQf8hkLR7lYlAKSmExG8NQvzQUltQxkcjfpQBsOoSQfVrkqa2Kg74QlidD39t2JIW9t3fCEjPt8oHB8oxOkqe5lviEVgqDn2ZZXSrpgnpNPlWJqqrH+nXRLjEhGZNs/00l4+ApTUBIDy7z2xjEhf+G5JjyIaMg==',
'X-PARTNER-ID: MC2025059906',
'X-EXTERNAL-ID: 13953302921462',
'CHANNEL-ID: PL001'
),
));
$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 |
| partnerReferenceNo | String | M | 64 | ID transaction generated by the merchant |
| referenceNo | String | M | 64 | ID transaction generated by Ifortepay |
| paymentChannel | String | M | 30 | Description name payment channel |
| paymentDetails | Object | M | ||
| paymentDetails.amount | Object | M | Amount of the transaction | |
| paymentDetails.amount.value | String | M | 16,2 | |
| paymentDetails.amount.currency | String | M | 3 | |
| paymentDetails.totalAmount | Object | M | ||
| paymentDetails.totalAmount.value | String | M | 16,2 | Total amount of the transaction. If IDR, then includes 2 decimal digits. e.g. IDR 10,000 = 10000.00 |
| paymentDetails.totalAmount.currency | String | M | 3 | Currency |
| redirectUrl | String | M | Checkout payment page URL to display for the customer | |
| latestTransactionStatus | String | M | 2 | Refer to Appendix 1 - Transaction Status for specific transaction statuses |
| transactionStatusDesc | String | M | 50 | Description of transaction status |
| createdAt | String | M | 25 | Created time |
| validityPeriod | String | M | 25 | The time when the payment page URL is valid |
Example Response
Details
{
"responseCode": "2009100",
"responseMessage": "Successful",
"partnerReferenceNo": "96943614172822",
"referenceNo": "01970fd2-9277-743e-b87b-843a10c949a5",
"paymentChannel": "INDODANA",
"paymentDetails": {
"amount": {
"value": "350000.00",
"currency": "IDR"
},
"totalAmount": {
"value": "350000.00",
"currency": "IDR"
}
},
"redirectUrl": "https://sandbox01.indodanafinance.co.id/product-installment/payment?purchaseTransactionId=25778199-3aac-11f0-8b92-47f1cfaa47d3&pid=IFORTE%20Chain%20I&c=checkout&utm_source=IFORTE%20Chain%20I&utm_campaign=IFORTE%20Chain%20I",
"latestTransactionStatus": "01",
"transactionStatusDesc": "Initiated",
"createdAt": "2025-05-27T10:39:08+07:00",
"validityPeriod": "2025-05-27T10:54:07+07:00"
}