NAV Navbar
Logo
shell

Getting Started

Introduction

Simplifying Buying

On your e-commerce site, Kredivo Checkout let your customers finalize their purchase by providing their phone number and password. As for offline transaction, customers only need to scan QR code on their Kredivo mobile app and finish the transaction on the app.

Optimized for all devices No risk. You always get paid
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

In order 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”.

mco

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.

Developer Help

If you need any help with the documentation and sandbox environment, please email support@kredivo.com and we’ll respond as soon as we can.

If you do not already have a merchant account, please email support@kredivo.com to get setup with one.

Developer FAQ

  1. Does Kredivo work on desktop and mobile? Yes, desktop, mobile, and tablet web.
  2. I’m 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 joining a pilot let us know support@kredivo.com
  3. Is Kredivo another payment processor? No

Integration

Register

You’ll need a server_key to interact with the Kredivo’s server. Please send an email to merchops@finaccel.co to sign up as an Kredivo merchant and get server_key.

Checkout with Kredivo

Kredivo provides three very straightforward checkout methods for you.

1. 1-click Checkout

This checkout method works for your e-commerce site. The first step towards a 1-click checkout is using the Authorization token. User will only need to login to his/her Kredivo account once (and give permission to Kredivo to share the token with the merchant).

2. 2-clicks Checkout

This checkout method works for your e-commerce site. By using this checkout method, your customer will only need to input their mobile number and PIN, then finalize the purchase by inputting OTP.

You can learn more about Kredivo 2-clicks checkout API here. This is how Kredivo 2-click checkout works.

confirmation flow

3. QR Checkout

This checkout method enables your customer to purchase from your offline store using their Kredivo limit. Our API will give you the QR code which will be displayed on your POS device. Your customer will then scan that QR code and they can finalize their payment on their Kredivo mobile app.

You can learn more about Kredivo QR checkout API here. This is how Kredivo QR checkout works.

confirmation flow

1-click Checkout

In this step allow your user make transaction easier, and also you can add checkout page in your side so no need to redirect to kredico checkout page.

On this step, here is a few basic thing that you have to know for 1-click checkout.

  1. Header : To all APIs, add following header client-id and client-secret.
  2. Server key : You’ll need a server_key to interact with the Kredivo’s server.
  3. user_token_details : If user has opted for tokenization while checkout, client will get user token details in callback URL request post transaction settlement.
  4. Support client checkout : If merchant sent this parameter means client supports the checkout flow on behalf of Kredivo. if not, client will redirect to Kredivo checkout URL.

Initiate 1-clicks Checkout

To initiate 1-click checkout with Kredivo, you will need to call checkout_url API.

** in this step you will get two type of response based on parameter support_client_checkout. If true you will recieve transaction_context . if support_client_checkout false you will recieve redirect url.

Using the API:

The Request JSON structured like this:

{
    "server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
    "payment_type":"30_days", 
    "user_token_details": {
       "user_token" : "dBJw7xhjHA",
       "user_token_type" : 1,
       "client_user_key" : "randy@finaccel.co"
    },
    "support_client_checkout":true,
    "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"
            }
        }
    ],
    "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"
    },
    "callback_uri" : "https://api.merchant.com/callback",
    "push_uri":"https://api.merchant.com/push",
    "back_to_store_uri":"https://merchant.com"
}

Request Body

Name Type Description
server_key String Required. Each merchant will have server_key generated by Kredivo.
user_token_details Object Optional, user token details.
support_client_checkout boolean optional: Default value is False. If True, client supports the checkout flow on behalf of Kredivo. If False, client will redirect to Kredivo checkout URL.
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)
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. exception for merchant category travel/voucher/ticket/service
push_uri String Optional. but Required, If support_client_checkout is False. URI of merchant push-notification API (HTTP POST)
callback_uri String Optional, but Mandatory If support_client_checkout is True, this parameter value will be used as callback URL for confirming transaction settlement. example response will be same as transaction context.
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. Please contact us how to parse this signature_key by using your client key.
expiration_time String (epoch) Optional. by default kredivo set expiration time 24 hours after transaction time.

User Token Details

