This library is the abstraction of Xendit API for access from applications written with Java.
- API Documentation
- Requirements
- Installation
- Usage
- Disbursement Services
- Create an IDR disbursement
- Create a PHP disbursement
- Get banks with available IDR disbursement service
- Get disbursements channels
- Get disbursements channels by channel category
- Get disbursements channels by channel code
- Get an IDR disbursement by external ID
- Get a PHP disbursement by reference ID
- Get an IDR disbursement by ID
- Get a PHP disbursement by ID
- Invoice services
- Virtual Account Services
- Retail Outlet Services - Indo
- Retail Outlet Services - PH
- Recurring Payment Services
- Balance Service
- Payout Services
- E-Wallet Services
- Credit Card Services
- Batch Disbursement Services
- Cardless Credit Services
- QR Code
- Customer
- Direct Debit
- Initialize linked account tokenization
- Validate OTP for Linked Account Token
- Retrieve accessible accounts by linked account token
- Unbind linked account token
- Create payment method
- Get payment methods by customer ID
- Create recurring payment
- Create direct debit payment
- Validate OTP for direct debit payment
- Get direct debit payment status by ID
- Get direct debit payment status by reference ID
- Paylater
- How to get Request Id
- Disbursement Services
- Contributing
Please check Xendit API Reference.
JDK 1.7 or later.
Add these lines of code in your pom.xml
<dependency>
<groupId>com.xendit</groupId>
<artifactId>xendit-java-lib</artifactId>
<version>SELECTED_VERSION</version>
</dependency>
Add these lines in your build.gradle
compile 'com.xendit:xendit-java-lib:{SELECTED_VERSION}'
More information: https://search.maven.org/artifact/com.xendit/xendit-java-lib
You need to use secret API key in order to use functionality in this library. The key can be obtained from your Xendit Dashboard.
If you're only dealing with a single secret key, you can simply import the packages required for the products you're interacting with without the need to create a client. Xendit Disbursement class is being used for IDR Disbursement.
There is another way to set secret key using Xendit.Opt.setApiKey(") which is recommended way to use instead of Xendit.apiKey.
import com.xendit.Xendit;
public class Example {
public static void main(String[] args) {
Xendit.Opt.setApiKey("PUT YOUR API KEY HERE");
// OR
Xendit.apiKey = "PUT YOUR API KEY HERE";
}
}
If you're dealing with multiple secret keys, it is recommended that you use XenditClient. This allows you to create as many clients as needed, each with their own individual key. Xendit Disbursement Client is being used for IDR Disbursements.
import com.xendit.XenditClient;
public class Example {
public static void main(String[] args) {
XenditClient xenditClient = new XenditClient.Builder()
.setApikey("PUT YOUR API KEY HERE")
.build();
XenditClient xenditClient2 = new XenditClient.Builder()
.setApikey("PUT YOUR API KEY HERE")
.build();
}
}
Example: Create an IDR disbursement
import com.xendit.Xendit;
import com.xendit.exception.XenditException;
import com.xendit.model.Disbursement;
import java.util.HashMap;
import java.util.Map;
public class ExampleCreateDisbursement {
public static void main(String[] args) {
Xendit.apiKey = "xnd_development_...";
//OR
Xendit.Opt.setApiKey("xnd_development_...");
try {
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_external_id");
params.put("bank_code", "BCA");
params.put("account_holder_name", "John Doe");
params.put("account_number", "123456789");
params.put("description", "My Description");
params.put("amount", "90000");
Disbursement disbursement = Disbursement.create(params);
} catch (XenditException e) {
e.printStackTrace();
}
}
}
Xendit Disbursement Client is being used for IDR Disbursement.
import com.xendit.exception.XenditException;
import com.xendit.XenditClient;
import com.xendit.model.Disbursement;
import java.util.HashMap;
import java.util.Map;
public class ExampleCreateDisbursement {
public static void main(String[] args) {
XenditClient xenditClient = new XenditClient.Builder()
.setApikey("xnd_development_...")
.build();
XenditClient xenditClient2 = new XenditClient.Builder()
.setApikey("xnd_development_...")
.build();
try {
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_external_id");
params.put("bank_code", "BCA");
params.put("account_holder_name", "John Doe");
params.put("account_number", "123456789");
params.put("description", "My Description");
params.put("amount", "90000");
Disbursement disbursement = xenditClient.disbursement.create(params);
Disbursement disbursement2 = xenditClient2.disbursement.create(params);
} catch (XenditException e) {
e.printStackTrace();
}
}
}
There are some examples provided for you here.
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
Disbursement.create( String externalId, String bankCode, String accountHolderName, String accountNumber, String description, BigInteger amount, String[] emailTo, String[] emailCc, String[] emailBcc ); |
Disbursement.create( Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_external_id");
params.put("bank_code", "BCA");
params.put("account_holder_name", "John Doe");
params.put("account_number", "123456789");
params.put("description", "My Description");
params.put("amount", "90000");
/* Without client */
Disbursement disbursement = Disbursement.create(params);
/* With client */
Disbursement disbursement = xenditClient.disbursement.create(params);
/* Without client */
AvailableBank[] banks = Disbursement.getAvailableBanks();
/* With client */
AvailableBank[] banks = xenditClient.disbursement.getAvailableBanks();
/* Without client */
Disbursement disbursement = Disbursement.getByExternalId("EXAMPLE_ID");
/* With client */
Disbursement disbursement = xenditClient.disbursement.getByExternalId("EXAMPLE_ID");
/* Without client */
Disbursement disbursement = Disbursement.getById("EXAMPLE_ID");
/* With client */
Disbursement disbursement = xenditClient.disbursement.getById("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
DisbursementPHP.createPHPDisbursement( String xendit_idempotency_key, String reference_id, String currency, String channel_code, String account_name, String account_number, String description, Integer amount, ReceiptNotification receiptNotification, Beneficiary beneficiary ); ReceiptNotification receiptNotification = ReceiptNotification.builder() .emailTo(new String[] { "test@emailTo.com" }) .emailCC(new String[] { "test@emailCC.com" }) .emailBcc(new String[] { "test@emailBcc.com" }) .build(); Beneficiary beneficiary = Beneficiary.builder() .type("test-type") .givenNames("Test Name") .middleName("Middle Name") .surname("Sur Name") .businessName("Test") .streetLine1("Jl. 123") .streetLine2("Jl. 456") .city("Jakarta Selatan") .province("DKI Jakarta") .state("Test") .country("Test") .zipCode("12345") .mobileNumber("123456789") .phoneNumber("12345678") .email("email@test.com") .build(); |
DisbursementPHP.createPHPDisbursement( Map<String, String> headers, Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
Map<String, String> headers = new HashMap<>();
headers.put("xendit-idempotency-key", "xendit-idempotency-key");
params.put("reference_id", "reference_id_value");
params.put("currency", "PHP");
params.put("channel_code", "required_channel_code");
params.put("account_name", "John etc");
params.put("account_number", "123456");
params.put("description", "Disbursement description");
params.put("amount", 50000);
params.put("receipt_notification", receiptNotification);
/* Without client */
DisbursementPHP disbursement = DisbursementPHP.createPHPDisbursement(headers, params);
/* With client */
DisbursementPHP disbursement = xenditClient.disbursementPHP.createPHPDisbursement(headers, params);
/* Without client */
DisbursementChannel[] disbursementChannels = DisbursementChannel.getDisbursementChannels();
/* With client */
DisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getDisbursementChannels();
/* Without client */
DisbursementChannel[] disbursementChannels = DisbursementChannel.getByChannelCategory("channel-category");
/* With client */
DisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getByChannelCategory("channel-category");
/* Without client */
DisbursementChannel[] disbursementChannels = DisbursementChannel.getByChannelCode("channel-code");
/* With client */
DisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getByChannelCode("channel-code");
/* Without client */
DisbursementPHP disbursement = DisbursementPHP.getPHPByReferenceId("EXAMPLE_ID");
/* With client */
DisbursementPHP disbursement = xenditClient.disbursementPHP.getPHPByReferenceId("EXAMPLE_ID");
/* Without client */
DisbursementPHP disbursement = Disbursement.getPHPById("EXAMPLE_ID");
/* With client */
DisbursementPHP disbursement = xenditClient.disbursementPHP.getPHPById("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
Invoice.create( String externalId, Number amount, String payerEmail, String description ); |
Invoice.create( Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_external_id");
params.put("amount", 1800000);
params.put("payer_email", "customer@domain.com");
params.put("description", "Invoice Demo #123");
/* Without client */
Invoice invoice = Invoice.create(params);
/* With client */
Invoice invoice = xenditClient.invoice.create(params);
/* Without client */
Invoice invoice = Invoice.getById("EXAMPLE_ID");
/* With client */
Invoice invoice = xenditClient.invoice.getById("EXAMPLE_ID");
Map<String, Object> params = new HashMap<>();
params.put("limit", 3);
params.put("statuses", "[\"SETTLED\",\"EXPIRED\"]");
/* Without client */
Invoice[] invoices = Invoice.getAll(params);
/* With client */
Invoice[] invoices = xenditClient.invoice.getAll(params);
/* Without client */
Invoice invoice = Invoice.expire("EXAMPLE_ID");
/* With client */
Invoice invoice = xenditClient.invoice.expire("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
FixedVirtualAccount.createClosed( String externalId, String bankCode, String name, Long expectedAmount, Map<String, Object> additionalParam ); |
FixedVirtualAccount.createClosed( Map<String, Object> params ); |
FixedVirtualAccount.createOpen( String externalId, String bankCode, String name, Map<String, Object> additionalParam ); |
FixedVirtualAccount.createOpen( Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_external_id");
params.put("bank_code", BankCode.BNI.getText());
params.put("name", "John Doe");
/* Optional for xenPlatform */
params.put("for-user-id", "<Sub Account User ID>");
/* Without client */
FixedVirtualAccount virtualAccount = FixedVirtualAccount.createOpen(params);
/* With client */
FixedVirtualAccount virtualAccount = xenditClient.fixedVirtualAccount.createOpen(params);
Map<String, Object> params = new HashMap<>();
params.put("is_single_use", true);
/* Optional for xenPlatform */
params.put("for-user-id", "<Sub Account User ID>");
/* Without client */
FixedVirtualAccount fixedVirtualAccount = FixedVirtualAccount.update("EXAMPLE_ID", params);
/* With client */
FixedVirtualAccount fixedVirtualAccount = xenditClient.fixedVirtualAccount.update("EXAMPLE_ID", params);
/* Without client */
AvailableBank[] availableBanks = FixedVirtualAccount.getAvailableBanks();
/* With client */
AvailableBank[] availableBanks = xenditClient.fixedVirtualAccount.getAvailableBanks();
/* Without client */
FixedVirtualAccount fpa = FixedVirtualAccount.getFixedVA("EXAMPLE_ID");
/* With client */
FixedVirtualAccount fpa = xenditClient.fixedVirtualAccount.getFixedVA("EXAMPLE_ID");
/* Without client */
FixedVirtualAccountPayment payment = FixedVirtualAccount.getPayment("EXAMPLE_PAYMENT_ID");
/* With client */
FixedVirtualAccountPayment payment = xenditClient.fixedVirtualAccount.getPayment("EXAMPLE_PAYMENT_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RetailOutlet.createFixedPaymentCode( String externalId, String retailOutletName, String name, Number expectedAmount ); |
RetailOutlet.createFixedPaymentCode( Map<String, Object> params ); |
params.put("external_id", "test");
params.put("retail_outlet_name", "ALFAMART");
params.put("name", "Rika Sutanto");
params.put("expected_amount", 10000);
/* Without client */
FixedPaymentCode fpc = RetailOutlet.createFixedPaymentCode(params);
/* With client */
FixedPaymentCode fpc = xenditClient.retailOutlet.createFixedPaymentCode(params);
/* Without client */
FixedPaymentCode fpc = RetailOutlet.getFixedPaymentCode("EXAMPLE_ID");
/* With client */
FixedPaymentCode fpc = xenditClient.retailOutlet.getFixedPaymentCode("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RetailOutlet.updateFixedPaymentCode( String id, String name, Number expectedAmount, String expirationDate ); |
RetailOutlet.updateFixedPaymentCode( String id, Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("name", "Lorem Ipsum");
/* Without client */
FixedPaymentCode fpc = RetailOutlet.updateFixedPaymentCode("EXAMPLE_ID", params);
/* With client */
FixedPaymentCode fpc = xenditClient.retailOutlet.updateFixedPaymentCode("EXAMPLE_ID", params);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RegionalRetailOutlet.createPaymentCode( String referenceId, RegionalRetailOutletPaymentCode.ChannelCode channelCode, String customerName, Number amount, RegionalRetailOutletPaymentCode.Currency currency, RegionalRetailOutletPaymentCode.Market market ); |
RegionalRetailOutlet.createPaymentCode( Map<String, Object> params ); |
params.put("reference_id", "test");
params.put("channel_code", RegionalRetailOutletPaymentCode.ChannelCode.SEVENELEVENCLIQQ);
params.put("customer_name", "test-customer");
params.put("amount", 10);
params.put("currency", RegionalRetailOutletPaymentCode.Currency.PHP);
params.put("market", RegionalRetailOutletPaymentCode.Market.PH);
/* Without client */
RegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.createPaymentCode(params);
/* With client */
RegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.createPaymentCode(params);
/* Without client */
RegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.getPaymentCode("EXAMPLE_ID");
/* With client */
RegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.getPaymentCode("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RegionalRetailOutlet.updatePaymentCode( String id, String customerName, Number amount, RegionalRetailOutletPaymentCode.Currency currency, String expiresAt, String description ); |
RegionalRetailOutlet.updatePaymentCode( String id, Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("name", "Lorem Ipsum");
/* Without client */
RegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.updatePaymentCode("EXAMPLE_ID", params);
/* With client */
RegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.updatePaymentCode("EXAMPLE_ID", params);
/* Without client */
RegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.getPaymentsByPaymentCodeId("EXAMPLE_ID");
/* With client */
RegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.getPaymentsByPaymentCodeId("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RecurringPayment.create( String externalId, String payerEmail, String interval, Number intervalCount, String description, Number amount ); |
RecurringPayment.create( Map<String, Object> params ); |
Map<String , Object> params = new HashMap<>();
params.put("external_id", "recurring_31451441");
params.put("payer_email", "sample_email@xendit.co");
params.put("interval", "MONTH");
params.put("interval_count", 1);
params.put("description", "Test desc");
params.put("amount", 100000);
params.put("currency", "IDR"); //Optional param
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.create(params);
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.create(params);
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.get("5e2dd160f8a4d24146f5974c");
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.get("5e2dd160f8a4d24146f5974c");
Map<String, Object> params = new HashMap<>();
params.put("amount", 987654);
params.put("interval", "WEEK");
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.edit("5e2dd55ef8a4d24146f59775", params);
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.edit("5e2dd55ef8a4d24146f59775", params);
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.stop("5e2dd160f8a4d24146f5974c");
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.stop("5e2dd160f8a4d24146f5974c");
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.pause("5e2dd55ef8a4d24146f59775");
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.pause("5e2dd55ef8a4d24146f59775");
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.resume("5e2dd55ef8a4d24146f59775");
/* With client */
RecurringPayment recurringPayment = xenditClient.recurringPayment.resume("5e2dd55ef8a4d24146f59775");
/* Without client */
Invoice[] invoices = RecurringPayment.getPaymentsById("5e2dd55ef8a4d24146f59775");
/* With client */
Invoice[] invoices = xenditClient.recurringPayment.getPaymentsById("5e2dd55ef8a4d24146f59775");
The accountType
parameter is optional.
Balance.get();
Balance.get(String accountType);
/* Without client */
Balance balance = Balance.get("CASH");
/* With client */
Balance balance = xenditClient.balance.get("CASH");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
Payout.createPayout( String externalId, Number amount ); |
Payout.createPayout( Map<String, Object> params ); |
Map<String, Object> params = new HashMap<>();
params.put("external_id", "my_test_id");
params.put("amount", 100000);
/* Without client */
Payout payout = Payout.createPayout(params);
/* Without client */
Payout payout = xenditClient.payout.createPayout(params);
/* Without client */
Payout payout = Payout.getPayout("EXAMPLE_ID");
/* With client */
Payout payout = xenditClient.payout.getPayout("EXAMPLE_ID");
/* Without client */
Payout payout = Payout.voidPayout("EXAMPLE_ID");
/* With client */
Payout payout = xenditClient.payout.voidPayout("EXAMPLE_ID");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
EWalletCharge.createEWalletCharge( String referenceId, String currency, Number amount, String checkoutMethod, String channelCode, Map<String, String> channelProperties, String customerId, EWalletBasketItem[] basket, Map<String, Object> metadata ); |
EWalletCharge.createEWalletCharge(Map<String, Object> params); |
Map<String, String> channelProperties = new HashMap<>();
channelProperties.put("success_redirect_url", "https://yourwebsite.com/order/123");
Map<String, Object> params = new HashMap<>();
params.put("reference_id", "test-reference-id");
params.put("currency", "IDR");
params.put("amount", 50000);
params.put("checkout_method", "ONE_TIME_PAYMENT");
params.put("channel_code", "ID_SHOPEEPAY");
params.put("channel_properties", channelProperties);
/* Without client */
EWalletCharge charge = EWalletCharge.createEWalletCharge(params);
/* With client */
EWalletCharge charge = xenditClient.eWallet.createEWalletCharge(params);
/* Without client */
EWalletCharge charge = EWalletCharge.getEWalletChargeStatus("ewc_c8630205-3e7a-4511-8250-26a084480c4c");
/* With client */
EWalletCharge charge = xenditClient.eWallet.getEWalletChargeStatus("ewc_c8630205-3e7a-4511-8250-26a084480c4c");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
CreditCardCharge.createAuthorization( String tokenId, String externalId, Number amount, String authenticationId, String cardCVN, Boolean capture ); |
CreditCardCharge.createAuthorization( Map<String, Object> params ); |
/* Without client */
CreditCardCharge creditCardCharge = CreditCard.createAuthorization("...", "test_id", 75000, "...", "123", false);
/* With client */
CreditCardCharge creditCardCharge = xenditClient.creditCard.createAuthorization("...", "test_id", 75000, "...", "123", false);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
CreditCardCharge.createCharge( String tokenId, String externalId, Number amount, String authenticationId, String cardCVN, String descriptor ); |
CreditCardCharge.createCharge( Map<String, Object> params ); |
/* Without client */
CreditCardCharge creditCardCharge = CreditCard.createCharge("...", "test_id", 75000, "...", "123", "lorem ipsum");
/* With client */
CreditCardCharge creditCardCharge = xenditClient.creditCard.createCharge("...", "test_id", 75000, "...", "123", "lorem ipsum");
CreditCard.reverseAuthorization(String chargeId, String externalId);
/* Without client */
CreditCardReverseAuth creditCardReverseAuth = CreditCard.reverseAuthorization("1234567", "external_id");
/* With client */
CreditCardReverseAuth creditCardReverseAuth = xenditClient.creditCard.reverseAuthorization("1234567", "external_id");
CreditCard.captureCharge(String chargeId, Number amount);
/* Without client */
CreditCardCharge creditCardCharge = CreditCard.captureCharge("12345678", 55000);
/* With client */
CreditCardCharge creditCardCharge = xenditClient.creditCard.captureCharge("12345678", 55000);
/* Without client */
CreditCardCharge creditCardCharge = CreditCard.getCharge("1234567");
/* With client */
CreditCardCharge creditCardCharge = xenditClient.creditCard.getCharge("1234567");
CreditCard.createRefund(String id, Number amount, String externalId);
/* Without client */
CreditCardRefund creditCardRefund = CreditCard.createRefund("1234567", 50000, "external_id");
/* With client */
CreditCardRefund creditCardRefund = xenditClient.creditCard.createRefund("1234567", 50000, "external_id");
BatchDisbursementItem item =
BatchDisbursementItem.builder()
.amount(10000)
.bankCode("ABC")
.bankAccountName("Lorem Ipsum")
.bankAccountNumber("1234567890")
.description("Lorem ipsum dolor sit amet")
.externalId("test_id")
.emailTo(["email1", "email2"])
.emailCC(["email1", "email2"])
.emailBcc(["email1", "email2"])
.build();
/* Without client */
BatchDisbursement.create(
String reference,
BatchDisbursementItem[] disbursements
);
/* With client */
xenditClient.batchDisbursement.create(
String reference,
BatchDisbursementItem[] disbursements
);
/* Without client */
AvailableBank[] banks = BatchDisbursement.getAvailableBanks();
/* With client */
AvailableBank[] banks = xenditClient.batchDisbursement.getAvailableBanks();
CardlessCreditItem item =
CardlessCreditItem.builder()
.id("123")
.name("Phone Case")
.price(200000)
.type("Smartphone")
.url("https://www.example.org")
.quantity(1)
.build();
CardlessCreditCustomer customer =
CardlessCreditCustomer.builder()
.firstName("Lorem")
.lastName("Ipsum")
.email("email@example.com")
.phone("08129748247684")
.build();
CardlessCreditShippingAddress address =
CardlessCreditShippingAddress.builder()
.firstName("Lorem")
.lastName("Ipsum")
.address("Jalan teknologi")
.city("Jakarta")
.postalCode("12345")
.countryCode("IDN")
.phone("08129748247684")
.build();
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
CardlessCredit.create( String cardlessCreditType, String externalId, Number amount, String paymentType, CardlessCreditItem[] items, CardlessCreditCustomer customerDetails, CardlessCreditShippingAddress shippingAddress, String redirectUrl, String callbackUrl ); |
CardlessCredit.create( Map<String, Object> params ); |
/* Without client */
CardlessCredit cardlessCredit = CardlessCredit.create(
"KREDIVO",
"external_id",
200000,
CardlessCredit.PaymentType.THREE_MONTHS.getVal(),
items,
customer,
address,
"www.example.com",
"www.example.com"
);
/* With client */
CardlessCredit cardlessCredit = xenditClient.cardlessCredit.create(
"KREDIVO",
"external_id",
200000,
CardlessCredit.PaymentType.THREE_MONTHS.getVal(),
items,
customer,
address,
"www.example.com",
"www.example.com"
);
/* Without client */
QRCode qrCode = QRCode.create(
"reference_id",
QRCode.QRCodeType.DYNAMIC,
"IDR",
10000
);
/* With client */
QRCode qrCode = xenditClient.qrCode.create(
"reference_id",
QRCode.QRCodeType.DYNAMIC,
"IDR",
10000
);
/* Without client */
QRCode qrCode = QRCode.getQRCodeByQRId("qr_004a0427-b194-49be-9439-657ef77ee4f3");
/* With client */
QRCode qrCode = xenditClient.qrCode.getQRCodeByQRId("qr_004a0427-b194-49be-9439-657ef77ee4f3");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
Customer.createCustomer( String referenceId, String mobileNumber, String email, String givenNames, String middleName, String surname, String description, String phoneNumber, String nationality, CustomerAddress[] addresses, String dateOfBirth, Map<String, Object> metadata ); |
Customer.createCustomer(Map<String, Object> params); |
Map<String, Object> metadata = new HashMap<>();
metadata.put("halo", "hello");
metadata.put("tes", "123");
Map<String, Object> params = new HashMap<>();
params.put("reference_id", "test-reference-id");
params.put("email", "tes@tes.com");
params.put("given_names", "Given Names");
params.put("nationality", "ID");
params.put("date_of_birth", "1995-12-30");
params.put("metadata", metadata);
/* Without client */
Customer customer = Customer.createCustomer(params);
/* With client */
Customer customer = xenditClient.customer.createCustomer(params);
/* Without client */
Customer[] customers = Customer.getCustomerByReferenceId("test-reference-id");
/* With client */
Customer[] customers = xenditClient.customer.getCustomerByReferenceId("test-reference-id");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
InitializedLinkedAccount.initializeLinkedAccountTokenization( String customerId, LinkedAccountEnum.ChannelCode channelCode, Map<String, Object> properties, Map<String, Object> metadata ); |
InitializedLinkedAccount.initializeLinkedAccountTokenization(Map<String, Object> params); |
Map<String, Object> properties = new HashMap<>();
properties.put("account_mobile_number", "+62818555988");
properties.put("card_last_four", "8888");
properties.put("card_expiry", "06/24");
properties.put("account_email", "test.email@xendit.co");
Map<String, Object> metadata = new HashMap<>();
metadata.put("tes", "123");
String customerId = "791ac956-397a-400f-9fda-4958894e61b5";
ChannelCode channelCode = ChannelCode.DC_BRI;
/* Without client */
InitializedLinkedAccount linkedAccount = InitializedLinkedAccount.initializeLinkedAccountTokenization(
customerId,
channelCode,
properties,
metadata
);
/* With client */
InitializedLinkedAccount linkedAccount = xenditClient.directDebitPayment.initializeLinkedAccountTokenization(
customerId,
channelCode,
properties,
metadata
);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
ValidatedLinkedAccount.validateOTP( String tokenId, String otpCode ); |
ValidatedLinkedAccount.validateOTP(String tokenId, Map<String, Object> params); |
Map<String, Object> params = new HashMap<>();
params.put("otp_code", "333000");
String tokenId = "lat-ba3c5645-f134-432a-b4f4-f8972685aa03";
/* Without client */
ValidatedLinkedAccount linkedAccount = ValidatedLinkedAccount.validateOTP(tokenId, params);
/* With client */
ValidatedLinkedAccount linkedAccount = xenditClient.directDebitPayment.validateOTP(tokenId, params);
/* Without client */
AccessibleLinkedAccount[] linkedAccounts = AccessibleLinkedAccount.retrieveAccessibleLinkedAccounts("lat-960e709c-bdd6-4b4a-a361-243186379c45");
/* With client */
AccessibleLinkedAccount[] linkedAccounts = xenditClient.directDebitPayment.retrieveAccessibleLinkedAccounts("lat-960e709c-bdd6-4b4a-a361-243186379c45");
System.out.println(Arrays.toString(linkedAccounts));
/* Without client */
UnbindedLinkedAccount linkedAccount = UnbindedLinkedAccount.unbindLinkedAccountToken("lat-a08fba1b-100c-445b-b788-aaeaf8215e8f");
/* With client */
UnbindedLinkedAccount linkedAccount = xenditClient.directDebitPayment.unbindLinkedAccountToken("lat-a08fba1b-100c-445b-b788-aaeaf8215e8f");
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
PaymentMethod.createPaymentMethod( String customerId, LinkedAccountEnum.AccountType type, Map<String, Object> properties, Map<String, Object> metadata ); |
PaymentMethod.createPaymentMethod(Map<String, Object> params); |
Map<String, Object> properties = new HashMap<>();
properties.put("id", "la-052d3e2d-bc4d-4c98-8072-8d232a552299");
Map<String, Object> metadata = new HashMap<>();
metadata.put("halo", "hello");
metadata.put("tes", "123");
Map<String, Object> params = new HashMap<>();
params.put("customer_id", "4b7b6050-0830-440a-903b-37d527dbbaa9");
params.put("type", "DEBIT_CARD");
params.put("properties", properties);
params.put("metadata", metadata);
/* Without client */
PaymentMethod paymentMethod = PaymentMethod.createPaymentMethod(params);
/* With client */
PaymentMethod paymentMethod = xenditClient.directDebitPayment.createPaymentMethod(params);
/* Without client */
PaymentMethod[] paymentMethods = PaymentMethod.getPaymentMethodsByCustomerId("4b7b6050-0830-440a-903b-37d527dbbaa9");
/* With client */
PaymentMethod[] paymentMethods = xenditClient.directDebitPayment.getPaymentMethodsByCustomerId("4b7b6050-0830-440a-903b-37d527dbbaa9");
System.out.println(Arrays.toString(paymentMethods));
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
RecurringPayment.create( String externalId, String payerEmail, String interval, Number intervalCount, String description, Number amount ); |
RecurringPayment.create(Map<String, Object> params); |
Map<String , Object> params = new HashMap<>();
params.put("external_id", "recurring_31451441");
params.put("payer_email", "sample_email@xendit.co");
params.put("interval", "MONTH");
params.put("interval_count", 1);
params.put("description", "Test desc");
params.put("amount", 100000);
params.put("currency", "IDR");
/* Without client */
RecurringPayment recurringPayment = RecurringPayment.create(params);
/* With client */
RecurringPayment recurringPayment = xenditClient.directDebitPayment.create(params);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
DirectDebitPayment.createDirectDebitPayment( String referenceId, String paymentMethodId, String currency, Number amount, String callbackUrl, Boolean enableOtp, String description, DirectDebitBasketItem[] basket, DirectDebitDevice device, String successRedirectUrl, String failureRedirectUrl, Map<String, Object> metadata, String idempotencyKey ); |
DirectDebitPayment.createDirectDebitPayment(Map<String, Object> params, String idempotencyKey); |
DirectDebitBasketItem basketItem = DirectDebitBasketItem.builder()
.referenceId("basket-product-ref-id")
.name("product-name")
.category("mechanics")
.market("ID")
.price(50000)
.quantity(5)
.type("product type")
.subCategory("product sub category")
.description("product description")
.url("https://product.url")
.build();
DirectDebitBasketItem[] basketItemArray = new DirectDebitBasketItem[]{basketItem};
DirectDebitDevice device = DirectDebitDevice.builder()
.id("device-id")
.ipAddress("0.0.0.0")
.userAgent("user-agent")
.adId("ad-id")
.imei("123a456b789c")
.build();
Map<String, Object> metadata = new HashMap<>();
metadata.put("halo", "hello");
metadata.put("tes", "123");
Map<String, Object> params = new HashMap<>();
params.put("reference_id", "test-direct-debit-ref-4");
params.put("payment_method_id", "pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef");
params.put("currency", "IDR");
params.put("amount", 15000);
params.put("callback_url", "http://webhook.site/");
params.put("enable_otp", true);
params.put("description", "test description");
params.put("basket", basketItemArray);
params.put("success_redirect_url", "https://success-redirect.url");
params.put("failure_redirect_url", "https://failure-redirect.url");
params.put("device", device);
params.put("metadata", metadata);
String idempotencyKey = "idempotency-key-4";
/* Without client */
DirectDebitPayment directDebitPayment = DirectDebitPayment.createDirectDebitPayment(params, idempotencyKey);
/* With client */
DirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.createDirectDebitPayment(params, idempotencyKey);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
DirectDebitPayment.validateOTP( String directDebitPaymentId, String otpCode ); |
DirectDebitPayment.validateOTP(String directDebitPaymentId, Map<String, Object> params); |
Map<String, Object> params = new HashMap<>();
params.put("otp_code", "222000");
String directDebitPaymentId = "ddpy-b150da90-2121-44a6-a836-5eebf0d7ab55";
/* Without client */
DirectDebitPayment directDebitPayment = DirectDebitPayment.validateOTP(directDebitPaymentId, params);
/* With client */
DirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.validateOTP(directDebitPaymentId, params);
/* Without client */
DirectDebitPayment directDebitPayment = DirectDebitPayment.getDirectDebitPaymentStatusById("ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c");
/* With client */
DirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.getDirectDebitPaymentStatusById("ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c");
/* Without client */
DirectDebitPayment[] directDebitPayments = DirectDebitPayment.getDirectDebitPaymentStatusByReferenceId("test-direct-debit-ref-4");
/* With client */
DirectDebitPayment[] directDebitPayments = xenditClient.directDebitPayment.getDirectDebitPaymentStatusByReferenceId("test-direct-debit-ref-4");
System.out.println(Arrays.toString(directDebitPayments));
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
PaylaterPlans.initiatePaylaterPlans( String customerId, String channelCode, String currency, Number Amount, PaylaterOrderItem[] orderItems ); |
PaylaterPlans.initiatePaylaterPlans(Map<String, Object> params); |
PaylaterOrderItem orderItems = PaylaterOrderItem.builder()
.type("type")
.referenceId("reference_id")
.name("name")
.netUnitAmount("net_unit_amount")
.quantity(1)
.url("https://www.google.com")
.category("category")
.subCategory("subCategory")
.description("description")
.build();
PaylaterOrderItem[] orderItemsArray = new PaylaterOrderItem[] { orderItem };
Map<String, Object> params = new HashMap<>();
params.put("customer_id", "test-customer-id");
params.put("channel_code", "ID_KREDIVO");
params.put("currency", "IDR");
params.put("amount", 50000);
params.put("order_items", orderItemsArray);
/* Without client */
PaylaterPlans initiatePlan = PaylaterPlans.initiatePaylaterPlans(params);
/* With client */
PaylaterPlans initiatePlan = xenditClient.paylater.initiatePaylaterPlans(params);
You can choose whether want to put the attributes as parameters or to put in inside a Map object.
PaylaterCharges.createPaylaterCharges( String planId, String referenceId, String checkoutMethod, String successRedirectUrl, String failureRedirectUrl, String paymentMethodId, Map<String, Object> metadata ); |
PaylaterCharges.createPaylaterCharges(Map<String, Object> params); |
Map<String, Object> metadata = new HashMap<>();
metadata.put("halo", "hello");
metadata.put("tes", "123");
Map<String, Object> params = new HashMap<>();
params.put("plan_id", "test-plan-id");
params.put("reference_id", "test-reference-id");
params.put("checkout_method", "ONE_TIME_PAYMENT");
params.put("success_redirect_url", "https://success-redirect.url");
params.put("failure_redirect_url", "https://failure-redirect.url");
params.put("payment_method_id", null);
params.put("metadata", metadata);
/* Without client */
PaylaterCharge charge = PaylaterCharge.createPaylaterCharges(params);
/* With client */
PaylaterCharge charge = xenditClient.paylater.createPaylaterCharges(params);
/* Without client */
PaylaterCharge paylaterCharge = PaylaterCharge.getPaylaterChargeStatus("charge-id");
/* With client */
PaylaterCharge paylaterCharge = xenditclient.paylater.getPaylaterChargeStatus("charge-id");
PaylaterRefund.createPaylaterRefund(String chargeId, Number amount, PaylaterEnum.RefundReasons);
/* Without client */
PaylaterRefund paylaterRefund = PaylaterRefund.createPaylaterRefund("charge-id", 1000, "OTHERS");
/* With client */
PaylaterRefund paylaterRefund = xenditClient.paylater.createPaylaterRefund("charge-id", 1000, "OTHERS");
/* Without client */
PaylaterRefund paylaterRefund = PaylaterRefund.getPaylaterRefundStatus("charge-id", "refund-id");
/* With client */
PaylaterRefund paylaterRefund = xenditclient.paylater.getPaylaterRefundStatus("charge-id", "refund-id");
Each API request has an asssociated request identifier. You can find this value in the response headers, under Request-ID. You can use Request-ID to find logs in API Logs in Dashboard. Learn more about Searching API Logs using Request-ID in API Logs Docs.
If you need to contact us about a specific request, providing the Request ID will ensure the fastest possible resolution.
The following example will show how to obtain Request-ID when creating QRCode
/* Without client */
QRCode qrCode = QRCode.createQRCode("12", QRCode.QRCodeType.DYNAMIC, "IDR", 10000);
/* Xendit.getResponseHeaders() will contain all response headers after your request is completed, hence you can obtain Request-Id from header by doing the following:*/
System.out.println(qrCode.getResponseHeaders().get("Request-Id"));
/* With client */
QRCode qrCode = xenditClient.qrCode.createQRCode("external_id", QRCode.QRCodeType.DYNAMIC, "IDR", 10000);
/* Xendit.getResponseHeaders() will contain all response headers after your request is completed, hence you can obtain Request-Id from header by doing the following:*/
System.out.println(qrCode.getResponseHeaders().get("Request-Id"));
Full Example can be found here
You can go to the contributing guidelines to learn on how to contribute this project.
Run ./gradlew spotlessApply
to apply linter.
Make sure the the code passes all tests.
./gradlew test
Before making any commits, please install pre-commit. To install pre-commit, follow the installation steps.
For any requests, bugs, or comments, please open an issue or submit a pull request.