Getting Started
Introduction
Simplifying Buying
Kredivo checkout API allows you to implement our checkout process so Kredivo users can make a transaction on your platform, be it web based or app based. Our checkout API now comes in many variations, each one suitable for a specific need. Each variation differs by the parameters that you will be required to pass, but is the same API at its core. The checkout API can be broken down into the following use cases: 2-click checkout, 0-click checkout, QR checkout, and personal loan transaction. 1. 2-click checkout: User will need to enter his/her Kredivo phone number & PIN, followed by an OTP, to do a transaction 2. 0-click checkout: This feature allows a user to tokenize his/her Kredivo account on your platform. Once tokenized, any subsequent transaction can be done without having the user enter his/her Kredivo credentials (in some cases, OTP might still be required) 3. QR checkout: Our solution for offline transaction. Available in 2 flavors: dynamic (unique per transaction ID) or static (unique per store/merchant) 4. Personal loan transaction: Lets you offer Kredivo personal loan service
Optimized for all devices | More sales with no risk |
---|---|
Kredivo Checkout adapts seamlessly to both desktops and mobile devices. This means that you instantly get the same conversion on mobiles as on desktops. One-click buying increases conversion by an additional 29% for returning customers. | Kredivo assumes all risk for both the customer and merchant. That means no more charge-backs for you as a merchant. |
Try Kredivo Checkout
We have set up a demo checkout so that you can try it out yourself, just go to one of our partner sites.
Preparation
Prepare your site
To complete the Kredivo Checkout integration process as simply and quickly as possible, we recommend that you start by setting up the following.
Checkout page and confirmation page
Both the checkout page and the checkout confirmation page are hosted by you. Both these pages must include a div that you will populate with the Kredivo Checkout button. You will learn what the Kredivo Checkout is in our first tutorial, embed the checkout. Kredivo Checkout is responsive, which means that it will always use the full width of the container.
Tip! Place the Kredivo Checkout button so that your customers can see it instantly after loading the checkout page without scrolling. Provide clear calls to action to improve your conversion rates, such as “Finalize your purchase now”.
An example of what the checkout looks like on different devices.
Push notification URI
As you will learn in the Confirm purchase tutorial, Kredivo needs a URI to inform you of the order status. You will need to include a placeholder in the push URI, which Kredivo will then replace with the order URI when we send the push request. You can download example push URI Here
Developer Help
If you need any help with the documentation and sandbox environment, please email merchops@finaccel.co and we will respond as soon as possible.
If you do not have a merchant account, please email merchops@finaccel.co to get setup with one.
Developer FAQ
- Does Kredivo work on desktop and mobile? Yes, desktop, mobile, and tablet web.
- I am not a retailer but I want to offer Kredivo financial products in my site/app do you have an API for that? See previous answer. If you are interested in using Kredivo for your site/app, email us at merchops@finaccel.co
- Is Kredivo another payment processor? No. Kredivo is a point of sale credit solution for your customers.
2-click Checkout
This is the most basic checkout feature suitable for either a web based platform or app based platform. Here is the API structure:
First, you will need to call the checkout API by passing all the required parameters. If successful, you will receive a redirect URL as a response. This URL will redirect the user to Kredivo payment page. There are at least 3 components that are required to obtain the payment page:
- server_key
You will need a server_key to interact with the Kredivo server. Please send an email to merchops@finaccel.co to sign up as an Kredivo merchant and get the server_key.
- Order Id
- Transaction Amount
Initiate 2-click Checkout
To initiate 2-click checkout with Kredivo, you will need to call checkout_url API.
Using the API:
The Request JSON structured like this:
{
"server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
"payment_type":"30_days",
"client_user_key": "rangge@finaccel.co",
"transaction_details": {
"amount":6505000,
"order_id":"KD14721",
"items": [
{
"id":"BB12345678",
"name":"iPhone 5S",
"price":6000000,
"type":"Smartphone",
"url":"http://merchant.com/cellphones/iphone5s_64g",
"quantity":1
},
{
"id":"AZ14565678",
"name":"Hailee Sneakers Blink Silver",
"price":250000,
"url":"http://merchant.com/fashion/shoes/sneakers-blink-shoes",
"type":"Sneakers",
"quantity":2,
"parent_type":"SELLER",
"parent_id":"SELLER456"
},
{
"id":"taxfee",
"name":"Tax Fee",
"price":1000,
"quantity":1
},
{
"id":"shippingfee",
"name":"Shipping Fee",
"price":9000,
"quantity":1,
"parent_type":"SELLER",
"parent_id":"SELLER456"
},
{
"id":"discount",
"name":"Discount",
"price":5000,
"quantity":1
}
]
},
"sellers":[
{
"id":"SELLER123",
"name":"Sunrise",
"email": "sunrise@gmail.com",
"url":"https://onlineshop/seller/sunrise",
"address" : {
"first_name":"Irfan",
"last_name":"Sutandro",
"address":"Jalan Tentara Pelajar no 49",
"city":"Jakarta Utara",
"postal_code":"12960",
"phone":"08123456789",
"country_code":"IDN"
}
},
{
"id":"SELLER456",
"name":"Toko Bagus",
"email": "tokobagus@gmail.com",
"url":"https://onlineshop/seller/tokobagus",
"address" : {
"first_name":"Toto",
"last_name":"Wahyuni",
"address":"Jalan Krinci raya IX no 1",
"city":"Jakarta Selatan",
"postal_code":"12960",
"phone":"08123456789",
"country_code":"IDN"
}
}
],
"customer_details": {
"first_name":"Oemang",
"last_name":"Tandra",
"email":"alie@satuduatiga.com",
"phone":"081513114262"
},
"billing_address": {
"first_name":"Oemang",
"last_name":"Tandra",
"address":"Jalan Teknologi Indonesia No. 25",
"city":"Jakarta",
"postal_code":"12960",
"phone":"081513114262",
"country_code":"IDN"
},
"shipping_address": {
"first_name":"Oemang",
"last_name":"Tandra",
"address":"Jalan Teknologi Indonesia No. 25",
"city":"Jakarta",
"postal_code":"12960",
"phone":"081513114262",
"country_code":"IDN"
},
"metadata": {
"ip_address":"192.168.88.1",
"user_agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
},
"push_uri":"https://api.merchant.com/push",
"back_to_store_uri":"https://merchant.com"
}
The Response returns JSON structured like this:
Positive Response :
{
"status":"OK",
"message":"Message if any",
"redirect_url":"https://sandbox.kredivo.com/kredivo/v2/signin?tk=XXX"
}
Negative Response:
{
"status": "ERROR",
"error": {
"message": "Field secret_key is INCORRECT.",
"kind": "APIException"
}
}
and
{
"error": {
"kind": "deprecated",
"message": "This order is already PROCESSED.",
"code": null
},
"status": "ERROR"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
payment_type | String | Required. You can set default value with 30_days or 12_months. Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
client_user_key | String | Optional. Required if tokenize_user = true. Should be unique per user on client side |
transaction_details | Transaction | Details of the transaction |
customer_details | Customer | Required. Details of the customer |
sellers | Seller | Optional (compulsory for marketplaces). Details of the seller for marketplaces |
billing_address | Address | Optional. Billing address of the customer/shopper |
shipping_address | Address | Required. Shipping address of the customer/shopper. shipping is required for goods (excluding ticket/voucher). |
metadata | Metadata | Optional. Object containing the metadata parameters. |
push_uri | String | Required. URI of merchant push-notification API (HTTP POST). |
user_cancel_uri | String | Optional. URI that the customer is sent to if the customer chooses to cancel the Kredivo payment before completion. |
back_to_store_uri | String | Required. URI of your store page. Used on the settlement page. Kredivo’s server will pass some params to this uri for merchant’s server acknowledgement: order_id: Order Id given by Merchant; tr_id: Transaction Id given by Kredivo;tr_status: Transaction status of a transaction; sign_key: Signature key to validate if the notification is originated from Kredivo. |
expiration_time | String (epoch) | Optional. By default, kredivo will expire the transaction in 24 hours. |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
redirect_url | String | Redirect URL will be sent for regular transaction. If the user has been authenticated, there will be 2 scenarios: If our security system flags the transaction, we will pass a redirect URL that contains an OTP challenge for the user. Otherwise, we will not pass any redirect URL and you will only need to wait for a callback from Kredivo. |
error | Message : Description of error status; Kind : error type |
Transaction
Name | Type | Description |
---|---|---|
order_id | String | Required. Order Id given by merchant |
amount | Double | Required. The transaction amount |
items | Item | Required. The shopping items |
Product Item
Name | Type | Description |
---|---|---|
id | String | Required. Can be product SKU. Important! for item fee such as: shipping fee, admin fee etc. you have to use this id: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name | String | Required. product name given by merchant |
price | Double | Required. Price of the item. |
url | String | Required. URL to the product item on merchant site. |
image_url | String | Optional. URL to the product item image. |
type | String | Required. Product category. |
quantity | Integer | Required. Quantity of the item bought. |
parent_type | String | Optional. You can assign the fee to either SELLER or ITEM. If not specified, this will be tied to transaction level. |
parent_id | String | Optional. This is either the seller Id or item Id |
Customer
Name | Type | Description |
---|---|---|
first_name | String | Required. |
last_name | String | Optional. |
String | Required. | |
phone | String | Required. |
Address
Name | Type | Description |
---|---|---|
first_name | String | Required. |
last_name | String | Optional. |
address | String | Required. |
city | String | Required. |
postal_code | String | Required. |
phone | String | Required. |
country_code | String | Required. ISO 3166-1 alpha-3 |
Seller
Name | Type | Description |
---|---|---|
id | String | Required. Seller’s Id |
name | String | Required. Seller’s name |
url | String | Require. Seller’s url |
legal_id | String | Optional. Seller’s legal Id (KTP, SIM or passport number) |
String | Required. Seller’s email | |
address | Address | Required. Seller’s residential address |
Metadata
Name | Type | Description |
---|---|---|
ip_address | String | Optional. |
user_agent | String | Optional. |
device_id | String | Optional. IMEI or IMSI of buyer device |
imsi | String | Optional. |
HTTP(S) Header
Name | Type | Description |
---|---|---|
Content-Type | String | application/json |
Accept | String | application/json |
Confirm Transaction
In this tutorial you will learn how to confirm that you have received and created an order in your system. This confirmation is needed in response to a push notification from Kredivo, indicating that the user has completed the transaction. Once you have received the push notification, you should update the status of the transaction.
1. Receive notification from Kredivo
Once a consumer has completed a purchase, Kredivo will inform you via a POST request. The POST request will be made to the push notification URI you provided when you created the checkout order.
HTTP Notification example of transaction::
{
"status": "OK",
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "pending",
"order_id": "KD125262",
"message": "Transaction status is pending",
"shipping_address": {
"city": "Jakarta Selatan",
"first_name": "Darana 2",
"last_name": "Pratama",
"countrycode": "IDN",
"creation_date": "2017-08-04T18:28:14",
"phone": "0217248724",
"state": "",
"transaction": 1505866,
"postcode": "12120",
"location_details": "Jl. Kerinci IX No. 5-A"
},
"transaction_time": 1501846094,
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"signature_key": "o5KZPDcxgEA9QutAVcIQwE3suQRkTEIA1VXcoHp7KaWJnpHx0uuHETBVpxfYLbaPyS8RJg34uVxTUX64cfUTzVVhCrSif%2FUg92J2WyLs%2FhQ%3D"
}
Response Body from Kredivo
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
shipping_address | Address | Optional. Shipping address of the customer/shopper |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Address Info
Name | Type | Description |
---|---|---|
city | String | Optional. |
first_name | String | Optional. |
last_name | String | Optional. |
countrycode | String | Optional. |
creation_date | String | Optional. |
phone | String | Optional. |
state | String | Optional. |
transaction | Integer | Optional. |
postcode | String | Optional. |
location_details | String | Optional. |
2. Merchant Response
merchant response should be in JSON, structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status
You must now get the order status to validate the notification originated from Kredivo server
Using the API:
GET /v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
Request Body
Name | Type | Description |
---|---|---|
transaction_id | String | Transaction Id given by Kredivo |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Body
Example response after call API v2/update:
{
"status": "OK",
"legal_name": "TANDRA",
"fraud_status": "accept",
"order_id": "KD125262",
"transaction_time": 1501846094,
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "settlement",
"message": "Confirmed order status. Valid!",
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8"
}
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR). |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
fraud_status | String | Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name | String | legal name of kredivo account |
user_token | String | Once the user authentication succeeds, we will send you the user token. Use this token to enable the express checkout for the user. Currently the user token has no expiration. |
4. Settle an order in your system
You should now settle the order in your system with the order data that you want to store if transaction_status is SETTLEMENT.
0-click Checkout
0-click Checkout is a feature that allows Kredivo users to tokenize their Kredivo account inside the merchant’s platform. A tokenized user will then be able enjoy our express checkout feature. Whereas our regular checkout requires the user to enter his/her phone number, PIN, and OTP to confirm the transaction, the 0-click Checkout will essentially allow the user to checkout without entering anything. In the case where our security system flags a transaction as suspicious, we will throw an OTP challenge to the user. Here is the API structure:
0-click Checkout is a great leap forward even when compared to our already smooth 2-click regular checkout. It is the smoothest checkout process in the market today, giving unparalleled user experience.
This feature is only available for select merchants. Contact us if you’re interested in using this feature.
Initiate 0-click Checkout
This step will show you how you can tokenize the user through our regular checkout page. If you are interested in tokenizing the user separately from the transaction, read the Tokenize Kredivo Account guide below.
The first time you call this API, you will need to pass the parameter tokenizer_user as true to enable tokenization. If that transaction is successful, you will get a user_token in our response. Any subsequent transaction will now become 0-click once you start passing this user_token.
To initiate 0-click Checkout with Kredivo, you will need to call checkout_url API.
Using the API:
The Request JSON structured like this:
{
"server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
"payment_type":"30_days",
"tokenize_user": false,
"client_user_key": "rangge@finaccel.co",
"user_token" : "XXXX-XXXX",
"transaction_details": {
"amount":6505000,
"order_id":"KD14721",
"items": [
{
"id":"BB12345678",
"name":"iPhone 5S",
"price":6000000,
"type":"Smartphone",
"url":"http://merchant.com/cellphones/iphone5s_64g",
"quantity":1
},
{
"id":"AZ14565678",
"name":"Hailee Sneakers Blink Silver",
"price":250000,
"url":"http://merchant.com/fashion/shoes/sneakers-blink-shoes",
"type":"Sneakers",
"quantity":2,
"parent_type":"SELLER",
"parent_id":"SELLER456"
},
{
"id":"taxfee",
"name":"Tax Fee",
"price":1000,
"quantity":1
},
{
"id":"shippingfee",
"name":"Shipping Fee",
"price":9000,
"quantity":1,
"parent_type":"SELLER",
"parent_id":"SELLER456"
},
{
"id":"discount",
"name":"Discount",
"price":5000,
"quantity":1
}
]
},
"sellers":[
{
"id":"SELLER123",
"name":"Sunrise",
"email": "sunrise@gmail.com",
"url":"https://onlineshop/seller/sunrise",
"address" : {
"first_name":"Irfan",
"last_name":"Sutandro",
"address":"Jalan Tentara Pelajar no 49",
"city":"Jakarta Utara",
"postal_code":"12960",
"phone":"08123456789",
"country_code":"IDN"
}
},
{
"id":"SELLER456",
"name":"Toko Bagus",
"email": "tokobagus@gmail.com",
"url":"https://onlineshop/seller/tokobagus",
"address" : {
"first_name":"Toto",
"last_name":"Wahyuni",
"address":"Jalan Krici raya IX",
"city":"Jakarta Selatan",
"postal_code":"12960",
"phone":"08123456789",
"country_code":"IDN"
}
}
],
"disbursement_bank_info": {
"bank_name": "BCA",
"bank_account_number": "4500280081",
"bank_account_name": "AHMAD GUNAWAN"
},
"customer_details": {
"first_name":"Oemang",
"last_name":"Tandra",
"email":"alie@satuduatiga.com",
"phone":"081513114262"
},
"billing_address": {
"first_name":"Oemang",
"last_name":"Tandra",
"address":"Jalan Teknologi Indonesia No. 25",
"city":"Jakarta",
"postal_code":"12960",
"phone":"081513114262",
"country_code":"IDN"
},
"shipping_address": {
"first_name":"Oemang",
"last_name":"Tandra",
"address":"Jalan Teknologi Indonesia No. 25",
"city":"Jakarta",
"postal_code":"12960",
"phone":"081513114262",
"country_code":"IDN"
},
"metadata": {
"ip_address":"192.168.88.1",
"user_agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
},
"push_uri":"https://api.merchant.com/push",
"back_to_store_uri":"https://merchant.com"
}
The Response returns JSON structured like this:
Positive Response :
{
"status":"OK",
"message":"Message if any",
"redirect_url":"https://sandbox.kredivo.com/kredivo/v2/signin?tk=XXX"
}
Negative Response:
{
"status": "ERROR",
"error": {
"message": "Field secret_key is INCORRECT.",
"kind": "APIException"
}
}
and
{
"error": {
"kind": "deprecated",
"message": "This order is already PROCESSED.",
"code": null
},
"status": "ERROR"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
payment_type | String | Required. You can set default value with 30_days or 12_months. Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
tokenize_user | Boolean | Optional, default value is false. Set this to True if you want to tokenize the user. You will get user_token when the transaction status is settled. |
client_user_key | String | Optional. Required if tokenize_user = true. Should be unique per user on client side |
user_token | String | Optional. If user_token is set, this will be used to authenticate user. |
transaction_details | Transaction | Details of the transaction |
customer_details | Customer | Required. Details of the customer |
sellers | Seller | Optional (compulsory for marketplaces). Details of the seller for marketplaces |
billing_address | Address | Optional. Billing address of the customer/shopper |
shipping_address | Address | Required. Shipping address of the customer/shopper. shipping is required for goods (excluding ticket/voucher) |
metadata | Metadata | Optional. Object containing the metadata parameters |
push_uri | String | Required. URI of merchant push-notification API (HTTP POST) |
user_cancel_uri | String | Optional. URI that the customer is sent to if the customer chooses to cancel the Kredivo payment before completion |
back_to_store_uri | String | Required. URI of your store page. Used on the settlement page. Kredivo’s server will pass some params to this uri for merchant’s server acknowledgement: order_id: Order Id given by Merchant; tr_id: Transaction Id given by Kredivo;tr_status: Transaction status of a transaction; sign_key: Signature key to validate if the notification is originated from Kredivo. |
expiration_time | String (epoch) | Optional. by default kredivo set expiration time 24 hours after transaction time. |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
redirect_url | String | Redirect URL will be sent for regular transaction. If the user has been authenticated, there will be 2 scenarios: If our security system flags the transaction, we will pass a redirect URL that contains an OTP challenge for the user. Otherwise, we will not pass any redirect URL and you will only need to wait for a callback from Kredivo. |
error | Message : Description of error status; Kind : error type |
Transaction
Name | Type | Description |
---|---|---|
order_id | String | Required. Order Id given by merchant |
amount | Double | Required. The transaction amount |
items | Item | Required. The shopping items |
Product Item
Name | Type | Description |
---|---|---|
id | String | Required. Can be product SKU. Important! for item fee such as: shipping fee, admin fee etc. you have to use this id: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name | String | Required. product name given by merchant |
price | Double | Required. Price of the item |
url | String | Required. URL to the product item on merchant site |
image_url | String | Optional. URL to the product item image |
type | String | Required. Product category. |
quantity | Integer | Required. Quantity of the item bought |
parent_type | String | Optional. You can assign the fee to either SELLER or ITEM. If not specified, this will be tied to transaction level |
parent_id | String | Optional. This is either the seller Id or item Id |
Customer
Name | Type | Description |
---|---|---|
first_name | String | Required. |
last_name | String | Optional. |
String | Required. | |
phone | String | Required. |
Address
Name | Type | Description |
---|---|---|
first_name | String | Required. |
last_name | String | Optional. |
address | String | Required. |
city | String | Required. |
postal_code | String | Required. |
phone | String | Required. |
country_code | String | Required. ISO 3166-1 alpha-3 |
Seller
Name | Type | Description |
---|---|---|
id | String | Required. Seller’s Id |
name | String | Required. Seller’s name |
url | String | Require. Seller’s url |
legal_id | String | Optional. Seller’s legal Id (KTP, SIM or passport number) |
String | Required. Seller’s email | |
address | Address | Required. Seller’s residential address |
Metadata
Name | Type | Description |
---|---|---|
ip_address | String | Required. |
user_agent | String | Required. |
device_id | String | Optional. IMEI or IMSI of buyer device |
imsi | String | Optional. |
HTTP(S) Header
Name | Type | Description |
---|---|---|
Content-Type | String | application/json |
Accept | String | application/json |
Confirm Transaction
In this tutorial you will learn how to confirm that you have received and created an order in your system. This confirmation is needed in response to a push notification from Kredivo, indicating that the user has completed the transaction. Once you have received the push notification, you should update the status of the transaction.
1. Receive notification from Kredivo
Once a consumer has completed a purchase, Kredivo will inform you via a POST request. The POST request will be made to the push notification URI you provided when you created the checkout order.
HTTP Notification example of transaction::
{
"status": "OK",
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "pending",
"order_id": "KD125262",
"message": "Transaction status is pending",
"shipping_address": {
"city": "Jakarta Selatan",
"first_name": "Darana 2",
"last_name": "Pratama",
"countrycode": "IDN",
"creation_date": "2017-08-04T18:28:14",
"phone": "0217248724",
"state": "",
"transaction": 1505866,
"postcode": "12120",
"location_details": "Jl. Kerinci IX No. 5-A"
},
"transaction_time": 1501846094,
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"signature_key": "o5KZPDcxgEA9QutAVcIQwE3suQRkTEIA1VXcoHp7KaWJnpHx0uuHETBVpxfYLbaPyS8RJg34uVxTUX64cfUTzVVhCrSif%2FUg92J2WyLs%2FhQ%3D"
}
Response Body from Kredivo
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
shipping_address | Address | Optional. Shipping address of the customer/shopper |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Address Info
Name | Type | Description |
---|---|---|
city | String | Optional. |
first_name | String | Optional. |
last_name | String | Optional. |
countrycode | String | Optional. |
creation_date | String | Optional. |
phone | String | Optional. |
state | String | Optional. |
transaction | Integer | Optional. |
postcode | String | Optional. |
location_details | String | Optional. |
2. Merchant Response
merchant response should be in JSON, structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status
You must now get the order status to validate the notification originated from Kredivo server
Using the API:
GET /v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
Request Body
Name | Type | Description |
---|---|---|
transaction_id | String | Transaction Id given by Kredivo |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Body
Example response after call API v2/update:
{
"status": "OK",
"legal_name": "TANDRA",
"fraud_status": "accept",
"order_id": "KD125262",
"transaction_time": 1501846094,
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "settlement",
"message": "Confirmed order status. Valid!",
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"user_token" : "XXXX-XXXX"
}
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR). |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
fraud_status | String | Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name | String | legal name of kredivo account |
user_token | String | Once the user authentication succeeds, we will send you the user token. Use this token to enable the express checkout for the user. Currently the user token has no expiration. |
4. Settle an order in your system
You should now settle the order in your system with the order data that you want to store if transaction_status is SETTLEMENT.
Deactivate User Token
This step you can allow user to deactive his tokenized
Using the API:
The Request JSON structured like this:
{
"server_key": "ABCD-XXXX-1234",
"user_token": "XXXX-YYYY"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | string | Mandatory |
user_token | string | user_token sent from Kredivo to tokenize the user. |
Response
{
"Status": "OK",
"user_token": "XXXX-YYYY",
"is_active":false,
"remarks":"deactive user successful"
}
Negative response JSON should be structured like this:
{
"status": "ERROR",
"error": {
"code": null,
"message": "Invalid merchant",
"kind": "deprecated"
}
}
Or
{
"error": {
"kind": "deprecated",
"message": "Invalid user_token",
"code": null
},
"status": "ERROR"
}
Success Response
Name | Type | Description |
---|---|---|
status | string | OK |
user_token | string | user_token sent from Kredivo to tokenize the user. |
is_active | boolean | True/False. If False, Kredivo is not able to provide User Credit Details. |
remarks | string | remarks about user token |
Error Response
Name | Type | Description |
---|---|---|
status | String | Status code : ERROR |
error | Object | detail of error detail |
Detail of Error
Name | Type | Description |
---|---|---|
kind | String | type of error |
code | Integer | error code |
message | String | Error message |
Deactive From Kredivo App
The Request JSON structured like this:
{
"message": "message if any",
"client_user_key": "rangge@finaccel.co"
}
User can also deactivate his/her tokenized account from Kredivo app. Push notif will be sent to inform respective merchant to invalidate user_token. Please contact kredivo to register your push notif endpoint url.
The Response JSON structured like this:
{
"status": "OK",
"message": "message if any"
}
Please note when calling to POST /v2/checkout_url with invalid token you will get redirect_url on response body that you should handle to continue as regular checkout (i.e. 2-click Checkout)
Get User Credit Details
Once the user is tokenized, you can then call this API to know about the remaining limit, account status, and account type of the user. You will need the user token to call this API.
Using the API:
The Request JSON structured like this:
{
"server_key": "ABCD-XXXX-1234",
"user_token": "XXXX-YYYY"
}
Request
Name | Type | Description |
---|---|---|
server_key | string | Mandatory |
user_token | string | Mandatory. user_token sent from Kredivo to tokenize the user. |
Response
{
"Status": "OK",
"user_details" : {
"legal_name" : "Rangge Septyo",
"mobile_number": "62812xxxx0581"
}
"user_credit_details": {
"account_status":1,
"account_type":2,
"credit_limit_details":[
{
"payment_type":"30_days",
"remaining_user_limit":"1500000"
}
{
"payment_type":"3_months",
"remaining_user_limit":"5000000"
}
{
"payment_type":"6_months",
"remaining_user_limit":"1000000"
}
{
"payment_type":"12_month",
"remaining_user_limit":"15000000"
}
]
}
}
Negative response JSON should be structured like this:
{
"status": "ERROR",
"error": {
"kind": "deprecated",
"message": "Invalid user_token",
"code": null
}
}
Success Response
Name | Type | Description |
---|---|---|
status | string | status code : OK |
user_details | object | detail of user . |
user_credit_details | object | detail of user credit details |
User Details
Name | Type | Description |
---|---|---|
legal_name | String | |
mobile_number | String |
User Credit Details
Name | Type | Description |
---|---|---|
account_status | integer | Possible values (1: active, 2. inactive) |
account_type | integer | 1: basic (eligible for “30_days” and “3_months” payment type ONLY), 2: premium (eligible for “30_days”, “3_months”, “6_months”, “12_month” payment types) |
credit_limit_details | obejct | list of credit_limit: credit limit details per payment type |
Credit Limit Details
Name | Type | Description |
---|---|---|
payment_type | string | Possible values: “30_days”, “3_months”, “6_months”, “12_month” |
remaining_user_limit | string | remaining user limit for payment type |
Error Response
Name | Type | Description |
---|---|---|
status | String | Status code : ERROR |
error | Object | detail of error detail |
Detail of Error
Name | Type | Description |
---|---|---|
kind | String | type of error |
message | String | Error message |
QR Checkout
QR Checkout is our solution for those of you have have a physical store. Kredivo offers two kinds of QR code: dynamic and static.
A dynamic QR code is one that is generated every time you initiate a new transaction. This means, you must integrate Kredivo QR checkout API into your POS system. Contact us to find out more about how to integrate this API, either directly or via a POS provider.
A static QR code means the QR is always the same. This means the QR is generated for a store/merchant. Static QR does not require you to do any development from your side. The only difference in terms of user experience is that the user will have to manually enter the transaction amount in his/her Kredivo app when transacting using a static QR.
We also provide a seller app to help you monitor the transactions and perform cancellation.
Here is the API structure:
Contact us to know more about our QR solution.
Initiate QR Checkout
This guide will tell you how you can integrate our dynamic QR solution. To initiate QR checkout with Kredivo, you will need to call the init_checkout API.
Using the API:
The Request JSON structured like this:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7x",
"amount":70000,
"source": "QR",
"order_id": "548tIt83saeN",
"sub_merchant_id": "KFCSenayanCity",
"push_uri" : "https://www.merchantcallback.com/notify",
"sellers":
{
"id":"SELLER123",
"name":"Sunrise",
"email": "sunrise@gmail.com",
"url":"https://onlineshop/seller/sunrise",
"address" : {
"first_name":"Irfan",
"last_name":"Sutandro",
"address":"Jalan Tentara Pelajar no 49",
"city":"Jakarta Utara",
"postal_code":"12960",
"phone":"08123456789",
"country_code":"IDN"
}
},
"items": [
{
"id": "001",
"name":"Product Name",
"price":50000,
"type":"Category Product",
"quantity":1
},
{
"id": "002",
"name":"Product Name",
"price":25000,
"type":"Category Product",
"quantity":1,
"additional_info":{
"imei":"1234281484285",
"color":"black"
}
{
"id":"discount",
"name":"Discount",
"price":5000,
"quantity":1
}
}
]
}
Response:
{
"status": "OK",
"qr_image": "{HOST}/{endpoint}/v1/qrcode/{merchant_id}/{external_merchant_id}/6a643481-33fa-4fa7-9135-8a1503fc863a",
"transaction_id": "6a643481-33fa-4fa7-9135-8a1503fc863a"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
amount | Double | Required. The transaction amount |
source | String | Required. Default value is “QR” |
order_id | String | Required. Order ID given by merchant |
sub_merchant_id | String | Required. ID of a sub merchant. (e.g. KFCSenayanCity) |
push_uri | String | Required. URI of merchant push-notification API (HTTP POST) |
sellers | Seller | Optional. Detail of the seller / store. |
items | Item | Required. The shopping items |
Seller
Name | Type | Description |
---|---|---|
id | String | Optional. Detail of the seller / store Id. |
name | String | Optional. Detail of the seller / store name. |
url | String | Optional. Detail of the seller / store url. |
legal_id | String | Optional. Detail of the seller / store legal Id (KTP, SIM or passport number) |
String | Optional. Detail of the seller / store email | |
address | Address | Optional. Detail of the seller / store residential address |
Address
Name | Type | Description |
---|---|---|
first_name | String | Optional. |
last_name | String | Optional. |
address | String | Optional. |
city | String | Optional. |
postal_code | String | Optional. |
phone | String | Optional. |
country_code | String | Optional. ISO 3166-1 alpha-3 |
Detail QR Item
Name | Type | Description |
---|---|---|
id | String | Optional. Can be product SKU. Important! for item fee such as: shipping fee, admin fee etc. you have to use this id: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name | String | Required. product name given by merchant. |
price | Double | Required. Price of the item. |
type | String | Optional. Product category. |
quantity | Integer | Required. Quantity of the item bought. |
additional_info | string | Optional. Additional information about other data from partner. |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
qr_image | String | The QR Code URL to be displayed on POS |
transaction_id | String | Transaction ID given by Kredivo |
Confirm Transaction
In this tutorial you will learn how to confirm that you have received and created an order in your system. This confirmation is needed in response to a push notification from Kredivo, indicating that the consumer has completed the transaction. Once you have received the push notification, you should update the status of the transaction.
1. Receive notification from Kredivo
Once a consumer has completed a purchase, Kredivo will inform you via a POST request. The POST request will be made to the push notification URI you provided when you created the checkout order.
HTTP Notification example of transaction::
{
"status": "OK",
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "pending",
"order_id": "KD125262",
"message": "Transaction status is pending",
"shipping_address": {
"city": "Jakarta Selatan",
"first_name": "Darana 2",
"last_name": "Pratama",
"countrycode": "IDN",
"creation_date": "2017-08-04T18:28:14",
"phone": "0217248724",
"state": "",
"transaction": 1505866,
"postcode": "12120",
"location_details": "Jl. Kerinci IX No. 5-A"
},
"transaction_time": 1501846094,
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"signature_key": "o5KZPDcxgEA9QutAVcIQwE3suQRkTEIA1VXcoHp7KaWJnpHx0uuHETBVpxfYLbaPyS8RJg34uVxTUX64cfUTzVVhCrSif%2FUg92J2WyLs%2FhQ%3D",
"sub_merchant_id": "KFCSenayanCity"
}
Response Body from Kredivo
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
shipping_address | Address | Optional. Shipping address of the customer/shopper |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
sub_merchant_id | String | ID of a sub merchant. (e.g. KFCSenayanCity) |
Response Address Info
Name | Type | Description |
---|---|---|
city | String | Optional. |
first_name | String | Optional. |
last_name | String | Optional. |
countrycode | String | Optional. |
creation_date | String | Optional. |
phone | String | Optional. |
state | String | Optional. |
transaction | Integer | Optional. |
postcode | String | Optional. |
location_details | String | Optional. |
2. Merchant Response
merchant response should be in JSON, structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status
You must now get the order status to validate the notification originated from Kredivo server
Using the API:
GET /v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
Request Body
Name | Type | Description |
---|---|---|
transaction_id | String | Transaction Id given by Kredivo |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Body
Example response after call API v2/update:
{
"status": "OK",
"legal_name": "TANDRA",
"fraud_status": "accept",
"order_id": "KD125262",
"transaction_time": 1501846094,
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "settlement",
"message": "Confirmed order status. Valid!",
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"sub_merchant_id": "KFCSenayanCity",
}
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR). |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
fraud_status | String | Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name | String | legal name of kredivo account |
sub_merchant_id | String | ID of a sub merchant. (e.g. KFCSenayanCity) |
4. Settle an order in your system
You should now settle the order in your system with the order data that you want to store if transaction_status is SETTLEMENT.
EDC Checkout
EDC Checkout is our solution for those of you have have a physical store.
We also provide a dashboard to help you monitor the transactions and perform cancellation.
Contact us to know more about our EDC solution.
Initiate EDC Checkout
Interface/API Specifications
We will put the details about endpoints, request/response format, validation etc.
Using the API:
The Request JSON structured like this:
{
"server_key": "8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
"sub_merchant_id": "KFCSenayanCity",
"source": "EDC Mobile",
"push_uri": "https://merchant.com/pushnotif",
"order_id": "12345678912",
"amount": 15000,
"mobile_number": "+62-85210549044",
"terminal_id": "WDCMERCHANT0001"
}
Response:
{
"status": "OK",
"message": "",
"transaction_id": "bcda87e2-e87b-4b7f-add4-206bb4c1d72c",
"order_id": "12345678912"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
sub_merchant_id | String | Required. ID of a sub merchant. (e.g. KFCSenayanCity) |
source | String | Required. Default value is “EDC Mobile” |
push_uri | String | Required. URI of merchant push-notification API (HTTP POST) |
order_id | String | Order Id given by merchant |
amount | Double | Required. The transaction amount |
mobile_number | String | User phone number |
terminal_id | String | Optional. Outlet merchant’s EDC device identifier. |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
transaction_id | String | Transaction ID given by Kredivo |
order_id | String | Order Id given by merchant |
Confirm Transaction
In this tutorial you will learn how to confirm that you have received and created an order in your system. This confirmation is needed in response to a push notification from Kredivo, indicating that the consumer has completed the transaction. Once you have received the push notification, you should update the status of the transaction.
1. Receive notification from Kredivo
Once a consumer has completed a purchase, Kredivo will inform you via a POST request. The POST request will be made to the push notification URI you provided when you created the checkout order.
HTTP Notification example of transaction:
{
"status": "OK",
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "pending",
"order_id": "KD125262",
"message": "Transaction status is pending",
"shipping_address": {},
"transaction_time": 1501846094,
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"signature_key": "o5KZPDcxgEA9QutAVcIQwE3suQRkTEIA1VXcoHp7KaWJnpHx0uuHETBVpxfYLbaPyS8RJg34uVxTUX64cfUTzVVhCrSif%2FUg92J2WyLs%2FhQ%3D",
"sub_merchant_id": "KFCSenayanCity"
}
Response Body from Kredivo
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
shipping_address | Address | Optional. Shipping address of the customer/shopper |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
sub_merchant_id | String | ID of a sub merchant. (e.g. KFCSenayanCity) |
2. Merchant Response
merchant response should be in JSON, structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status
You must now get the order status to validate the notification originated from Kredivo server
Using the API:
GET /v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
Request Body
Name | Type | Description |
---|---|---|
transaction_id | String | Transaction Id given by Kredivo |
signature_key | String | Signature key to validate if the notification is originated from Kredivo. |
Response Body
Example response after call API v2/update:
{
"status": "OK",
"legal_name": "TANDRA",
"fraud_status": "accept",
"order_id": "KD125262",
"transaction_time": 1501846094,
"amount": "1500100.00",
"payment_type": "30_days",
"transaction_status": "settlement",
"message": "Confirmed order status. Valid!",
"transaction_id": "fadee4e5-99a2-48d6-952d-007f3fa508e8",
"sub_merchant_id": "KFCSenayanCity",
}
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR). |
message | String | Description of status |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_id | String | Transaction Id given by Kredivo |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
order_id | String | Order Id given by merchant |
amount | String | The transaction amount |
fraud_status | String | Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name | String | legal name of kredivo account |
sub_merchant_id | String | ID of a sub merchant. (e.g. KFCSenayanCity) |
4. Settle an order in your system
You should now settle the order in your system with the order data that you want to store if transaction_status is SETTLEMENT.
Reversal Transaction
Interface/API Specifications
To terminate the EDC transaction in case of intermittent issue, connection or network issue.
We will put the details about endpoints, request/response format, validation etc.
Using the API:
The Request JSON structured like this:
{
"order_id": "12345678912",
"server_key": "8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7"
}
Positive Response:
{
"message": "",
"status": "OK"
}
Negative Response:
{
"message": "",
"status": "ERROR"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
order_id | String | Required. Order Id given by merchant |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
message | String | Optional. If any message |
Additional APIs
You will find other APIs here that will help you check the transaction status (in case our push notification failed), cancel the transaction, and calculate the interest and payment.
Check Transaction Status
Once your customer is done processing the transaction on their side, you will need to call check transaction status API.
Using the API:
The Request JSON structured like this:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
"order_id": "KB-0c40f395"
}
Response:
{
"fraud_status": "accept",
"transaction_time": 1637743030,
"order_id": "KB-0c40f395",
"external_userid": "S9JRJ2bGiS4d",
"status": "OK",
"legal_name": "Rangge",
"message": "Transaction is settlement",
"amount": "75000.00",
"discount_amount": 0,
"transaction_id": "7401e873-ea77-455e-9f31-4ca2268304dc",
"payment_type": "30_days",
"transaction_status": "settlement"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
order_id | String | Required. Order ID given by merchant. |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
order_id | String | Order ID given by merchant |
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
amount | Double | Transaction amount |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_status | String | Transaction status of the transaction |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
message | String | Detail status |
transaction_id | String | Transaction ID given by Kredivo |
discount_amount | Double | Discount amount that the user get for the transaction |
items | Item | The shopping items |
Cancel Transaction
Transaction can be cancelled with this API if transaction has been completed.
Using the API:
The Request JSON structured like this:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
"transaction_id": "2be7d9ea-ccba-4743-8b92-0f1fc3ec358d",
"cancellation_amount": 5000,
"cancellation_reason":"Out of stock",
"cancelled_by":"Althea",
"cancellation_date":"1512032053",
"order_id":"KB-0123456",
"cancellation_id": "1234567"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
cancellation_id | String | Optional. 60 char. This is not the order ID. 1 order ID can have multiple cancellation ID. If no cancellation ID is sent, we will use the order ID and cancellation amount as the cancellation unique identifier. Cancellation requests with the same order ID and cancellation amount cannot be processed if the time elapsed between the two requests is less than 1 hour. |
order_id | String | Required. Order Id given by merchant |
transaction_id | String | Required. Transaction Id given by Kredivo |
cancellation_amount | Integer | Optional. If you don’t pass this parameter or if you pass a cancellation amount that is equal to the transaction amount, it will be treated as a full cancellation. If the cancellation amount passed is less than the transaction amount, it will be treated as a partial cancellation. If the cancellation amount is bigger than the transaction amount or a 0 or a negative number, we will return an error. |
cancellation_reason | String | Required. A description that clarifies reason of cancelling the transaction |
cancelled_by | String | Required. Cancellation requester name/ id |
cancellation_date | UNIX timestamp (epoch) | Required. Timestamp of Cancellation |
Response for full cancellation:
{
"status": "OK",
"fraud_status": "accept",
"order_id": "EDCA0020F1E-FE69-43EA-B9CA-FCDE1B52B2A6",
"transaction_time": 1513146999,
"amount": "5000000.00",
"payment_type": "30_days",
"transaction_status": "cancel",
"message": {short, long}"Cancelled the transaction!",
"transaction_id": "2be7d9ea-ccba-4743-8b92-0f1fc3ec358d",
"sub_merchant_id": "KFCSenayanCity",
"outlet_id": "KFCSCT01"
}
Response for full/partial cancellation:
{
"status": "OK",
"fraud_status": "accept",
"order_id": "EDCA0020F1E-FE69-43EA-B9CA-FCDE1B52B2A6",
"transaction_time": 1513146999,
"amount": "1000.00",
"payment_type": "30_days",
"transaction_status": "settlement",
"message": "Succes cancelling transaction by amount",
"transaction_id": "2be7d9ea-ccba-4743-8b92-0f1fc3ec358d",
"sub_merchant_id": "KFCSenayanCity",
"outlet_id": "KFCSCT01"
}
Example for full/partial cancellation negative response:
{
"status": "ERROR",
"error": {
"code": 2415,
"message": "Cancellation amount bigger than remaining transaction amount that can be cancelled",
"kind": "deprecated"
}
}
{
"status": "ERROR",
"error": {
"code": 1009,
"message": "Transaksi sudah dibatalkan.",
"kind": "deprecated"
}
}
{
"status": "ERROR",
"error": {
"code": 2415,
"message": "This cancellation_id is already PROCESSED.",
"kind": "deprecated"
}
}
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR). |
fraud_status | String | Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS deny: Denied by FDS. |
order_id | String | Order Id given by merchant |
transaction_time | UNIX timestamp (epoch) | Timestamp of transaction |
amount | String | The transaction amount |
payment_type | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months) |
transaction_status | String | Transaction status of a transaction, the values is: |
settlement: Transaction is successful | ||
pending: User has not completed the transaction | ||
deny: Transaction has been denied by Kredivo | ||
cancel: Transaction has been cancelled by merchant | ||
expire: User did not complete transaction, thus transaction is expired | ||
message | String | Description of status |
transaction_id | String | Transaction Id given by Kredivo |
sub_merchant_id | String | ID of a sub merchant. For Offline Merchant Only (e.g. KFCSenayanCity) |
outlet_id | String | ID of the EDC terminal ID used during transaction checkout |
Kredivo Loan Calculator
This API will give you the breakdown of the monthly payment of Kredivo installment.
Using the API:
The Request JSON structured like this:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
"user_token":"XXX-XXX",
"amount":2400000,
"items": [
{
"id":"BB12345678",
"name":"iPhone 5S",
"price":2400000,
"url":"http://merchant.com/cellphones/iphone5s_64g",
"type":"Smartphone",
"quantity":1
}
]
}
Example Response:
{
"payments": [
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 1600,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 195733.64731556745,
"id": "18_months",
"tenure": 18,
"service_fee": null,
"name": "Cicilan 18 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 195740,
"installment_amount": 3523320
},
{
"raw_amount": 2472000.0,
"potential_cashback": {
"monthly_cashback": 9888,
"total_cashback": 29664
},
"amount": 2472000,
"discount_interest_rate": null,
"raw_monthly_installment": 823999.93388194,
"id": "3_months",
"tenure": 3,
"service_fee": 72000,
"name": "Cicilan 3 bulan",
"interest_rate": "0",
"rate": 0.0,
"service_fee_percentage": 3.0,
"monthly_installment": 824000,
"installment_amount": 2472000
},
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 1200,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 162402.97669219342,
"id": "24_months",
"tenure": 24,
"service_fee": null,
"name": "Cicilan 24 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 162410,
"installment_amount": 3897840
},
{
"raw_amount": 2424000.0,
"amount": 2424000,
"discount_interest_rate": null,
"raw_monthly_installment": 2423999.801457357,
"id": "30_days",
"tenure": 1,
"service_fee": 24000,
"name": "Bayar dalam 30 hari",
"interest_rate": "0",
"rate": 0.0,
"service_fee_percentage": 1.0,
"monthly_installment": 2424000,
"installment_amount": 2424000
},
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 2400,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 262396.4704067336,
"id": "12_months",
"tenure": 12,
"service_fee": null,
"name": "Cicilan 12 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 262400,
"installment_amount": 3148800
},
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 4800,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 462397.09959627397,
"id": "6_months",
"tenure": 6,
"service_fee": null,
"name": "Cicilan 6 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 462400,
"installment_amount": 2774400
}
],
"message": "Available payment types are listed.",
"status": "OK"
}
Request Body
Name | Type | Description |
---|---|---|
server_key | String | Required. Each merchant will have server_key generated by Kredivo. |
user_token | String | Optional. This user_token will authenticate the user’s limit for 0-click transactions once it’s been set. |
amount | Integer | Required. The transaction amount |
items | Item | Required. The shopping items |
Response
Name | Type | Description |
---|---|---|
status | String | Status code (OK or ERROR) |
payments | Payment | List of available payment type to the transaction including its breakdown. You can find available payment type here. |
Product Item
Name | Type | Description |
---|---|---|
id | String | Required. Can be product SKU. Important! for item fee such as: shipping fee, admin fee etc. you have to use this id: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name | String | Required. Product name |
price | double | Required. Price of the item in the quantity |
url | String | Required. URL to the product item on merchant site |
image_url | String | Optional. URL to the product item image |
type | String | Required. Product category |
quantity | Integer | Required. Quantity of the item bought |
Payment Type
Name | Type | Description |
---|---|---|
id | String | Payment id/type chosen by the shopper (30_days, 3_months, 6_months, and 12_months) |
name | String | Payment type name |
tenure | Integer | tenure |
rate | float | interest |
amount | Double | Transaction amount. Total purchased items. |
monthly_installment | Double | total installment per month |
installment_amount | Double | total installment |
down_payment | Double | total down payment |
interest_rate_transition_term | float | spesial interest |
Plugins
We provide plugins for e-commerce site running on certain platforms to make it easier to integrate with Kredivo. Below are plugins for some supported platforms.
Woocommerce
Download plugin for woocomerce v.3.x.x here
Prestashop
Download plugin for prestashop v.1.6.x here
Opencart
Download plugin for opencart v.1.x.x here and opencart v.2.x.x here
Magento
Download plugin for magento v.1.x.x here and magento v.2.x.x here
Branding & Visual
Logos
Using Kredivo’s logotype generates trust and increases your conversion.
Your website’s background
Depending on if you have dark or light background you can get either a blue or white logo.
Width
We recommend that the Kredivo logo displayed at your site is between 100-300 px. Note that you should not add px after the size parameter.
Example:
Download Kredivo logo here.
How to use the Kredivo logo
On your frontpage
When showing the different payment alternatives you offer in your store, display our one and only logo. When hovering over the logo shows details on the payment methods available in your store.
On product level
You will increase the conversion for high value products by showing your consumers that they have the ability to pay in installments. Always use our logotype on product level. The logotype is highly recognisable, even in small sizes. For optimal conversion use our payment method widget.
Marketing Resource
What is Merchant Success?
Kredivo team is here to work together with you to identify and solve problems, support and build a long-term mutual relationship, as well as create collaborative campaigns to increase your revenue.
Our product is your “Sales Enabler”, meaning that Kredivo helps your customer to buy more and more often. In order to see significant results of our product, we strongly encourage you to implement merchant best practice
Why is this important to implement Merchant Best Practices?
Incremental sales takes time and effort. Acquiring customer that is loyal require time and effort. Kredivo is here to facilitate the process through Merchant Best Practice.
Education is crucial. Instant credit financing is not a familiar concept with many consumers. It is important for merchant to educate and create a good consumer flow within the platform.
Sales enabler engine. “Buy now pay later” and “Installment without credit card” is a very strong message for consumptive consumers, allowing them to buy more and more often. Sharing this messages within the platform clearly will help increase sales.
Important Information:
- Please send all Kredivo related collateral (newsletter, product promotion, social media posting, banner, FAQ) to successops@finaccel.co prior to posting for approval.
- For any merchant related inquiries on customer service and payment information please send it to merchant.help@kredivo.com. (Note: this is for merchant related inquiries not consumers related inquiries, in any circumstances this email shall not be given to consumers).
- For any consumer related inquiries on our product, technical and payment please let the consumer send these inquiries to support@kredivo.com or call at +62-855-7467-9098 (Note: Merchant is able to relay this email and phone number to consumers)
Other Marketing Resources:
Service Level Agreement
This Service Level Agreement (the “SLA”) is a policy governing the use of the Kredivo Checkout, a product of PT FinAccel Teknologi Indonesia (“FinAccel”) and its users (“you”). This SLA applies separately to each account using Kredivo Checkout or any other FinAccel products or services. FinAccel reserves the right to change the terms of this SLA.
Service Commitment
All of FinAccel’s products and services, including Kredivo Checkout, are hosted on Amazon EC2 and Amazon S3. FinAccel will use commercially reasonable efforts to make the Kredivo Checkout available with a Monthly Uptime Percentage (defined below) of at least 99.9% of the time in any calendar month. If it is not, then you may be eligible to receive the Service Discount described below.
Definitions
The following definitions shall apply to the Kredivo Checkout SLA.
- “Monthly Uptime Percentage” means the total number of minutes in the calendar month minus the number of minutes that the Kredivo Checkout server(s) was unavailable in the calendar month, divided by the total number of minutes in the calendar month.
- “Emergency Downtime” means those times where FinAccel becomes aware of a vulnerability which, based on a risk assessment of the vulnerability, FinAccel deems to require immediate remediation and, as a result, the Kredivo Checkout is made temporarily unavailable in order for FinAccel to address the vulnerability. Emergency Downtime is not considered to be a part of the calculation of the Monthly Uptime Percentage for purposes of this SLA.
- “Scheduled Downtime” means those times where FinAccel notifies you of periods of server unavailability three (3) days prior to the commencement of such a period. There will be no more than thirty (30) hours of Scheduled Downtime per calendar year. Scheduled Downtime is not considered to be a part of the calculation of the Monthly Uptime Percentage for purposes of this SLA.
- “Services” means the services provided to you by the Kredivo Checkout, including the transaction API and admin dashboard or alternatively, on terms as expressly agreed between you and FinAccel.
- “Service Discount” may be provided according to the following schedule:
- One week Discount: Includes Seven (7) days discount from that month’s billing, if the Monthly Uptime Percentage for any calendar month is between 99.9% and 97.0%;
- Two week Discount: Includes Fourteen (14) days of discount from that month’s billing, if the Monthly Uptime Percentage for any calendar month is between 97.0% and 95.0%;
- One month Discount: Includes Thirty (30) days of discount from that month’s billing, if the Monthly Uptime Percentage for any calendar month is less than 95.0%.
Maximum Service Discount: The aggregate maximum amount of Service Discount you can claim for a single calendar month shall not exceed thirty days of billing.
Uptime SLA Exclusions: The SLA does not apply to any performance issues: (i) caused by factors outside of FinAccel reasonable control including any force majeure event or Internet access problems beyond the demarcation point of our servers; (ii) that resulted from any actions or inactions of you; or (iii) arising from our suspension and termination of your right to use Kredivo Checkout in accordance with the Kredivo Merchant Agreement.
Response and Resolution Times*
Severity | Definition | Response Time | Resolution Time |
---|---|---|---|
Critical | Production server or other mission critical system(s) are down and no workaround is immediately available | 15 mins | 30 mins |
- Server Down | |||
- Connection Down | |||
- More than 15% of transaction are not processed by Kredivo due to some technical issues | |||
Major | Major functionality is severely impaired | 30 mins | 60 mins |
- Intermittent connection | |||
- Less than 15% of transaction are not processed by Kredivo due to some technical issues | |||
Minor | Partial, non-critical loss of functionality | 30 mins | 120 mins |
- Unable to access Kredivo Dashboard | |||
- Refund error | |||
- Missing Merchant logo |
*These are response and resolution times between office hours (9 am – 6:30 pm). For response and resolution times on weekends and public holidays, please add another 30-60 minutes.
Environment Setup
Sandbox
Use credentials below to integrate with our sandbox server.
Credential | Description |
---|---|
Domain URL QR, 2-click | https://sandbox.kredivo.com/kredivo/ |
Server Key | 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7 |
Test Account | To make transaction you can use below credentials and enter ‘4567’ as the OTP. |
Username: 81513114262 | |
Password: 663482 | |
Transaction OTP: 4567 |
Production
Use credentials below to integrate with our production server. Only transaction comes to this server will be processed by our server.
Credential | Description |
---|---|
End Point | Please ask merchops@kredivo.com for live server end point before going live. |
System Status
Click here to see Kredivo’s system status