Name Type Description
user_token string Mandatory. user_token sent from Kredivo to tokenize the user.
user_token_type integer Mandatory. Possible values: 1(one_click_token), 2(express_token)
client_user_key string Mandatory. Should be unique per user on client side. Purpose of this key is, different users on client side using same Kredivo account should be tokenized separately. Kredivo will use this key to validate user token. If client user key is updated on client side, we’ll deactivate user token for old client key (by default) and user has to tokenize again with updated client key.

The Response returns JSON (Support client Checkout is FALSE):


  {
    "status":"OK",
    "message":"Message if any",
    "redirect_url":"https://sandbox.kredivo.com/kredivo/v2/signin?tk=XXX"
  }

Transaction Context JSON (Support client Checkout is TRUE):


  {
    "order_id": "AAAA-BBBB",
    "amount": "5690000",
    "transaction_token": "TX-1234-ABCD-5678",
    "transaction_status": "pending",
    "applied_payment_type": "3_months",
    "user_token_details": {
        "user_token": "XXXX-YYYY",
        "user_token_type": 1,
        "client_user_key": "CLIENT-XXX-YYY",
        "is_active": false,
        "remarks": "User token is deactivated by user/Client user key sent in the request does not match with registered client user key."
    }
    "item_list": [
        {
            "name": "iPhone 6S",
            "unit_price": "5500000",
            "total_price": "5500000",
            "quantity": 1,
            "sku": "iphone-6-s-ABCD",
            "sku_type": 0,
            "url": "www.eshop.com/iphone6S",
            "category": "Phones"
        },
        {
            "name": "Shipping Fee",
            "unit_price": "190000",
            "total_price": "190000",
            "quantity": 1,
            "sku": "shippingfee",
            "sku_type": 1
        }
    ],
    "merchant_details": {
        "name": "Kredivo",
        "logo_url": "www.eshop.com/image123",
        "allow_signup": true,
        "android_download_url": "www.kredivo.com/android",
        "ios_download_url" : "www.kredivo.com/android"
    },
    "payment_type_details": [
        {
            "payment_type": "30_days",
            "is_applicable": true,
            "is_eligible": true,
            "term_interest_rate": [
                {
                    "term": 1,
                    "interest_rate": "0.0"
                }
            ]
        },
        {
            "payment_type": "3_months",
            "is_applicable": true,
            "is_eligible": true,
            "term_interest_rate": [
                {
                    "term": 1,
                    "interest_rate": "0.0"
                },
                {
                    "term": 2,
                    "interest_rate": "0.0"
                },
                {
                    "term": 3,
                    "interest_rate": "2.95"
                }
            ]
        },
        {
            "payment_type": "6_months",
            "is_applicable": true,
            "is_eligible": false,
            "non_eligibility_reason": "Product category is not eligible to make 6_months installment transaction."
            "term_interest_rate": [
                {
                    "term": 1,
                    "interest_rate": "1.0"
                },
                {
                    "term": 2,
                    "interest_rate": "1.0"
                },
                {
                    "term": 3,
                    "interest_rate": "1.0"
                },
                {
                    "term": 4,
                    "interest_rate": "2.95"
                },
                {
                    "term": 5,
                    "interest_rate": "2.95"
                },
                {
                    "term": 6,
                    "interest_rate": "2.95"
                }
            ]
        },
        {
            "payment_type": "12_months",
            "is_applicable": false
        }
    ],
    "discount_amount": "50000.00",
    "repayment_details": {
        "tenure": 3,
        "down_payment": "0.0",
        "term_monthly_installment": [
            {
                "term": 1,
                "monthly_installment": "1900000.00"
            },
            {
                "term": 2,
                "monthly_installment": "1900000.00"
            },
            {
                "term": 3,
                "monthly_installment": "2100000.00"
            }
        ],
        "total_repayment_amount": "5900000.00"
    },
    "kredivo_aggrement_url": "www.kredivo.com/user/agreement/1234"
   }  

Negatif Response :

  {
    "status": "ERROR",
    "error": {
        "message": "Field secret_key is INCORRECT.",
        "kind": "APIException"
    }
  }

Succes Response

*Support client checkout is False

Name Type Description
status String Status code (OK or ERROR)
message String Description of status
redirect_url String Redirect URL to Kredivo checkout page.

