QuickPay Transaction API
Seamless and hassle free checkout experience process
This section will show you how you can tokenize the user and make the payment more seamless with Indodana. With this QuickPay checkout integration, Indodana user can enjoy the easy & fast checkout experience on your platform. Contrast to normal checkout, user with QuickPay checkout activated won't have to input credentials / sign-in to Indodana platform on every transaction. The user will directly proceed to checkout your transaction if we don't detect any suspicious behavior after you redirect the user to our checkout page.
This section only covers the specific QuickPay API integration, so we recommend you to read the Direct API Integration first for general integration information.
This section will guide you on how to get the Indodana QuickPay user token. The Indodana QuickPay user token is a long live unique token per-user that you can store in your system. You need to pass this Indodana QuickPay user token when checkout to enable seamless transaction experience without user sign-in process.
Indodana provides two tokenization flows :
- Explicit user tokenization from merchant's platform menu The explicit user tokenization is a flow when user explicitly says that he/she wants to tokenize Indodana account on your platform menu. Upon successful authorization, your system will get the Indodana QuickPay user token via callback request.
- User tokenization on checkout User tokenization on checkout is a flow when user does tokenization while he/she checkouts transactions on your platform using Indodana. Upon successful transaction, your system will get Indodana QuickPay user token via callback request.
post
https://{baseUrl}
/v1/connect
Indodana Connect Account
When you initiate checkout with
null
/ invalid Indodana QuickPay user token, it will give the signed-in user an option to do tokenization on Indodana checkout page. With this method, you don't need to create a dedicated menu for connecting Indodana account to your platform.post
https://{baseUrl}
/v3/payment_calculation
Get Payment Calculation
post
https://{baseUrl}
/v3/checkout_url
Purchase Transaction Checkout
For object specification of Transaction, Customer, Seller, Address, and Metadata can refer to this API reference.
post
https://{baseUrl}
/v1/revoke_user_token
QuickPay User Token Revocation
get
https://{baseUr}
/v1/users/check_eligibility
User QuickPay Eligibility
get
https://{base_url}
/v1/user_details
User Credit Details
API Request
API Response
{
"merchantUserKey": "+6281221815339",
"backToStoreUrl": "https://example.merchant/",
"phoneNumber": "+6281221815339"
}
{
"status": "OK",
"requestId": "4dbc33a5-86ee-11eb-a301-cddc223655fd",
"redirectUrl": “https://quickpay.indodana.id/product-installment/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXF1ZXN0SWQiOiI0ZGJjMzNhNS04NmVlLTExZWItYTMwMS1jZGRjMjIzNjU1ZmQiLCJtZXJjaGFudElkIjoiNGZlZjBjY2EtNmE3Ni0xMWU5LWE5MjMtMTY4MWJlNjYzZDNlIiwic2FsdCI6MTYxNTk2NDM2MiwiaWF0IjoxNjE1OTY0MzYyLCJleHAiOjE2MTU5Njc5NjJ9.xWv0CJPUC_saPOIj_gxVYPOSaAY-PV94ZsVL_YRNZoo”
}
API Request
API Response with QuickPay [200]
API Response without QuickPay [200]
{
"transactionDetails": {
"merchantOrderId": "<MERCHANT-ORDER-ID>",
"amount": 4500000,
"items": [
{
"id": "<MERCHANT-ITEM-ID>",
"name": "iPhone 6S",
"category": "<ITEM-CATEGORY>",
"price": 4500000,
"url": "http://merchant.com/phone/iphone-6s",
"imageUrl": "http://merchant.com/phone/iphone-6s/cover.jpg",
"type": "Mobile Phone",
"quantity": 1,
"parentType": "SELLER",
"parentId": "<MERCHANT-SELLER-ID>"
}
]
},
"customerDetails": {
"firstName": "First",
"lastName": "Last",
"email": "[email protected]",
"phone": "081212345678"
},
"sellers": [
{
"id": "<MERCHANT-SELLER-ID>",
"name": "Penjual iPhone",
"url": "https://merchant.com/shop",
"sellerIdNumber": "<MERCHANT-SELLER-ID-NUMBER>",
"email": "[email protected]",
"officialSeller": false,
"address": {
"firstName": "Merchant",
"lastName": "Seller",
"address": "Kelapa Gading",
"city": "Jakarta Utara",
"postalCode": "11240",
"phone": "081812345678",
"countryCode": "ID"
}
}
],
"billingAddress": {
"firstName": "First",
"lastName": "Last",
"address": "Tomang",
"city": "Jakarta Barat",
"postalCode": "11430",
"phone": "081987654321",
"countryCode": "ID"
},
"shippingAddress": {
"firstName": "First",
"lastName": "Last",
"address": "Tomang",
"city": "Jakarta Barat",
"postalCode": "11430",
"phone": "081987654321",
"countryCode": "ID"
},
"paymentType": "3_months",
"approvedNotificationUrl": "https://payment-notification.merchant.com/transaction-approval-handler",
"cancellationRedirectUrl": "http://merchant.com/phone/iphone-6s",
"backToStoreUrl": "http://merchant.com/phone/iphone-6s",
"expirationAt": "2019-12-31T18:00:00+07:00"
}
{
"status": "OK",
"redirectUrl": "https://quickpay.indodana.id/product-installment/quickpay?purchaseTransactionId=aa5023a7-8803-11eb-9b88-7947f72d641d&pid=wat-wat&c=checkout&utm_source=wat-wat&utm_campaign=wat-wat&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwdXJjaGFzZVRyYW5zYWN0aW9uSWQiOiJhYTUwMjNhNy04ODAzLTExZWItOWI4OC03OTQ3ZjcyZDY0MWQiLCJ1c2VySWQiOiI1ZjUwMDBkMS1mM2NlLTQ4NDgtYWNiNS0xZmM5YzZkZjU2ZTAiLCJpc3MiOiJJTkRPREFOQSIsInNjb3BlIjoiUVVJQ0tQQVkiLCJpYXQiOjE2MTYwODM0ODgsImV4cCI6MTYxNjA4NTI4OH0.tOEOdk44iMxCO8quk2_mvcc4A38oZL3iE0Kdh_zkCmY",
"transactionId": "aa5023a7-8803-11eb-9b88-7947f72d641d"
}
{
"status": "OK",
"redirectUrl": "https://quickpay.indodana.id/product-installment/payment?purchaseTransactionId=d820eb22-8802-11eb-9b88-c5e7c9c9cd17&pid=wat-wat&c=checkout&utm_source=wat-wat&utm_campaign=wat-wat&targetTab=Daftar&T38044Flow=false",
"transactionId": "d820eb22-8802-11eb-9b88-c5e7c9c9cd17"
}
Note that for this section, the API Request would be the payload that the merchant receives in their endpoint, and the API Response would be the payload that the merchant expected to send to Indodana as acknowledgement.
API Request
API Response (OK)
API Response (Reject)
{
"amount": 1876000.00,
"paymentType": "30_days",
"transactionStatus": "PAID",
"merchantOrderId": "<MERCHANT-ORDER-ID>",
"transactionTime": "2018-12-21T18:18:18+07:00",
"transactionId": "<INDODANA-TRANSACTION-ID>"
}
{
"status":"OK",
"message":"Message from merchant if any"
}
{
"status":"REJECT",
"message":"Message from merchant if any"
}
API Request
API Response with QuickPay [200]
API Response without QuickPay [200]
{
"amount": 4500000,
"items": [
{
"id": "<MERCHANT-ITEM-ID>",
"name": "iPhone 6S",
"category": "<ITEM-CATEGORY>",
"price": 4500000,
"url": "http://merchant.com/phone/iphone-6s",
"imageUrl": "http://merchant.com/phone/iphone-6s/cover.jpg",
"type": "Mobile Phone",
"quantity": 1,
"parentType": "SELLER",
"parentId": "<MERCHANT-SELLER-ID>"
}
]
}
{
"status": "OK",
"payments": [
{
"downPayment": 0,
"paymentType": "Bayar dalam 3 bulan",
"amount": 9450000,
"installmentAmount": 10584000,
"rate": 4,
"monthlyInstallment": 3528000,
"discountedMonthlyInstallment": 0,
"tenure": 3,
"id": "3_months",
"currentAvailableLimitBalance": 11000000,
"isEligible": true
},
{
"downPayment": 0,
"paymentType": "Bayar dalam 6 bulan",
"amount": 9450000,
"installmentAmount": 11718000,
"rate": 4,
"monthlyInstallment": 1953000,
"discountedMonthlyInstallment": 0,
"tenure": 6,
"id": "6_months",
"currentAvailableLimitBalance": 12000000,
"isEligible": true
},
{
"downPayment": 0,
"paymentType": "Bayar dalam 12 bulan",
"amount": 9450000,
"installmentAmount": 13986000,
"rate": 4,
"monthlyInstallment": 1165500,
"discountedMonthlyInstallment": 0,
"tenure": 12,
"id": "12_months",
"currentAvailableLimitBalance": 13000000,
"isEligible": false
}
]
}
{
"status": "OK",
"payments": [
{
"downPayment": 0,
"paymentType": "Bayar dalam 3 bulan",
"amount": 9450000,
"installmentAmount": 10584000,
"rate": 4,
"monthlyInstallment": 3528000,
"discountedMonthlyInstallment": 0,
"tenure": 3,
"id": "3_months"
},
{
"downPayment": 0,
"paymentType": "Bayar dalam 6 bulan",
"amount": 9450000,
"installmentAmount": 11718000,
"rate": 4,
"monthlyInstallment": 1953000,
"discountedMonthlyInstallment": 0,
"tenure": 6,
"id": "6_months"
},
{
"downPayment": 0,
"paymentType": "Bayar dalam 12 bulan",
"amount": 9450000,
"installmentAmount": 13986000,
"rate": 4,
"monthlyInstallment": 1165500,
"discountedMonthlyInstallment": 0,
"tenure": 12,
"id": "12_months"
}
]
}
This step is used to retrieve the Indodana QuickPay user token from callback after the authorization from user already completed.
You need to inform us the URL to be registered on Indodana side. After successful store token in your system, you need to response with status code 200 like defined in the response example tab below to acknowledge the token.
API Request
API Response OK [200]
{
"type": "INDODANA_QUICKPAY_USER_TOKEN",
"data": {
"requestId": "<requestId>",
"merchantUserKey": "<merchantUserKey>",
"token": "<token>",
"isActive": true
}
}
{
"status":"OK",
"message":"Message from merchant if any"
}