Appearance
Generate Checkout URL
Information
Generate Checkout Transaction is a feature used to confirm the installment tenure and payment with Indodana BNPL.
| Path | /v1.1/bnpl/generate-checkout-url |
|---|---|
| HTTP Method | POST |
| Service Code | 91 |
| 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. Allowed alphanumeric and special characters. |
| 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 |
| paymentDetails.isCustomerPayingFee | Boolean | O | Default is false | |
| 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 |
| 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 | |
| tenure | String | O | Installment options chosen by the customer. Possible values: 1_months, 3_months, 6_months, 12_months, 24_months | |
| 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"
}
],
"tenure": "",
"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://mcpid.proxy.beeceptor.com/BNPL",
"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"
}
],
"tenure": "",
"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://mcpid.proxy.beeceptor.com/BNPL",
"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"
}
],
"tenure": "",
"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://mcpid.proxy.beeceptor.com/BNPL",
"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"
}
],
"tenure": "",
"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://mcpid.proxy.beeceptor.com/BNPL",
"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"
}