Transaction Context

*Support client checkout is True

Name Type Description
order_id String Order Id given by merchant
amount String The transaction amount
transaction_token String Transaction token
transaction_status String Transaction status
applied_payment_type String active payment type
user_token_details Object detail of user token details
item_list Object detail of item list
merchant_details Object details of merchant details
payment_type_details Object details of payment type details
discount_amount String discount amount from kredivo
repayment_details Object detail of repayment details
kredivo_aggrement_url String kredivo aggrement url

user token details Transaction Context

Name Type Description
user_token string user_token generated by kredivo.
user_token_type integer user token type
client_user_key string client user key given by merchant
is_active Boolean True/False. If it is False, token is deactivated by user/client/system and user needs to tokenize again.
remarks string Remarks about user token. e.g. if is_active is False, remarks will be like ‘deactivated token by user’ or ‘auto-expired token by system’ etc.

Item List

Name Type Description
name String product name given by merchant
unit_price String Price of the item
total_price String total item price
quantity integer Quantity of the item bought
sku String item id
sku_type String product type in kredivo. posible value sku_type: 0/1/2. 0: Actual item, 1: any kind of client fee, 2: any kind of client discount
url String URL to the product item on merchant site
category String Product category.

Merchant Details

Name Type Description
name String merchant name
logo_url String link merchant logo
allow_signup boolean true or false
android_download_url String link for download kredivo apk
ios_download_url String link for download kredivo ipa

Payment Type Details

Name Type Description
payment_type String Payment type supported by Kredivo, 30_days, 3_months, 6_months, 12_months.
is_applicable boolean True/False. True when payment type is supported as per client configuration. Otherwise False. If False, other details like is_eligible, term_interest_rate etc. won’t be provided.
is_eligible Boolean True/False. True when payment type is eligible for current transaction. Otherwise False.
non_eligibility_reason Boolean If is_eligible is False, this field will provide reason for non-eligibility. Client can use it to notify user about non-eligibility reason.
term_interest_rate Object detail of term interest rate

Term Interest Rate

Name Type Description
term integer Monthly term ID relevant to payment type. e.g. For 3_months payment type, term value will be 1, 2 and 3.
interest_rate String interest

Repayment Details

Name Type Description
tenure integer Tenure of transaction in months. e.g. For 3_months payment type, tenure will be 3.
down_payment String total down payment
term_monthly_installment Object detail of term monthly installment
total_repayment_amount String Total repayment amount user has to pay including interest.

Term Monthly Installment

Name Type Description
term String Monthly term ID relevant to payment type. e.g. For 3_months payment type, term value will be 1, 2 and 3.
monthly_installment String total installment per month

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

Validate Promo

This step will be apply when merchant support client checkout. User have posibility to get discount, it might be ocasional promo or event promo. so when user enter the promocode, you need to validate the promo code.

Using the API:

The Request JSON structured like this:


{
    "transaction_token": "TX-1234-ABCD-5678",
    "promo_code": "KRD-1234"
}

Request Body

Name Type Description
transaction_token String Required. Transaction token returned in checkout/initiate.
promo_code String Required. Promo code entered by user

Positif Response JSON structured like this:


  {
    "status": "OK",
    "promo_code_details": {
        "promo_code": "Field secret_key is INCORRECT.",
        "is_applied": true,
        "remarks":"Promo code is successfully applied",
        "discount_amount": "5000"
    }
    "transaction_context": {
         "same as json example as response on api checkout/initiate"
    }
  }

Negatif Response:

  {
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Field transaction token is INCORRECT."
    }
  }

Success Response

Name Type Description
status String Required. OK
error Object detail error reason
promo_code_details Object Details of the promo code
transaction_context Object If status is OK, same as checkout/initiate. see detail transaksi here

Promo Code

Name Type Description
promo_code string User entered promo code
is_applied boolean True if promo code is applied, otherwise False
remarks string If is_applied is True, remarks is ‘Promo code is successfully applied’. If is_applied is False, remarks will be a reason why promo code could not be applied.
discount_amount string promo discount if is_applied is True.

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

Change Payment Type

This also apply, when merchant support client checkout. Sometimes user change payment type in checkout page, so when user do that you have to call this api.

