Getting Started
Introduction
Simplifying buying
Use the Kredivo Checkout API to let Kredivo users pay on your web or app platform.
The checkout API is one API with several variants. Each variant fits a specific use case and differs only in the parameters you pass:
Online checkout (web and app):
- 2-click checkout — the Kredivo user enters their Kredivo phone number and PIN, then an OTP, to complete the transaction.
- 0-click checkout — the Kredivo user tokenizes their Kredivo account on your platform. Later transactions don’t require Kredivo credentials (an OTP may still be required in some cases).
Offline checkout (in-store):
- QR checkout — for offline (in-store) transactions. Uses a dynamic QR code generated for each transaction.
- Barcode checkout — for offline (in-store) transactions. The Kredivo user shows a barcode in the Kredivo app, and you scan it to request the purchase.
- EDC checkout — for offline (in-store) transactions. The Kredivo user pays in your physical store through an EDC terminal.
| Optimized for all devices | More sales with no risk |
|---|---|
| Kredivo Checkout adapts to desktop and mobile devices, so you get the same conversion on mobile as on desktop. One-click buying increases conversion by an additional 29% for returning customers. | Kredivo assumes all risk for both the customer and the merchant, so you have no charge-backs. |
Preparation
Prepare your site
Set up the following before you start integrating, so the integration goes quickly.
Checkout page and confirmation page
You host both the checkout page and the checkout confirmation page. Each page must include a div that you populate with the Kredivo Checkout button. See 2-Click Checkout to learn how the checkout works. Kredivo Checkout is responsive and always uses the full width of its container.
What customers see
Kredivo Checkout adapts to the customer’s device. The login step looks like this on mobile and desktop browsers:


