2019-02-04 Cardless Credit
PayLater payment channel allows you to receive payments upfront from the credit provider. End users get the option to split their payments into installments.
Create Payment / Generate Checkout URL
Endpoint: Generate Checkout URL
POST https://api.xendit.co/cardless-credit
Version
You are currently viewing API version 2019-02-04. New version is available!
Request Parameters
Example: Generate Checkout URL
curl https://api.xendit.co/cardless-credit -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--header 'content-type: application/json' \
--data '{
"cardless_credit_type": "KREDIVO",
"external_id": "test-cardless-credit-01",
"amount": 800000,
"payment_type": "3_months",
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 200000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 2
},
{
"id": "234567",
"name": "Bluetooth Headset",
"price": 400000,
"type": "Audio",
"url": "http://example.com/phone/bluetooth_headset",
"quantity": 1
}
],
"customer_details": {
"first_name": "customer first name",
"last_name": "customer last name",
"email": "customer@yourwebsite.com",
"phone": "081513114262"
},
"shipping_address": {
"first_name": "first name",
"last_name": "last name",
"address": "Jalan Teknologi No. 12",
"city": "Jakarta",
"postal_code": "12345",
"phone": "081513114262",
"country_code": "IDN"
},
"redirect_url": "https://example.com",
"callback_url": "http://example.com/callback-cardless-credit"
}'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'cardless_credit_type' => 'KREDIVO',
'external_id' => 'test-cardless-credit-01',
'amount' => 800000,
'payment_type' => '3_months',
'items' => [
[
'id' => '123123',
'name' => 'Phone Case',
'price' => 200000,
'type' => 'Smartphone',
'url' => 'http=>//example.com/phone/phone_case',
'quantity' => 2
],
[
'id' => '234567',
'name' => 'Bluetooth Headset',
'price' => 400000,
'type' => 'Audio',
'url' => 'http=>//example.com/phone/bluetooth_headset',
'quantity' => 1
]
],
'customer_details' => [
'first_name' => 'customer first name',
'last_name' => 'customer last name',
'email' => 'customer@yourwebsite.com',
'phone' => '081513114262'
],
'shipping_address' => [
'first_name' => 'first name',
'last_name' => 'last name',
'address' => 'Jalan Teknologi No. 12',
'city' => 'Jakarta',
'postal_code' => '12345',
'phone' => '081513114262',
'country_code' => 'IDN'
],
'redirect_url' => 'https://example.com',
'callback_url' => 'http://example.com/callback-cardless-credit'
];
$createPayment = \Xendit\CardlessCredit::create($params);
var_dump($createPayment);
?>
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
//items
CardlessCreditItem items[] = new CardlessCreditItem[1];
items[0] =
CardlessCreditItem.builder()
.id("123")
.name("Phone Case")
.price(200000)
.type("Smartphone")
.url("https://www.example.org")
.quantity(1)
.build();
//address
CardlessCreditShippingAddress address =
CardlessCreditShippingAddress.builder()
.firstName("Lorem")
.lastName("Ipsum")
.address("Jalan teknologi")
.city("Jakarta")
.postalCode("12345")
.countryCode("IDN")
.phone("08129748247684")
.build();
//Customer
CardlessCreditCustomer customer =
CardlessCreditCustomer.builder()
.firstName("Lorem")
.lastName("Ipsum")
.email("email@example.com")
.phone("08129748247684")
.build();
CardlessCredit cardlessCredit = CardlessCredit.create(
"KREDIVO",
"external_id",
200000,
CardlessCredit.PaymentType.THREE_MONTHS.getVal(),
items,
customer,
address,
"www.example.com",
"www.example.com"
);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
createPaymentData := cardlesscredit.CreatePaymentParams{
CardlessCreditType: xendit.CardlessCreditTypeEnumKREDIVO,
ExternalID: "test-cardless-credit-01",
Amount: 200000,
PaymentType: xendit.PaymentTypeEnum3Months,
Items: []cardlesscredit.Item{
{
ID: "123",
Name: "Laptop Asus Ila",
Price: 200000,
Type: "Laptop",
URL: "http://asus-ila.com",
Quantity: 1,
},
},
CustomerDetails: cardlesscredit.CustomerDetails{
FirstName: "Michael",
LastName: "Belajarrock",
Email: "michaelbelajarrock@mail.com",
Phone: "08123123123",
},
ShippingAddress: cardlesscredit.ShippingAddress{
FirstName: "Michael",
LastName: "Belajarjazz",
Address: "Jalan Teknologi No. 12",
City: "Jakarta",
PostalCode: "40000",
Phone: "08123123123",
CountryCode: "IDN",
},
RedirectURL: "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
CallbackURL: "https://google.com",
}
resp, err := cardlesscredit.CreatePayment(&createPaymentData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created payment: %+v\n", resp)
from xendit import Xendit, CardlessCreditType
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
CardlessCredit = xendit_instance.CardlessCredit
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
customer_details = CardlessCredit.helper_create_customer_details(
first_name="customer first name",
last_name="customer last name",
email="customer@email.com",
phone="0812332145",
)
shipping_address = CardlessCredit.helper_create_shipping_address(
first_name="first name",
last_name="last name",
address="Jl Teknologi No. 12",
city="Jakarta",
postal_code="12345",
phone="081513114262",
country_code="IDN",
)
cardless_credit_payment = CardlessCredit.create_payment(
cardless_credit_type=CardlessCreditType.KREDIVO,
external_id="id-1595923113",
amount=10000,
payment_type="3_months",
items=cardless_credit_items,
customer_details=customer_details,
shipping_address=shipping_address,
redirect_url="https://my-shop.com/home",
callback_url="https://my-shop.com/callback",
)
print(cardless_credit_payment)
Example: Generate Checkout URL Success Response
{
"redirect_url": "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
"transaction_id": "66403e84-c8da-4af4-8d30-d17e95522f43",
"order_id": "123456-test-cardless-credit-01",
"external_id": "test-cardless-credit-01",
"cardless_credit_type": "KREDIVO"
}
Parameter | Type | Description |
---|---|---|
cardless_credit_type required |
string |
The type of cardless-credit to be paid. Must be in capital letters. Supported Cardless Credit types: KREDIVO |
external_id required |
string |
An ID of your choice. Often it is unique identifier like a phone number, email or transaction ID. Maximum length allowed is 1000 characters. |
amount required |
number |
Amount end customer will pay. Note: minimum amount is 1 IDR |
payment_type required |
string |
The type of installment, you can choose between: "30_days", "3_months", "6_months" and "12_months". |
items required |
array of item object |
List of items / products. |
item objectrequired |
item object |
Details of an item, it should contains: id [string], name [string], price [number], type [string], url [string], quantity [number] |
customer_detailsrequired |
object |
Details of the customer, it should contains: first_name [string], last_name [string], email [string], phone [string] |
shipping_addressrequired |
object |
Details of the shipping address, it should contains: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string] |
redirect_urlrequired |
string |
After end-customer complete the checkout they will be redirected to the url that you specify in this field. You can put your transaction details page or your home page. |
callback_urlrequired |
string |
We will send callback to this address when the customer completes the payment proccess. |
Error Codes
Example: Generate Checkout URL error response
{
"error_code": "API_VALIDATION_ERROR",
"message": "[fieldName] is required"
}
{
"error_code": "DUPLICATE_PAYMENT_ERROR",
"message": "Checkout URL with the same external_id has been created before."
}
Error Code | Description |
---|---|
MERCHANT_NOT_FOUND422 |
You are not registered yet to use this payment method. |
GENERATE_CHECKOUT_URL_ERROR422 |
Your request did not meet the requirement or there is a problem in the Kredivo / Partner server. |
DUPLICATE_PAYMENT_ERROR422 |
Checkout URL with the same external_id has been created before. |
REQUEST_FORBIDDEN403 |
API key in use does not have necessary permissions to perform the request. Please assign proper permissions for the key. Learn more here |
Calculate Payment Types
Calculate Payment Types feature helps merchants to get an accurate value of the installment offered to end customers by the cardless credit provider. Merchants can use this to calculate and display installment plans before end customer is redirected for authentication.
Endpoint: Calculate Payment Types
POST https://api.xendit.co/cardless-credit/payment-types
Calculate Payment Types
Example: Calculate Payment Types Request
curl https://api.xendit.co/cardless-credit/payment-types -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--header 'content-type: application/json' \
--data '{
"cardless_credit_type": "KREDIVO",
"amount": 2000000,
"items":
[
{
"id": "123123",
"name": "Phone Case",
"price": 1000000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 1
}
]
}'
<?php
$url = 'https://api.xendit.co/cardless-credit/payment-types';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$item_1 = new stdClass();
$item_1->id = "123123";
$item_1->name = "Phone Case";
$item_1->price = 200000;
$item_1->type = "Smartphone";
$item_1->url = "http://example.com/phone/phone_case";
$item_1->quantity = 2;
$data = [
"cardless_credit_type" => "KREDIVO",
"amount" => 800000,
"items" => [ $item_1 ],
];
$curl = curl_init();
$payload = json_encode($data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
echo $result;
from xendit import Xendit, CardlessCreditType
api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
xendit_instance = Xendit(api_key=api_key)
CardlessCredit = xendit_instance.CardlessCredit
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
cardless_credit_payment_types = CardlessCredit.calculate_payment_type(
cardless_credit_type=CardlessCreditType.KREDIVO,
amount=10000,
items=cardless_credit_items,
)
print(cardless_credit_payment_types)
Parameter | Description |
---|---|
cardless_credit_type required |
string The type of cardless-credit to be paid. Must be in capital letters. Supported Cardless Credit types: KREDIVO |
amount required |
number Amount end customer will pay. Note: minimum amount is 1 IDR |
items required |
array of item object List of items / products. |
items.id required |
string Merchant product ID of specified product in transaction |
items.name required |
string Name of specified product in transaction |
items.price required |
number Unit price of specified product in transaction |
items.type required |
string Category of specified product in transaction |
items.url required |
string Web url of specified product in transaction |
items.quantity required |
number Quantity of specified product in transaction |
Calculate Payment Types Response
Example: Calculate Payment Types Response
{
"message": "Available payment types are listed.",
"payments": [
{
"raw_monthly_installment": 187534.6668043921,
"name": "Bayar dalam 6 bulan",
"amount": 1000000,
"installment_amount": 1125240,
"raw_amount": 1000000,
"rate": 2.95,
"down_payment": 0,
"monthly_installment": 187540,
"discounted_monthly_installment": 0,
"tenure": 6,
"id": "6_months"
},
{
"raw_monthly_installment": 1020000,
"name": "Bayar dalam 30 hari",
"amount": 1020000,
"installment_amount": 1020000,
"raw_amount": 1020000,
"rate": 0,
"down_payment": 0,
"monthly_installment": 1020000,
"discounted_monthly_installment": 0,
"tenure": 1,
"id": "30_days"
},
{
"raw_monthly_installment": 356786.46273702476,
"name": "Bayar dalam 3 bulan",
"amount": 1000000,
"installment_amount": 1070370,
"raw_amount": 1000000,
"rate": 2.95,
"down_payment": 0,
"monthly_installment": 356790,
"discounted_monthly_installment": 0,
"tenure": 3,
"id": "3_months"
}
]
}
Parameter | Description |
---|---|
message required |
string “Available payment types are listed |
payments required |
array List of calculated payment types |
payments.raw_monthly_installment required |
number Monthly installment before rounding |
payments.name required |
string Name of installment plan |
payments.amount required |
number Total payment amount before interest |
payments.installment_amount required |
number Total payment amount after interest |
payments.raw_amount required |
number Payment amount before interest before rounding |
payments.rate required |
number Applied interest rates |
payments.down_payment required |
number Amount paid upfront |
payments.monthly_installment required |
number Monthly installment offered by Kredivo to end user |
payments.discounted_monthly_installment required |
number Monthly installment offered by Kredivo to end user after discount (if any) |
payments.tenure required |
number Repayment term of installment in months |
payments.id required |
string ID of installment type |
Payment Callback Notification
Xendit notifies your system upon successful payments via callback. You need to provide an URL to receive callback. Please specify your URL in Callback Settings in Xendit Dashboard.
The payment notification will be sent as POST request to the URL you set. Xendit attach x-callback-token
header that you can validate against Verification Token in Callback Settings to verify message authenticity.
Please response back with status 200 immediately. Xendit marks callback event as failed if there is no response within 30s. When events failed, automatic retry will kick-off for the next 24h. Alternatively, you can resend any event in Callback tab at anytime. You can also receive notification via email every 6h to check your callback health.
Learn more about Callback
Payment Callback Payload
Header Parameter | Type | Description |
---|---|---|
x-callback-tokenrequired |
string |
Your Xendit unique callback token to verify the origin of the callback |
Example: Payment Callback Notification Request
{
"external_id": "test-cardless-credit-01",
"order_id": "75191237c81273jajsh7291c-test-cardless-credit-01",
"transaction_id": "ashd7129-sh82-a9ks-js82-asj82912bajs",
"amount": 800000,
"transaction_status": "settlement",
"payment_type": "3_months",
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 200000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 2
},
{
"id": "234567",
"name": "Bluetooth Headset",
"price": 400000,
"type": "Audio",
"url": "http://example.com/audio/bluetooth_headset",
"quantity": 1
}
],
"customer_details": {
"first_name": "customer first name",
"last_name": "customer last name",
"email": "customer@yourwebsite.com",
"phone": "081513114262"
},
"shipping_address": {
"first_name": "first name",
"last_name": "last name",
"address": "Jalan Teknologi No. 12",
"city": "Jakarta",
"postal_code": "12345",
"phone": "081513114262",
"country_code": "IDN"
},
"cardless_credit_type": "KREDIVO",
"callback_authentication_token": "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
}
Body Parameter | Type | Description |
---|---|---|
external_id | string |
Your transaction identifier that you specified in on the Generate Checkout URL request. |
order_id | string |
Unique Identifier that we gave to the cardless credit payment partner. |
transaction_id | string |
Transaction ID given by Cardless Credit partner. |
transaction_status | string |
Transaction status, the value is: settlement: Transaction is successful pending: End-User has not completed the transaction deny: Transaction has been denied by our Cardless Credit Partner cancel: Transaction has been cancelled expire: End-User did not complete transaction in 24 hours, thus transaction is expired |
payment_type | string |
the type of installment. |
amount | number |
Amount that you specified in on the Generate Checkout URL request. |
items | array of item |
List of items / products that you specified in on the Generate Checkout URL request. |
item object |
item detail |
Details of an item, it should contains: id [string], name [string], price [number], type [string], url [string], quantity [number] |
customer_details | object |
Details of the customer, it should contains: first_name [string], last_name [string], email [string], phone [string] |
shipping_address | object |
Details of the shipping address, it should contains: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string] |
cardless_credit_type | string |
The type of cardless-credit. Supported Cardless Credit types: KREDIVO |
callback_authentication_token | string |
Your Callback Verfication API Key that you can found on your Xendit Dashboard. You need to verify if this had the same value. |