Using the API:

The Request JSON structured like this:


{
    "transaction_token": "TX-1234-ABCD-5678",
    "payment_type": "KRD-1234"
}

Request Body

Name Type Description
transaction_token string Required. Transaction token returned in checkout/initiate.
payment_type string Required. payment type to set of transaction. Possible values: “30_days”, “3_months”, “6_months”, “12_month”

Positif Response JSON structured like this:


{
    "status": "OK",
    "transaction_context" : {
       "[same as response in checkout/initiate]"
    }

}

Negatif response


{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
  }

Success Response

Name Type Description
status String Status code : OK
transaction_context Object If status is OK, same as checkout/initiate. see detail transaksi here

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

Authenticate User

Pre-Condition : Support client checkout is TRUE. in this step you will continue to process the transaction.

Using the API:

Request JSON (Non tokenized):


{
    "transaction_token": "TX-1234-ABCD-5678",
    "user_name":"89007865432",
    "passcode": "112233"    
}

Request JSON ( Tokenized user):

{
    "transaction_token": "TX-1234-ABCD-5678",
    "user_token":"b7e491e1aedd",
    "passcode": "112233"
}


Request JSON ( Requesting token):

{
    "transaction_token": "TX-1234-ABCD-5678",
    "user_name":"89007865432",
    "passcode": "112233",
    "tokenize_user":true,
    "user_token_type":1,
    "client_user_key": "randy@finaccel.co"
}


Request Body

Name Type Description
transaction_token string Required. Transaction token returned in checkout/initiate. From transaction_token, Kredivo will determine whether the user making a transaction is tokenized or not.
user_name string Required, If user is not tokenized, username entered by user.
user_token string Required, If user is tokenized.
passcode string PIN entered by user.
tokenize_user boolean optional. Default is False. True, if user want to get tokenized with client and not tokenized yet. False, if user do not want to get tokenized with client.
user_token_type integer optional. Mandatory if tokenize_user is True. Possible values: 1(one_click_token), 2(express_token)
client_user_key string optional. Mandatory if tokenize_user is True.Client user key. should be unique per user on client side.

Positif Response JSON structured like this:

{
    "status": "OK",
    "challenge_details": {
        "verify_challenge": true,
        "challenge_type" : 1,
        "challenge_url":"https://kredivo.sandbox.com/verify/sdewxklsf",
        "remaining_challenge_attempts": 5
    }

    "transaction_context":{
         "[same as response on checkout/initiate]"
     } 

}

Negatif Response JSON structured like this:


{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}


Success Response

Name Type Description
status string Status code: OK
challenge_details object Determines if user need to verify any challenge post authentication. see challenge detail here
transaction_context object detail of transaction transaction_context

Challenge Details

Name Type Description
verify_challenge boolean True, if user need to verify challenge post authentication. False, if user do not need to verify challenge post authentication.
challenge_type integer Type of challenge. Possible values: 1: OTP, 2: Captcha
challenge_url string Redirect URL for verifying the challenge
remaining_challenge_attempts integer Number of remaining challenge attempts.

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

Verify Challenge

Pre-Condition : verify_challenge is True and merchant build challenge page.

To verify challenge you can used this api.

Using the API:

The Request JSON structured like this:


{
    "transaction_token": "TX-1234-ABCD-5678",
    "challenge_type":1,
    "challenge_value": "4567",  
}

Request

Name Type Description
transaction_token string Required. Transaction token returned in checkout/initiate.
challenge_type integer Type of challenge. challenge_type passed in challenge_details in checkout/authenticate_user.
challenge_value string challenge value entered by user.

The Response JSON structured like this:



{
    "status": "OK",
    "remaining_challenge_verification_attempts":4,
    "transaction_context": [same as response on checkout/initiate]

}

Negatif Response JSON structured like this:


{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}


Success Response

Name Type Description
status string status code : OK
remaining_challenge _verification_attempts integer Number of remaining challenge verification attempts.
transaction_context object detail of transaction

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

Resend Challenge

Challenge will be have timeout time, but you can call again to get the new one.

Using the API:

The Request JSON structured like this:


{
    "transaction_token": "TX-1234-ABCD-5678",   
}

Request

