{"id":43320459,"url":"https://github.com/xendit/xendit-java","last_synced_at":"2026-02-01T22:33:17.834Z","repository":{"id":41855891,"uuid":"191683798","full_name":"xendit/xendit-java","owner":"xendit","description":"Xendit REST API Client for Java - Card, Virtual Account, Invoice, Disbursement, Recurring Payments, Payout, EWallet, Balance, Retail Outlets Services","archived":false,"fork":false,"pushed_at":"2023-11-30T16:21:27.000Z","size":817,"stargazers_count":12,"open_issues_count":19,"forks_count":23,"subscribers_count":34,"default_branch":"master","last_synced_at":"2024-03-19T13:56:15.314Z","etag":null,"topics":["balance","card","disbursement","ewallet","hacktoberfest","invoice","java","payment","payment-gateway","payout","recurring-payments","retail-outlet","virtual-account","xendit"],"latest_commit_sha":null,"homepage":"https://developers.xendit.co/api-reference/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xendit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-13T03:22:49.000Z","updated_at":"2024-02-21T01:39:48.000Z","dependencies_parsed_at":"2023-01-27T17:01:34.463Z","dependency_job_id":null,"html_url":"https://github.com/xendit/xendit-java","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/xendit/xendit-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xendit%2Fxendit-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xendit%2Fxendit-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xendit%2Fxendit-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xendit%2Fxendit-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xendit","download_url":"https://codeload.github.com/xendit/xendit-java/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xendit%2Fxendit-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28993253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T22:01:47.507Z","status":"ssl_error","status_checked_at":"2026-02-01T21:58:37.335Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["balance","card","disbursement","ewallet","hacktoberfest","invoice","java","payment","payment-gateway","payout","recurring-payments","retail-outlet","virtual-account","xendit"],"created_at":"2026-02-01T22:33:17.254Z","updated_at":"2026-02-01T22:33:17.828Z","avatar_url":"https://github.com/xendit.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Xendit Java Library\n\nThis library is the abstraction of Xendit API for access from applications written with Java.\n\n## Table of Contents\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\n- [API Documentation](#api-documentation)\n- [Requirements](#requirements)\n- [Installation](#installation)\n    - [Maven](#maven)\n    - [Gradle](#gradle)\n- [Usage](#usage)\n  - [Disbursement Services](#disbursement-services)\n    - [Create an IDR disbursement](#create-an-idr-disbursement)\n    - [Create a PHP disbursement](#create-a-php-disbursement)\n    - [Get banks with available IDR disbursement service](#get-banks-with-available-idr-disbursement-service)\n    - [Get disbursements channels](#get-disbursements-channels)\n    - [Get disbursements channels by channel category](#get-disbursement-channels-by-channel-category)\n    - [Get disbursements channels by channel code](#get-disbursement-channels-by-channel-code)\n    - [Get an IDR disbursement by external ID](#get-an-idr-disbursement-by-external-id)\n    - [Get a PHP disbursement by reference ID](#get-a-php-disbursement-by-reference-id)\n    - [Get an IDR disbursement by ID](#get-an-idr-disbursement-by-id)\n    - [Get a PHP disbursement by ID](#get-a-php-disbursement-by-id)\n  - [Invoice services](#invoice-services)\n    - [Create an invoice](#create-an-invoice)\n    - [Get an invoice by ID](#get-an-invoice-by-id)\n    - [Get all invoices](#get-all-invoices)\n    - [Expire an invoice](#expire-an-invoice)\n  - [Virtual Account Services](#virtual-account-services)\n    - [Create a fixed virtual account](#create-a-fixed-virtual-account)\n      - [Closed virtual account](#closed-virtual-account)\n      - [Opened virtual account](#opened-virtual-account)\n    - [Update a fixed virtual account by ID](#update-a-fixed-virtual-account-by-id)\n    - [Get banks with available virtual account service](#get-banks-with-available-virtual-account-service)\n    - [Get a fixed virtual account by ID](#get-a-fixed-virtual-account-by-id)\n    - [Get a fixed virtual account payment by payment ID](#get-a-fixed-virtual-account-payment-by-payment-id)\n  - [Retail Outlet Services - Indo](#retail-outlet-services-ID)\n    - [Create fixed payment code](#create-fixed-payment-code)\n    - [Get fixed payment code](#get-fixed-payment-code)\n    - [Update fixed payment code](#update-fixed-payment-code)\n  - [Retail Outlet Services - PH](#retail-outlet-services-PH)\n    - [Create payment code](#create-payment-code)\n    - [Get payment code](#get-payment-code)\n    - [Update payment code](#update-payment-code)\n  - [Recurring Payment Services](#recurring-payment-services)\n    - [Create a recurring payment](#create-a-recurring-payment)\n    - [Get a recurring payment](#get-a-recurring-payment)\n    - [Edit a recurring payment](#edit-a-recurring-payment)\n    - [Stop a recurring payment](#stop-a-recurring-payment)\n    - [Pause a recurring payment](#pause-a-recurring-payment)\n    - [Resume a recurring payment](#resume-a-recurring-payment)\n    - [List recurring payments by ID](#list-recurring-payments-by-id)\n  - [Balance Service](#balance-service)\n    - [Get balance](#get-balance)\n  - [Payout Services](#payout-services)\n    - [Create a payout](#create-a-payout)\n    - [Get a payout by ID](#get-a-payout-by-id)\n    - [Void a payout](#void-a-payout)\n  - [E-Wallet Services](#e-wallet-services)\n    - [Create an e-wallet charge](#create-an-e-wallet-charge)\n    - [Get an e-wallet charge status](#get-an-e-wallet-charge-status)\n  - [Credit Card Services](#credit-card-services)\n    - [Create an authorization](#create-an-authorization)\n    - [Create a charge](#create-a-charge)\n    - [Reverse an authorization](#reverse-an-authorization)\n    - [Capture a charge](#capture-a-charge)\n    - [Get a charge by ID](#get-a-charge-by-id)\n    - [Create a refund](#create-a-refund)\n  - [Batch Disbursement Services](#batch-disbursement-services)\n    - [Batch disbursement item](#batch-disbursement-item)\n    - [Create a batch disbursement](#create-a-batch-disbursement)\n    - [Get banks with available disbursement service](#get-banks-with-available-disbursement-service-1)\n  - [Cardless Credit Services](#cardless-credit-services)\n    - [Cardless credit item](#cardless-credit-item)\n    - [Cardless credit customer details](#cardless-credit-customer-details)\n    - [Cardless credit shipping address](#cardless-credit-shipping-address)\n    - [Create a cardless credit payment](#create-a-cardless-credit-payment)\n  - [QR Code](#qr-code)\n    - [Create QR Code](#create-qr-code)\n    - [Get QR Code](#get-qr-code)\n  - [Customer](#customer)\n    - [Create Customer](#create-customer)\n    - [Get Customer by Reference ID](#get-customer-by-reference-id)\n  - [Direct Debit](#direct-debit)\n    - [Initialize linked account tokenization](#initialize-linked-account-tokenization)\n    - [Validate OTP for Linked Account Token](#validate-otp-for-linked-account-token)\n    - [Retrieve accessible accounts by linked account token](#retrieve-accessible-accounts-by-linked-account-token)\n    - [Unbind linked account token](#unbind-linked-account-token)\n    - [Create payment method](#create-payment-method)\n    - [Get payment methods by customer ID](#get-payment-methods-by-customer-id)\n    - [Create recurring payment](#create-recurring-payment)\n    - [Create direct debit payment](#create-direct-debit-payment)\n    - [Validate OTP for direct debit payment](#validate-otp-for-direct-debit-payment)\n    - [Get direct debit payment status by ID](#get-direct-debit-payment-status-by-id)\n    - [Get direct debit payment status by reference ID](#get-direct-debit-payment-status-by-reference-id)\n  - [Paylater](#paylater)\n    - [Initiate Paylater Plans](#initiate-paylater-plans)\n    - [Create Paylater Charges](#create-paylater-charges)\n    - [Get Paylater Charge by ID](#get-paylater-charge-by-id)\n    - [Refund Paylater Charge](#refund-paylater-charge)\n    - [Get Refund by Refund ID](#get-refund-by-refund-id)\n  - [How to get Request Id](#how-to-get-request-id)\n- [Contributing](#contributing)\n  - [Lint](#lint)\n  - [Tests](#tests)\n  - [Precommit](#precommit)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## API Documentation\nPlease check [Xendit API Reference](https://xendit.github.io/apireference/).\n\n## Requirements\nJDK 1.7 or later.\n\n## Installation\n#### Maven\n\nAdd these lines of code in your `pom.xml`\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.xendit\u003c/groupId\u003e\n    \u003cartifactId\u003exendit-java-lib\u003c/artifactId\u003e\n    \u003cversion\u003eSELECTED_VERSION\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle\n\nAdd these lines in your `build.gradle`\n```\ncompile 'com.xendit:xendit-java-lib:{SELECTED_VERSION}'\n```\n\nMore information: https://search.maven.org/artifact/com.xendit/xendit-java-lib\n\n## Usage\nYou need to use secret API key in order to use functionality in this library. The key can be obtained from your [Xendit Dashboard](https://dashboard.xendit.co/settings/developers#api-keys).\n\n### Without Client\nIf 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.\n\nThere is another way to set secret key using **Xendit.Opt.setApiKey(\")** which is recommended way to use instead of **Xendit.apiKey**.\n\n```java\nimport com.xendit.Xendit;\n\npublic class Example {\n    public static void main(String[] args) {\n        Xendit.Opt.setApiKey(\"PUT YOUR API KEY HERE\");\n        // OR    \n        Xendit.apiKey = \"PUT YOUR API KEY HERE\";               \n    }\n}\n```\n### With Client\nIf 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.\n```java\nimport com.xendit.XenditClient;\n\npublic class Example {\n    public static void main(String[] args) {\n        XenditClient xenditClient = new XenditClient.Builder()\n                        .setApikey(\"PUT YOUR API KEY HERE\")\n                        .build();\n\n        XenditClient xenditClient2 = new XenditClient.Builder()\n                        .setApikey(\"PUT YOUR API KEY HERE\")\n                        .build();\n\n    }\n}\n```\nExample: Create an IDR disbursement\n\n###### Without Client\n```java\nimport com.xendit.Xendit;\nimport com.xendit.exception.XenditException;\nimport com.xendit.model.Disbursement;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ExampleCreateDisbursement {\n    public static void main(String[] args) {\n        Xendit.apiKey = \"xnd_development_...\"; \n        //OR \n        Xendit.Opt.setApiKey(\"xnd_development_...\");\n\n        try {\n            Map\u003cString, Object\u003e params = new HashMap\u003c\u003e();\n            params.put(\"external_id\", \"my_external_id\");\n            params.put(\"bank_code\", \"BCA\");\n            params.put(\"account_holder_name\", \"John Doe\");\n            params.put(\"account_number\", \"123456789\");\n            params.put(\"description\", \"My Description\");\n            params.put(\"amount\", \"90000\");\n\n            Disbursement disbursement = Disbursement.create(params);\n        } catch (XenditException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n###### With Client\nXendit Disbursement Client is being used for IDR Disbursement.\n```java\nimport com.xendit.exception.XenditException;\nimport com.xendit.XenditClient;\nimport com.xendit.model.Disbursement;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ExampleCreateDisbursement {\n    public static void main(String[] args) {\n        XenditClient xenditClient = new XenditClient.Builder()\n                      .setApikey(\"xnd_development_...\")\n                      .build();\n        \n        XenditClient xenditClient2 = new XenditClient.Builder()\n                      .setApikey(\"xnd_development_...\")\n                      .build();\n        try {\n            Map\u003cString, Object\u003e params = new HashMap\u003c\u003e();\n            params.put(\"external_id\", \"my_external_id\");\n            params.put(\"bank_code\", \"BCA\");\n            params.put(\"account_holder_name\", \"John Doe\");\n            params.put(\"account_number\", \"123456789\");\n            params.put(\"description\", \"My Description\");\n            params.put(\"amount\", \"90000\");\n\n            Disbursement disbursement = xenditClient.disbursement.create(params);\n            Disbursement disbursement2 = xenditClient2.disbursement.create(params);\n        } catch (XenditException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n\nThere are some examples provided for you [here](https://github.com/xendit/xendit-java-library/tree/master/xendit-java-library-example/src/main/java).\n\n### Disbursement Services\n\n#### Create an IDR disbursement\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object. \n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDisbursement.create(\n    String externalId,\n    String bankCode,\n    String accountHolderName,\n    String accountNumber,\n    String description,\n    BigInteger amount,\n    String[] emailTo,\n    String[] emailCc,\n    String[] emailBcc\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDisbursement.create(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"my_external_id\");\nparams.put(\"bank_code\", \"BCA\");\nparams.put(\"account_holder_name\", \"John Doe\");\nparams.put(\"account_number\", \"123456789\");\nparams.put(\"description\", \"My Description\");\nparams.put(\"amount\", \"90000\");\n\n/* Without client */\nDisbursement disbursement = Disbursement.create(params); \n\n/* With client */\nDisbursement disbursement = xenditClient.disbursement.create(params);\n```\n\n#### Get banks with available IDR disbursement service\n\n```java\n/* Without client */\nAvailableBank[] banks = Disbursement.getAvailableBanks();\n/* With client */\nAvailableBank[] banks = xenditClient.disbursement.getAvailableBanks();\n```\n\n#### Get an IDR disbursement by external ID\n\n```java\n/* Without client */\nDisbursement disbursement = Disbursement.getByExternalId(\"EXAMPLE_ID\");\n/* With client */\nDisbursement disbursement = xenditClient.disbursement.getByExternalId(\"EXAMPLE_ID\");\n```\n\n#### Get an IDR disbursement by ID\n\n```java\n/* Without client */\nDisbursement disbursement = Disbursement.getById(\"EXAMPLE_ID\");\n/* With client */\nDisbursement disbursement = xenditClient.disbursement.getById(\"EXAMPLE_ID\");\n```\n\n#### Create a PHP disbursement\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object. \n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDisbursementPHP.createPHPDisbursement(\n    String xendit_idempotency_key,\n    String reference_id,\n    String currency,\n    String channel_code,\n    String account_name,\n    String account_number,\n    String description,\n    Integer amount,\n    ReceiptNotification receiptNotification,\n    Beneficiary beneficiary\n);\nReceiptNotification receiptNotification = ReceiptNotification.builder()\n    .emailTo(new String[] { \"test@emailTo.com\" })\n    .emailCC(new String[] { \"test@emailCC.com\" })\n    .emailBcc(new String[] { \"test@emailBcc.com\" })\n    .build();\nBeneficiary beneficiary =\n    Beneficiary.builder()\n        .type(\"test-type\")\n        .givenNames(\"Test Name\")\n        .middleName(\"Middle Name\")\n        .surname(\"Sur Name\")\n        .businessName(\"Test\")\n        .streetLine1(\"Jl. 123\")\n        .streetLine2(\"Jl. 456\")\n        .city(\"Jakarta Selatan\")\n        .province(\"DKI Jakarta\")\n        .state(\"Test\")\n        .country(\"Test\")\n        .zipCode(\"12345\")\n        .mobileNumber(\"123456789\")\n        .phoneNumber(\"12345678\")\n        .email(\"email@test.com\")\n        .build();\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDisbursementPHP.createPHPDisbursement(\n    Map\u0026lt;String, String\u0026gt; headers, Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nMap\u003cString, String\u003e headers = new HashMap\u003c\u003e();\nheaders.put(\"xendit-idempotency-key\", \"xendit-idempotency-key\");\nparams.put(\"reference_id\", \"reference_id_value\");\nparams.put(\"currency\", \"PHP\");\nparams.put(\"channel_code\", \"required_channel_code\");\nparams.put(\"account_name\", \"John etc\");\nparams.put(\"account_number\", \"123456\");\nparams.put(\"description\", \"Disbursement description\");\nparams.put(\"amount\", 50000);\nparams.put(\"receipt_notification\", receiptNotification);\n\n/* Without client */\nDisbursementPHP disbursement = DisbursementPHP.createPHPDisbursement(headers, params); \n\n/* With client */\nDisbursementPHP disbursement = xenditClient.disbursementPHP.createPHPDisbursement(headers, params);\n```\n\n#### Get disbursements Channels\n\n```java\n/* Without client */\nDisbursementChannel[] disbursementChannels = DisbursementChannel.getDisbursementChannels();\n/* With client */\nDisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getDisbursementChannels();\n```\n#### Get disbursement channels by channel category\n\n```java\n/* Without client */\nDisbursementChannel[] disbursementChannels = DisbursementChannel.getByChannelCategory(\"channel-category\");\n/* With client */\nDisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getByChannelCategory(\"channel-category\");\n```\n#### Get disbursement channels by channel code\n\n```java\n/* Without client */\nDisbursementChannel[] disbursementChannels = DisbursementChannel.getByChannelCode(\"channel-code\");\n/* With client */\nDisbursementChannel[] disbursementChannels = xenditClient.disbursementPHP.getByChannelCode(\"channel-code\");\n```\n#### Get a PHP disbursement by reference ID\n\n```java\n/* Without client */\nDisbursementPHP disbursement = DisbursementPHP.getPHPByReferenceId(\"EXAMPLE_ID\");\n/* With client */\nDisbursementPHP disbursement = xenditClient.disbursementPHP.getPHPByReferenceId(\"EXAMPLE_ID\");\n```\n\n#### Get a PHP disbursement by ID\n\n```java\n/* Without client */\nDisbursementPHP disbursement = Disbursement.getPHPById(\"EXAMPLE_ID\");\n/* With client */\nDisbursementPHP disbursement = xenditClient.disbursementPHP.getPHPById(\"EXAMPLE_ID\");\n```\n\n[Back to top](#table-of-contents)\n\n### Invoice services\n\n#### Create an invoice\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nInvoice.create(\n    String externalId,\n    Number amount,\n    String payerEmail,\n    String description\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nInvoice.create(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"my_external_id\");\nparams.put(\"amount\", 1800000);\nparams.put(\"payer_email\", \"customer@domain.com\");\nparams.put(\"description\", \"Invoice Demo #123\");\n/* Without client */\nInvoice invoice = Invoice.create(params);\n/* With client */\nInvoice invoice = xenditClient.invoice.create(params);\n```\n\n#### Get an invoice by ID\n\n```java\n/* Without client */\nInvoice invoice = Invoice.getById(\"EXAMPLE_ID\");\n/* With client */\nInvoice invoice = xenditClient.invoice.getById(\"EXAMPLE_ID\");\n```\n\n#### Get all invoices\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"limit\", 3);\nparams.put(\"statuses\", \"[\\\"SETTLED\\\",\\\"EXPIRED\\\"]\");\n/* Without client */\nInvoice[] invoices = Invoice.getAll(params);\n/* With client */\nInvoice[] invoices = xenditClient.invoice.getAll(params);\n\n```\n\n#### Expire an invoice\n\n```java\n/* Without client */\nInvoice invoice = Invoice.expire(\"EXAMPLE_ID\");\n/* With client */\nInvoice invoice = xenditClient.invoice.expire(\"EXAMPLE_ID\");\n```\n\n[Back to top](#table-of-contents)\n\n### Virtual Account Services\n\n#### Create a fixed virtual account\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n##### Closed virtual account\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nFixedVirtualAccount.createClosed(\n    String externalId,\n    String bankCode,\n    String name,\n    Long expectedAmount,\n    Map\u0026lt;String, Object\u0026gt; additionalParam\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nFixedVirtualAccount.createClosed(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n##### Opened virtual account\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nFixedVirtualAccount.createOpen(\n    String externalId,\n    String bankCode,\n    String name,\n    Map\u0026lt;String, Object\u0026gt; additionalParam\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nFixedVirtualAccount.createOpen(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"my_external_id\");\nparams.put(\"bank_code\", BankCode.BNI.getText());\nparams.put(\"name\", \"John Doe\");\n\n/* Optional for xenPlatform */\nparams.put(\"for-user-id\", \"\u003cSub Account User ID\u003e\");\n\n\n\n/* Without client */\nFixedVirtualAccount virtualAccount = FixedVirtualAccount.createOpen(params);\n/* With client */\nFixedVirtualAccount virtualAccount = xenditClient.fixedVirtualAccount.createOpen(params);\n\n```\n\n#### Update a fixed virtual account by ID\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"is_single_use\", true);\n\n/* Optional for xenPlatform */\nparams.put(\"for-user-id\", \"\u003cSub Account User ID\u003e\");\n\n/* Without client */\nFixedVirtualAccount fixedVirtualAccount = FixedVirtualAccount.update(\"EXAMPLE_ID\", params);\n/* With client */\nFixedVirtualAccount fixedVirtualAccount = xenditClient.fixedVirtualAccount.update(\"EXAMPLE_ID\", params);\n```\n\n#### Get banks with available virtual account service\n\n```java\n/* Without client */\nAvailableBank[] availableBanks = FixedVirtualAccount.getAvailableBanks();\n/* With client */\nAvailableBank[] availableBanks = xenditClient.fixedVirtualAccount.getAvailableBanks();\n```\n\n#### Get a fixed virtual account by ID\n\n```java\n/* Without client */\nFixedVirtualAccount fpa = FixedVirtualAccount.getFixedVA(\"EXAMPLE_ID\");\n/* With client */\nFixedVirtualAccount fpa = xenditClient.fixedVirtualAccount.getFixedVA(\"EXAMPLE_ID\");\n```\n\n#### Get a fixed virtual account payment by payment ID\n\n```java\n/* Without client */\nFixedVirtualAccountPayment payment = FixedVirtualAccount.getPayment(\"EXAMPLE_PAYMENT_ID\");\n/* With client */\nFixedVirtualAccountPayment payment = xenditClient.fixedVirtualAccount.getPayment(\"EXAMPLE_PAYMENT_ID\");\n```\n\n[Back to top](#table-of-contents)\n\n### Retail Outlet Services ID\n\n#### Create fixed payment code\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRetailOutlet.createFixedPaymentCode(\n    String externalId,\n    String retailOutletName,\n    String name,\n    Number expectedAmount\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRetailOutlet.createFixedPaymentCode(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```\nparams.put(\"external_id\", \"test\");\nparams.put(\"retail_outlet_name\", \"ALFAMART\");\nparams.put(\"name\", \"Rika Sutanto\");\nparams.put(\"expected_amount\", 10000);\n/* Without client */\nFixedPaymentCode fpc = RetailOutlet.createFixedPaymentCode(params);\n/* With client */\nFixedPaymentCode fpc = xenditClient.retailOutlet.createFixedPaymentCode(params);\n```\n\n#### Get fixed payment code\n\n```java\n/* Without client */\nFixedPaymentCode fpc = RetailOutlet.getFixedPaymentCode(\"EXAMPLE_ID\");\n/* With client */\nFixedPaymentCode fpc = xenditClient.retailOutlet.getFixedPaymentCode(\"EXAMPLE_ID\");\n```\n\n#### Update fixed payment code\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRetailOutlet.updateFixedPaymentCode(\n    String id,\n    String name,\n    Number expectedAmount,\n    String expirationDate\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRetailOutlet.updateFixedPaymentCode(\n    String id,\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"name\", \"Lorem Ipsum\");\n\n/* Without client */\nFixedPaymentCode fpc = RetailOutlet.updateFixedPaymentCode(\"EXAMPLE_ID\", params);\n/* With client */\nFixedPaymentCode fpc = xenditClient.retailOutlet.updateFixedPaymentCode(\"EXAMPLE_ID\", params);\n```\n\n[Back to top](#table-of-contents)\n### Retail Outlet Services PH\n\n#### Create payment code\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRegionalRetailOutlet.createPaymentCode(\n    String referenceId,\n    RegionalRetailOutletPaymentCode.ChannelCode channelCode,\n    String customerName,\n    Number amount,\n    RegionalRetailOutletPaymentCode.Currency currency,\n    RegionalRetailOutletPaymentCode.Market market\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRegionalRetailOutlet.createPaymentCode(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nparams.put(\"reference_id\", \"test\");\nparams.put(\"channel_code\", RegionalRetailOutletPaymentCode.ChannelCode.SEVENELEVENCLIQQ);\nparams.put(\"customer_name\", \"test-customer\");\nparams.put(\"amount\", 10);\nparams.put(\"currency\",  RegionalRetailOutletPaymentCode.Currency.PHP);\nparams.put(\"market\", RegionalRetailOutletPaymentCode.Market.PH);\n/* Without client */\nRegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.createPaymentCode(params);\n/* With client */\nRegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.createPaymentCode(params);\n```\n\n#### Get payment code\n\n```java\n/* Without client */\nRegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.getPaymentCode(\"EXAMPLE_ID\");\n/* With client */\nRegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.getPaymentCode(\"EXAMPLE_ID\");\n```\n\n#### Update payment code\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRegionalRetailOutlet.updatePaymentCode(\n    String id,\n    String customerName,\n    Number amount,\n    RegionalRetailOutletPaymentCode.Currency currency,\n    String expiresAt,\n    String description\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRegionalRetailOutlet.updatePaymentCode(\n    String id,\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"name\", \"Lorem Ipsum\");\n\n/* Without client */\nRegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.updatePaymentCode(\"EXAMPLE_ID\", params);\n/* With client */\nRegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.updatePaymentCode(\"EXAMPLE_ID\", params);\n```\n\n#### Get payments by payment code ID\n\n```java\n/* Without client */\nRegionalRetailOutletPaymentCode pc = RegionalRetailOutlet.getPaymentsByPaymentCodeId(\"EXAMPLE_ID\");\n/* With client */\nRegionalRetailOutletPaymentCode pc = xenditClient.retailOutlet.getPaymentsByPaymentCodeId(\"EXAMPLE_ID\");\n```\n\n[Back to top](#table-of-contents)\n\n### Recurring Payment Services\n\n#### Create a recurring payment\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRecurringPayment.create(\n   String externalId,\n   String payerEmail,\n   String interval,\n   Number intervalCount,\n   String description,\n   Number amount\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRecurringPayment.create(\n   Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString , Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"recurring_31451441\");\nparams.put(\"payer_email\", \"sample_email@xendit.co\");\nparams.put(\"interval\", \"MONTH\");\nparams.put(\"interval_count\", 1);\nparams.put(\"description\", \"Test desc\");\nparams.put(\"amount\", 100000);\nparams.put(\"currency\", \"IDR\"); //Optional param\n\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.create(params);\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.create(params);\n```\n\n#### Get a recurring payment\n\n```java\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.get(\"5e2dd160f8a4d24146f5974c\");\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.get(\"5e2dd160f8a4d24146f5974c\");\n```\n\n#### Edit a recurring payment\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"amount\", 987654);\nparams.put(\"interval\", \"WEEK\");\n\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.edit(\"5e2dd55ef8a4d24146f59775\", params);\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.edit(\"5e2dd55ef8a4d24146f59775\", params);\n```\n\n#### Stop a recurring payment\n\n```java\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.stop(\"5e2dd160f8a4d24146f5974c\");\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.stop(\"5e2dd160f8a4d24146f5974c\");\n```\n\n#### Pause a recurring payment\n\n```java\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.pause(\"5e2dd55ef8a4d24146f59775\");\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.pause(\"5e2dd55ef8a4d24146f59775\");\n```\n\n#### Resume a recurring payment\n\n```java\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.resume(\"5e2dd55ef8a4d24146f59775\");\n/* With client */\nRecurringPayment recurringPayment = xenditClient.recurringPayment.resume(\"5e2dd55ef8a4d24146f59775\");\n```\n\n#### List recurring payments by ID\n\n```java\n/* Without client */\nInvoice[] invoices = RecurringPayment.getPaymentsById(\"5e2dd55ef8a4d24146f59775\");\n/* With client */\nInvoice[] invoices = xenditClient.recurringPayment.getPaymentsById(\"5e2dd55ef8a4d24146f59775\");\n```\n\n[Back to top](#table-of-contents)\n\n### Balance Service\n\n#### Get balance\n\nThe `accountType` parameter is optional.\n\n```java\nBalance.get();\n\nBalance.get(String accountType);\n```\n\n```java\n/* Without client */\nBalance balance = Balance.get(\"CASH\");\n/* With client */\nBalance balance = xenditClient.balance.get(\"CASH\");\n```\n\n[Back to top](#table-of-contents)\n\n### Payout Services\n\n#### Create a payout\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPayout.createPayout(\n    String externalId,\n    Number amount\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPayout.createPayout(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"my_test_id\");\nparams.put(\"amount\", 100000);\n\n/* Without client */\nPayout payout = Payout.createPayout(params);\n/* Without client */\nPayout payout = xenditClient.payout.createPayout(params);\n```\n\n#### Get a payout by ID\n\n```java\n/* Without client */\nPayout payout = Payout.getPayout(\"EXAMPLE_ID\");\n/* With client */\nPayout payout = xenditClient.payout.getPayout(\"EXAMPLE_ID\");\n```\n\n#### Void a payout\n\n```java\n/* Without client */\nPayout payout = Payout.voidPayout(\"EXAMPLE_ID\");\n/* With client */\nPayout payout = xenditClient.payout.voidPayout(\"EXAMPLE_ID\");\n```\n\n[Back to top](#table-of-contents)\n\n### E-Wallet Services\n\n#### Create an e-wallet charge\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nEWalletCharge.createEWalletCharge(\n    String referenceId,\n    String currency,\n    Number amount,\n    String checkoutMethod,\n    String channelCode,\n    Map\u0026lt;String, String\u0026gt; channelProperties,\n    String customerId,\n    EWalletBasketItem[] basket,\n    Map\u0026lt;String, Object\u0026gt; metadata\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nEWalletCharge.createEWalletCharge(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, String\u003e channelProperties = new HashMap\u003c\u003e();\nchannelProperties.put(\"success_redirect_url\", \"https://yourwebsite.com/order/123\");\n\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"reference_id\", \"test-reference-id\");\nparams.put(\"currency\", \"IDR\");\nparams.put(\"amount\", 50000);\nparams.put(\"checkout_method\", \"ONE_TIME_PAYMENT\");\nparams.put(\"channel_code\", \"ID_SHOPEEPAY\");\nparams.put(\"channel_properties\", channelProperties);\n\n/* Without client */\nEWalletCharge charge = EWalletCharge.createEWalletCharge(params);\n/* With client */\nEWalletCharge charge = xenditClient.eWallet.createEWalletCharge(params);\n```\n\n#### Get an e-wallet charge status\n\n```java\n/* Without client */\nEWalletCharge charge = EWalletCharge.getEWalletChargeStatus(\"ewc_c8630205-3e7a-4511-8250-26a084480c4c\");\n/* With client */\nEWalletCharge charge = xenditClient.eWallet.getEWalletChargeStatus(\"ewc_c8630205-3e7a-4511-8250-26a084480c4c\");\n```\n\n[Back to top](#table-of-contents)\n\n### Credit Card Services\n\n#### Create an authorization\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCreditCardCharge.createAuthorization(\n    String tokenId,\n    String externalId,\n    Number amount,\n    String authenticationId,\n    String cardCVN,\n    Boolean capture\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCreditCardCharge.createAuthorization(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\n/* Without client */\nCreditCardCharge creditCardCharge = CreditCard.createAuthorization(\"...\", \"test_id\", 75000, \"...\", \"123\", false);\n/* With client */\nCreditCardCharge creditCardCharge = xenditClient.creditCard.createAuthorization(\"...\", \"test_id\", 75000, \"...\", \"123\", false);\n\n```\n\n#### Create a charge\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCreditCardCharge.createCharge(\n    String tokenId,\n    String externalId,\n    Number amount,\n    String authenticationId,\n    String cardCVN,\n    String descriptor\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCreditCardCharge.createCharge(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\n/* Without client */\nCreditCardCharge creditCardCharge = CreditCard.createCharge(\"...\", \"test_id\", 75000, \"...\", \"123\", \"lorem ipsum\");\n/* With client */\nCreditCardCharge creditCardCharge = xenditClient.creditCard.createCharge(\"...\", \"test_id\", 75000, \"...\", \"123\", \"lorem ipsum\");\n```\n\n#### Reverse an authorization\n\n```java\n\nCreditCard.reverseAuthorization(String chargeId, String externalId);\n\n/* Without client */\nCreditCardReverseAuth creditCardReverseAuth = CreditCard.reverseAuthorization(\"1234567\", \"external_id\");\n/* With client */\nCreditCardReverseAuth creditCardReverseAuth = xenditClient.creditCard.reverseAuthorization(\"1234567\", \"external_id\");\n```\n\n#### Capture a charge\n\n```java\n\nCreditCard.captureCharge(String chargeId, Number amount);\n/* Without client */\nCreditCardCharge creditCardCharge = CreditCard.captureCharge(\"12345678\", 55000);\n/* With client */\nCreditCardCharge creditCardCharge = xenditClient.creditCard.captureCharge(\"12345678\", 55000);\n```\n\n#### Get a charge by ID\n\n```java\n/* Without client */\nCreditCardCharge creditCardCharge = CreditCard.getCharge(\"1234567\");\n/* With client */\nCreditCardCharge creditCardCharge = xenditClient.creditCard.getCharge(\"1234567\");\n```\n\n#### Create a refund\n\n```java\n\nCreditCard.createRefund(String id, Number amount, String externalId);\n/* Without client */\nCreditCardRefund creditCardRefund = CreditCard.createRefund(\"1234567\", 50000, \"external_id\");\n/* With client */\nCreditCardRefund creditCardRefund = xenditClient.creditCard.createRefund(\"1234567\", 50000, \"external_id\");\n```\n\n[Back to top](#table-of-contents)\n\n### Batch Disbursement Services\n\n#### Batch disbursement item\n\n```java\nBatchDisbursementItem item =\n    BatchDisbursementItem.builder()\n        .amount(10000)\n        .bankCode(\"ABC\")\n        .bankAccountName(\"Lorem Ipsum\")\n        .bankAccountNumber(\"1234567890\")\n        .description(\"Lorem ipsum dolor sit amet\")\n        .externalId(\"test_id\")\n        .emailTo([\"email1\", \"email2\"])\n        .emailCC([\"email1\", \"email2\"])\n        .emailBcc([\"email1\", \"email2\"])\n        .build();\n```\n\n#### Create a batch disbursement\n\n```java\n/* Without client */\nBatchDisbursement.create(\n    String reference,\n    BatchDisbursementItem[] disbursements\n);\n/* With client */\nxenditClient.batchDisbursement.create(\n    String reference,\n    BatchDisbursementItem[] disbursements\n);\n```\n\n#### Get banks with available disbursement service\n\n```java\n/* Without client */\nAvailableBank[] banks = BatchDisbursement.getAvailableBanks();\n/* With client */\nAvailableBank[] banks = xenditClient.batchDisbursement.getAvailableBanks();\n```\n\n[Back to top](#table-of-contents)\n\n### Cardless Credit Services\n\n#### Cardless credit item\n\n```java\nCardlessCreditItem item =\n    CardlessCreditItem.builder()\n        .id(\"123\")\n        .name(\"Phone Case\")\n        .price(200000)\n        .type(\"Smartphone\")\n        .url(\"https://www.example.org\")\n        .quantity(1)\n        .build();\n```\n\n#### Cardless credit customer details\n\n```java\nCardlessCreditCustomer customer =\n    CardlessCreditCustomer.builder()\n        .firstName(\"Lorem\")\n        .lastName(\"Ipsum\")\n        .email(\"email@example.com\")\n        .phone(\"08129748247684\")\n        .build();\n```\n\n#### Cardless credit shipping address\n\n```java\nCardlessCreditShippingAddress address =\n    CardlessCreditShippingAddress.builder()\n        .firstName(\"Lorem\")\n        .lastName(\"Ipsum\")\n        .address(\"Jalan teknologi\")\n        .city(\"Jakarta\")\n        .postalCode(\"12345\")\n        .countryCode(\"IDN\")\n        .phone(\"08129748247684\")\n        .build();\n```\n\n#### Create a cardless credit payment\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCardlessCredit.create(\n    String cardlessCreditType,\n    String externalId,\n    Number amount,\n    String paymentType,\n    CardlessCreditItem[] items,\n    CardlessCreditCustomer customerDetails,\n    CardlessCreditShippingAddress shippingAddress,\n    String redirectUrl,\n    String callbackUrl\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCardlessCredit.create(\n    Map\u0026lt;String, Object\u0026gt; params\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\n/* Without client */\nCardlessCredit cardlessCredit = CardlessCredit.create(\n    \"KREDIVO\",\n    \"external_id\",\n    200000,\n    CardlessCredit.PaymentType.THREE_MONTHS.getVal(),\n    items,\n    customer,\n    address,\n    \"www.example.com\",\n    \"www.example.com\"\n);\n/* With client */\nCardlessCredit cardlessCredit = xenditClient.cardlessCredit.create(\n    \"KREDIVO\",\n    \"external_id\",\n    200000,\n    CardlessCredit.PaymentType.THREE_MONTHS.getVal(),\n    items,\n    customer,\n    address,\n    \"www.example.com\",\n    \"www.example.com\"\n);\n```\n\n### QR Code\n\n#### Create QR Code\n\n```java\n/* Without client */\nQRCode qrCode = QRCode.create(\n    \"reference_id\",\n    QRCode.QRCodeType.DYNAMIC,\n    \"IDR\",\n    10000\n);\n/* With client */\nQRCode qrCode = xenditClient.qrCode.create(\n    \"reference_id\",\n    QRCode.QRCodeType.DYNAMIC,\n    \"IDR\",\n    10000\n);\n```\n\n#### Get QR Code\n\n```java\n/* Without client */\nQRCode qrCode = QRCode.getQRCodeByQRId(\"qr_004a0427-b194-49be-9439-657ef77ee4f3\");\n/* With client */\nQRCode qrCode = xenditClient.qrCode.getQRCodeByQRId(\"qr_004a0427-b194-49be-9439-657ef77ee4f3\");\n```\n\n### Customer\n\n#### Create Customer\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCustomer.createCustomer(\n    String referenceId,\n    String mobileNumber,\n    String email,\n    String givenNames,\n    String middleName,\n    String surname,\n    String description,\n    String phoneNumber,\n    String nationality,\n    CustomerAddress[] addresses,\n    String dateOfBirth,\n    Map\u0026lt;String, Object\u0026gt; metadata\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nCustomer.createCustomer(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"halo\", \"hello\");\nmetadata.put(\"tes\", \"123\");\n\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"reference_id\", \"test-reference-id\");\nparams.put(\"email\", \"tes@tes.com\");\nparams.put(\"given_names\", \"Given Names\");\nparams.put(\"nationality\", \"ID\");\nparams.put(\"date_of_birth\", \"1995-12-30\");\nparams.put(\"metadata\", metadata);\n\n/* Without client */\nCustomer customer = Customer.createCustomer(params);\n/* With client */\nCustomer customer = xenditClient.customer.createCustomer(params);\n```\n\n#### Get Customer by Reference ID\n\n```java\n/* Without client */\nCustomer[] customers = Customer.getCustomerByReferenceId(\"test-reference-id\");\n/* With client */\nCustomer[] customers = xenditClient.customer.getCustomerByReferenceId(\"test-reference-id\");\n```\n\n### Direct Debit\n\n#### Initialize linked account tokenization\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nInitializedLinkedAccount.initializeLinkedAccountTokenization(\n    String customerId,\n    LinkedAccountEnum.ChannelCode channelCode,\n    Map\u0026lt;String, Object\u0026gt; properties,\n    Map\u0026lt;String, Object\u0026gt; metadata\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nInitializedLinkedAccount.initializeLinkedAccountTokenization(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e properties = new HashMap\u003c\u003e();\nproperties.put(\"account_mobile_number\", \"+62818555988\");\nproperties.put(\"card_last_four\", \"8888\");\nproperties.put(\"card_expiry\", \"06/24\");\nproperties.put(\"account_email\", \"test.email@xendit.co\");\n\nMap\u003cString, Object\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"tes\", \"123\");\n\nString customerId = \"791ac956-397a-400f-9fda-4958894e61b5\";\nChannelCode channelCode = ChannelCode.DC_BRI;\n\n/* Without client */\nInitializedLinkedAccount linkedAccount = InitializedLinkedAccount.initializeLinkedAccountTokenization(\n    customerId,\n    channelCode,\n    properties,\n    metadata\n);\n/* With client */\nInitializedLinkedAccount linkedAccount = xenditClient.directDebitPayment.initializeLinkedAccountTokenization(\n    customerId,\n    channelCode,\n    properties,\n    metadata\n);\n```\n\n#### Validate OTP for Linked Account Token\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nValidatedLinkedAccount.validateOTP(\n    String tokenId,\n    String otpCode\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nValidatedLinkedAccount.validateOTP(String tokenId, Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"otp_code\", \"333000\");\n\nString tokenId = \"lat-ba3c5645-f134-432a-b4f4-f8972685aa03\";\n\n/* Without client */\nValidatedLinkedAccount linkedAccount = ValidatedLinkedAccount.validateOTP(tokenId, params);\n/* With client */\nValidatedLinkedAccount linkedAccount = xenditClient.directDebitPayment.validateOTP(tokenId, params);\n```\n\n#### Retrieve accessible accounts by linked account token\n\n```java\n/* Without client */\nAccessibleLinkedAccount[] linkedAccounts = AccessibleLinkedAccount.retrieveAccessibleLinkedAccounts(\"lat-960e709c-bdd6-4b4a-a361-243186379c45\");\n/* With client */\nAccessibleLinkedAccount[] linkedAccounts = xenditClient.directDebitPayment.retrieveAccessibleLinkedAccounts(\"lat-960e709c-bdd6-4b4a-a361-243186379c45\");\nSystem.out.println(Arrays.toString(linkedAccounts));\n```\n\n#### Unbind linked account token\n\n```java\n/* Without client */\nUnbindedLinkedAccount linkedAccount = UnbindedLinkedAccount.unbindLinkedAccountToken(\"lat-a08fba1b-100c-445b-b788-aaeaf8215e8f\");\n/* With client */\nUnbindedLinkedAccount linkedAccount = xenditClient.directDebitPayment.unbindLinkedAccountToken(\"lat-a08fba1b-100c-445b-b788-aaeaf8215e8f\");\n```\n\n#### Create payment method\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaymentMethod.createPaymentMethod(\n    String customerId,\n    LinkedAccountEnum.AccountType type,\n    Map\u0026lt;String, Object\u0026gt; properties,\n    Map\u0026lt;String, Object\u0026gt; metadata\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaymentMethod.createPaymentMethod(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e properties = new HashMap\u003c\u003e();\nproperties.put(\"id\", \"la-052d3e2d-bc4d-4c98-8072-8d232a552299\");\nMap\u003cString, Object\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"halo\", \"hello\");\nmetadata.put(\"tes\", \"123\");\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"customer_id\", \"4b7b6050-0830-440a-903b-37d527dbbaa9\");\nparams.put(\"type\", \"DEBIT_CARD\");\nparams.put(\"properties\", properties);\nparams.put(\"metadata\", metadata);\n/* Without client */\nPaymentMethod paymentMethod = PaymentMethod.createPaymentMethod(params);\n/* With client */\nPaymentMethod paymentMethod = xenditClient.directDebitPayment.createPaymentMethod(params);\n```\n\n#### Get payment methods by customer ID\n\n```java\n/* Without client */\nPaymentMethod[] paymentMethods = PaymentMethod.getPaymentMethodsByCustomerId(\"4b7b6050-0830-440a-903b-37d527dbbaa9\");\n/* With client */\nPaymentMethod[] paymentMethods = xenditClient.directDebitPayment.getPaymentMethodsByCustomerId(\"4b7b6050-0830-440a-903b-37d527dbbaa9\");\nSystem.out.println(Arrays.toString(paymentMethods));\n```\n\n#### Create recurring payment\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRecurringPayment.create(\n    String externalId,\n    String payerEmail,\n    String interval,\n    Number intervalCount,\n    String description,\n    Number amount\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nRecurringPayment.create(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString , Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"external_id\", \"recurring_31451441\");\nparams.put(\"payer_email\", \"sample_email@xendit.co\");\nparams.put(\"interval\", \"MONTH\");\nparams.put(\"interval_count\", 1);\nparams.put(\"description\", \"Test desc\");\nparams.put(\"amount\", 100000);\nparams.put(\"currency\", \"IDR\");\n\n/* Without client */\nRecurringPayment recurringPayment = RecurringPayment.create(params);\n/* With client */\nRecurringPayment recurringPayment = xenditClient.directDebitPayment.create(params);\n```\n\n#### Create direct debit payment\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDirectDebitPayment.createDirectDebitPayment(\n    String referenceId,\n    String paymentMethodId,\n    String currency,\n    Number amount,\n    String callbackUrl,\n    Boolean enableOtp,\n    String description,\n    DirectDebitBasketItem[] basket,\n    DirectDebitDevice device,\n    String successRedirectUrl,\n    String failureRedirectUrl,\n    Map\u0026lt;String, Object\u0026gt; metadata,\n    String idempotencyKey\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDirectDebitPayment.createDirectDebitPayment(Map\u0026lt;String, Object\u0026gt; params, String idempotencyKey);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nDirectDebitBasketItem basketItem =  DirectDebitBasketItem.builder()\n        .referenceId(\"basket-product-ref-id\")\n        .name(\"product-name\")\n        .category(\"mechanics\")\n        .market(\"ID\")\n        .price(50000)\n        .quantity(5)\n        .type(\"product type\")\n        .subCategory(\"product sub category\")\n        .description(\"product description\")\n        .url(\"https://product.url\")\n        .build();\nDirectDebitBasketItem[] basketItemArray = new DirectDebitBasketItem[]{basketItem};\n\nDirectDebitDevice device = DirectDebitDevice.builder()\n        .id(\"device-id\")\n        .ipAddress(\"0.0.0.0\")\n        .userAgent(\"user-agent\")\n        .adId(\"ad-id\")\n        .imei(\"123a456b789c\")\n        .build();\n\nMap\u003cString, Object\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"halo\", \"hello\");\nmetadata.put(\"tes\", \"123\");\n\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"reference_id\", \"test-direct-debit-ref-4\");\nparams.put(\"payment_method_id\", \"pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef\");\nparams.put(\"currency\", \"IDR\");\nparams.put(\"amount\", 15000);\nparams.put(\"callback_url\", \"http://webhook.site/\");\nparams.put(\"enable_otp\", true);\nparams.put(\"description\", \"test description\");\nparams.put(\"basket\", basketItemArray);\nparams.put(\"success_redirect_url\", \"https://success-redirect.url\");\nparams.put(\"failure_redirect_url\", \"https://failure-redirect.url\");\nparams.put(\"device\", device);\nparams.put(\"metadata\", metadata);\n\nString idempotencyKey = \"idempotency-key-4\";\n\n/* Without client */\nDirectDebitPayment directDebitPayment = DirectDebitPayment.createDirectDebitPayment(params, idempotencyKey);\n/* With client */\nDirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.createDirectDebitPayment(params, idempotencyKey);\n```\n\n#### Validate OTP for direct debit payment\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDirectDebitPayment.validateOTP(\n    String directDebitPaymentId,\n    String otpCode\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nDirectDebitPayment.validateOTP(String directDebitPaymentId, Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"otp_code\", \"222000\");\n\nString directDebitPaymentId = \"ddpy-b150da90-2121-44a6-a836-5eebf0d7ab55\";\n\n/* Without client */\nDirectDebitPayment directDebitPayment = DirectDebitPayment.validateOTP(directDebitPaymentId, params);\n/* With client */\nDirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.validateOTP(directDebitPaymentId, params);\n```\n\n#### Get direct debit payment status by ID\n\n```java\n/* Without client */\nDirectDebitPayment directDebitPayment = DirectDebitPayment.getDirectDebitPaymentStatusById(\"ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c\");\n/* With client */\nDirectDebitPayment directDebitPayment = xenditClient.directDebitPayment.getDirectDebitPaymentStatusById(\"ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c\");\n```\n\n#### Get direct debit payment status by reference ID\n\n```java\n/* Without client */\nDirectDebitPayment[] directDebitPayments = DirectDebitPayment.getDirectDebitPaymentStatusByReferenceId(\"test-direct-debit-ref-4\");\n/* With client */\nDirectDebitPayment[] directDebitPayments = xenditClient.directDebitPayment.getDirectDebitPaymentStatusByReferenceId(\"test-direct-debit-ref-4\");\nSystem.out.println(Arrays.toString(directDebitPayments));\n```\n\n[Back to top](#table-of-contents)\n\n### Paylater Services\n\n#### Initiate Paylater Plans\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaylaterPlans.initiatePaylaterPlans(\n    String customerId,\n    String channelCode,\n    String currency,\n    Number Amount,\n    PaylaterOrderItem[] orderItems\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaylaterPlans.initiatePaylaterPlans(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nPaylaterOrderItem orderItems = PaylaterOrderItem.builder()\n    .type(\"type\")\n    .referenceId(\"reference_id\")\n    .name(\"name\")\n    .netUnitAmount(\"net_unit_amount\")\n    .quantity(1)\n    .url(\"https://www.google.com\")\n    .category(\"category\")\n    .subCategory(\"subCategory\")\n    .description(\"description\")\n    .build();\nPaylaterOrderItem[] orderItemsArray = new PaylaterOrderItem[] { orderItem };\n\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"customer_id\", \"test-customer-id\");\nparams.put(\"channel_code\", \"ID_KREDIVO\");\nparams.put(\"currency\", \"IDR\");\nparams.put(\"amount\", 50000);\nparams.put(\"order_items\", orderItemsArray);\n\n/* Without client */\nPaylaterPlans initiatePlan = PaylaterPlans.initiatePaylaterPlans(params);\n/* With client */\nPaylaterPlans initiatePlan = xenditClient.paylater.initiatePaylaterPlans(params);\n```\n\n#### Create Paylater Charges\n\nYou can choose whether want to put the attributes as parameters or to put in inside a Map object.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaylaterCharges.createPaylaterCharges(\n    String planId,\n    String referenceId,\n    String checkoutMethod,\n    String successRedirectUrl,\n    String failureRedirectUrl,\n    String paymentMethodId,\n    Map\u0026lt;String, Object\u0026gt; metadata\n);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cpre\u003e\nPaylaterCharges.createPaylaterCharges(Map\u0026lt;String, Object\u0026gt; params);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n```java\nMap\u003cString, Object\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"halo\", \"hello\");\nmetadata.put(\"tes\", \"123\");\n\nMap\u003cString, Object\u003e params = new HashMap\u003c\u003e();\nparams.put(\"plan_id\", \"test-plan-id\");\nparams.put(\"reference_id\", \"test-reference-id\");\nparams.put(\"checkout_method\", \"ONE_TIME_PAYMENT\");\nparams.put(\"success_redirect_url\", \"https://success-redirect.url\");\nparams.put(\"failure_redirect_url\", \"https://failure-redirect.url\");\nparams.put(\"payment_method_id\", null);\nparams.put(\"metadata\", metadata);\n\n/* Without client */\nPaylaterCharge charge = PaylaterCharge.createPaylaterCharges(params);\n/* With client */\nPaylaterCharge charge = xenditClient.paylater.createPaylaterCharges(params);\n```\n\n#### Get Paylater Charge by Charge ID\n\n```java\n/* Without client */\nPaylaterCharge paylaterCharge = PaylaterCharge.getPaylaterChargeStatus(\"charge-id\");\n/* With client */\nPaylaterCharge paylaterCharge = xenditclient.paylater.getPaylaterChargeStatus(\"charge-id\");\n```\n\n#### Refund Paylater Charge\n\n```java\nPaylaterRefund.createPaylaterRefund(String chargeId, Number amount, PaylaterEnum.RefundReasons);\n/* Without client */\nPaylaterRefund paylaterRefund = PaylaterRefund.createPaylaterRefund(\"charge-id\", 1000, \"OTHERS\");\n/* With client */\nPaylaterRefund paylaterRefund = xenditClient.paylater.createPaylaterRefund(\"charge-id\", 1000, \"OTHERS\");\n```\n\n#### Get Paylater Refund by Refund ID\n\n```java\n/* Without client */\nPaylaterRefund paylaterRefund = PaylaterRefund.getPaylaterRefundStatus(\"charge-id\", \"refund-id\");\n/* With client */\nPaylaterRefund paylaterRefund = xenditclient.paylater.getPaylaterRefundStatus(\"charge-id\", \"refund-id\");\n```\n\n### How to get Request ID\n\nEach 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](https://dashboard.xendit.co/api-logs) in Dashboard. Learn more about Searching API Logs using Request-ID in [API Logs Docs](https://docs.xendit.co/api-integration/api-logs). \n\nIf you need to contact us about a specific request, providing the Request ID will ensure the fastest possible resolution.\n\nThe following example will show how to obtain Request-ID when creating QRCode\n\n```java\n/* Without client */\nQRCode qrCode = QRCode.createQRCode(\"12\", QRCode.QRCodeType.DYNAMIC, \"IDR\", 10000);\n/* Xendit.getResponseHeaders() will contain all response headers after your request is completed, hence you can obtain Request-Id from header by doing the following:*/\nSystem.out.println(qrCode.getResponseHeaders().get(\"Request-Id\"));\n\n/* With client */\nQRCode qrCode = xenditClient.qrCode.createQRCode(\"external_id\", QRCode.QRCodeType.DYNAMIC, \"IDR\", 10000);\n/* Xendit.getResponseHeaders() will contain all response headers after your request is completed, hence you can obtain Request-Id from header by doing the following:*/\nSystem.out.println(qrCode.getResponseHeaders().get(\"Request-Id\"));\n```\nFull Example can be found [here](https://github.com/xendit/xendit-java/blob/9bd69bd6f4061307a5dee30287a1f7712d060527/xendit-java-library-example/src/main/java/ExampleWithClient/ExampleCreateQRCode.java)\n\n\n## Contributing\nYou can go to the [contributing guidelines](https://github.com/xendit/xendit-java/blob/master/CONTRIBUTING.md) to learn on how to contribute this project.\n\n### Lint\nRun `./gradlew spotlessApply` to apply linter.\n\n### Tests\n\nMake sure the the code passes all tests.\n\n```\n./gradlew test\n```\n\n### Precommit\n\nBefore making any commits, please install pre-commit. To install pre-commit, follow the [installation steps](https://pre-commit.com/#install).\n\nFor any requests, bugs, or comments, please [open an issue](https://github.com/xendit/xendit-java-library/issues) or [submit a pull request](https://github.com/xendit/xendit-java-library/pulls).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxendit%2Fxendit-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxendit%2Fxendit-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxendit%2Fxendit-java/lists"}