- Phone number and PIN login – customers sign in with their +62 phone number and Kredivo PIN.
- Optional account linking – a toggle links the Kredivo account to your store for faster future payments.
- Continue in the Kredivo app – customers can scan a code to finish in the app instead.
- Sign-up link – new customers can register without leaving checkout.
- Desktop extras – the wider layout also shows an order summary (merchant and total) and promotions.
Push notification URI
Kredivo sends the order status to your push notification URI (see Confirm Transaction). Include a placeholder in the push URI; Kredivo replaces it with the order URI when it sends the push notification. Download an example push URI.
Developer Help
For help with the documentation or the sandbox environment, email merchops@finaccel.co.
To get a merchant account, sign up as a Kredivo merchant.
Developer FAQ
- Does Kredivo work on desktop and mobile? Yes. Kredivo works on desktop, mobile, and tablet web.
- I am not a retailer, but I want to offer Kredivo financial products on my site or app. Do you have an API for that? If you are interested in using Kredivo for your site/app, sign up at kredivo.id/jadi-partner.html.
- Is Kredivo another payment processor? No. Kredivo is a point-of-sale credit solution for your customers.
Online Checkout
Online checkout is for web and app platforms, where the Kredivo user pays on your platform.
- 2-Click Checkout — the user logs in with phone number, PIN, and OTP for each transaction.
- Account Linking — the user links their Kredivo account to your platform once, before any transaction, and you receive a
user_token. - 0-Click Checkout — the user tokenizes their Kredivo account once; later transactions skip Kredivo credentials.
2-Click Checkout
2-click checkout is the standard Kredivo checkout for web and app platforms. Use it when the Kredivo user should log in with their phone number, PIN, and OTP for each transaction.
The flow:
- Call the checkout API with all required parameters.
- On success, the response contains a
redirect_url. - Redirect the Kredivo user to
redirect_urlto open the Kredivo payment page.
You need at least these three values to get a payment page:
server_key— authenticates you with the Kredivo server. To get aserver_key, sign up as a Kredivo merchant.order_id- Transaction amount (
amount)
Initiate 2-Click Checkout
Call checkout_url to create a 2-click checkout and get the payment page URL.
HTTP request
POST /kredivo/v2/checkout_url
Example request:
{
"server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
"payment_type":"30_days",
"client_user_key": "yospe@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"
}
Example response:
Positive Response :
{
"status":"OK",
"message":"Message if any",
"redirect_url":"https://staging.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
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
payment_type |
string | Yes | Use 30_days or 12_months as a default. Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
client_user_key |
string | Conditional | Required if tokenize_user is true. Must be unique per user on your side |
transaction_details |
object | - | Details of the transaction |
customer_details |
object | Yes | Details of the customer |
sellers |
array | Conditional | Required for marketplaces. Details of the seller for marketplaces |
billing_address |
object | No | Billing address of the customer |
shipping_address |
object | Yes | Shipping address of the customer. Required for physical goods (not tickets or vouchers). |
metadata |
object | No | The metadata parameters. |
push_uri |
string | Yes | Your push notification endpoint (receives HTTP POST). |
user_cancel_uri |
string | No | URI Kredivo sends the customer to if they cancel the Kredivo payment before completion. |
back_to_store_uri |
string | Yes | URI of your store page, used on the settlement page. Kredivo appends these parameters for your server to acknowledge: order_id: Order ID assigned by the merchant; tr_id: Transaction ID assigned by Kredivo;tr_status: Transaction status of a transaction; sign_key: Signature key used to verify that the notification came from Kredivo. |
expiration_time |
string (epoch) | No | Defaults to 24 hours after the transaction time. |
Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
message |
string | Description of status |
redirect_url |
string | Returned for regular transactions. For an authenticated (tokenized) user: if our security system flags the transaction, this contains an OTP challenge URL; otherwise no redirect_url is returned and you wait for the push notification. |
error |
object | message: description of the error; kind: error type |
Transaction
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id |
string | Yes | Order ID assigned by the merchant |
amount |
number | Yes | The transaction amount |
items |
array | Yes | The shopping items |
Product item
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Item ID, such as the product SKU. For fees and adjustments, you must use one of these IDs: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name |
string | Yes | Product name |
price |
number | Yes | Price of the item. |
url |
string | Yes | URL to the product item on merchant site. |
image_url |
string | No | URL to the product item image. |
type |
string | Yes | Product category. |
quantity |
integer | Yes | Quantity of the item bought. |
parent_type |
string | No | You can assign the fee to either SELLER or ITEM. If not specified, this will be tied to transaction level. |
parent_id |
string | No | This is either the seller Id or item Id |
Customer
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name |
string | Yes | |
last_name |
string | No | |
email |
string | Yes | |
phone |
string | Yes |
Address
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name |
string | Yes | |
last_name |
string | No | |
address |
string | Yes | |
city |
string | Yes | |
postal_code |
string | Yes | |
phone |
string | Yes | |
country_code |
string | Yes | ISO 3166-1 alpha-3 |
Seller
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Seller’s Id |
name |
string | Yes | Seller’s name |
url |
string | Yes | Seller’s url |
legal_id |
string | No | Seller’s legal Id (KTP, SIM or passport number) |
email |
string | Yes | Seller’s email |
address |
object | Yes | Seller’s residential address |
Metadata
| Parameter | Type | Required | Description |
|---|---|---|---|
ip_address |
string | No | |
user_agent |
string | No | |
device_id |
string | No | IMEI or IMSI of buyer device |
imsi |
string | No |
HTTP(S) header
| Parameter | Type | Description |
|---|---|---|
Content-Type |
string | Application/json |
Accept |
string | Application/json |
Confirm Transaction
After the Kredivo user completes a transaction, Kredivo sends you a push notification. Follow these steps to acknowledge it, verify it, and update the order in your system.
1. Receive notification from Kredivo
When the Kredivo user completes a purchase, Kredivo sends a POST request to the push_uri you provided when you created the checkout.
Example push notification:
{
"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"
}
Push notification body
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | - | Status code (OK or ERROR) |
message |
string | - | Description of status |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | - | Transaction ID assigned by Kredivo |
transaction_status |
string | - | Transaction status. Possible values: |
| - | 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 |
integer (epoch) | - | Timestamp of transaction |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
shipping_address |
object | No | Shipping address of the customer |
order_id |
string | - | Order ID assigned by the merchant |
amount |
string | - | The transaction amount |
signature_key |
string | - | Signature key used to verify that the notification came from Kredivo. |
Response address info
| Parameter | Type | Required | Description |
|---|---|---|---|
city |
string | No | |
first_name |
string | No | |
last_name |
string | No | |
countrycode |
string | No | |
creation_date |
string | No | |
phone |
string | No | |
state |
string | No | |
transaction |
integer | No | |
postcode |
string | No | |
location_details |
string | No |
2. Acknowledge the push notification
Respond with JSON structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status
Call update to get the order status and verify that the push notification came from Kredivo.
2-click confirm: HTTP request
GET /kredivo/v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
2-click confirm: Request body
| Parameter | Type | Description |
|---|---|---|
transaction_id |
string | Transaction ID assigned by Kredivo |
signature_key |
string | Signature key used to verify that the notification came from Kredivo. |
Response body
Example response from
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"
}
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR). |
message |
string | Description of status |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | Transaction ID assigned by Kredivo |
transaction_status |
string | Transaction status. Possible values: |
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 |
integer (epoch) | Timestamp of transaction |
order_id |
string | Order ID assigned by the merchant |
amount |
string | The transaction amount |
fraud_status |
string | Fraud Detection System (FDS) result. Possible values: accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name |
string | Legal name on the 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
If transaction_status is settlement, settle the order in your system and store the order data you need.
Account Linking
Account linking lets a Kredivo user connect (bind) their Kredivo account to their account on your platform, usually before any transaction, without making a purchase.
When linking succeeds, Kredivo sends you a user_token for that user. Store it: it lets you access Kredivo services for the user with their consent, for example Get User Credit Details or 0-click checkout.
The flow:
- The user chooses to connect their Kredivo account on your platform.
- Call the account linking API. On success, the response contains a
redirect_urlto the Kredivo linking page. - Redirect the user to
redirect_url. The user enters their Kredivo phone number and PIN, then verifies with an OTP if Kredivo’s risk check requires it. - Kredivo approves the linking and sends a push notification with the
user_tokento yourcallback_url. - Kredivo redirects the user back to the
redirect_urlyou sent in the request.
Link Account
Call connect to start account linking and get the Kredivo linking page URL.
Link account: HTTP request
POST /kredivo/v2/connect
Example account linking request:
{
"server_key": "MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
"mobile_number": "+62-81381140446",
"client_user_key": "test01@gmail.co",
"callback_url": "https://merchant.example/kredivo/linking-callback",
"redirect_url": "https://merchant.example"
}
Link account: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
mobile_number |
string | Yes | Customer phone number in the format +62- followed by the number without the leading 0, for example +62-81381140446. |
client_user_key |
string | Yes | Immutable unique user ID on your side. Must be unique per user. |
callback_url |
string | Yes | Your endpoint that receives the linking push notification (HTTP POST). |
redirect_url |
string | Yes | URI of your store to redirect the customer to after linking. |
Example account linking success response:
{
"status": "OK",
"message": "",
"redirect_url": "https://staging.kredivo.com/kredivo/v2/connect?tk=XXX"
}
Example account linking error response:
{
"error": {
"message": "Invalid merchant",
"kind": "deprecated",
"code": 2403
},
"status": "ERROR"
}
Link account: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
message |
string | Description of status |
redirect_url |
string | URL of the Kredivo linking page. Open it so the user can complete account linking. |
error |
object | Returned when status is ERROR. See error details. |
Receive Linking Notification
You must provide this endpoint. When the user completes linking, Kredivo sends a POST request to the callback_url you sent in the linking request.
Link account: Callback request
POST {callback_url}
Example account linking callback from Kredivo:
{
"message": "Kredivo-Connect success",
"user_token": "e157ae57-ea5f-4acc-b7e6-11cac8c865f3",
"client_user_key": "test01@gmail.co",
"status": "OK"
}
Example account linking callback error:
{
"message": "Invalid merchant",
"user_token": "",
"client_user_key": "test01@gmail.co",
"status": "2403"
}
Link account: Callback body
| Parameter | Type | Required | Description |
|---|---|---|---|
message |
string | Yes | Message of the request |
user_token |
string | Yes | Kredivo user token |
client_user_key |
string | Yes | User ID on your side, as sent in the linking request |
status |
string | Yes | OK on success; otherwise an error code, for example 2403 (Invalid merchant) |
Unlink Account
To unlink (unbind) a user, call POST /kredivo/v2/deactive_user_token with your server_key and the user’s user_token. When status is OK, the detokenization succeeded and you must invalidate the user_token on your side.
Example account unlinking success response:
{
"status": "OK",
"message": "",
"remarks": "081513114262|Deactivated by merchant",
"user_token": "9cc7f862-d4ac-49d2-88d6-050858bee3fd",
"is_active": false
}
Users can also disconnect from the Kredivo app. Kredivo then sends a push notification with the client_user_key to the callback_url you provided during account linking, and you must invalidate that user’s user_token. See Deactivate from Kredivo app.
0-Click Checkout
0-click checkout lets a Kredivo user tokenize their Kredivo account on your platform and then check out without entering anything. Use it for returning users. Regular (2-click) checkout asks for phone number, PIN, and OTP; 0-click asks for nothing, unless our security system flags the transaction, in which case the Kredivo user gets an OTP challenge.
The flow:
Initiate 0-Click Checkout
Tokenize the Kredivo user through the regular checkout page by calling checkout_url.
- On the first call, set
tokenize_usertotrue. - When that transaction succeeds, you receive a
user_token. - Pass
user_tokenin later calls. Those transactions are 0-click.
You can also get a user_token without a transaction through Account Linking. Before showing Kredivo on your payment page, you can call Get User Credit Details to show the user’s eligible limit.
0-click: HTTP request
POST /kredivo/v2/checkout_url
Example request:
{
"server_key":"MEJ4FLRc74UU64cxCF8Z3HYSpPctD7",
"payment_type":"30_days",
"tokenize_user": false,
"client_user_key": "yospe@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"
}
}
],
"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"
}
Example response:
Positive Response :
{
"status":"OK",
"message":"Message if any",
"redirect_url":"https://staging.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"
}
0-click: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
payment_type |
string | Yes | Use 30_days or 12_months as a default. Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
tokenize_user |
boolean | No | Defaults to false. Set to true to tokenize the Kredivo user. You receive user_token when the transaction is settled. |
client_user_key |
string | Conditional | Required if tokenize_user is true. Must be unique per user on your side |
user_token |
string | Conditional | Required for 0-click checkout. Kredivo uses it to authenticate the user. |
transaction_details |
object | - | Details of the transaction |
customer_details |
object | Yes | Details of the customer |
sellers |
array | Conditional | Required for marketplaces. Details of the seller for marketplaces |
billing_address |
object | No | Billing address of the customer |
shipping_address |
object | Yes | Shipping address of the customer. Required for physical goods (not tickets or vouchers) |
metadata |
object | No | The metadata parameters |
push_uri |
string | Yes | Your push notification endpoint (receives HTTP POST) |
user_cancel_uri |
string | No | URI Kredivo sends the customer to if they cancel the Kredivo payment before completion |
back_to_store_uri |
string | Yes | URI of your store page, used on the settlement page. Kredivo appends these parameters for your server to acknowledge: order_id: Order ID assigned by the merchant; tr_id: Transaction ID assigned by Kredivo;tr_status: Transaction status of a transaction; sign_key: Signature key used to verify that the notification came from Kredivo. |
expiration_time |
string (epoch) | No | Defaults to 24 hours after the transaction time. |
0-click: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
message |
string | Description of status |
redirect_url |
string | Returned for regular transactions. For an authenticated (tokenized) user: if our security system flags the transaction, this contains an OTP challenge URL; otherwise no redirect_url is returned and you wait for the push notification. |
error |
object | message: description of the error; kind: error type |
0-click: Transaction
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id |
string | Yes | Order ID assigned by the merchant |
amount |
number | Yes | The transaction amount |
items |
array | Yes | The shopping items |
0-click: Product item
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Item ID, such as the product SKU. For fees and adjustments, you must use one of these IDs: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name |
string | Yes | Product name |
price |
number | Yes | Price of the item |
url |
string | Yes | URL to the product item on merchant site |
image_url |
string | No | URL to the product item image |
type |
string | Yes | Product category. |
quantity |
integer | Yes | Quantity of the item bought |
parent_type |
string | No | You can assign the fee to either SELLER or ITEM. If not specified, this will be tied to transaction level |
parent_id |
string | No | This is either the seller Id or item Id |
0-click: Customer
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name |
string | Yes | |
last_name |
string | No | |
email |
string | Yes | |
phone |
string | Yes |
0-click: Address
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name |
string | Yes | |
last_name |
string | No | |
address |
string | Yes | |
city |
string | Yes | |
postal_code |
string | Yes | |
phone |
string | Yes | |
country_code |
string | Yes | ISO 3166-1 alpha-3 |
0-click: Seller
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Seller’s Id |
name |
string | Yes | Seller’s name |
url |
string | Yes | Seller’s url |
legal_id |
string | No | Seller’s legal Id (KTP, SIM or passport number) |
email |
string | Yes | Seller’s email |
address |
object | Yes | Seller’s residential address |
0-click: Metadata
| Parameter | Type | Required | Description |
|---|---|---|---|
ip_address |
string | Yes | |
user_agent |
string | Yes | |
device_id |
string | No | IMEI or IMSI of buyer device |
imsi |
string | No |
0-click: HTTP(S) header
| Parameter | Type | Description |
|---|---|---|
Content-Type |
string | Application/json |
Accept |
string | Application/json |
Confirm Transaction (0-Click)
After the Kredivo user completes a transaction, Kredivo sends you a push notification. Follow these steps to acknowledge it, verify it, and update the order in your system.
1. Receive notification from Kredivo (0-click)
When the Kredivo user completes a purchase, Kredivo sends a POST request to the push_uri you provided when you created the checkout.
Example push notification:
{
"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"
}
0-click confirm: Push notification body
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | - | Status code (OK or ERROR) |
message |
string | - | Description of status |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | - | Transaction ID assigned by Kredivo |
transaction_status |
string | - | Transaction status. Possible values: |
| - | 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 |
integer (epoch) | - | Timestamp of transaction |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
shipping_address |
object | No | Shipping address of the customer |
order_id |
string | - | Order ID assigned by the merchant |
amount |
string | - | The transaction amount |
signature_key |
string | - | Signature key used to verify that the notification came from Kredivo. |
0-click confirm: Response address info
| Parameter | Type | Required | Description |
|---|---|---|---|
city |
string | No | |
first_name |
string | No | |
last_name |
string | No | |
countrycode |
string | No | |
creation_date |
string | No | |
phone |
string | No | |
state |
string | No | |
transaction |
integer | No | |
postcode |
string | No | |
location_details |
string | No |
2. Acknowledge the push notification (0-click)
Respond with JSON structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status (0-click)
Call update to get the order status and verify that the push notification came from Kredivo.
0-click confirm: HTTP request
GET /kredivo/v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
0-click confirm: Request body
| Parameter | Type | Description |
|---|---|---|
transaction_id |
string | Transaction ID assigned by Kredivo |
signature_key |
string | Signature key used to verify that the notification came from Kredivo. |
0-click confirm: Response body
Example response from
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"
}
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR). |
message |
string | Description of status |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | Transaction ID assigned by Kredivo |
transaction_status |
string | Transaction status. Possible values: |
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 |
integer (epoch) | Timestamp of transaction |
order_id |
string | Order ID assigned by the merchant |
amount |
string | The transaction amount |
fraud_status |
string | Fraud Detection System (FDS) result. Possible values: accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name |
string | Legal name on the 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 (0-click)
If transaction_status is settlement, settle the order in your system and store the order data you need.
Deactivate User Token
Call this API to let a Kredivo user deactivate their tokenized account (invalidate their user_token).
Deactivate token: HTTP request
POST /kredivo/v2/deactive_user_token
Example request:
{
"server_key": "ABCD-XXXX-1234",
"user_token": "XXXX-YYYY"
}
Deactivate token: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | |
user_token |
string | - | user_token that Kredivo issued when tokenizing the user. |
Example success response:
{
"status": "OK",
"message": "",
"remarks": "081513114262|Deactivated by merchant",
"user_token": "9cc7f862-d4ac-49d2-88d6-050858bee3fd",
"is_active": false
}
Example error response:
{
"status": "ERROR",
"error": {
"code": 2403,
"message": "Invalid merchant",
"kind": "deprecated"
}
}
Or
{
"error": {
"kind": "deprecated",
"message": "Invalid user_token",
"code": null
},
"status": "ERROR"
}
Success response
| Parameter | Type | Description |
|---|---|---|
status |
string | OK if detokenization succeeded. You must then invalidate the user_token. |
message |
string | Description of status |
user_token |
string | user_token that Kredivo issued when tokenizing the user. |
is_active |
boolean | True/False. If False, Kredivo is not able to provide User Credit Details. |
remarks |
string | Remarks about the deactivation (see the example on the right) |
Error response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code: ERROR |
error |
object | See error details |
Error details
| Parameter | Type | Description |
|---|---|---|
kind |
string | Type of error |
code |
integer | Error code |
message |
string | Error message |
Deactivate from Kredivo app
Example request:
{
"message": "message if any",
"client_user_key": "yospe@finaccel.co"
}
Kredivo users can also deactivate their tokenized account in the Kredivo app. Kredivo then sends a push notification to the callback_url you provided during account linking, telling you to invalidate the user_token.
Example response:
{
"status": "OK",
"message": "message if any"
}
Get User Credit Details
Use this API to get a tokenized Kredivo user’s remaining limit, account status, and account type. You need the user’s user_token.
Credit details: HTTP request
POST /kredivo/v2/get_user_credit_details
Example request:
{
"server_key": "ABCD-XXXX-1234",
"user_token": "XXXX-YYYY"
}
Credit details: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | |
user_token |
string | Yes | user_token that Kredivo issued when tokenizing the user. |
Example success 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":"4500000"
}
{
"payment_type":"6_months",
"remaining_user_limit":"9000000"
}
{
"payment_type":"9_months",
"remaining_user_limit":"13500000"
}
{
"payment_type":"12_months",
"remaining_user_limit":"18000000"
}
{
"payment_type":"18_months",
"remaining_user_limit":"27000000"
}
{
"payment_type":"24_months",
"remaining_user_limit":"36000000"
}
]
}
}
Example error response:
{
"status": "ERROR",
"error": {
"kind": "deprecated",
"message": "Invalid user_token",
"code": null
}
}
Credit details: Success response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code : OK |
user_details |
object | Detail of user . |
user_credit_details |
object | Detail of user credit details |
User details
| Parameter | Type | Description |
|---|---|---|
legal_name |
string | |
mobile_number |
string |
User credit details
| Parameter | 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”, “9_months”, “12_months”, “18_months”, “24_months” payment types) |
credit_limit_details |
obejct | List of credit_limit: credit limit details per payment type |
Credit limit details
| Parameter | Type | Description |
|---|---|---|
payment_type |
string | Possible values: “30_days”, “3_months”, “6_months”, “9_months”, “12_months”, “18_months”, “24_months” |
remaining_user_limit |
string | Remaining user limit for payment type |
Credit details: Error response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code: ERROR |
error |
object | See error details |
Credit details: Error details
| Parameter | Type | Description |
|---|---|---|
kind |
string | Type of error |
message |
string | Error message |
Offline Checkout
Offline checkout is for in-store payments, where the Kredivo user pays at your physical store via QR, barcode scan, or EDC terminal.
- QR Checkout — the user scans a dynamic QR code generated for each transaction.
- Barcode Checkout — you scan the barcode shown in the user’s Kredivo app.
- EDC Checkout — the user pays through an EDC terminal.
QR Checkout
QR checkout lets Kredivo users pay in your physical store by scanning a dynamic QR code generated for each new transaction. You must integrate the Kredivo QR checkout API into your POS system, directly or through a POS provider. Contact us for integration details.
We also provide a seller app for monitoring transactions and cancelling them.
QR checkout flow:
Contact us to learn more about QR checkout.
Initiate QR Checkout
Call init_checkout to create a dynamic QR transaction and get a QR code to show on your POS.
QR: HTTP request
POST /offline/v1/init_checkout
Example request:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7x",
"amount":70000,
"source": "QR",
"qr_type": "IMAGE",
"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
}
]
}
Example response (
qr_type:IMAGE):
{
"status": "OK",
"message": "",
"qr_image": "{HOST}/{endpoint}/v1/qrcode/{merchant_id}/{external_merchant_id}/6a643481-33fa-4fa7-9135-8a1503fc863a",
"qr_numeric_code": 114376,
"transaction_id": "6a643481-33fa-4fa7-9135-8a1503fc863a"
}
Example response (
qr_type:STRING):
{
"status": "OK",
"message": "",
"qr_image": {
"type": "TRANSACTION",
"qr_id": "b1849e0d-22dd-4a7e-b848-2bb55c49fb64"
},
"qr_numeric_code": 114376,
"transaction_id": "6a643481-33fa-4fa7-9135-8a1503fc863a"
}
QR: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
amount |
number | Yes | The transaction amount |
source |
string | Yes | Default value is “QR” |
qr_type |
string | No | Supports “IMAGE” or “STRING” with “IMAGE” as the default. |
order_id |
string | Yes | Order ID assigned by the merchant |
sub_merchant_id |
string | Yes | ID of a sub merchant. (e.g. KFCSenayanCity) |
push_uri |
string | Yes | Your push notification endpoint (receives HTTP POST) |
sellers |
array | No | Detail of the seller / store. |
items |
array | Yes | The shopping items |
QR: Seller
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | No | Detail of the seller / store Id. |
name |
string | No | Detail of the seller / store name. |
url |
string | No | Detail of the seller / store url. |
legal_id |
string | No | Detail of the seller / store legal Id (KTP, SIM or passport number) |
email |
string | No | Detail of the seller / store email |
address |
object | No | Detail of the seller / store residential address |
QR: Address
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name |
string | No | |
last_name |
string | No | |
address |
string | No | |
city |
string | No | |
postal_code |
string | No | |
phone |
string | No | |
country_code |
string | No | ISO 3166-1 alpha-3 |
QR item
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | No | Item ID, such as the product SKU. For fees and adjustments, you must use one of these IDs: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name |
string | Yes | Product name. |
price |
number | Yes | Price of the item. |
type |
string | No | Product category. |
quantity |
integer | Yes | Quantity of the item bought. |
additional_info |
string | No | Additional information about other data from partner. |
QR: Response
| Parameter | 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 assigned by Kredivo |
Confirm Transaction (QR)
After the Kredivo user completes a transaction, Kredivo sends you a push notification. Follow these steps to acknowledge it, verify it, and update the order in your system.
1. Receive notification from Kredivo (QR)
When the Kredivo user completes a purchase, Kredivo sends a POST request to the push_uri you provided when you created the checkout.
Example push notification:
{
"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"
}
QR confirm: Push notification body
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | - | Status code (OK or ERROR) |
message |
string | - | Description of status |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | - | Transaction ID assigned by Kredivo |
transaction_status |
string | - | Transaction status. Possible values: |
| - | 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 |
integer (epoch) | - | Timestamp of transaction |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
shipping_address |
object | No | Shipping address of the customer |
order_id |
string | - | Order ID assigned by the merchant |
amount |
string | - | The transaction amount |
signature_key |
string | - | Signature key used to verify that the notification came from Kredivo. |
sub_merchant_id |
string | - | ID of a sub merchant. (e.g. KFCSenayanCity) |
QR confirm: Response address info
| Parameter | Type | Required | Description |
|---|---|---|---|
city |
string | No | |
first_name |
string | No | |
last_name |
string | No | |
countrycode |
string | No | |
creation_date |
string | No | |
phone |
string | No | |
state |
string | No | |
transaction |
integer | No | |
postcode |
string | No | |
location_details |
string | No |
2. Acknowledge the push notification (QR)
Respond with JSON structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status (QR)
Call update to get the order status and verify that the push notification came from Kredivo.
QR confirm: HTTP request
GET /kredivo/v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
QR confirm: Request body
| Parameter | Type | Description |
|---|---|---|
transaction_id |
string | Transaction ID assigned by Kredivo |
signature_key |
string | Signature key used to verify that the notification came from Kredivo. |
QR confirm: Response body
Example response from
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",
}
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR). |
message |
string | Description of status |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | Transaction ID assigned by Kredivo |
transaction_status |
string | Transaction status. Possible values: |
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 |
integer (epoch) | Timestamp of transaction |
order_id |
string | Order ID assigned by the merchant |
amount |
string | The transaction amount |
fraud_status |
string | Fraud Detection System (FDS) result. Possible values: accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name |
string | Legal name on the Kredivo account |
sub_merchant_id |
string | ID of a sub merchant. (e.g. KFCSenayanCity) |
4. Settle an order in your system (QR)
If transaction_status is settlement, settle the order in your system and store the order data you need.
Barcode Checkout
Barcode checkout lets Kredivo users pay in your physical store by showing a barcode in the Kredivo app, which you scan (customer-presented mode).
- The Kredivo user opens the Kredivo app and shows the barcode.
- You scan the barcode.
- You send a purchase transaction request to Kredivo.
- Kredivo validates the transaction request.
- Kredivo sends a response back to you.
- If you don’t receive a response from Kredivo within 45 seconds, send a purchase reversal.
Barcode Purchase Transaction
Send a purchase request after you scan the user’s barcode.
Barcode: HTTP request
POST /barcode/init_checkout
Example request:
{
"login": "username",
"password": "abc123",
"terminal": "QRUSERNAME001",
"barcode": "77158554444100004000",
"transaction_date": "20200202090000",
"amount": "10000",
"order_id": "GPTALF278-00000001101",
"name": "Kredipal",
"rek_type": "01",
"signature": "b46eec4ada3bbf1a4e09e84180bc1c0f",
"items": [
{
"id": "001",
"name": "Shampoo",
"price": 20000,
"type": "Additional",
"quantity": 1
},
{
"id": "discount",
"name": "discount",
"price": 10000,
"type": "discount",
"quantity": 1
}
]
}
Example response:
0000:Success:NAJWA008:20200202090000:Kredipal:01:0.0:77158624690202532001:Nominal=10000#Sisa Limit=3467000.00:ed035df9-93ee-43c6-ae97-6690220fc028:SIMPAN TANDA TERIMA SEBAGAI#BUKTI PEMBAYARAN SAH#LAYANAN KONSUMEN#customerservice#LAYANAN MITRA#driversupport:#
Barcode: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
login |
string | Yes | Merchant login ID, provided by Kredivo. Max length 15. |
password |
string | Yes | Password, provided by Kredivo. Max length 32. |
terminal |
string | Yes | External merchant ID that reflects the sub-merchant level ID (e.g. QRUSERNAME001). Max length 22. |
barcode |
string | Yes | Consumer payment code: the token you get when you scan the barcode. Can be PIN/token or token/mobile number, separated with `\ |
transaction_date |
datetime | Yes | Transaction request date, format YYYYMMDDHHmmss. Length 14. |
amount |
string | Yes | Transaction amount to be paid, as a decimal value in a string (e.g. "10000"). Max length 14. |
order_id |
string | Yes | Transaction ID, unique per request. Max length 60. |
name |
string | No | Customer name. Max length 25. |
rek_type |
string | No | Customer’s account type. Max length 2. |
signature |
string | Yes | MD5 signature of the fields above plus your secret key. See Barcode signature. Max length 200. |
items |
array | Yes | The shopping items. See Barcode item. |
Barcode item
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | No | Can be a product SKU. For fee items, use one of these IDs: shippingfee (+), adminfee (+), taxfee (+), discount (−), additionalfee (+), insurancefee (+), mixpayment (+). (+) adds to the amount; (−) reduces it. |
name |
string | Yes | Product name given by the merchant |
price |
double | Yes | Price of the item |
type |
string | No | Product category |
quantity |
integer | Yes | Quantity of the item bought |
additional_info |
string | No | Additional information about other data from the partner |
Barcode: Response
The response is a colon-delimited (:) string, not JSON. Fields appear in this order:
| Parameter | Type | Description |
|---|---|---|
res_code |
numeric (4) | Response code (e.g. 0000). See Barcode response codes. |
res_description |
alphanumeric (50) | Response code description (e.g. Success) |
tx_id |
alphanumeric (60) | Transaction ID, unique per request (e.g. NAJWA008) |
tx_date |
numeric (14) | Transaction request date, format YYYYMMDDHHmmss |
name |
alphanumeric (25) | Customer name |
rek_type |
alphanumeric (2) | Customer account type |
fee |
numeric (10) | Admin fee (e.g. 0.0) |
cust_key |
numeric (25) | Consumer payment code (the scanned token; see barcode) |
cust_info |
alphanumeric (100) | Customer information separated by #; product description and nominal separated by = (e.g. Nominal=10000#Sisa Limit=3467000.00) |
partner_tx_id |
alphanumeric (36) | Transaction ID from the partner, unique per response (e.g. a UUID such as ed035df9-93ee-43c6-ae97-6690220fc028) |
rsv |
alphanumeric (120) | Described in the spec as “Customer account type” |
| terminator | string | End-of-response terminator. Always #. |
Barcode Purchase Reversal
Send a reversal to cancel a purchase when you don’t receive a purchase response from Kredivo within 45 seconds.
Barcode reversal: HTTP request
POST /barcode/reversal
Example request:
{
"login": "username",
"password": "abc123",
"terminal": "QRUSERNAME001",
"barcode": "77158554444100004000",
"transaction_date": "20200202090000",
"amount": "10000",
"order_id": "GPTALF278-00000001101",
"name": "Kredipal",
"rek_type": "01",
"signature": "b46eec4ada3bbf1a4e09e84180bc1c0f",
"items": [
{
"id": "001",
"name": "Shampoo",
"price": 20000,
"type": "",
"quantity": 1
},
{
"id": "002",
"name": "Sabun",
"price": 15000,
"type": "",
"quantity": 1
},
{
"id": "discount",
"name": "discount",
"price": 25000,
"type": "discount",
"quantity": 1
}
]
}
Barcode reversal: Request body
The reversal request uses the same parameters as the purchase request body. The order_id identifies the transaction to reverse.
Barcode reversal: Response
The reversal response has the same format and fields as the purchase response.
Barcode Signature
Every request includes a signature field: the MD5 hash of all request field values concatenated in order, followed by a secret key agreed with Kredivo.
signature = MD5(login + password + terminal + barcode + transaction_date + amount + order_id + name + rek_type + secret_key)
| Name | Example value |
|---|---|
login |
username |
password |
abc123 |
terminal |
KZ01;KT01;F |
barcode |
7712391823813011 |
transaction_date |
20200310181504 |
amount |
10000 |
order_id |
20160310181504 |
name |
kredipal |
rek_type |
1 |
secret_key |
kredivo2020 |
Example signature:
MD5("usernameabc123KZ01;KT01;F7712391823813011202003101815041000020160310181504kredipal1kredivo2020")
= b224b4a701cf2003bc02689b1960fdd3
Barcode Response Codes
| Code | Description |
|---|---|
0000 |
Success (Sukses) |
0001 |
Invalid transaction (Transaksi tidak valid) |
0004 |
Invalid PIN/password (PIN/Password tidak valid) |
0005 |
Invalid transaction type (Tipe transaksi tidak valid) |
0006 |
Invalid amount (Nominal tidak valid) |
0008 |
Timeout (Time out) |
0009 |
Invalid card number (Nomer kartu tidak valid) |
0013 |
Invalid account (Akun tidak valid) |
0015 |
Transaction count limit reached (Mencapai batas jumlah transaksi) |
0016 |
Transaction limit exhausted (Limit transaksi habis) |
0023 |
Insufficient balance (Saldo tidak mencukupi) |
0024 |
Exceeds available funds (Melebihi dana yang tersedia) |
0038 |
Duplicate transaction (Transaksi double) |
0079 |
Transaction in process (Transaksi sedang di proses) |
00F0 |
Invalid login (Login tidak valid) |
00J6 |
Amount exceeds token/coupon limit (Nominal melebihi batas token/kupon) |
00j8 |
Coupon or token invalid, expired, or already used (Kupon atau token tidak valid/ kadaluarsa/ sudah terpakai) |
00LH |
Invalid phone number/recipient (Nomor telepon tidak valid/Penerima tidak valid) |
00T7 |
Customer is blacklisted (Konsumen sudah di blacklist) |
2001 |
Invalid IP address (IP Address tidak valid) |
2003 |
Invalid service ID (Service ID tidak valid) |
2020 |
Invalid request (Request tidak valid) |
2025 |
Wrong signature (Signature salah) |
2026 |
Customer balance has reached the maximum (Saldo customer sudah mencapai batas maksimal) |
EDC Checkout
EDC checkout lets Kredivo users pay in your physical store through an EDC terminal.
We also provide a dashboard for monitoring transactions and cancelling them.
Contact us to learn more about EDC checkout.
Initiate EDC Checkout
Call init_checkout with source set to EDC Mobile to create an EDC transaction. The cashier enters the customer’s Kredivo phone number on the EDC terminal. Kredivo then sends a notification to the customer’s Kredivo app, and the customer completes the transaction there by entering their PIN.
EDC: HTTP request
POST /offline/v1/init_checkout
Example request:
{
"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"
}
Example response:
{
"status": "OK",
"message": "",
"transaction_id": "bcda87e2-e87b-4b7f-add4-206bb4c1d72c",
"order_id": "12345678912"
}
EDC: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
sub_merchant_id |
string | Yes | ID of a sub merchant. (e.g. KFCSenayanCity) |
source |
string | Yes | Default value is “EDC Mobile” |
push_uri |
string | Yes | Your push notification endpoint (receives HTTP POST) |
order_id |
string | - | Order ID assigned by the merchant |
amount |
number | Yes | The transaction amount |
mobile_number |
string | - | User phone number |
terminal_id |
string | No | Outlet merchant’s EDC device identifier. |
EDC: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
transaction_id |
string | Transaction ID assigned by Kredivo |
order_id |
string | Order ID assigned by the merchant |
Confirm Transaction (EDC)
After the Kredivo user completes a transaction, Kredivo sends you a push notification. Follow these steps to acknowledge it, verify it, and update the order in your system.
1. Receive notification from Kredivo (EDC)
When the Kredivo user completes a purchase, Kredivo sends a POST request to the push_uri you provided when you created the checkout.
Example push notification:
{
"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"
}
EDC confirm: Push notification body
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | - | Status code (OK or ERROR) |
message |
string | - | Description of status |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | - | Transaction ID assigned by Kredivo |
transaction_status |
string | - | Transaction status. Possible values: |
| - | 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 |
integer (epoch) | - | Timestamp of transaction |
payment_type |
string | - | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
shipping_address |
object | No | Shipping address of the customer |
order_id |
string | - | Order ID assigned by the merchant |
amount |
string | - | The transaction amount |
signature_key |
string | - | Signature key used to verify that the notification came from Kredivo. |
sub_merchant_id |
string | - | ID of a sub merchant. (e.g. KFCSenayanCity) |
2. Acknowledge the push notification (EDC)
Respond with JSON structured like this:
{
"status":"OK",
"message":"Message from merchant if any"
}
3. Confirm the order status (EDC)
Call update to get the order status and verify that the push notification came from Kredivo.
EDC confirm: HTTP request
GET /kredivo/v2/update?transaction_id=bb0380d7-2688-4e73-a668-997f3fc5cbec&signature_key=5f1fa4a524f5a8201a3a373d67b5796840bed1598b2bb816855d0e14d01cd09b988b4b861f39bed642b4db861108bbf0dd84ce8e17caf675d4bf2c81ab545397
EDC confirm: Request body
| Parameter | Type | Description |
|---|---|---|
transaction_id |
string | Transaction ID assigned by Kredivo |
signature_key |
string | Signature key used to verify that the notification came from Kredivo. |
EDC confirm: Response body
Example response from
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",
}
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR). |
message |
string | Description of status |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_id |
string | Transaction ID assigned by Kredivo |
transaction_status |
string | Transaction status. Possible values: |
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 |
integer (epoch) | Timestamp of transaction |
order_id |
string | Order ID assigned by the merchant |
amount |
string | The transaction amount |
fraud_status |
string | Fraud Detection System (FDS) result. Possible values: accept: Approved by FDS; deny: Denied by FDS. Transaction automatically failed |
legal_name |
string | Legal name on the Kredivo account |
sub_merchant_id |
string | ID of a sub merchant. (e.g. KFCSenayanCity) |
4. Settle an order in your system (EDC)
If transaction_status is settlement, settle the order in your system and store the order data you need.
Reversal Transaction
Call reversal_transaction to terminate an EDC transaction after an intermittent connection or network issue. Reversal is only allowed within 60 seconds of the transaction.
Reversal: HTTP request
POST /offline/v1/reversal_transaction
Example request:
{
"order_id": "12345678912",
"server_key": "8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7"
}
Example success response:
{
"message": "",
"status": "OK"
}
Example error response:
{
"message": "",
"status": "ERROR"
}
Reversal: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
order_id |
string | Yes | Order ID assigned by the merchant |
Reversal: Response
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | - | Status code (OK or ERROR) |
message |
string | No | If any message |
Additional APIs
Use these APIs to check a transaction status (for example, if a push notification fails), cancel a transaction, and calculate interest and payments.
Check Transaction Status
Call this API to get a transaction’s current status after the Kredivo user finishes the transaction, or when you did not receive a push notification.
Status: HTTP request
POST /kredivo/transaction/status
Example request:
{
"server_key":"8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7",
"order_id": "KB-0c40f395"
}
Example 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"
}
Status: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
order_id |
string | Yes | Order ID assigned by the merchant. |
Status: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
fraud_status |
string | Fraud checking result (accept or deny) |
external_userid |
string | User ID |
legal_name |
string | Legal name of user |
order_id |
string | Order ID assigned by the merchant |
transaction_time |
integer (epoch) | Timestamp of transaction |
amount |
number | Transaction amount |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_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 assigned by Kredivo |
Cancel Transaction
Call this API to fully or partially cancel a completed transaction.
Cancel: HTTP request
POST /kredivo/v2/cancel_transaction
Example request:
{
"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"
}
Cancel: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
cancellation_id |
string | No | 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 | Yes | Order ID assigned by the merchant |
transaction_id |
string | Yes | Transaction ID assigned by Kredivo |
cancellation_amount |
integer | No | If you omit 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 | Yes | A description that clarifies reason of cancelling the transaction |
cancelled_by |
string | Yes | Cancellation requester name/ id |
cancellation_date |
integer (epoch) | Yes | Timestamp of Cancellation |
Example response (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"
}
Example response (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 error response (full/partial cancellation):
{
"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"
}
}
Cancel: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR). |
fraud_status |
string | Fraud Detection System (FDS) result. Possible values: accept: Approved by FDS deny: Denied by FDS. |
order_id |
string | Order ID assigned by the merchant |
transaction_time |
integer (epoch) | Timestamp of transaction |
amount |
string | The transaction amount |
payment_type |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
transaction_status |
string | Transaction status. Possible values: |
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 assigned 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
Call this API to get the monthly payment breakdown of a Kredivo installment for each available payment type.
Calculator: HTTP request
POST /kredivo/v2/payments
Example request:
{
"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": 2424000.0,
"amount": 2424000,
"discount_interest_rate": null,
"raw_monthly_installment": 2423999.801457357,
"id": "30_days",
"tenure": 1,
"service_fee": 24000,
"mdr": null,
"name": "Bayar dalam 30 hari",
"interest_rate": "0",
"rate": 0.0,
"service_fee_percentage": 1.0,
"monthly_installment": 2424000,
"installment_amount": 2424000
},
{
"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,
"mdr": null,
"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": 4800,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 462397.09959627397,
"id": "6_months",
"tenure": 6,
"service_fee": null,
"mdr": null,
"name": "Cicilan 6 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 462400,
"installment_amount": 2774400
},
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 2400,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 329064.15,
"id": "9_months",
"tenure": 9,
"service_fee": null,
"mdr": null,
"name": "Cicilan 9 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 329070,
"installment_amount": 2961630
},
{
"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,
"mdr": 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": 2400,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 195733.65,
"id": "18_months",
"tenure": 18,
"service_fee": null,
"mdr": null,
"name": "Cicilan 18 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 195740,
"installment_amount": 3523320
},
{
"raw_amount": 2400000.0,
"potential_cashback": {
"monthly_cashback": 2400,
"total_cashback": 28800
},
"amount": 2400000,
"discount_interest_rate": null,
"raw_monthly_installment": 162402.98,
"id": "24_months",
"tenure": 24,
"service_fee": null,
"mdr": null,
"name": "Cicilan 24 bulan",
"interest_rate": "2,6",
"rate": 2.6,
"service_fee_percentage": 0,
"monthly_installment": 162410,
"installment_amount": 3897840
}
],
"message": "Available payment types are listed.",
"status": "OK"
}
Calculator: Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
server_key |
string | Yes | Your merchant server_key, generated by Kredivo. |
user_token |
string | No | This user_token will authenticate the user’s limit for 0-click transactions once it’s been set. |
amount |
integer | Yes | The transaction amount |
items |
array | Yes | The shopping items |
Calculator: Response
| Parameter | Type | Description |
|---|---|---|
status |
string | Status code (OK or ERROR) |
payments |
array | List of available payment type to the transaction including its breakdown. You can find available payment type here. |
Calculator: Product item
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Item ID, such as the product SKU. For fees and adjustments, you must use one of these IDs: shippingfee, adminfee, taxfee, discount, additionalfee, insurancefee, mixpayment. |
name |
string | Yes | Product name |
price |
number | Yes | Price of the item in the quantity |
url |
string | Yes | URL to the product item on merchant site |
image_url |
string | No | URL to the product item image |
type |
string | Yes | Product category |
quantity |
integer | Yes | Quantity of the item bought |
Payment type
| Parameter | Type | Description |
|---|---|---|
id |
string | Payment type chosen by the Kredivo user (30_days, 3_months, 6_months, 9_months, 12_months, 18_months, 24_months) |
name |
string | Payment type name |
tenure |
integer | Tenure |
rate |
number | Interest rate |
interest_rate |
string | Interest rate in string |
interest_amount |
number | Interest amount |
discount_interest_rate |
number | Special interest rate |
amount |
number | Transaction amount. Total purchased items. |
raw_amount |
number | Transaction amount before rounding |
monthly_installment |
number | Installment per month |
raw_monthly_installment |
number | Installment per month before rounding |
installment_amount |
number | Total installment |
service_fee_percentage |
number | Kredivo service fee percentage |
service_fee |
number | Kredivo service fee |
mdr |
number | MDR passed to user |
potential_cashback |
object | Potential cashback |
Potential cashback
| Parameter | Type | Description |
|---|---|---|
monthly_cashback |
number | Monthly cashback |
total_cashback |
number | Total cashback |
Plugins
Use a plugin to integrate Kredivo into an e-commerce site built on one of these platforms.
WooCommerce

Download the plugin for WooCommerce v.3.x.x here
PrestaShop

Download the plugin for PrestaShop v.1.6.x here
OpenCart

Download the plugin for OpenCart v.1.x.x here or OpenCart v.2.x.x here
Magento

Download the plugin for Magento v.1.x.x here or Magento v.2.x.x here
Branding & Visual
Logos
Show the Kredivo logo to build trust and increase conversion.
Your website’s background
Use the blue logo on light backgrounds and the white logo on dark backgrounds.
Width
Display the Kredivo logo between 100 and 300 px wide. Don’t add px after the size parameter.
Example:


Download Kredivo logo here.
How to use the Kredivo logo
On your front page
When you list the payment methods your store offers, show the Kredivo logo. Hovering over the logo shows details on the payment methods available in your store.
On product pages
Show customers they can pay in installments to increase conversion on high-value products. Always show the Kredivo logo on product pages; it is recognizable even at small sizes. For the best conversion, use our payment method widget.
Marketing Resource
What is merchant success?
The Kredivo team works with you to solve problems, build a long-term relationship, and run joint campaigns that increase your revenue.
Kredivo is a sales enabler: it helps your customers buy more, more often. To get the most out of Kredivo, implement the merchant best practices.
Why implement merchant best practices?
Incremental sales take time and effort. So does building customer loyalty. The merchant best practices help you get there.
Education is crucial. Many consumers are unfamiliar with instant credit financing. Educate them and design a clear purchase flow on your platform.
Kredivo drives sales. “Buy now, pay later” and “Installments without a credit card” are strong messages that help consumers buy more, more often. Show these messages clearly on your platform to increase sales.
Important information
- Send all Kredivo-related collateral (newsletters, product promotions, social media posts, banners, FAQs) to successops@finaccel.co for approval before you publish it.
- Send merchant inquiries about customer service and payments to merchant.help@kredivo.com. (This address is for merchants only. Never share it with consumers.)
- Direct consumer questions about the product, technical issues, and payments to support@kredivo.com or +62-855-7467-9098. (You can share this email and phone number with 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 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 |
* Response and resolution times apply during office hours (9 am – 6:30 pm). On weekends and public holidays, add 30–60 minutes.
Environment Setup
Sandbox
Use these credentials to integrate with the sandbox server.
| Credential | Description |
|---|---|
| Domain URL QR, 2-click | https://staging.kredivo.com/ |
| Server Key | 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7 |
| Test Account | Use these credentials to make a test transaction, and enter 4567 as the OTP. |
| Username: 81513114262 | |
| Password: 663482 | |
| Transaction OTP: 4567 |
Production
Use the production server for live transactions. Only transactions sent to this server are processed.
| Credential | Description |
|---|---|
| End Point | Ask merchops@finaccel.co for the live server endpoint before you go live. |
System Status
Check Kredivo’s current system status at status.kredivo.com.