Name Type Description
transaction_token string Required. Transaction token returned in checkout/initiate.

The Response JSON structured like this:


{
    "status": "OK",
    "challenge_details": {
        "verify_challenge": true,
        "challenge_type" : 1,
        "challenge_url":"https://kredivo.sandbox.com/verify/sdewxklsf",
        "remaining_challenge_attempts":3
    }

    "transaction_context": {
       "[same as response on checkout/initiate]"
    }

}

The Response JSON structured like this:

{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}


Success Response

Name Type Description
status string status code : OK
challenge_details object Determines if user need to verify any challenge post authentication. see challenge detail here
transaction_context object detail of transaction transaction context

Challenge Details

Name Type Description
verify_challenge boolean True, if user need to verify challenge post authentication. False, if user do not need to verify challenge post authentication.
challenge_type integer Type of challenge. Possible values: 1: OTP, 2: Captcha
challenge_url string Redirect URL for verifying the challenge
remaining_challenge _attempts integer Number of remaining challenge attempts.

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

Get Transaction Status

This is the final step. after transaction submitted kredivo will be process the transaction. and send final status to your callback_url. biside that, you can check the transaction for example every 10 s to get transaction status.

Using the API:

The Request JSON structured like this:


{
    "transaction_token": "TX-1234-ABCD-5678",   
}

Request

Name Type Description
transaction_token string Required. Transaction token returned in checkout/initiate.

Response


{
    "Status": "OK", 
    "transaction_context" : {
        [same as response on checkout/initiate] 
    }
}

Negatif Response JSON structured like this:

{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}

Success Response

Name Type Description
status string status code : OK
transaction_context object detail of transaction transaction context

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

Get User Credit Details

Using this api, you can check remaining transaction this aim to help decrease deny order from inssuficient limit.

Using the API:

The Request JSON structured like this:


{
    "server_key": "ABCD-XXXX-1234",
    "user_token_details": {
        "user_token": "XXXX-YYYY",
        "user_token_type": 1,
        "client_user_key": "CLIENT-XXX-YYY"
    }
}


Request

Name Type Description
server_key string Mandatory
user_token_details object Mandatory. User token details here

User token details

Name Type Description
user_token string Mandatory. user_token sent from Kredivo to tokenize the user.
user_token_type integer Mandatory. Possible values: 1(one_click_token), 2(express_token)
client_user_key string Mandatory. Client user key associated with user token. Kredivo will use this key to validate user token.

Response


{
    "Status": "OK", 
    "user_token_details" : {
        "user_token" : "",
        "user_token_type": 1,
        "client_user_key":"randy@finaccel.co"
        "is_active": true,
        "remarks": "user acitve"
    }
    "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"
            }

        ]
    }
}

Negatif Response JSON structured like this:

{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}

Success Response

Name Type Description
status string status code : OK
user_token_details object detail of user token details
user_credit_details object detail of user credit details

User Token Details

Name Type Description
user_token string user_token sent from Kredivo to tokenize the user.
user_token_type integer Possible values: 1(one_click_token), 2(express_token)
client_user_key string Client user key associated with user token.
is_active boolean True/False. If False, Kredivo is not able to provide User Credit Details.
remarks string remarks about user token

User Credit Details

Name Type Description
account_status integer Possible values (1: active, 2. inactive)
account_type integer 1: basic (eligible for “30_days” 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
code Integer error code
message String Error message

Deactive 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_details": {
        "user_token": "XXXX-YYYY",
        "user_token_type": 1,
        "client_user_key": "CLIENT-XXX-YYY"
    }
}


Request Body

Name Type Description
server_key string Mandatory
user_token_details object . Mandatory. User token details here

User Token details

Name Type Description
user_token string user_token sent from Kredivo to tokenize the user.
user_token_type integer Possible values: 1(one_click_token), 2(express_token)
client_user_key string Client user key associated with user token.

Response


{
    "Status": "OK", 
    "user_token_details" : {
        "user_token": "XXXX-YYYY",
        "user_token_type": 1,
        "client_user_key": "CLIENT-XXX-YYY"
        "is_active":false
        "remarks":"deactive user successful"
    }
}

Negatif Response JSON structured like this:

{
    "status": "ERROR",
    "error": {        
        "kind": "Error type",
        "code": "Error code",
        "message": "Error message."
    }
}

Success Response

Name Type Description
status string OK
user_token_details object User token details here

User Token Details

Name Type Description
user_token string user_token sent from Kredivo to tokenize the user.
user_token_type integer Possible values: 1(one_click_token), 2(express_token)
client_user_key string Client user key associated with user token.
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

2-clicks Checkout

On this step, we will try to obtain the Kredivo Login page when performing a transaction. There is at least 3 components that are required to obtain Kredivo Login page:

You’ll need a server_key to interact with the Kredivo’s server. Please send an email to merchops@finaccel.co to sign up as an Kredivo merchant and get server_key.

Initiate 2-clicks 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",  
    "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"
            }
        }
    ],
    "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"
    },
    "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"
    }
  }

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)
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)
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. Please contact us how to parse this signature_key by using your client key.
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 The checkout page URL to be displayed
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.
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.
email 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)
email String Required. Seller’s email
address Address Required. Seller’s residential address

HTTP(S) Header

Name Type Description
Content-Type String application/json
Accept String application/json

Payment Type

This is optional step if you want to display list of eligible payment type and implement Installment on your page to calculate and display Installment breakdown on your checkout page.

Using the API:

The Request JSON structured like this:

  {
    "server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
    "amount":2400000,
    "items": [
        {
            "id":"BB12345678",
            "name":"iPhone 5S",
            "price":2400000,
            "url":"http://merchant.com/cellphones/iphone5s_64g",
            "type":"Smartphone",
            "quantity":1
        }
    ]
  }

Example Response:

  {
    "status": "OK",
    "message": "Available payment types are listed.",
    "payments": [
        {
            "down_payment": 0,
            "name": "Bayar dalam 30 hari",
            "amount": 2400000,
            "installment_amount": 2400000,
            "rate": 0,
            "monthly_installment": 2400000,
            "discounted_monthly_installment": 0,
            "tenure": 1,
            "id": "30_days"
        },
        {
            "down_payment": 0,
            "name": "Bayar dalam 3 bulan",
            "interest_rate_transition_term": 0,
            "amount": 2400000,
            "installment_amount": 2568870,
            "rate": 2.95,
            "monthly_installment": 856290,
            "discounted_monthly_installment": 0,
            "tenure": 3,
            "id": "3_months"
        },
        {
            "down_payment": 0,
            "name": "Bayar dalam 6 bulan",
            "interest_rate_transition_term": 0,
            "amount": 2400000,
            "installment_amount": 2700540,
            "rate": 2.95,
            "monthly_installment": 450090,
            "discounted_monthly_installment": 0,
            "tenure": 6,
            "id": "6_months"
        },
        {
            "down_payment": 0,
            "name": "Bayar dalam 12 bulan",
            "interest_rate_transition_term": 0,
            "amount": 2400000,
            "installment_amount": 2976600,
            "rate": 2.95,
            "monthly_installment": 248050,
            "discounted_monthly_installment": 0,
            "tenure": 12,
            "id": "12_months"
        }

    ]
}

Request Body

Name Type Description
server_key String Required. Each merchant will have server_key generated by Kredivo.
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.
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
discounted_monthly_installment Double discounted monthly installment

Confirm Purchase

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 a purchase. Once you have received the push notification you should update the status of the order.

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. Please contact us how to parse this signature_key by using your client key.

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’s 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. Please contact us how to parse this signature_key by using your client key.

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

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.

Cancel Purchase

Payment can be voided with cancel method if transaction has been completed.

** A transaction can be cancelled within 30 calendar days after the transaction was created. If a cancellation is requested after 14 calendar days, we will charge cancellation fee to merchant. We would not be able to cancel a transaction after 30 calendar days.

Using the API:

Example Request for Full Cancellation :

{
    "server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
    "order_id":"KD14721",
    "transaction_id":"6febc2b2-ac4f-462c-9e7e-56fc5da05d91",    
    "cancellation_reason":"Out of stock",
    "cancelled_by":"Althea",
    "cancellation_date":"1501844808"

}

Example Request for Partial Cancellation :

{
    "server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
    "order_id":"KD14721",
    "transaction_id":"6febc2b2-ac4f-462c-9e7e-56fc5da05d91",
    "cancellation_amount" : 50000,  
    "cancellation_reason":"Out of stock",
    "cancelled_by":"Althea",
    "cancellation_date":"1501844808"

}

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
transaction_id String Required. Transaction Id given by Kredivo
cancellation_amount String 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

Example Response :

Partial cancellation:
{
  "status": "OK",
  "fraud_status": "accept",
  "order_id": "ALC300080",
  "transaction_time": 1542951231,
  "amount": "1500000.00",
  "payment_type": "30_days",
  "transaction_status": "settlement",
  "message": "Succes cancelling transaction by amount",
  "transaction_id": "69fe07ca-e055-4877-828a-a201a6729163"
}

for Full cancellation 
{
  "status": "OK",
  "fraud_status": "accept",
  "order_id": "740",
  "transaction_time": 1542952038,
  "amount": "50.00",
  "payment_type": "30_days",
  "transaction_status": "cancel",
  "message": "Succes cancelling transaction by amount",
  "transaction_id": "b027a268-c9e3-4e29-aed8-1116babd9594"
}


negative response:
{
    "status": "ERROR",
    "message": "Transaction is already cancelled.",
    "fraud_status": "deny"
}

{
    "status": "ERROR",
    "error": {
        "message": "Cancellation amount bigger than remaining transaction amount that can be cancelled",
        "kind": "APIException"
    }
}

Response

Name Type Description
status String Status code (OK or ERROR).
transaction_id String Transaction Id given by Kredivo
transaction_time UNIX timestamp (epoch) Timestamp of transaction
order_id String Order Id given by merchant
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. when there is remaining amount(partial cancellation), transaction status will be stay in settlement. and for full cancellation, transaction status will be cancel.
message String Description of status
fraud_status String Detection result by Fraud Detection System (FDS), the values is:accept: Approved by FDS deny: Denied by FDS.

Check Transaction Status

You can use this API to check individual transaction’s status on Kredivo. You can refer to this chart to see Kredivo’s transaction status flow.

transction flow

transaction flow user register

Using the API:

Example Request :

{
    "server_key": "XNe3UDd2bG6VBqQ2QamqQJ83SNGLnZ",
    "order_id": "KB-0c40f395"
}

Example Response :

{
    "status": "OK",
    "legal_name": "MUHAMMAD RANDY RAHARJA MACHYAR",
    "fraud_status": "accept",
    "order_id": "KB-0c40f395",
    "transaction_time": 1520318880,
    "external_userid": "SbmEaX1fdr",
    "amount": "1500000.00",
    "payment_type": "30_days",
    "transaction_status": "pending",
    "message": "Transaction is pending",
    "transaction_id": "46153904-2611-462c-ab51-2423586638ea"
}

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).
Legal name String kredivo user
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
External userid String Kredivo user id
Amount String Transaction amount
Payment type String ayment id/type chosen by the shopper (30_days, 3_months, 6_months, 12_months)
Transaction status String Transaction status of a transaction
Message String Detail status
Transaction id String Transaction Id given by Kredivo.

QR Checkout

QR Checkout is a Kredivo payment method that you can implement on your POS. By using this method, you can allow your customer to pay using their Kredivo limit on your offline store.

You will need to obtain server key to interact with Kredivo server. Please send an email to merchops@finaccel.co to sign up as an Kredivo merchant and get server_key.

Initiate QR Checkout

To initiate QR checkout with Kredivo, you will need to init_checkout API.

Using the API:

The Request JSON structured like this:

  {
    "server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
    "amount":75000,
    "source": "QR",
    "order_id": "548tIt83saeN",
    "merchant_id": "KFC",
    "outlet_id": "KFCSenayan",
    "push_uri" : "https://www.merchantmoka.com/notify"
    "items": [
         {
        "id": "001",
        "name":"Nasi Capcay Seafood",
        "price":50000,
        "type":"Food",
        "quantity":1
        },
         {
        "id": "002",
        "name":"Cappuccino",
        "price":25000,
        "type":"Drink",
        "quantity":1
        }
    ]
}


Response:

  {
    "status": "OK",
    "qr_image": "{HOST}/{endpoint}/v1/qr/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
merchant_id String Required. ID of a merchant. (e.g. KFC, McDonald)
outlet_id String Required. ID of a merchant’s outlet. (e.g. KFCSenayan, KFCSemanggi, McDonaldBSD)
push_uri String Required. URI of merchant push-notification API (HTTP POST)
items Item Required. The shopping items

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
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

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 Purchase

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 a purchase. Once you have received the push notification you should update the status of the order.

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",
    "merchant_id": "KFC",
    "outlet_id": "KFCSenayan"
}

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. Please contact us how to parse this signature_key by using your client key.
merchant_id String ID of a merchant. (e.g. KFC, McDonald)
outlet_id String ID of a merchant’s outlet. (e.g. KFCSenayan, KFCSemanggi, McDonaldBSD)

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’s 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. Please contact us how to parse this signature_key by using your client key.

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",
    "merchant_id": "KFC",
    "outlet_id" : "KFCSenayan"
}
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
merchant_id String ID of a merchant. (e.g. KFC, McDonald)
outlet_id String ID of a merchant’s outlet. (e.g. KFCSenayan, KFCSemanggi, McDonaldBSD)

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.

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",
    "transaction_id": "2be7d9ea-ccba-4743-8b92-0f1fc3ec358d"
  }

Response:

  {
    "status": "OK",
    "order_id": "EDC6A643481-33FA-4FA7-9135-8A1503FC863A",
    "transaction_time": "2017-12-14 16:07:24",
    "amount": 75000,
    "payment_type": "30_days",
    "transaction_status": "settlement",
    "message": "Transaction is settlement",
    "transaction_id": "6a643481-33fa-4fa7-9135-8a1503fc863a",
    "payback_amount": 50000,
    "discount_amount": 0,
    "items": [
         {
        "id": "001",
        "name":"Nasi Capcay Seafood",
        "price":50000,
        "quantity":1
         },
         {
        "id": "002",
        "name":"Cappuccino",
        "price":25000,
        "quantity":1
        }
    ],
    "merchant": {
         "short_description": null,
         "contact_number": "+62-81321881212",
         "name": "Lazada",
         "address": "Indonesia",
         "url": "www.lazada.co.id",
         "contact_person": "Vince Iswara",
         "id": 110,
         "description": null
    }
}


Request Body

Name Type Description
server_key String Required. Each merchant will have server_key generated by Kredivo.
transaction_id String Required. Transaction ID given by Kredivo.

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
payback_amount Double Total amount that the user need to payback
discount_amount Double Discount amount that the user get for the transaction
items Item The shopping items
merchant Merchant Merchant information where the transaction take place

Merchant

Name Type Description
short_description String Short description of the merchant
contact_number String Merchant’s contact number
name String Merchant name
address String Merchant address
url String URL to merchant website
contact_person String Merchant’s contact person
id Long int Merchant’s ID on Kredivo
description String Description of the merchant

Cancel Purchase

Payment can be voided with cancel method 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"
  }

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
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",
    "merchant_id": "MOKAMERCHANT001"
  }

Response for cancellation by amount/ partial amount:

  {
    "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",
    "merchant_id": "MOKAMERCHANT001"
  }

Example for negative response:

  {
     "status": "ERROR",
     "error": {
       "message": "Cancellation amount bigger than remaining transaction amount that can be cancelled",
       "kind": "APIException"
     }
    }

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

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

woocommerce

Download plugin for woocomerce v.3.x.x here

Prestashop

prestashop

Download plugin for prestashop v.1.6.x here

Opencart

opencart

Download plugin for opencart v.1.x.x here and opencart v.2.x.x here

Magento

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:

basic

basic-white

kredivo-color

kredivo-white

Download Kredivo logo here.

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?

  1. 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.

  2. 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.

  3. 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:

  1. Please send all Kredivo related collateral (newsletter, product promotion, social media posting, banner, FAQ) to successops@finaccel.co prior to posting for approval.
  2. 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).
  3. 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.

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’s 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 1-click https://sandbox.kredivo.com/
Domain URL QR, 2-clicks 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 support@kredivo.com for live server end point before going live.

System Status

Click here to see Kredivo’s system status