NAV undefined
undefined
bash php java

Pengantar

Selamat Datang! Di Xendit, misi utama kami adalah untuk menyediakan infrastruktur pembayaran untuk membantu Anda mencapai kesuksesan. Kami akan membantu Anda dalam mengurus uang masuk (menerima pembayaran) dan uang keluar (melakukan pembayaran). Pengguna kami mencakup dari platform bisnis ke perusahaan penyedia pinjaman, dan segala hal diantaranya.

API Xendit dikembangkan berdasarkan konsep REST. API kami dibuat untuk mudah dipahami, berorientasi sumber daya, dan menggunakan kode respons HTTP untuk mendeteksi jika terjadi kesalahan. Kami menggunakan fitur dan fungsi bawaan HTTP sehingga dapat dimengerti oleh klien HTTP umum. Respons API kami memiliki format JSON, termasuk juga pesan kesalahannya.

Belajar API kami menggunakan Postman

Untuk mempermudah proses familiarisasi dengan API kami, kami menyediakan sebuah koleksi Postman yang berisi contoh dari seluruh API yang Xendit pakai. Silakan lihat di Panduan Postman untuk belajar lebih lanjut!

Otentikasi

Untuk dapat sukses melakukan otentikasi dengan API Xendit, Anda harus melakukan otentikasi API key menggunakan Basic Auth. Anda dapat mendapatkan API key melalui Dasbor. Sebagai contoh jika API key Anda adalah

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==

Pilih otentikasi Basic Auth. Masukkan nilai API key pada username dan kosongkan password

Format Basic Auth
{{username}}:{{password}}

Ikuti format diatas (dengan titik dua)
xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==:

Lalu, enkripsikan ke frasa sandi Base64

eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

Tambahkan enkripsi tersebut ke dalam HTTP(s) header

Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

API Xendit dikembangkan berdasarkan konsep REST sehingga rapi dan mudah untuk dimengerti. Sebelum mulai menggunakan API, pastikan Anda sudah melakukan registrasi dan akun Anda sudah terotentikasi karena request API akan gagal apabila akun belum terotentikasi. Anda dapat melakukan otentikasi dengan menambahkan API key Anda ke dalam request.

Anda dapat membuat dan mendapatkan API key Anda melalui Dasbor > Pengaturan > Developers > API Keys. Untuk mempermudah Anda menggunakan API kami, kami menyediakan masing-masing API key untuk test dan live environment. Selalu jaga kerahasiaan dan keamanan API key Anda. Jangan bagikan API key Anda bila tidak diperlukan. Pelajari lebih lanjut mengenai API key disini

Berikut cara membuat API key dan melakukan otentikasi akun Anda untuk mengakses API Xendit:

  1. Buat API key melalui Dasbor
  2. Salin API key
  3. Gunakan Basic Access Authentication atau BASIC AUTH sebagai metode otentikasi di server Anda
  4. Format BASIC AUTH adalah {{username}}:{{password}}
  5. Masukkan API key ke dalam username dan kosongkan password. Pastikan Anda menyertakan : di belakang
  6. Enkripsi nilai tersebut dengan Base64
  7. Sertakan frasa sandi Base64 tersebut ke dalam header Authorization

Semua request API yang dibuat harus dikirim melalui HTTPS dan bukan HTTP (request melalui HTTP akan otomatis gagal). Semua request yang dibuat dalam mode test tidak akan diteruskan ke jaringan bank sehingga tidak ada uang asli yang terlibat. Semua respon API yang dikembalikan mengikuti format bentuk JSON.

Kami menyediakan PHP client libraries untuk menghemat waktu Anda. Kami juga sedang mengembangkan libraries dan plugins untuk mempermudah penggunaan API Xendit. Bila Anda tertarik untuk berkontribusi, silahkan hubungi kami dan kami akan senang untuk mendengar dari Anda. Sekali lagi, pastikan untuk melakukan otentikasi sebelum Anda menggunakan API kami.

Balance (Saldo)

Saldo Anda mewakili uang di akun cash Xendit dan Holding Anda.

Rekening uang Tunai Anda menyimpan uang yang telah dilunasi ke rekening Anda dan tersedia untuk penarikan, pencairan, atau transaksi lainnya. Akun Holding Anda menunjukkan uang yang tidak dapat digunakan karena sedang diproses untuk penyelesaian ke akun Tunai Anda atau pencairan ke akun eksternal.

Untuk transaksi money-out, misalnya, saat melakukan pencairan, akun Tunai Anda didebit dan akun Holding Anda dikreditkan saat transaksi keluar sedang diproses. Setelah transaksi money-out berhasil, akun Holding Anda akan didebet ketika uang dikirim ke penerima yang dituju.

Untuk transaksi money-in, misalnya, ketika Anda menerima pembayaran atau dana top-up ke akun Anda, akun Holding Anda pertama kali dikreditkan saat transaksi yang masuk sedang diproses. Setelah transaksi diselesaikan, akun Holding Anda didebit dan akun Cash Anda dikreditkan saat uang dilepaskan ke akun Cash Anda.

Untuk melihat saldo Anda saat ini di setiap akun, Anda dapat mengambil Saldo Anda untuk akun Cash atau Holding Anda melalui API. Anda juga dapat mengunjungi tab Transaksi dasbor Anda untuk melihat saldo Kas Anda, atau tab Transit untuk melihat saldo Holding Anda.

Permintaan Pengecekan Saldo

Contoh Permintaan Pengecekan Saldo

curl https://api.xendit.co/balance -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $response = $xenditPHPClient->getBalance();
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/balance")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

Permintaan pengecekan saldo (Money-out read permission)

Pengecekan saldo memungkinkan Anda untuk mengetahui saldo Kas Anda dan saldo Holding Anda.

Parameter Deskripsi
account_type
optional
default: CASH
string Jenis akun yang dipilih (CASH atau HOLDING).

Respon Permintaan Pengecekan Saldo

Contoh Respon Permintaan Pengecekan Saldo

{
  "balance": 1241231
}
Parameter Deskripsi
balance Sisa saldo di tipe akun yang ditentukan dalam permintaan API anda

Kartu Kredit

Pembuatan Token (Tokenization)

Javascript Function: createToken

Xendit.card.createToken(tokenData, function (err, data) {
    if (err) {
        //Definisikan penanganan kesalahan
    }

    if (data.status === 'VERIFIED') {
        // Penanangan keberhasilan
    } else if (data.status === 'IN_REVIEW') {
        // Penanganan otentikasi (3DS)
    } else if (data.status === 'FAILED') {
        // Penanganan kegagalan
    }
});

Proses tokenisasi adalah sebuah proses dimana data dari kartu kredit (nomor kartu dan tanggal kedaluwarsa) disimpan dengan aman di sisi klien dalam bentuk token, agar data-data sensitif yang ada pada kartu kredit tidak pernah melewati sistem Anda. Token tersebut kemudian akan digunakan untuk melakukan Pembuatan Charge

Contoh Objek tokenData

{        
    "amount": "10000",        
    "card_number": "4000000000000002",        
    "card_exp_month": "12",        
    "card_exp_year": "2017",        
    "card_cvn": "123",
    "is_multiple_use": false,
    "should_authenticate": true
}

Contoh Respon Proses Tokenisasi

{
    "id": "586f0ba2ab70de5d2b409e0d",
    "authentication_id": "598c3e5a8c62078a5108f661",
    "masked_card_number": "400000XXXXXX0002",
    "status": "IN_REVIEW",
    "payer_authentication_url": "https://api.xendit.co/credit_card_tokens/586f0ba2ab70de5d2b409e0d/authentication_redirect?api_key=xnd_public_development_key"
}

Token dapat dibuat untuk sekali pemakaian atau pemakaian beberapa kali. Bila Anda menginginkan penyimpanan data kartu untuk penggunaan yang akan datang, silahkan ubah nilai is_multiple_use menjadi true.

Lihat Sample Proses Tokenisasi untuk contoh implementasi.

Token Sekali Pakai

Pada normalnya, proses otentikasi harus dilakukan untuk token sekali pakai, sehingga parameter amount wajib diisi. Bila proses otentikasi bukan suatu keharusan pada akun bisnis Anda, pengisian amount dapat dilewati dengan mengubah nilai should_authenticate menjadi false.

Token Pemakaian Berulang

Ketika melakukan proses tokenisasi untuk token pemakaian berulang, parameter amount tidak wajib diisi karena nilai tersebut sudah akan ditentukan dan ditampilkan pada proses Otentikasi. Lihat Pembuatan Otentikasi untuk detil lebih lanjut.

Permintaan Proses Tokenisasi (Money-in write permission)

Parameter Deskripsi
amount
optional
string Jumlah biaya yang ingin dikenakan. Wajib diiisi untuk Token Sekali Pakai untuk proses otentikasi
card_number
required
string Nomor kartu kredit
card_exp_month
required
string Bulan kedaluwarsa
card_exp_year
required
string Tahun kedaluwarsa
card_cvn
optional
string Kode CVN/CVC kartu
Catatan: Hanya digunakan untuk Token Sekali Pakai
is_multiple_use
optional
default: false
boolean Penentuan apakah token akan digunakan berulang kali atau tidak
should_authenticate
optional
default: true
boolean Penentuan apakah proses tokenisasi akan digabung dengan proses otentikasi atau tidak
xenditResponseHandler
required
function Fungsi penanganan respon yang dipanggil ketika proses tokenisasi dilakukan, yang digunakan untuk menerima pesan kesalahan dan respon tokenisasi

Respon Proses Tokenisasi

Parameter Deskripsi
id
required
string ID dari token tersebut. ID token ini akan digunakan kemudian untuk melakukan proses charge pada kartu kredit.
authentication_id
optional
string Akan disertakan apabila otentikasi digabung demgam Token Sekali Pakai.
masked_card_number
required
string 6 angka pertama dan 4 angka terakhir pada kartu kredit.
status
required
string Status dari proses Tokenisasi. Lihat Status-status pada proses Tokenisasi
payer_authentication_url
optional
string Bila status respon adalah IN_REVIEW, parameter ini akan mengandung tautan yang menuju ke halaman otentikasi yang digunakan pengguna untuk melakukan proses otentikasi menggunakan 3DS
failure_reason
optional
string Bila status respon adalah FAILED, lihat Alasan Kegagalan pada Proses Tokenisasi untuk melihat deskripsi kegagalan.

Status-status pada Proses Tokenisasi

Status Deskripsi
IN_REVIEW Pelanggan harus mengotentikasi identitas mereka. Xendit menyediakan tautan kepada Anda agar dinavigasikan kepada pengguna Anda untuk melakukan 3DS dengan mudah.
VERIFIED Pelanggan berhasil melakukan otentikasi terhadap identitas mereka. Oleh karena itu, pengiriman token ke sistem backend Anda untuk melakukan charge adalah tindakan yang aman.
FAILED Proses tokenisasi dapat mengalami kegagalan dengan alasan yang bervariasi. Lihat Alasan Kegagalan pada Proses Tokenisasi.

Alasan Kegagalan pada Proses Tokenisasi

Alasan Kegagalan Deskripsi
AUTHENTICATION_FAILED Status ini berarti customer berusaha melakukan otentikasi menggunakan 3DS tetapi tidak berhasil melengkapi proses otentikasi

Kesalahan pada Tokenisasi

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
INVALID_JSON_FORMAT
400
Isi dari request bukan format JSON yang benar.
ACCOUNT_NUMBER_INVALID_ERROR
400
Nomor kartu kredit tidak valid atau salah.
VALIDATION_ERROR
400
Data dikirimkan dengan format yang salah
BRAND_NOT_SUPPORTED_ERROR
400
Merek kartu tidak didukung. Sarankan pengguna untuk menggunakan Visa/Mastercard.
CREDIT_CARD_DATA_ERROR
400
Data yang salah dikirimkan ke prosesor kartu kredit
AUTHENTICATION_REQUIRED_ERROR
400
Anda tidak menyertakan authentication_id yang valid dalam request dan akun anda tidak dikonfigurasi untuk otentikasi pilihan. Sertakan authentication_id yang valid atau hubungi kami bila Anda ingin mematikan setingan wajib otentikasi.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
VERIFICATION_TIMEOUT_ERROR
408
Jaringan kartu kredit mengalami timed out ketika berusaha melakukan tokenisasi.
TEMPORARY_SERVICE_ERROR
503
Terjadi masalah ketika melakukan tokenisasi pada jaringan kartu kredit.
CONNECTION_ERROR Terjadi kesalahan pada saat melakukan hubungan dengan server kami. Silahkan mencoba lagi dan bila kegagalan terus terjadi, silahkan mencoba menggunakan perangkat atau jaringan lain
TOKENIZATION_ERROR Kesalahan umum. Coba lagi atau coba dengan menggunakan kartu yang lain.

Pembuatan Otentikasi

Javascript Function: createAuthentication

Xendit.card.createAuthentication(authenticationData, function (err, data) {
    if (err) {
        //Definisikan penanganan kesalahan
    }

    if (data.status === 'VERIFIED') {
        // Penanganan keberhasilan
    } else if (data.status === 'IN_REVIEW') {
        // Penanganan otentikasi (3DS)
    } else if (data.status === 'FAILED') {
        // Penanganan kegagalan
    }
});

Untuk melakukan otentikasi pada token, silahkan menggunakan fungsi Xendit.card.createAuthentication di Xendit.js. Fungsi ini menerima objek authenticationData dan mengembalikan authentication_id yang dapat digunakan untuk melakukan otentikasi. Silahkan melihat Pembuatan Charge untuk detil lebih lanjut mengenai Charge.

Lihat Sample Otentikasi untuk contoh implementasi.

Contoh Objek authenticationData

{        
    "amount": "10000",        
    "token_id": "58e2096018b815f555c8a524"
}

Contoh Respon Otentikasi

{
    "id": "58e2097218b815f555c8a526",
    "status": "VERIFIED"
}

Permintaan Otentikasi (Money-in write permission)

Parameter Deskripsi
amount
required
string Jumlah biaya yang ingin diotentikasi.
token_id
required
string Token untuk otentikasi.
xenditResponseHandler
required
function Penanganan respon, dipanggil setelah percobaan otentikasi untuk menangani kesalahan dan respon.

Respon Otentikasi

Parameter Deskripsi
id
required
string ID Otentikasi yang akan digunakan dengan Token ID untuk melakukan Charge
status
required
string Status Otentikasi. Lihat Status-status Tokenisasi
payer_authentication_url
optional
string Bila status respon adalah IN_REVIEW, parameter ini akan mengandung tautan yang menuju ke halaman otentikasi yang digunakan pengguna untuk melakukan proses otentikasi menggunakan 3DS
failure_reason
optional
string Bila status respon adalah FAILED, lihat Alasan Kegagalan pada Proses Tokenisasi untuk melihat deskripsi kegagalan.

Pembuatan Charge

Definisi: Pembuatan Charge

POST https://api.xendit.co/credit_card_charges

Contoh Permintaan Pembuatan Charge

curl -X POST \
  https://api.xendit.co/credit_card_charges \
  -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
  -H 'content-type: application/json' \
  -d '{
      "token_id" : "598d5d0e51e0870d44c61534",
      "external_id": "postman-charge-1502436817",
      "amount": 15000,
      "authentication_id":"598d5d0f51e0870d44c61535",
      "card_cvn":"123"
    }'
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'sample-external-id-1475459775872';
  $token_id = 'sample-token-id-1475459775872';
  $amount = 17000;
  $authentication_id = '58e2097218b815f555c8a526';

  $response = $xenditPHPClient->captureCreditCardPayment($external_id, $token_id, $amount);
  print_r($response);
?>

Contoh Respon Pembuatan Charge

{
    "created": "2017-08-11T07:33:14.442Z",
    "status": "CAPTURED",
    "business_id": "5850e55d8d9791bd40096364",
    "authorized_amount": 15000,
    "external_id": "postman-charge-1502436793",
    "merchant_id": "xendit",
    "merchant_reference_code": "598d5d0d51e0870d44c61533",
    "card_type": "CREDIT",
    "masked_card_number": "400000XXXXXX0002",
    "charge_type": "SINGLE_USE_TOKEN",
    "card_brand": "VISA",
    "bank_reconciliation_id": "5132390610356134503009",
    "eci": "05",
    "capture_amount": 15000,
    "id": "598d5dba51e0870d44c61539"
}

Contoh Respon Otentikasi

{
    "created": "2017-08-11T07:43:39.563Z",
    "status": "AUTHORIZED",
    "business_id": "5850e55d8d9791bd40096364",
    "authorized_amount": 15000,
    "external_id": "postman-authorize-1502437417",
    "merchant_id": "xendit",
    "merchant_reference_code": "598d5ffb51e0870d44c6153a",
    "card_type": "CREDIT",
    "masked_card_number": "400000XXXXXX0002",
    "charge_type": "SINGLE_USE_TOKEN",
    "card_brand": "VISA",
    "bank_reconciliation_id": "5132390610356134503009",
    "eci": "05",
    "id": "598d602b51e0870d44c6153d"
}

Ketika Anda memiliki token, token tersebut dapat digunakan untuk melakukan Charge pada kartu

Permintaan Pembuatan Charge (Money-in write permission)

Parameter Deskripsi
token_id
required
string ID Token yang digunakan untuk melakukan Charge
external_id
required
string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
amount
required
number Jumlah biaya yang akan di-charge
authentication_id
optional
string ID Otentikasi untuk mengotentikasi charge. Tidak wajib diisi hanya bila sudah diotentikasi dengan Token Sekali Pakai, atau setingan tidak wajib otentikasi sudah diaktifkan pada akun Anda
card_cvn
optional
string 3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Wajib diisi untuk kartu kredit yang diterbitkan dari Eropa.
capture
optional
default: true
boolean Kondisi dimana Anda akan menentukan apakah akan melakukan Capture langsung atau tidak langsung. Ubah nilai menjadi false bila Anda menginginkan otentikasi saja (penahanan uang), untuk kemudian di-capture dengan capture endpoint.
Catatan: Otentikasi akan kedaluwarsa dalam 7 hari.

Respon Pembuatan Charge

Parameter Deskripsi
created
required
string Cap waktu ISO yang mencatat kapan charge tersebut dibuat Charge.
status
required
string Charge status. Lihat Status-status pada Charge.
business_id
required
string ID akun bisnis Xendit Anda.
authorized_amount
required
number Nominal uang yang diotorisasi untuk Charge ini.
external_id
required
string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
merchant_id
required
string Merchant ID yang digunakan untuk melakukan pemrosesan kartu kredit dengan bank.
merchant_reference_code
required
string Kode merchant yang digunakan untuk melakukan rekonsiliasi transaksi dengan bank.
card_type
required
string Tipe kartu (KREDIT atau DEBIT)
masked_card_number
required
string 6 angka pertama dan 4 angka terakhir pada kartu kredit.
card_brand
required
string Merek kartu (VISA, MASTERCARD,...)
bank_reconciliation_id
required
string ID transaksi yang dapat digunakan untuk rekonsiliasi dengan bank.
eci
optional
string Status dari otentikasi 3DS. Lihat kode ECI.
capture_amount
optional
number Nominal uang yang telah berhasil di-capture untuk charge ini. Dapat mencapai authorized_amount.
id
required
string ID dari charge.
failure_reason
optional
string Bila status charge adalah FAILED, lihat Status-status pada Charge untuk keterangan lebih lanjut.

Status status pada Charge

Status Deskripsi
CAPTURED Charge telah berhasil di-captured dan dana tersebut akan dikirimkan ke rekening sesuai dengan jadwal settlement yang ditentukan.
AUTHORIZED Charge telah berhasil diotorisasi.
FAILED Charge gagal. Lihat Alasan Kegagalan Charge

Alasan Kegagalan Pembuatan Charge

Alasan Gagal Deskripsi
EXPIRED_CARD Kartu yang akan di-capture telah kedaluwarsa. Kami sarankan untuk menggunakan kartu yang lain.
CARD_DECLINED Kartu yang akan di-capture ditolak oleh bank. Kami sarankan untuk menggunakan kartu yang lain.
INSUFFICIENT_BALANCE Kartu yang akan di-capture tidak memiliki saldo yang cukup untuk melengkapi proses capture.
STOLEN_CARD Kartu yang akan di-capture telah ditandai sebagai kartu yang dicuri. Kami sarankan untuk menggunakan kartu yang lain.
INACTIVE_CARD Kartu yang akan di-capture tidak aktif. Kami sarankan untuk menggunakan kartu yang lain.
INVALID_CVN Nomor CVN yang dimasukkan salah.
PROCESSOR_ERROR Proses charge gagal karena adanya isu integrasi antara prosesor kartu dengan bank. Silahkan hubungi kami bila Anda menemui isu ini.
BIN_BLOCK BIN (Bank Identification Number) kartu tersebut telah diblokir sesuai dengan permintaan dari Bank.

Kesalahan pada Pembuatan Charge

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
INVALID_JSON_FORMAT
400
Isi dari request bukan format JSON yang benar.
TOKEN_ALREADY_USED_ERROR
400
ID Token Sekali Pakai sudah pernah digunakan ketika melakukan Charge.
AUTHENTICATION_ALREADY_USED_ERROR
400
ID otentikasi sudah pernah digunakan ketika melakukan charge.
INVALID_TOKEN_ID_ERROR
400
Format ID token tidak valid.
INVALID_CVN_LENGTH_ERROR
400
Jumlah angka CVN tidak valid. Untuk kartu berlogo AMEX, jumlah angka CVN harus 4 angka. Selain AMEX, jumlah angka CVN harus 3 angka.
AUTHENTICATION_ID_MISSING_ERROR
400
ID Otentikasi wajib diisi.
AMOUNT_GREATER_THAN_AUTHENTICATED_ERROR
400
Jumlah nominal angka yang di-charge melampaui jumlah yang diotentikasi
INVALID_AUTHENTICATION_ID_ERROR
400
Format ID otentikasi tidak valid.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
TOKEN_NOT_FOUND_ERROR
404
ID token tersebut tidak ditemukan dalam sistem.
AUTHENTICATION_NOT_FOUND_ERROR
404
Token yang telah diotentikasi dengan otentikasi ID tersebut tidak ditemukan.

Tipe Charge

Status Deskripsi
SINGLE_USE_TOKEN Charge yang dibuat dengan Token Sekali Pakai
MULTIPLE_USE_TOKEN Charge yang dibuat dengan Token Pemakaian Berulang
RECURRING Melakukan charge berulang dengan Langganan

Kode ECI

ECI Deskripsi
1 Otentikasi tidak lengkap (MasterCard)
2 Otentikasi Berhasil (MasterCard)
5 Otentikasi Berhasil (Visa, AMEX, JCB, Diners Club)
6 Percobaan Otentikasi (Visa, AMEX, JCB, Diners Club)
7 Tidak bisa diotentikasi

Capture Charge

Definisi: Capture Charge

POST https://api.xendit.co/credit_card_charges/:credit_card_charge_id/capture

Contoh Permintaan Capture Charge

curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e/capture \
    -X POST \
    -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
    -d amount=15000

Contoh Respon Capture Charge

{
  "created": "2017-08-08T04:49:08.815Z",
  "status": "CAPTURED",
  "business_id": "5848fdf860053555135587e7",
  "authorized_amount": 10000,
  "external_id": "test-pre-auth",
  "merchant_id": "xendit",
  "merchant_reference_code": "598942aabb91a4ec309e9a35",
  "card_type": "CREDIT",
  "masked_card_number": "400000XXXXXX0002",
  "charge_type": "SINGLE_USE_TOKEN",
  "card_brand": "VISA",
  "bank_reconciliation_id": "5132390610356134503009",
  "capture_amount": 9900,
  "id": "598942c4bb91a4ec309e9a37"
}

Capture pada charge hanya perlu dilakukan apabila Anda melakukan pra-otentikasi dengan menentukan parameter capture dengan nilai false pada request Pembuatan Charge. Anda dapat melakukan capture dengan nominal yang berbeda dengan nominal yang terotorisasi selama nominal tersebut tidak melampaui nominal yang terotorisasi. Respon dari endpoint sama dengan respon charge

Permintaan Capture Charge (Money-in write permission)

Parameter Deskripsi
credit_card_charge_id
required
string ID charge.
amount
required
string Nominal yang akan di-captured. Tidak dapat melampaui nominal yang terotorisasi.

Kesalahan Capture Charge

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
INVALID_JSON_FORMAT
400
Isi dari request bukan format JSON yang benar.
AMOUNT_GREATER_THAN_AUTHORIZED_ERROR
400
Nominal capture melebihi nominal yang terotorisasi.
INVALID_CHARGE_STATUS_ERROR
400
Status charge tidak terotorisasi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
404
credit_card_charge_id tidak ditemukan

Mendapatkan Charge

Definisi: Mendapatkan Charge

GET https://api.xendit.co/credit_card_charges/:credit_card_charge_id

Contoh Permintaan Mendapatkan Charge

curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e \
    -X GET \
    -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==:

Contoh Respon Charge Response

{
  "created": "2017-08-08T04:49:08.815Z",
  "status": "CAPTURED",
  "business_id": "5848fdf860053555135587e7",
  "authorized_amount": 10000,
  "external_id": "test-pre-auth",
  "merchant_id": "xendit",
  "merchant_reference_code": "598942aabb91a4ec309e9a35",
  "card_type": "CREDIT",
  "masked_card_number": "400000XXXXXX0002",
  "charge_type": "SINGLE_USE_TOKEN",
  "card_brand": "VISA",
  "bank_reconciliation_id": "5132390610356134503009",
  "capture_amount": 9900,
  "id": "598942c4bb91a4ec309e9a37"
}

Ini adalah endpoint untuk mengambil suatu objek charge. Anda perlu menentukan nilai dari charge_id. Respon dari endpoint sama dengan respon pembuatan charge

Permintaan Mendapatkan Charge (Money-in read permission)

Parameter Deskripsi
credit_card_charge_id
required
string ID charge yang sudah diotorisasi

Kesalahan Dalam Mendapatkan Charge

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
404
credit_card_charge_id tidak ditemukan

Pembuatan Refund

Definisi: Pembuatan Refund

POST https://api.xendit.co/credit_card_charges/:credit_card_charge_id/refunds

Contoh Permintaan Pembuatan Refund

curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e/refunds \
    -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
    -H "X-IDEMPOTENCY-KEY: unique-id-12345" \
    -d amount=15000
    -d external_id=unique-external-id
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $credit_card_charge_id = '5877255293ff67900c6aa64e';
  $amount = 15000;
  $external_id = 'unique-external-id';

  $response = $xenditPHPClient->issueCreditCardRefund($credit_card_charge_id, $amount, $external_id);
  print_r($response);
?>

Contoh Respon Pembuatan Refund

{
  "updated": "2017-04-21T04:05:09.755Z",
  "created": "2017-04-21T04:05:04.936Z",
  "credit_card_charge_id": "58f89041780d51ed097896c5",
  "user_id": "57c5aa7a36e3b6a709b6e148",
  "amount": 15000,
  "external_id": "unique-external-id",
  "status": "PENDING",
  "fee_refund_amount": 150,
  "id": "58f984f09d1b74bc08506c34"
}

API refund menerima dua parameter, amount dan external_id. ID charge yang dikembalikan setelah charge yang berhasil harus digunakan pada request URL per definisi. Beberapa refund dapat dibuat selama total nominal uang yang akan refund tidak melebihi dari total nominal charge. Untuk setiap request refund , Anda akan menerima refund dengan status PENDING

Catatan: Idempotensi dapat dicapai dengan mengirimkan header dengan kunci X-IDEMPOTENCY-KEY.

Permintaan Pembuatan Refund (Money-in write permission)

Header Deskripsi
X-IDEMPOTENCY-KEY
optional
string Sebuah kunci unik yang digunakan untuk menghindari duplikasi pemrosesan suatu request. Wajib unik untuk lingkungan development maupun production
Parameter Deskripsi
credit_card_charge_id
required
string ID Charge yang digunakan untuk melakukan refund. (Anda dapat melihat detil kartu kredit tersebut di dasbor)
amount
required
string Nominal uang yang akan di-refund
external_id
required
string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.

Respon Pembuatan Refund

Parameter Deskripsi
updated
required
string Cap waktu ISO yang mencatat kapan terakhir refund tersebut mendapatkan pengkinian.
created
required
string Cap waktu ISO yang mencatat kapan refund tersebut dibuat.
credit_card_charge_id
required
string ID charge yang digunakan untuk mengidentifikasi charge yang akan digunakan.
user_id
required
string ID bisnis akun Xendit Anda.
amount
required
number Nominal uang yang akan di-refund.
external_id
required
string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
status
required
string Status dari refund tersebut. Lihat Status-status Refund
failure_reason
required
string Bila status tersebut adalah FAILED, lihat Alasan Refund Gagal.
fee_refund_amount
required
number Jumlah biaya yang di-refund (proposional dengan jumlah uang refund)
id
required
string ID referensi refund yang unik.

Status status Refund

Status Deskripsi
SUCCEEDED Refund berhasil.
FAILED Refund gagal.

Kode Kesalahan Dalam Pembuatan Refund

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
INVALID_JSON_FORMAT
400
Isi dari request bukan format JSON yang benar.
REFUND_AMOUNT_EXCEEDED_ERROR
400
Nominal refund melebihi total charge
DUPLICATE_REFUND_ERROR
400
external_id sudah pernah digunakan
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
404
credit_card_charge_id tidak ditemukan

Alasan Refund Gagal

Alasan Gagal Deskripsi
INSUFFICIENT_BALANCE Saldo tidak mencukupi untuk melakukan refund
REFUND_FAILED Request untuk refund ditolak oleh prosesor

eWallet

Pembuatan Pembayaran eWallet

Permintaan Pembuatan Pembayaran eWallet (Money-in write permission)

Endpoint: Pembuatan Pembayaran Ewallet

POST https://api.xendit.co/ewallets

Contoh: Request Pembuatan Pembayaran Ewallet

OVO:

curl https://api.xendit.co/ewallets -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d external_id='hello-ewallet' \
   -d amount=1000 \
   -d phone='08123123123'\
   -d ewallet_type='OVO'
  <?php
      $url = 'https://api.xendit.co/ewallets';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';
      $data = [
          'external_id' => 'hello-ewallet',
          'amount' => 1000,
          'phone' => '08123123123',
          'ewallet_type' => 'OVO'
      ];

      $curl = curl_init();

      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

      $result = curl_exec($curl);
      echo $result;

DANA:

curl https://api.xendit.co/ewallets -X POST \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
  -d external_id = 'dana-ewallet' \\
  -d amount = 1001 \\
  -d expiration_date = '2020-02-20T00:00:00.000Z' \\
  -d callback_url = 'https://my-shop.com/callbacks' \\
  -d redirect_url = 'https://my-shop.com/home' \\
  -d ewallet_type = 'DANA'
  <?php
      $url = 'https://api.xendit.co/ewallets';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';
      $data = [
          'external_id' => 'dana-ewallet',
          'amount' => 1001,
          'expiration_date' => '2020-02-20T00:00:00.000Z',
          'callback_url' => 'https://my-shop.com/callbacks',
          'redirect_url' => 'https://my-shop.com/home',
          'ewallet_type' => 'DANA'
      ];

      $curl = curl_init();

      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

      $result = curl_exec($curl);
      echo $result;

LINKAJA:

curl https://api.xendit.co/ewallets -X POST \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
  --header 'content-type: application/json' \
  --data '{
    "external_id": "linkaja-ewallet",
    "phone": "081245671234",
    "amount": 300000,
    "items": [
        {
            "id": "123123",
            "name": "Phone Case",
            "price": 100000,
            "quantity": 1
        },
    {
            "id": "345678",
            "name": "Powerbank",
            "price": 200000,
            "quantity": 1
        }
    ],
    "callback_url": "http://yourwebsite.com/callback",
    "redirect_url": "https://yourwebsite.com/order/123",
    "ewallet_type": "LINKAJA",
}'
<?php
  $url = 'https://api.xendit.co/ewallets';
  $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
  $headers = [];
  $headers[] = 'Content-Type: application/json';

  $item_1 = new stdClass();
  $item_1->id = "123123";
  $item_1->name = "Phone Case";
  $item_1->price = 100000;
  $item_1->quantity = 1;

  $item_2 = new stdClass();
  $item_2->id = "345678";
  $item_2->name = "Powerbank";
  $item_2->price = 200000;
  $item_2->quantity = 1;

  $data = [
    'external_id' => 'linkaja-ewallet',
    'amount' => 300000,
    'items' => [ $item_1, $item_2 ]
    'callback_url' => 'https://yourwebsite.com/callbacks',
    'redirect_url' => 'https://yourwebsite.com/order/123',
    'ewallet_type' => 'LINKAJA',
  ];

  $curl = curl_init();

  $payload = json_encode($data);
  curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_POST, true);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

  $result = curl_exec($curl);
  echo $result;

Contoh: Respon Sukses dari Pembuatan Ewallet

  <?php
      $url = 'https://api.xendit.co/ewallets';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';
      $data = [
          'external_id' => 'dana-ewallet',
          'amount' => 1001,
          'expiration_date' => '2020-02-20T00:00:00.000Z',
          'callback_url' => 'https://my-shop.com/callbacks',
          'redirect_url' => 'https://my-shop.com/home',
          'ewallet_type' => 'DANA'
      ];

      $curl = curl_init();

      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

      $result = curl_exec($curl);
      echo $result;

Contoh: Respon Sukses dari Pembuatan Ewallet

OVO:

{
  transaction_date: "2019-04-07T01:35:46.658Z",
  amount: 1000,
  external_id: "ovo-ewallet",
  ewallet_type: "OVO",
  business_id: "12121212"
}
{
  transaction_date: "2019-04-07T01:35:46.658Z",
  amount: 1000,
  external_id: "ovo-ewallet",
  ewallet_type: "OVO",
  business_id: "12121212"
}

DANA:

{
  external_id: "dana-ewallet",
  checkout_url: "https://dana.id/m/portal/cashier/checkout?id=5d34079d51a9ed12c78a78d3",
  amount: 1000,
  ewallet_type: "DANA"
}
{
  external_id: "dana-ewallet",
  checkout_url: "https://dana.id/m/portal/cashier/checkout?id=5d34079d51a9ed12c78a78d3",
  amount: 1000,
  ewallet_type: "DANA"
}

LINKAJA:

{
  "checkout_url": "https://ewallet-linkaja-dev.xendit.co/checkouts/b0c464ab-dcdc-4426-9255-759a9450c9d2",
  "transaction_date": "2019-10-25T08:42:54.308Z",
  "amount": 300000,
  "external_id": "linkaja-ewallet",
  "ewallet_type": "LINKAJA"
}
{
  "checkout_url": "https://ewallet-linkaja-dev.xendit.co/checkouts/b0c464ab-dcdc-4426-9255-759a9450c9d2",
  "transaction_date": "2019-10-25T08:42:54.308Z",
  "amount": 300000,
  "external_id": "linkaja-ewallet",
  "ewallet_type": "LINKAJA"
}

Contoh: Respon Error dari Request Pembuatan Pembayaran eWallet

OVO:

{
  error_code: 'USER_DID_NOT_AUTHORIZE_THE_PAYMENT',
  message: 'Payment was not authorized',
}
{
  error_code: 'USER_DID_NOT_AUTHORIZE_THE_PAYMENT',
  message: 'Payment was not authorized',
}

DANA:

{
  error_code: 'DUPLICATE_ERROR',
  message: 'Transaction with this external_id is already exist',
}
{
  error_code: 'DUPLICATE_ERROR',
  message: 'Transaction with this external_id is already exist',
}

>LINKAJA:

```bash
{
  error_code: 'DUPLICATE_ERROR',
  message: 'Transaction with this external_id is already exist',
}
{
  error_code: 'DUPLICATE_ERROR',
  message: 'Transaction with this external_id is already exist',
}

OVO

Parameter Deskripsi
external_id
required
string ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
amount
required
number Nominal yang pelanggan Anda harus bayarkan.
Catatan: Nominal minimum adalah Rp 1 dan maksimum adalah Rp 10.000.000.
phone
required
string Nomor telepon dari pelanggan (contoh: 08123123123)
Catatan: Pelanggan harus memiliki akun eWallet terdaftar yang aktif dengan nomor telepon Indonesia sebelum melakukan request pembayaran.
ewallet_type
required
string Tipe dari eWallet yang akan digunakan. Harus dalam huruf kapital.
Tipe eWallet yang tersedia: OVO, DANA

DANA

Parameter Deskripsi
external_id
required
string ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
amount
required
number Nominal yang pelanggan Anda harus bayarkan.
Catatan: Nominal minimum adalah Rp 1 dan maksimum adalah Rp 10.000.000.
expiration_date
optional
string Pelanggan anda tidak dapat menyelesaikan pembayaran melewati tanggal kedaluwarsa ini
Catatan: Jika tidak diisi, waktu standar yang ditetapkan adalah 24 jam.
callback_url
required
string URL untuk menerima callback setelah pembayaran dilakukan oleh pelanggan anda
redirect_url
required
string URL untuk mengarahkan pelanggan anda setelah selesai melakukan pembayaran
ewallet_type
required
string Tipe dari eWallet yang akan digunakan. Harus dalam huruf kapital.
Tipe eWallet yang tersedia: OVO, DANA

LINKAJA

Parameter Deskripsi
external_id
required
string ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
phone
required
string Nomor telepon dari pelanggan (contoh: 08123123123)
Catatan: Pelanggan harus memiliki akun eWallet terdaftar yang aktif dengan nomor telepon Indonesia sebelum melakukan request pembayaran.
amount
required
number Nominal yang pelanggan Anda harus bayarkan.
Catatan: Nominal minimum adalah Rp 100 dan maksimum adalah Rp 10.000.000
items
required
array of item object Daftar barang / produk.
item object
required
item object Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
callback_url
required
string Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran.
redirect_url
required
string Setelah pembeli melakukan pembayaran di halaman checkout mitra eWallet, mereka akan diarahkan ke redirect_url. Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda.
ewallet_type
required
string Tipe dari eWallet yang akan digunakan. Harus dalam huruf capital.
Tipe eWallet yang tersedia: OVO, DANA, dan LINKAJA

Error

OVO

Kode Error Deskripsi
API_VALIDATION_ERROR
422
Ada input yang salah pada salah satu request field wajib.
USER_DID_NOT_AUTHORIZE_THE_PAYMENT
400
Pengguna tidak mengotorisasi request pembayaran dalam batas waktu yang diberikan.
USER_DECLINED_THE_TRANSACTION
400
Pengguna menolak permintaan pembayaran.
PHONE_NUMBER_NOT_REGISTERED
400
Nomor telepon yang digunakan Pengguna untuk melakukan pembayaran tidak terdaftar.
EXTERNAL_ERROR
400
Terdapat masalah di provider penyedia eWallet. Mohon hubungi customer support kami untuk bantuan lebih lanjut.
SENDING_TRANSACTION_ERROR
400
Kami tidak bisa mengirim transaksi. Mohon hubungi customer support kami untuk bantuan lebih lanjut.
EWALLET_APP_UNREACHABLE
400
Provider/Server eWallet tidak bisa menjangkau applikasi/handphone Pengguna. Penyebab yang sering terjadi adalah karena applikasi eWallet sudah di uninstall di handphone pengguna.
DUPLICATE_PAYMENT
400
Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya.
EWALLET_TYPE_NOT_SUPPORTED
422
ewallet_type is yang anda minta belum tersedia saat ini
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

DANA

Error Code Description
API_VALIDATION_ERROR
422
Ada input yang salah pada salah satu request field wajib.
DUPLICATE_PAYMENT
400
Pembayaran dengan external_id yang sama telah dibuat sebelumnya.
EWALLET_TYPE_NOT_SUPPORTED
422
ewallet_type is yang anda minta belum tersedia saat ini
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

LINKAJA

Error Code Description
API_VALIDATION_ERROR
422
Ada input yang salah pada salah satu request field wajib.
GENERATE_CHECKOUT_TOKEN_ERROR
422
Sebuah error terjadi dalam proses pembuatan checkout_url.
API_VALIDATION_ERROR
400
Satu atau lebih field tidak ada atau Anda tidak mengisi field tersebut dengan tipe atau nilai yang telah ditentukan.
DUPLICATE_PAYMENT
400
Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya.
EWALLET_TYPE_NOT_SUPPORTED
422
ewallet_type is yang anda minta belum tersedia saat ini
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

Cek Status Pembayaran (Money-in read permission)

Endpoint ini digunakan untuk mengecek status dari sebuah pembayaran. Anda perlu memasukkan external_id dan ewallet_type.

Endpoint: Cek Status Pembayaran Ewallet

OVO & DANA:

GET https://api.xendit.co/ewallets/external_id={external_id}&ewallet_type={ewallet_type}

Contoh: Request Cek Status Pembayaran Ewallet

OVO

curl https://api.xendit.co/ewallets\?external_id\='ovo-ewallet'\&ewallet_type\='OVO' \
   -X GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
  <?php
      $url = 'https://api.xendit.co/ewallets';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';

      $externalId = 'ovo-ewallet';
      $ewalletType = 'OVO';

      $urlWithParams = $url . '?external_id=' . $externalId . '&ewallet_type=' . $ewalletType;

      $curl = curl_init();

      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $urlWithParams);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

      $result = curl_exec($curl);
      echo $result;

DANA

curl https://api.xendit.co/ewallets\?external_id\='dana-ewallet'\&ewallet_type\='DANA' \
   -X GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
  <?php
      $url = 'https://api.xendit.co/ewallets';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';

      $externalId = 'dana-ewallet';
      $ewalletType = 'OVO';

      $urlWithParams = $url . '?external_id=' . $externalId . '&ewallet_type=' . $ewalletType;

      $curl = curl_init();

      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $urlWithParams);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

      $result = curl_exec($curl);
      echo $result;

Contoh: Respon Sukses dari Cek Status Pembayaran

OVO

{
  amount: 1000,
  external_id: "ovo-wallet",
  transaction_date: "2019-04-07T01:35:46.658Z",
  business_id: "12121212",
  ewallet_type: "OVO",
  status: "COMPLETED",
}
{
  amount: 1000,
  external_id: "ovo-wallet",
  transaction_date: "2019-04-07T01:35:46.658Z",
  business_id: "12121212",
  ewallet_type: "OVO",
  status: "COMPLETED",
}

DANA

{
  amount: 1001,
  external_id: "dana-wallet",
  expiration_date: "2019-04-07T01:35:46.658Z",
  business_id: "12121212",
  status: "PAID",
}
{
  amount: 1001,
  external_id: "dana-wallet",
  expiration_date: "2019-04-07T01:35:46.658Z",
  business_id: "12121212",
  status: "PAID",
}

Contoh: Respon Gagal dari Cek Status Pembayaran Untuk OVO dan DANA:

{
  error_code: 'PAYMENT_NOT_FOUND_ERROR',
  message: 'Payment not found',
}
{
  error_code: 'PAYMENT_NOT_FOUND_ERROR',
  message: 'Payment not found',
}

Permintaan Pengecekan Status Pembayaran (Money-in read permission)

OVO & DANA:

Parameter Deskripsi
external_id
required
string ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
ewallet_type
required
string Tipe dari eWallet yang akan digunakan. Harus dalam huruf kapital.
Tipe eWallet yang tersedia: OVO, DANA

Errors

Error Code Description
PAYMENT_NOT_FOUND_ERROR
404
Pembayaran tidak ditemukan
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

Callback Status Pembayaran

Anda butuh menyediakan endpoint pada sistem anda untuk menerima callback notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika pelanggan anda menyelesaikan pembayaran DANA.

Callback notifikasi pembayaran akan dikirim melalui request POST ke "callback_url" yang anda isi di request pembuatan pembayaran. Catatan: Mohon berikan respon kembali dengan status 200 agar kami tahu bahwa notifkasi telah diterima.

Contoh Callback Status Pembayaran

DANA

{
  external_id: "dana-ewallet",
  amount: 1001,
  business_id: "12121212",
  payment_status: "PAID",
  transaction_date: "2019-04-07T01:35:46.658Z",
  callback_authentication_token: "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
}
{
  external_id: "dana-ewallet",
  amount: 1001,
  business_id: "12121212",
  payment_status: "PAID",
  transaction_date: "2019-04-07T01:35:46.658Z",
  callback_authentication_token: "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
}

LINKAJA

{
  "external_id": "linkaja-ewallet",
  "amount": 300000,
  "items": [
    {
      "id": "123123",
      "name": "Phone Case",
      "price": 100000,
      "quantity": 1
    },
    {
      "id": "345678",
      "name": "Powerbank",
      "price": 200000,
      "quantity": 1
    }
  ],
  "status": "SUCCESS_COMPLETED",
  "ewallet_type": "LINKAJA",
  "callback_authentication_token": "7dc13a4f52e83b89b14aa241813cf1c21a2ff7d49f9ddced1c9f4f80dc812bb"
}
{
  "external_id": "linkaja-ewallet",
  "amount": 300000,
  "items": [
    {
      "id": "123123",
      "name": "Phone Case",
      "price": 100000,
      "quantity": 1
    },
    {
      "id": "345678",
      "name": "Powerbank",
      "price": 200000,
      "quantity": 1
    }
  ],
  "status": "SUCCESS_COMPLETED",
  "ewallet_type": "LINKAJA",
  "callback_authentication_token": "7dc13a4f52e83b89b14aa241813cf1c21a2ff7d49f9ddced1c9f4f80dc812bb"
}

DANA

Parameter Deskripsi
external_id string Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request.
amount string Nominal transaksi.
business_id string business_id Anda yang terdaftar pada sistem kami.
payment_status string Status pembayaran.
Catatan: Status yang ada adalah EXPIRED dan PAID.
transaction_date string Waktu ketika pembayaran dibuat.
callback_authentication_token string Verifikasi API Key callback Anda yang dapat ditemukan pada dasbor Xendit Anda. Anda butuh melakukan verifikasi nilai ini apakah memiliki nilai yang sama.

LINKAJA

Parameter Deskripsi
external_id string Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request.
amount number Nominal pembayaran yang telah Anda isi ketika melakukan Generate Checkout URL request.
items array of item Daftar dari barang / produk yang ada isi ketika mengirimkan Generate Checkout URL request.
item object
item detail Informasi dari barang / produk, akan mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
status string Status dari pembayaran.
Catatan: Status yang ada adalah FAILED dan SUCCESS_COMPLETED
ewallet_type string Tipe eWallet yang Anda pilih ketika membuat request pembayaran.
Supported ewallet types: OVO, DANA, dan LINKAJA
callback_authentication_token string Berisi Callback Verification API Key yang Anda bisa temukan di Dashboard Xendit. Anda perlu verifikasi kembali apakah ini memiliki isi yang sama

Cardless Credit

Pembuatan Pembayaran / Generate Checkout URL

Generate Checkout URL

Contoh: Generate Checkout URL

curl https://api.xendit.co/cardless-credit -X POST \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
  --header 'content-type: application/json' \
  --data '{
    "cardless_credit_type": "KREDIVO",
    "external_id": "test-cardless-credit-01",
    "amount": 800000,
    "payment_type": "3_months",
    "items": [
      {
        "id": "123123",
        "name": "Phone Case",
        "price": 200000,
        "type": "Smartphone",
        "url": "http://example.com/phone/phone_case",
        "quantity": 2
      },
      {
        "id": "234567",
        "name": "Bluetooth Headset",
        "price": 400000,
        "type": "Audio",
        "url": "http://example.com/phone/bluetooth_headset",
        "quantity": 1
      }
    ],
    "customer_details": {
      "first_name": "customer first name",
      "last_name": "customer last name",
      "email": "customer@yourwebsite.com",
      "phone": "081513114262"
    },
    "shipping_address": {
      "first_name": "first name",
      "last_name": "last name",
      "address": "Jalan Teknologi No. 12",
      "city": "Jakarta",
      "postal_code": "12345",
      "phone": "081513114262",
      "country_code": "IDN"
    },
    "redirect_url": "https://example.com",
    "callback_url": "http://example.com/callback-cardless-credit"
  }'
<?php
  $url = 'https://api.xendit.co/cardless-credit';
  $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
  $headers = [];
  $headers[] = 'Content-Type: application/json';

  $item_1 = new stdClass();
  $item_1->id = "123123";
  $item_1->name = "Phone Case";
  $item_1->price = 200000;
  $item_1->type = "Smartphone";
  $item_1->url = "http://example.com/phone/phone_case";
  $item_1->quantity = 2;

  $item_2 = new stdClass();
  $item_2->id = "234567";
  $item_2->name = "Bluetooth Headset";
  $item_2->price = 400000;
  $item_2->type = "Audio";
  $item_2->url = "http://example.com/phone/bluetooth_headset";
  $item_2->quantity = 1;

  $customer_details = new stdClass();
  $customer_details->first_name = "customer first name";
  $customer_details->last_name = "customer last name";
  $customer_details->email = "customer@email.com";
  $customer_details->phone = "081513114262";

  $shipping_address = new stdClass();
  $shipping_address->first_name = "first name";
  $shipping_address->last_name = "last name";
  $shipping_address->address = "Jalan Teknologi No. 12";
  $shipping_address->city = "Jakarta";
  $shipping_address->postal_code = "12345";
  $shipping_address->phone = "081513114262";
  $shipping_address->country_code = "IDN";

  $data = [
      "cardless_credit_type" => "KREDIVO",
      "external_id" => "test-cardless-credit-01",
      "amount" => 800000,
      "payment_type" => "3_months",
      "items" => [ $item_1, $item_2 ],
      "customer_details" => $customer_details,
      "shipping_address" => $shipping_address,
      "redirect_url" => "https://example.com",
      "callback_url" => "http://example.com/callback-cardless-credit"
  ];

  $curl = curl_init();

  $payload = json_encode($data);
  curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_POST, true);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

  $result = curl_exec($curl);
  echo $result;

Contoh: Respon Sukses dari Generate Checkout URL

{
  "redirect_url": "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
  "transaction_id": "66403e84-c8da-4af4-8d30-d17e95522f43",
  "order_id": "123456-test-cardless-credit-01",
  "external_id": "test-cardless-credit-01",
  "cardless_credit_type": "KREDIVO"
}
{
  "redirect_url": "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
  "transaction_id": "66403e84-c8da-4af4-8d30-d17e95522f43",
  "order_id": "5d353767d2c80e33ddc2d252-test-cardless-credit-01",
  "external_id": "test-cardless-credit-01",
  "cardless_credit_type": "KREDIVO"
}

Contoh: Respon Error dari Generate Checkout URL

{
  error_code: 'API_VALIDATION_ERROR',
  message: '[fieldName] is required',
}
{
  error_code: 'DUPLICATE_PAYMENT_ERROR',
  message: 'Checkout URL with the same external_id has been created before.',
}
{
  error_code: 'API_VALIDATION_ERROR',
  message: '[fieldName] is required',
}
{
  error_code: 'DUPLICATE_PAYMENT_ERROR',
  message: 'Checkout URL with the same external_id has been created before.',
}
Parameter Deskripsi
cardless_credit_type
required
string Tipe dari Cardless Credit yang akan digunakan. Harus dalam huruf kapital.
Tipe eWallet yang tersedia: OVO
external_id
required
string Sebuah ID pilihan Anda. Seringkali ini adalah indentifikasi unik seperti nomor telepon, email atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
amount
required
number Jumlah yang pelanggan Anda harus bayarkan.
Note: jumlah minimum adalah Rp 1.
payment_type
required
string Tipe cicilan pembayaran, Anda bisa memilih antara: "30_days", "3_months", "6_months" and "12_months".
items
required
array of item object Daftar barang / produk.
item object
required
item object Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
customer_details
required
object Informasi pembeli, harus mengandung: first_name [string], last_name [string], email [string], phone [string]
shipping_address
required
object Informasi dari alamat pengiriman, harus mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string]
redirect_url
required
string Setelah pembeli melakukan pembayaran di halaman checkout mitra Cardless Credit, mereka akan diarahkan ke redirect_url. Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda.
callback_url
required
string Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran.

Errors

Error Code Description
MERCHANT_NOT_FOUND
422
Anda belum terdaftar untuk menggunakan cardless credit dengan tipe ini..
GENERATE_CHECKOUT_URL_ERROR
422
Request Anda tidak memenuhi syarat atau ada masalah di sistem partner Cardless Credit kami.
DUPLICATE_PAYMENT_ERROR
422
Anda sudah pernah membuat Generate Checkout Request dengan external_id yang sama sebelumnya.
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

Notifikasi Pembayaran / Callback

Menerima Notifikasi Pembayaran / Callback

Anda perlu menyediakan sebuah endpoint di sistem Anda untuk menerima notifikasi pembayaran / callback dari sistem kami. Kami akan mengirim notifikasi pembayaran / callback ketika pembeli sudah melakukan pembayaran di halaman Checkout partner kami (Kredivo).

Notifikasi Pembayaran / Callback akan dikirim sebagai POST request ke "callback_url" yang telah Anda isi ketika mengirimkan Generate Checkout URL request.

Contoh: Request Notifikasi Pembayaran / Callback

{
  "external_id": "test-cardless-credit-01",
  "order_id": "75191237c81273jajsh7291c-test-cardless-credit-01",
  "transaction_id": "ashd7129-sh82-a9ks-js82-asj82912bajs",
  "amount": 800000,
  "transaction_status": "settlement",
  "payment_type": "3_months",
  "items": [
    {
      "id": "123123",
      "name": "Phone Case",
      "price": 200000,
      "type": "Smartphone",
      "url": "http://example.com/phone/phone_case",
      "quantity": 2
    },
    {
      "id": "234567",
      "name": "Bluetooth Headset",
      "price": 400000,
      "type": "Audio",
      "url": "http://example.com/audio/bluetooth_headset",
      "quantity": 1
    }
  ],
  "customer_details": {
      "first_name": "customer first name",
      "last_name": "customer last name",
      "email": "customer@yourwebsite.com",
      "phone": "081513114262"
    },
    "shipping_address": {
      "first_name": "first name",
      "last_name": "last name",
      "address": "Jalan Teknologi No. 12",
      "city": "Jakarta",
      "postal_code": "12345",
      "phone": "081513114262",
      "country_code": "IDN"
    },
  "cardless_credit_type": "KREDIVO",
  "callback_authentication_token": "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
}
Parameter Deskripsi
external_id string Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request.
order_id string Identifikasi unik yang kami berikan kepada mitra Cardless Credit kami.
transaction_id string ID transaksi yang diberikan oleh mitra Cardless Credit.
transaction_status string Status Transaksi, yang berisi:
settlement: Transaksi berhasil
pending: Pembeli belum melakukan pembayaran
deny: Transaksi ditolak oleh mitra Cardless Credit kami
cancel: Transaksi sudah dibatalkan
expire: Pembeli tidak melakukan pembayaran dalam 24 jam, maka transaksi dinyatakan kadaluarsa
payment_type string Tipe cicilan.
amount number Jumlah pembayaran yang telah Anda isi ketika melakukan Generate Checkout URL request.
items array of item Daftar dari barang / produk yang ada isi ketika mengirimkan Generate Checkout URL request.
item object
item detail Informasi dari barang / produk, akan mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
customer_details object Informasi pembeli, akan mengandung: first_name [string], last_name [string], email [string], phone [string]
shipping_address object Informasi alamat pengiriman, akan mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string]
cardless_credit_type string Tipe Cardless Credit.
Tipe Cardless Credit yang tersedia: KREDIVO
callback_authentication_token string Berisi Callback Verification API Key yang Anda bisa temukan di Dashboard Xendit. Anda perlu verifikasi kembali apakah ini memiliki isi yang sama

Virtual Accounts

Bank yang tersedia untuk Virtual Account

Endpoint: Mendapatkan bank yang tersedia untuk virtual accounts

GET https://api.xendit.co/available_virtual_account_banks

Contoh Permintaan mendapatkan bank yang tersedia untuk virtual accounts

curl https://api.xendit.co/available_virtual_account_banks -X GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $response = $xenditPHPClient->getVirtualAccountBanks();
  print_r($response);
?>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/available_virtual_account_banks")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

Respon saat mendapatkan Ketersediaan Bank untuk Virtual Account (Money-in read permission)

Contoh respon saat mendapatkan bank yang tersediua untuk virtual accounts

{
  "name": "Bank Negara Indonesia",
  "code": "BNI"
}
Parameter Deskripsi
name Nama bank
code Kode bank, yang berkaitan saat pembuatan virtual account

Pembuatan Fixed Virtual Account

Endpoint: Pembuatan Fixed Virtual Accounts (FVA)

POST https://api.xendit.co/callback_virtual_accounts

Fixed virtual accounts adalah virtual accounts khusus dengan nama yang anda pilih, misalkan 'NamaPerusahaanAnda - Becca Salim'. Anda akan menerima notifikasi setiap kali ada fixed virtual account yang dibayar.

Untuk lingkungan produksi, aktifkan Fixed Virtual Account dari dasbor dengan masuk ke Dasbor > Pengaturan > Konfigurasi > Fix Virtual Account, dan klik tombol "Aktifkan!". Rentang Fixed VA akan diatur dan diaktifkan secara instan. Dalam lingkungan pengembangan, pengembangan rentang VA akan ditugaskan segera. Baca lebih lanjut tentang fixed virtual accounts.

Apakah anda ingin menggunakan virtual akun yang terikat dengan transaksi daripada pengguna? Gunakan invoices API kita.

Permintaan Pembuatan Fixed Virtual Accounts (Money-in write permission)

Contoh Permintaan Fixed Virtual Accounts

curl https://api.xendit.co/callback_virtual_accounts -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d external_id=demo_virtual_account_1475459775872 \
   -d bank_code=BNI \
   -d name='Rika Sutanto'
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'demo_1475459775872';
  $bank_code = 'BNI';
  $name = 'Rika Sutanto';

  $response = $xenditPHPClient->createCallbackVirtualAccount($external_id, $bank_code, $name);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{  'external_id': 'user_1212412312',  'bank_code': 'BNI',  'name': 'William Sutanto'}");
Response response = client.target("https://api.xendit.co/callback_virtual_accounts")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
Parameter Deskripsi
external_id
required
string ID sesuai pilihan anda. Seringkali ID itu unik seperti nomor telepon, email or ID transaction. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
bank_code
required
string Kode bank virtual account yang anda mau buat.
Note: Kami sangat menyarankan untuk mengarahkan pelanggan anda untuk membayar ke BNI virtual account untuk transfer antar bank
name
required
string Nama pengguna/virtual account, nama ini yang akan ditampilkan pada tampilan para pengguna, misalkan pada layar konfirmasi mesin ATM.Perlu diperhatikan bahwa kolom ini hanya dapat berisi huruf dan spasi dan tidak memiliki batasan (meskipun bank akan hanya menampilkan nama virtual account sesuai jumlah batasan dari sisi bank)
virtual_account_number
optional
string Nomor virtual akun yang ingin anda tetapkan. Jika anda tidak menetapkan nomor virtual account yang ingin anda buat, sistem kami akan memilih secara acak.
suggested_amount
optional
number Nominal yang disarankan yang ingin anda tetapkan. Jika anda tidak menetapkan nominal yang disarankan, external ID yang akan digunakan.
Note:Untuk nominal yang disarankan hanya tersedia pada Mandiri dan BRI
is_closed
optional
boolean Ketika diatur menjadi true, virtual account hanya akan menerima pembayaran sesuai nominal yang ditentukan dalam expected_amount
expected_amount
optional
number Nominal yang diharapkan oleh virtual account ketika is_closed diatur menjadi true
expiration_date
optional
ISO Date Waktu kedaluwarsa virtual account
is_single_use
optional
boolean Ketika diatur menjadi true, status virtual account akan menjadi inactive setelah dibayar

Respon Pembuatan Fixed Virtual Accounts

Contoh Respon Pembuatan Fixed Virtual Accounts

{
   "owner_id":"57b4e5181473eeb61c11f9b9",
   "external_id":"demo-1475804036622",
   "bank_code":"BNI",
   "merchant_code":"8808",
   "name":"Rika Sutanto",
   "account_number":"88082548",
   "is_closed": false,
   "id":"57f6fbf26b9f064272622aa6",
   "is_single_use": true,
   "status": "ACTIVE"
}
Parameter Dekripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
bank_code Kode bank yang bersangkutan, misal, BNI.
merchant_code 5 angka didepan sebelum nomor lengkap virtual account
name Nama virtual account
account_number Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
suggested_amount OPTIONAL Nominal yang diharapkan untuk pembuatan fixed virtual account
is_closed Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
expected_amount OPTIONAL Nominal yang diharapkan saat is_closed diubah menjadi true
id ID unik untuk fixed virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan fixed virtual account.
is_single_use Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar
status Status fixed virtual account yang menentukan apakah itu pending atauinactive. Status inactive dikarenakan virtual account telah dibayar atau sudah kedaluwarsa.

Kesalahan Pembuatan Fixed Virtual Account

Pesan Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error.
INVALID_JSON_FORMAT
400
Bukan format JSON yang valid.
VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE
400
Nomor virtual account yang anda mau tidak tersedia.
BANK_NOT_SUPPORTED_ERROR
400
Kode bank ini tidak tersedia
EXPIRATION_DATE_NOT_SUPPORTED_ERROR
400
Tanggl kedaluwarsa untuk fixed virtual account saat ini tidak tersedia.
EXPIRATION_DATE_INVALID_ERROR
400
Bukan tanggal kedaluwarsa yang valid karena lebih awal dari waktu saat ini.
SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
400
Nominal yang diharapkan untuk fixed virtual saat ini tidak dapat digunakan.
EXPECTED_AMOUNT_REQUIRED_ERROR
400
Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi true.
CLOSED_VA_NOT_SUPPORTED_ERROR
400
Nilai is_closeduntuk pilihan ini tidak tersedia untuk fixed virtual account.
DUPLICATE_CALLBACK_VIRTUAL_ACCOUNT_ERROR
400
Nomor virtual account yang anda mau buat sudah digunakan
MINIMUM_EXPECTED_AMOUNT_ERROR
400
Nominal yang diharapkan The expected amount hanya bisa lebih dari nol
MAXIMUM_EXPECTED_AMOUNT_ERROR
400
Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED_ERROR
400
Nama virtual account tidak boleh mengandung nama bank atau institusi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

Mendapatkan Fixed Virtual Account

Endpoint: Mendapatkan Informasi Fixed Virtual Account

GET https://api.xendit.co/callback_virtual_accounts/:id

Contoh Permintaan Mendapatkan Informasi Fixed Virtual Account

curl https://api.xendit.co/callback_virtual_accounts/:id -X GET \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:

Terkadang, anda perlu mengetahui detail dari fixed virtual account anda. Endpoint ini dapat digunakan untuk mendapatkan detail informasi terbaru dari fixed virtual account anda.

Permintaan Mendapatkan Informasi Fixed Virtual Account (Money-in read permission)

Parameter Deskripsi
id
required
string ID virtual account yang ingin anda gunakan

Respon Mendapatkan Informasi Fixed Virtual Account

Contoh Respon Mendapatkan Informasi Fixed Virtual Account

{
    "owner_id": "58cd618ba0464eb64acdb246",
    "external_id": "fixed-va-1507867286",
    "bank_code": "BRI",
    "merchant_code": "26215",
    "name": "Steve Wozniak",
    "account_number": "262151000393993",
    "is_single_use": false,
    "status": "ACTIVE",
    "expiration_date": "2048-10-12T17:00:00.000Z",
    "is_closed": false,
    "id": "59e03a976fab8b1850fdf347"
}
Parameter Deskripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat pembuatan virtual account
bank_code Kode bank dari nomor virtual account
merchant_code 4 atau 5 angka didepan sebelum nomor lengkap virtual account
name Nama virtual account
account_number Nomor akun dari virtual account
expiration_date Tanggal kedaluwarsa virtual account
is_closed Nilai yang mendifinisikan fixed virtual account harus dibayar sesuai nominal yang diharapkan atau tidak
id ID fixed virtual account
is_single_use Nilai yang mendefinisikan fixed virtual account hanya bisa digunakan satu kali atau berulang-ulang
status Status dari fixed virtual account yang memberikan informasi virtual account itu masih active atau inactive. Status inactive berati fixed virtual account ini sudah dibayar karena bersifat is_single_use atau fixed virtual account ini telah kedaluwarsa.

Kesalahan Mendapatkan Informasi Pembayaran Fixed Virtual Account

Pesan Kesalahan Deskripsi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
CALLBACK_VIRTUAL_ACCOUNT_NOT_FOUND_ERROR
404
Tidak dapat menemukan virtual account ini

Pembaruan Fixed Virtual Accounts

Endpoint: Pembaruan Fixed Virtual Account (FVA)

PATCH https://api.xendit.co/callback_virtual_accounts/:id

Fixed Virtual Account sangat mudah digunakan, dan itu tergantung kebutuhan anda. Oleh karena itu, kami menyediakan endpoint yang sangat mudah digunakan untuk memperbarui fixed virtual account sesuai yang anda mau.

Permintaan Pembaruan Fixed Virtual Accounts (Money-in write permission)

Parameter Deskripsi
suggested_amount
optional
number Nominal yang disarankan yang ingin anda tetapkan.
expected_amount
optional
number Nominal yang diharapkan saat is_closed diubah menjadi true
expiration_date
optional
ISO Date Waktu ketika virtual account akan kedaluwarsa. Anda dapat mengaturnya ke hari-hari sebelumnya untuk segera mengubah virtual account itu menjadi kedaluwarsa
is_single_use
optional
boolean Ketika diubah menjadi true, virtual account akan menjadi inactive setelah dibayar

Respon Pembaruan Fixed Virtual Accounts

Contoh respon update Fixed Virtual Accounts

{
   "owner_id":"57b4e5181473eeb61c11f9b9",
   "external_id":"demo-1475804036622",
   "bank_code":"BNI",
   "merchant_code":"8808",
   "name":"Rika Sutanto",
   "account_number":"88082548",
   "suggested_amount":50000,
   "is_closed": false,
   "id":"57f6fbf26b9f064272622aa6",
   "is_single_use": true,
   "status": "ACTIVE"
}
Parameter Deskripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
bank_code Kode bank yang bersangkutan, misal, BNI.
merchant_code 5 angka didepan sebelum nomor lengkap virtual account
name Nama virtual account
account_number Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
suggested_amount Nominal yang diharapkan dari fixed virtual account yang diperbarui
id ID unik untuk fixed virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan fixed virtual account.
is_closed Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
expected_amount OPTIONAL Nominal yang diharapkan saat is_closed diubah menjadi true
is_single_use Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
status Status fixed virtual account yang menentukan apakah itu pending atauinactive. Status inactive dikarenakan virtual account telah dibayar atau sudah kedaluwarsa.

Kesalahan Pembaruan Fixed Virtual Accounts

Pesan Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error.
INVALID_JSON_FORMAT
400
Bukan format JSON yang valid.
VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE
400
Nomor virtual account yang anda mau tidak tersedia.
BANK_NOT_SUPPORTED_ERROR
400
Kode bank ini tidak tersedia.
SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
400
Nominal yang diharapkan untuk fixed virtual saat ini tidak dapat digunakan
EXPECTED_AMOUNT_REQUIRED_ERROR
400
Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi true.
CLOSED_VA_NOT_SUPPORTED_ERROR
400
Nilai is_closeduntuk pilihan ini tidak tersedia untuk fixed virtual account..
INACTIVE_VIRTUAL_ACCOUNT_ERROR
400
Nomor virtual account yang anda mau perbarui inactive.
MINIMUM_EXPECTED_AMOUNT_ERROR
400
Nominal yang diharapkan The expected amount hanya bisa lebih dari nol
MAXIMUM_EXPECTED_AMOUNT_ERROR
400
Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

Notifikasi Pembayaran Fixed Virtual Account

Endpoint: Notifikasi Pembayaran Fixed Virtual Account

POST https://yourcompany.com/virtual_account_paid_callback_url
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{
    id: '57fb4e076fa3fa296b7f5a97',
    payment_id: 'demo-1476087608948_1476087303080',
    callback_virtual_account_id: '57fb4df9af86ce19778ad359',
    owner_id: '57b4e5181473eeb61c11f9b9',
    external_id: 'demo-1476087608948',
    account_number: '1547',
    bank_code: 'BNI',
    amount: 99000,
    transaction_timestamp: '2016-10-10T08:15:03.080Z',
    merchant_code: '8808',
    updated: '2016-10-10T08:15:03.404Z',
    created: '2016-10-10T08:15:03.404Z'
}");
Response response = client.target("https://api.xendit.co/virtual_account_paid_callback_url")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("X-CALLBACK-TOKEN", "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

Ketika seseorang membayar ke fixed virtual account anda, API untuk notifikasi kami akan mengirimkan notifikasi URL anda yang telah ada atur dalam dashboard. API notifikasi kami juga akan mengirimkan notifikasi ke URL anda untuk pembuatan fixed virtual account dan pembaruan fixed virtual account. Silahkan liatPembuatan Fixed Virtual Accounts untuk lebih detail. Untuk informasi lebih lanjut mengenai notikasi silahhkan bacadocs.

Contoh ini hanya digunakan untuk menampilkan isi parameter yang dikirimkan dari API Xendit ke URL notifikasi anda dan tidak dapat dicoba disini. Jika anda menginginkan untuk mencoba permintaan notifikasi ini, gunakan fitur di dashboard dan pilih Pengaturan > Developer > Callbacks.

Permintaan Notifikasi Pembayaran Fixed Virtual Account

Contoh Permintaan Notifikasi Pembayaran Fixed Virtual Account Payment

curl --include \
     --request POST \
     --header "Content-Type: application/json" \
     --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --data-binary "{
    id: \"57fb4e076fa3fa296b7f5a97\",
    payment_id: \"demo-1476087608948_1476087303080\",
    callback_virtual_account_id: \"57fb4df9af86ce19778ad359\",
    owner_id: \"57b4e5181473eeb61c11f9b9\",
    external_id: \"demo-1476087608948\",
    account_number: \"1547\",
    bank_code: \"BNI\",
    amount: 99000,
    transaction_timestamp: \"2016-10-10T08:15:03.080Z\",
    merchant_code: \"8808\",
    updated: \"2016-10-10T08:15:03.404Z\",
    created: \"2016-10-10T08:15:03.404Z\"
}" \
'https://api.xendit.co/virtual_account_paid_callback_url'
Parameter Deskripsi
payment_id Dalam sistem internal kami disebut dengan payment ID
callback_virtual_account_id Nilai kolom id didapatkan dari respon saat fixed virtual account berhasil dibuat. Lihat Pembuatan Fixed Virtual Accounts
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
account_number Nomor lengkap virtual account (tanpa 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
bank_code Kode bank yang bersangkutan, misal, BNI.
amount Jumlah yang dibayar
merchant_code 5 angka didepan sebelum nomor lengkap virtual account, e.g 01234 your_number
id ID dari pembayaran fixed virtual account

Permintaan Notifikasi untuk Pembuatan Fixed Virtual Account / Pembaruan Fixed Virtual Acccount

Contoh Permintaan Notifikasi untuk Pembuatan Fixed Virtual Account / Pembaruan Fixed Virtual Acccount

curl --include \
     --request POST \
     --header "Content-Type: application/json" \
     --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --data-binary "{
    id: \"57fb4e076fa3fa296b7f5a97\",
    owner_id: \"5824128aa6f9f9b648be9d76\",
    external_id: \"fixed-va-1487156410\",
    merchant_code: \"88608\",
    account_number: \"886081000123456\",
    bank_code: \"MANDIRI\",
    name: \"John Doe\",
    is_closed: false,    
    is_single_use: false,
    status: \"ACTIVE\",
    expiration_date: \"2048-02-15T11:01:52.722Z\",
    updated: \"2016-10-10T08:15:03.404Z\",
    created: \"2016-10-10T08:15:03.404Z\"
}" \
'https://api.xendit.co/virtual_account_created_callback_url'
Parameter Deskripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
bank_code Kode bank yang bersangkutan, misal, BNI.
merchant_code 5 angka didepan sebelum nomor lengkap virtual account
name Nama virtual account
account_number Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
suggested_amount OPTIONAL Nominal yang disarankan untuk membuat fixed virtual account
is_closed Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
expected_amount OPTIONAL Nominal yang diharapkan saat is_closed diubah menjadi true
id ID unik untuk fixed virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan fixed virtual account.
is_single_use Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
status Status dari fixed virtual account.

Kesalahan Notifikasi Fixed Virtual Account

Perlu diperhatikan pada kasus ini kita tidak mendapatkan respon sukses dari server anda pada percobaan pertama, kami akan mencoba lagi sebanyak 2 kali dengan jeda 30 detik disetiap percobaan. Setelah 3 kali mendapatkan respon gagal, kami akan mendapatkan peringatan bahwa notifikasi itu telah gagal. Tim kami akan menghubungin anda untuk menyelesaikan masalah ini.

Mendapatkan Pembayaran Fixed Virtual Account

Endpoint: Permintaan Mendapatkan Pembayaran Fixed Virtual Account

GET https://api.xendit.co/callback_virtual_account_payments/payment_id={payment_id}

Contoh Permintaan Mendapatkan Pembayaran Fixed Virtual Account

curl https://api.xendit.co/callback_virtual_account_payments/payment_id={payment_id} -X GET \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:

Ketika anda menerima notifikasi di URL anda, anda dapat memverifikasi notifikasi yang anda terima berasal dari kami.

Permintaan Mendapatkan Pembayaran Fixed Virtual Account (Money-in read permission)

Parameter Deskripsi
payment_id
required
string ID pembayaran yang ingin anda gunakan

Respon Mendapatkan Pembayaran Fixed Virtual Account

Contoh Respon Pembayaran Mendapatkan Fixed Virtual Account

{
    "id": "598d91b1191029596846047f",
    "payment_id": "1502450097080",
    "callback_virtual_account_id": "598d5f71bf64853820c49a18",
    "external_id": "demo-1502437214715",
    "merchant_code": "77517",
    "account_number": "1000016980",
    "bank_code": "BNI",
    "amount": 5000,
    "transaction_timestamp": "2017-08-11T11:14:57.080Z"
}
Parameter Deskripsi
id ID pembayaran fixed virtual account
payment_id Dalam sistem internal kami disebut dengan payment ID
callback_virtual_account_id ID dari fixed virtual account yang telah dibayar
external_id External ID pembayaran fixed virtual account
merchant_code 5 angka didepan sebelum nomor lengkap virtual account
account_number Nomor akun dari virtual account
bank_code Kode bank dari nomor virtual account
amount Jumlah yang dibayarkan ke virtual account ini
transaction_timestamp Tanggal dan waktu bahwa virtual account telah dibayar

Kesalahan Mendapatkan Pembayaran Fixed Virtual Account

Pesan Kesalahan Deskripsi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
CALLBACK_VIRTUAL_ACCOUNT_PAYMENT_NOT_FOUND_ERROR
404
Tidak dapat menemukan notofi kasi pembayaran virtual account berdasarkan payment id

Retail Outlets

Pembuatan Fixed Payment Code

Salah satu cara bagi pelanggan Anda untuk membayar melalui Outlet Ritel adalah dengan memberi mereka Fixed Payment Code. Fixed Payment Code adalah kode pembayaran khusus dengan nama yang Anda pilih, mis. 'Perusahaan Anda - Becca Salim'. Anda akan menerima panggilan balik setiap kali Fixed Payment Code ini dibayarkan.

Pembuatan Permintaan Fixed Payment Code (Money-in write permission)

Contoh permintaan pembuatan Fixed Payment Code

curl https://api.xendit.co/fixed_payment_code -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d external_id=demo_fixed_payment_code_123 \
   -d retail_outlet_name=ALFAMART \
   -d name='Rika Sutanto' \
   -d expected_amount=10000
Parameter Deskripsi
external_id
required
string ID pilihan Anda. Seringkali pengenal unik seperti nomor telepon, email atau transaksi ID. Panjang maksimum yang diijinkan adalah 1000 karakter.
retail_outlet_name
required
string Nama Fixed Payment Code yang ingin Anda buat
name
required
string Nama pengguna - data ini dapat digunakan oleh kasir Toko Outlet untuk memvalidasi pengguna akhir
expected_amount
optional
number Jumlah yang diharapkan akan dibayarkan oleh pengguna akhir
payment_code
optional
string Fixed Payment Code yang ingin Anda tetapkan. Jika Anda tidak mengirimkan, maka akan dipilih secara acak
expiration_date
optional
ISO Date Waktu yang ditentukan ketika Fixed Payment Code akan kedaluwarsa
is_single_use
optional
boolean Jika disetel ke true, Fixed Payment Code tidak akan aktif setelah dibayarkan

Respon Pembuatan Fixed Payment Code

Contoh Respon Pembuatan Fixed Payment Code

{
   "owner_id": "5b614aa8e79f9214007244d4",
   "external_id": "123",
   "retail_outlet_name": "ALFAMART",
   "prefix": "TEST",
   "name": "Rika Sutanto",
   "payment_code": "TEST123456",
   "type": "USER",
   "expected_amount": 10000,
   "is_single_use": true,
   "expiration_date": "2049-07-31T17:00:00.000Z",
   "id": "5b61881e6cc2770f00117f73"
}
Parameter Dekripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
retail_outlet_name Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
prefix 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
name Nama untuk Fixed Payment Code anda
payment_code kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus dilakukan pengguna untuk memberi tahu kepada kasir Outlet Ritel
expected_amount Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
is_single_use Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika Fixed Payment Code akan kedaluarsa
id Kode unik untuk Fixed Payment Code

Kesalahan Pembuatan Fixed Payment Code

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi.
INVALID_JSON_FORMAT
400
Permintaan tidak sesuai dengan format JSON yang valid
PAYMENT_CODE_OUTSIDE_RANGE
400
Fixed Payment Code yang Anda inginkan berada di luar rentang Anda.
RETAIL_OUTLET_NOT_SUPPORTED_ERROR
400
Retail Outlet yang digunakan saat ini tidak didukung.
DUPLICATE_PAYMENT_CODE_ERROR
400
Kode pembayaran yang ingin anda buat sudah digunakan.
EXPIRATION_DATE_INVALID_ERROR
400
Tanggal kadaluarsa yang anda inginkan tidak valid dikarenakan lebih awal dari waktu saat ini.
MINIMUM_EXPECTED_AMOUNT_ERROR
400
Ekspektasi nominal hanya bisa lebih dari atau sama dengan Rp 10,000.
MAXIMUM_EXPECTED_AMOUNT_ERROR
400
Ekspektasi nominal hanya bisa kurang dari atau sama dengan Rp 5,000,000.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

Pembaruan Fixed Payment Code

Endpoint: Pembaruan Fixed Payment Code

PATCH https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id}

Permintaan Pembaruan Fixed Payment Code (Money-in write permission)

Fixed Payment Code sangat mudah disesuaikan, dan semuanya didasarkan pada kebutuhan Anda. Oleh karena itu, kami memberikan Anda endpoint ini untuk dengan mudah memperbarui Fixed Payment Code Anda yang Anda inginkan.

Parameter Deskripsi
name
optional
string Nama untuk Fixed Payment Code
expected_amount
optional
number Nominal yang diharapkan akan dibayar oleh pengguna akhir
expiration_date
optional
ISO Date Waktu yang ditentukan untuk tanggal kadaluarsa Fixed Payment Code. Anda dapat menetapkannya sebagai hari di masa lalu agar segera berakhir Fixed Payment Code

Respon Pembaruan Fixed Payment Code

Contoh Respon Pembaruan Fixed Payment Code

{
   "owner_id": "5b614aa8e79f9214007244d4",
   "external_id": "123",
   "retail_outlet_name": "INDOMARET",
   "prefix": "TEST",
   "name": "Joe Contini",
   "payment_code": "TEST123456",
   "type": "USER",
   "expected_amount": 10000,
   "is_single_use": true,
   "expiration_date": "2049-07-31T17:00:00.000Z",
   "id": "5b61881e6cc2770f00117f73"
}
Parameter Deskripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
retail_outlet_name Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
prefix 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
name Nama untuk Fixed Payment Code anda
payment_code kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus dilakukan pengguna untuk memberi tahu kepada kasir Outlet Ritel
expected_amount Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
is_single_use Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika Fixed Payment Code akan kedaluarsa
id Kode unik untuk Fixed Payment Code

Kesalahan Pembaruan Fixed Payment Code

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi.
INVALID_JSON_FORMAT
400
Permintaan tidak sesuai dengan format JSON yang valid
PAYMENT_CODE_OUTSIDE_RANGE
400
Fixed Payment Code yang Anda inginkan berada di luar rentang Anda.
RETAIL_OUTLET_NOT_SUPPORTED_ERROR
400
Retail Outlet yang digunakan saat ini tidak didukung.
DUPLICATE_PAYMENT_CODE_ERROR
400
Kode pembayaran yang ingin anda buat sudah digunakan.
EXPIRATION_DATE_INVALID_ERROR
400
Tanggal kadaluarsa yang anda inginkan tidak valid dikarenakan lebih awal dari waktu saat ini.
MINIMUM_EXPECTED_AMOUNT_ERROR
400
Ekspektasi nominal hanya bisa lebih dari atau sama dengan Rp 10,000.
MAXIMUM_EXPECTED_AMOUNT_ERROR
400
Ekspektasi nominal hanya bisa kurang dari atau sama dengan Rp 5,000,000.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

Mendapatkan Fixed Payment Code

Endpoint: Mendapatkan Fixed Payment Code

GET https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id}

Terkadang anda harus mengetahui detil dari Fixed Payment Code anda. Endpoint ini dapat digunakan untuk mendapatkan detil terakhir dari Fixed Payment Code anda.

Permintaan Mendapatkan Fixed Payment Code (Money-in read permission)

Parameter Deskripsi
fixed_payment_code_id
required
string ID Fixed Payment Code yang akan diambil

Respon Mendapatkan Fixed Payment Code

Contoh Respon Mendapatkan Fixed Payment Code

{
   "owner_id": "5b614aa8e79f9214007244d4",
   "external_id": "123",
   "retail_outlet_name": "ALFAMART",
   "prefix": "TEST",
   "name": "Joe Contini",
   "payment_code": "TEST123456",
   "type": "USER",
   "expected_amount": 20000,
   "is_single_use": true,
   "expiration_date": "2049-07-31T17:00:00.000Z",
   "id": "5b61881e6cc2770f00117f73"
}
Parameter Deskripsi
owner_id ID pengguna anda
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
retail_outlet_name Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
prefix 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
name Nama untuk Fixed Payment Code anda
payment_code kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus dilakukan pengguna untuk memberi tahu kepada kasir Outlet Ritel
expected_amount Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
is_single_use Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika Fixed Payment Code akan kedaluarsa
id Kode unik untuk Fixed Payment Code

Kesalahan Mendapatkan Fixed Payment Code

Kode Kesalahan Deskripsi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
FIXED_PAYMENT_CODE_NOT_FOUND_ERROR
404
Fixed Payment Code tidak dapat ditemukan

Notifikasi Pembayaran Fixed Payment Code

Endpoint: Notifikasi Pembayaran Fixed Payment Code

POST https://yourcompany.com/fixed_payment_code_paid_callback_url

Ketika seseorang membayar ke Fixed Payment Code Anda, API callback kami akan mengenai URL Anda yang sudah Anda setel di dasbor.

Contoh ini hanya digunakan untuk menunjukkan parameter yang mengirim dari API Xendit ke URL callback Anda dan tidak dapat diuji di sini. Jika Anda ingin menguji permintaan panggilan balik ini, gunakan fitur tes di dasbor dan pergi ke Settings -> Configuration -> Retail Outlet.

Permintaan Notifikasi Pembayaran Fixed Payment Code

Parameter Deskripsi
fixed_payment_code_payment_id ID unik untuk pembayaran Fixed Payment Code
owner_id ID pengguna anda
fixed_payment_code_id ID unik untuk Fixed Payment Code
payment_id ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran
external_id ID pilihan anda yang anda berikan saat melakukan permintaan
payment_code kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus dilakukan pengguna untuk memberi tahu kepada kasir Outlet Ritel
prefix 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
retail_outlet_name Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
amount Nominal yang telah dibayarkan
name Nama untuk Fixed Payment Code
transaction_timestamp Tanggal saat Fixed Payment Code dibayarkan

Kesalahan Permintaan Notifikasi Pembayaran Fixed Payment Code

Perhatikan bahwa dalam kasus di mana kami tidak mendapatkan respons yang berhasil dari server Anda pada percobaan pertama, kami akan mencoba lagi 2 kali lebih lama dengan penundaan 30 detik antara setiap percobaan. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah.

Invoice

Pembuatan Invoice

Endpoint: Pembuatan Invoice

POST https://api.xendit.co/v2/invoices

Invoice memungkinkan pengguna untuk membayar melalui berbagai macam metode pembayaran. Setelah pembayaran dilakukan, sebuah notifikasi akan dikirimkan tanpa memperhatikan metode pembayaran yang digunakan.

Untuk mengetahui lebih lanjut tentang invoice, Anda dapat membuka tautan dokumentasi kami.

Permintaan Pembuatan Invoice (Money-in write permission)

Contoh Permintaan Pembuatan Invoice

curl https://api.xendit.co/v2/invoices -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d external_id=demo_1475801962607 \
   -d payer_email=sample_email@xendit.co \
   -d description='Trip to Bali' \
   -d amount=230000
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'demo_1475801962607';
  $amount = 230000;
  $payer_email = 'sample_email@xendit.co';
  $description = 'Trip to Bali';

  $response = $xenditPHPClient->createInvoice($external_id, $amount, $payer_email, $description);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{  'external_id': 'invoice_123124123',  'amount': 500000,  'payer_email': 'payer@test.com',  'description': 'Invoice #123124123 for Nike shoes',  'should_exclude_taxes': false,  'should_exclude_fees': false}");
Response response = client.target("https://api.xendit.co/v2/invoices")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));


Parameter Deskripsi
external_id
required
string ID unik yang berfungsi sebagai tanda pengenal sebuah invoice di dalam sistem Anda
payer_email
required
string Email pengguna yang akan membayar
description
required
string Deskripsi invoice
amount
required
number Jumlah tagihan yang harus dibayar. Jumlah tagihan minimum untuk pembuatan invoice adalah 11000.
should_send_email
optional

default: false
boolean Memastikan pengguna untuk mendapat email mengenai status invoice saat dibuat, dibayar, atau kedaluwarsa
callback_virtual_account_id
optional
string Memungkinkan metode pembayaran melalui Fixed Virtual Account, masukkan nilai id yang didapatkan dari respons saat pembuatan fixed virtual account. Lihat Pembuatan Fixed Virtual Account
invoice_duration
optional
number durasi waktu yang dimiliki pengguna akhir untuk membayar tagihan sebelum kadaluwarsa (dalam detik)
success_redirect_url
optional
string Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan
Contoh : https://yourcompany.com/example_item/10/success_page
failure_redirect_url
optional
string Tautan yang diarahkan apabila tagihan telah kedaluwarsa
Contoh : https://yourcompany.com/example_item/10/failed_checkout
payment_methods
optional
array of strings pilihan metode pembayaran yang tersedia di akun Anda. biarkan kolom ini kosong jika semua saluran pembayaran diharapkan tersedia dalam invoice ini.
Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA",
"ALFAMART", "INDOMARET", "CREDIT_CARD", "OVO"]
mid_label
optional
string MID label yang dapat Anda gunakan saat Anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator.
currency
optional
string mata uang yang Anda gunakan untuk nominal penagihan invoice Anda
example : "IDR"
fixed_va
optional

default: false
boolean Isi parameter ini dengan true untuk menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk pelanggan Anda.

Respon Pembuatan Invoice

Contoh Respon Pembuatan Invoice

{
  "id": "579c8d61f23fa4ca35e52da4",
  "user_id": "5781d19b2e2385880609791c",
  "external_id": "invoice_123124123",
  "status": "PENDING",
  "merchant_name": "Xendit",
  "merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1493610897264_473.png",
  "amount": 50000,
  "payer_email": "albert@xendit.co",
  "description": "This is a description",
  "invoice_url": "https://invoice.xendit.co/web/invoices/595b6248c763ac05592e3eb4",
  "expiry_date": "2016-08-01T11:20:01.017Z",
  "available_banks": [
    {
      "bank_code": "BCA",
      "collection_type": "POOL",
      "bank_account_number": 1000008,
      "transfer_amount": 54000
    }
  ],
  "available_retail_outlets": [
      {
          "retail_outlet_name": "ALFAMART",
          "payment_code": "ALFA123456",
          "transfer_amount": 54000
      }
  ],
  "should_exclude_credit_card": false,
  "should_send_email": false,
  "created": "2017-06-12T14:00:00.306Z",
  "updated": "2017-06-12T14:00:00.306Z",
  "mid_label": "test-mid",
  "currency": "IDR",
  "fixed_va":true
}
Parameter Deskripsi
id ID invoice yang didapatkan dari Xendit
user_id ID bisnis Xendit Anda
external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
status PENDING Invoice masih belum dibayar
merchant_name Nama perusahaan atau situs Anda
merchant_profile_picture_url Tautan ke gambar profil perusahaan Anda
amount Jumlah tagihan invoice
payer_email Email pembayar, didapatkan dari permintaan API Anda
description Deskripsi invoice, didapatkan dari permintaan API Anda
invoice_url Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda.
expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
bank_code BCA / MANDIRI / BNI / BRI / PERMATA
collection_type POOL Tipe nonfixed virtual account
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
retail_outlet_name Nama outlet ritel
payment_code Kode unik identifikasi pembayaran
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
should_exclude_credit_card Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice
should_send_email Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa
created Waktu ISO yang tercatat saat invoice dibuat
updated Waktu ISO yang tercatat saat invoice diperbarui
mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
fixed_va Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.

Kesalahan Dalam Pembuatan Invoice

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan tidak lolos validasi. Pesan kesalahan mengandung detail masukan yang tidak lolos validasi.
INVALID_JSON_FORMAT
400
Request body bukan format JSON yang valid.
MINIMAL_TRANSFER_AMOUNT_ERROR
400
Tidak dapat membuat invoice karena jumlah tagihan di bawah Rp11000.
MAXIMUM_TRANSFER_AMOUNT_ERROR
400
Tidak dapat membuat invoice karena jumlah tagihan di atas Rp1000000000.
NO_COLLECTION_METHODS_ERROR
400
Akun Anda belum memiliki konfigurasi metode pembayaran (virtual account, kartu kredit, outlet ritel). Silakan kontak customer support kami untuk pengkonfigurasian.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
UNIQUE_ACCOUNT_NUMBER_UNAVAILABLE_ERROR
404
Tidak ada virtual account yang tersedia di dalam rentang non-fixed virtual account akun Anda.
CALLBACK_VIRTUAL_ACCOUNT_NOT_FOUND_ERROR
404
ID Fixed virtual account yang dimaksud tidak valid.
AVAILABLE_PAYMENT_CODE_NOT_FOUND_ERROR
404
Tidak ada payment code yang tersedia di dalam rentang outlet ritel akun Anda.

Mendapatkan invoice

Endpoint: Mendapatkan Invoice

GET https://api.xendit.co/v2/invoices/{invoice_id}

Permintaan Mendapatkan Invoice (Money-in read permission)

Contoh Permintaan Mendapatkan Invoice

curl https://api.xendit.co/v2/invoices/{invoice_id} -X GET \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $invoice_id = '587cc7b4863f2b462beb31f6';

  $response = $xenditPHPClient->getInvoice($invoice_id);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/v2/invoices/{invoice_id}")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
Parameter Deskripsi
invoice_id
required
string ID invoice yang ingin didapatkan

Respon Mendapatkan Invoice

Contoh Respon Mendapatkan Invoice

{
  "id": "579c8d61f23fa4ca35e52da4",
  "user_id": "5781d19b2e2385880609791c",
  "external_id": "invoice_123124123",
  "status": "PENDING",
  "merchant_name": "Xendit",
  "merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1493610897264_473.png",
  "amount": 50000,
  "payer_email": "albert@xendit.co",
  "description": "This is a description",
  "invoice_url": "https://invoice.xendit.co/web/invoices/595b6248c763ac05592e3eb4",
  "expiry_date": "2016-08-01T11:20:01.017Z",
  "available_banks": [
    {
      "bank_code": "BCA",
      "collection_type": "POOL",
      "bank_account_number": 1000008,
      "transfer_amount": 54000
    }
  ],
  "available_retail_outlets": [
      {
          "retail_outlet_name": "ALFAMART",
          "payment_code": "ALFA123456",
          "transfer_amount": 54000
      }
  ],
  "should_exclude_credit_card": false,
  "should_send_email": false,
  "created": "2017-06-12T14:00:00.306Z",
  "updated": "2017-06-12T14:00:00.306Z",
  "mid_label": "test-mid",
  "currency": "IDR",
  "paid_at": "2017-06-13T11:00:00.306Z",
  "credit_card_charge_id": "579c8d61f23fa4ca35e52eas",
  "payment_method": "BANK_TRANSFER",
  "payment_channel": "BCA",
  "payment_destination": "10002233222294375",
  "success_redirect_url": "www.xendit.co",
  "failure_redirect_url": "www.xendit.co",
  "fixed_va":true
}



Parameter Deskripsi
id ID invoice yang didapatkan dari Xendit
user_id ID bisnis Xendit Anda
external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
status PENDING invoice belum dibayar
PAID invoice sudah berhasil dibayar
SETTLED dana yang dibayarkan sudah masuk ke saldo
EXPIRED invoice sudah kedaluwarsa
merchant_name Nama perusahaan atau situs Anda
merchant_profile_picture_url Tautan ke gambar profil perusahaan Anda
amount Jumlah tagihan invoice
payer_email Email pembayar, didapatkan dari permintaan API Anda
description Deskripsi invoice, didapatkan dari permintaan API Anda
invoice_url Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda.
expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
bank_code BCA / MANDIRI / BNI / BRI / PERMATA
collection_type POOL Tipe nonfixed virtual account
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
retail_outlet_name Nama outlet ritel
payment_code Kode unik identifikasi pembayaran
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
should_exclude_credit_card

Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

should_send_email

Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa

updated

Waktu ISO yang tercatat saat invoice diperbarui

created

Waktu ISO yang tercatat saat invoice dibuat

mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
success_redirect_url Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
failure_redirect_url Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
paid_at Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
credit_card_charge_id Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
payment_method Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET",
"EWALLET"]
payment_channel Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
Contoh : ["BCA", "BRI", "MANDIRI",
"BNI", "PERMATA", "ALFAMART",
"OVO", "CREDIT_CARD"]
payment_destination Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
fixed_va Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.

Kesalahan Dalam Mendapatkan Invoice

Kode Kesalahan Deskripsi
INVALID_JSON_FORMAT
400
Request body bukan format JSON yang valid.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
INVOICE_NOT_FOUND_ERROR
404
ID invoice yang dicari tidak valid

Penutupan invoice

Endpoint: Penutupan Invoice

POST https://api.xendit.co/invoices/{invoice_id}/expire!

Anda bisa menutup sebuah invoice secara langsung menggunakan endpoint ini.

Catatan:

  1. Dengan menutup invoice, metode pembayaran yang tersedia melalui invoice tersebut juga akan tertutup: Non-fixed Virtual Account, Outlet Ritel, dan Kartu Kredit, tapi tidak untuk Fixed Virtual Account.
  2. Penutupan sebuah invoice yang terhubung dengan Fixed Virtual Account hanya akan memutus hubungan di antara keduanya sehingga pembayaran yang masuk ke Fixed Virtual Account ini akan selanjutnya dideteksi sebagai pembayaran Virtual Account dan bukan sebagai pembayaran invoice. Penutupan Fixed Virtual Account dapat dilakukan dengan mengubah expiration_date menggunakan Endpoint Perbarui Fixed Virtual Account .

Permintaan Penutupan Invoice (Money-in write permission)

Contoh Permintaan Penutupan Invoice

curl https://api.xendit.co/invoices/{invoice_id}/expire! -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Parameter Deskripsi
invoice_id
required
string ID invoice yang ingin ditutup

Respon Penutupan Invoice

Contoh Respon Penutupan Invoice

{
  "id": "579c8d61f23fa4ca35e52da4",
  "user_id": "5781d19b2e2385880609791c",
  "external_id": "invoice_123124123",
  "status": "EXPIRED",
  "merchant_name": "Xendit",
  "merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1493610897264_473.png",
  "amount": 50000,
  "payer_email": "albert@xendit.co",
  "description": "This is a description",
  "invoice_url": "https://invoice.xendit.co/web/invoices/595b6248c763ac05592e3eb4",
  "expiry_date": "2016-08-01T11:20:01.017Z",
  "available_banks": [
    {
      "bank_code": "BCA",
      "collection_type": "POOL",
      "bank_account_number": 1000008,
      "transfer_amount": 54000
    }
  ],
  "available_retail_outlets": [
      {
          "retail_outlet_name": "ALFAMART",
          "payment_code": "ALFA123456",
          "transfer_amount": 54000
      }
  ],
  "should_exclude_credit_card": false,
  "should_send_email": false,
  "created": "2017-06-12T14:00:00.306Z",
  "updated": "2017-06-12T14:00:00.306Z"
}
Parameter Deskripsi
id ID invoice yang didapatkan dari Xendit
user_id ID bisnis Xendit Anda
external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
status EXPIRED invoice sudah kedaluwarsa
merchant_name Nama perusahaan atau situs Anda
merchant_profile_picture_url Tautan ke gambar profil perusahaan Anda
amount Jumlah tagihan invoice
payer_email Email pembayar, didapatkan dari permintaan API Anda
description Deskripsi invoice, didapatkan dari permintaan API Anda
invoice_url Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda.
expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
bank_code BCA / MANDIRI / BNI / BRI / PERMATA
collection_type POOL Tipe nonfixed virtual account
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
retail_outlet_name Nama outlet ritel
payment_code Kode unik identifikasi pembayaran
bank_account_number Akun bank tujuan pembayaran
transfer_amount Jumlah tagihan yang harus dibayar
bank_branch Tipe akun bank yang digunakan
account_holder_name Nama pemegang akun
should_exclude_credit_card

Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

should_send_email

Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa

updated

Waktu ISO yang tercatat saat invoice diperbarui

created

Waktu ISO yang tercatat saat invoice dibuat

Kesalahan Dalam Penutupan Invoice

Kode Kesalahan Deskripsi
INVALID_JSON_FORMAT
400
Request body bukan format JSON yang valid.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
INVOICE_NOT_FOUND_ERROR
404
ID invoice tidak valid

Notifikasi Invoice

Endpoint: Notifikasi Invoice

POST https://yourcompany.com/invoice_callback_url
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{
  adjusted_xendit_fee_amount: 19064,
  adjusted_received_amount: 1980000,
  payment_method: 'UNIQUE',
  bank_code: 'MANDIRI',
  paid_amount: 1999064,
  updated: '2017-06-13T02:32:50.912Z',
  created: '2017-06-13T02:32:49.827Z',
  user_id: '5848fdf860053555135587e7',
  is_high: false,
  external_id: 'testing-invoice',
  merchant_name: 'Xendit',
  amount: 2000000,
  xendit_fee_amount: 20000,
  received_amount: 1980000,
  payer_email: 'test@xendit.co',
  description: 'Invoice callback test',
  status: 'PAID',
  id: '593f4ed1c3d3bb7f39733d83'
}");
Response response = client.target("https://api.xendit.co/invoice_callback_url")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("X-CALLBACK-TOKEN", "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

Saat sebuah invoice dibayar, sistem kami akan mengirimkan notifikasi ke URL notifikasi yang sudah dikonfigurasi di dasbor. Untuk instruksi lebih lanjut mengenai notifikasi dapat dilihat dalam dokumentasi invoice.

Contoh di bawah ini hanya digunakan untuk memperlihatkan parameter notifikasi yang dikirimkan oleh API Xendit ke URL notifikasi Anda. Jika Anda ingin mengetes notifikasi ini, dapat menggunakan fitur pengetesan di dasbor dengan pergi ke Pengaturan > Developer > Callbacks.

Permintaan Notifikasi Invoice

Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Bank

curl --include \
     --request POST \
     --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --header "Content-Type: application/json" \
     --data-binary "{
      id: \"593f4ed1c3d3bb7f39733d83\",
      user_id: \"5848fdf860053555135587e7\",
      external_id: \"testing-invoice\",
      merchant_name: \"Xendit\",
      amount: 2000000,
      fees_paid_amount: 5000,
      status: \"PAID\"
      payer_email: \"test@xendit.co\",
      description: \"Invoice callback test\",
      adjusted_received_amount: 1995000,
      payment_method: \"UNIQUE\",
      bank_code: \"MANDIRI\",
      paid_amount: 2000000,
      updated: \"2017-06-13T02:32:50.912Z\",
      created: \"2017-06-13T02:32:49.827Z\",
}" \
'https://api.xendit.co/invoice_callback_url'

Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Outlet Ritel

curl --include \
     --request POST \
     --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --header "Content-Type: application/json" \
     --data-binary "{
      id: \"593f4ed1c3d3bb7f39733d83\",
      user_id: \"5848fdf860053555135587e7\",
      external_id: \"testing-invoice\",
      merchant_name: \"Xendit\",
      amount: 2000000,
      fees_paid_amount: 5000,
      status: \"PAID\"
      payer_email: \"test@xendit.co\",
      description: \"Invoice callback test\",
      adjusted_received_amount: 1995000,
      payment_method: \"RETAIL_OUTLET\",
      retail_outlet_name: \"ALFAMART\",
      paid_amount: 2000000,
      updated: \"2017-06-13T02:32:50.912Z\",
      created: \"2017-06-13T02:32:49.827Z\",
}" \
'https://api.xendit.co/invoice_callback_url'



Parameter Deskripsi
id ID invoice yang didapatkan dari Xendit
user_id ID bisnis Xendit Anda
external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
merchant_name Nama perusahaan atau situs Anda
amount Jumlah tagihan invoice
fees_paid_amount Biaya Xendit diambil langsung dari pembayaran invoice - terima kasih karena sudah mendukung dunia pembayaran yang lebih baik :)
status PAID invoice sudah dibayar
EXPIRED invoice sudah kedaluwarsa. Notifikasi invoice kedaluwarsa secara umum tidak diaktifkan. Jika Anda ingin mengaktifkannya untuk bisnis Anda, Anda dapat melakukannya di Xendit Dashboard
payer_email Email pembayar, didapatkan dari permintaan API Anda
description Deskripsi invoice, didapatkan dari permintaan API Anda
adjusted_received_amount Jumlah netto uang yang masuk ke saldo Anda setelah dipotong biaya. Terima kasih karena sudah menggunakan jasa kami :)
payment_method Metode pembayaran yang dipakai
POOL Tipe nonfixed virtual account
CREDIT_CARD Tipe kartu kredit
bank_code Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah POOL
retail_outlet_name Kode outlet ritel yang digunakan untuk menerima pembayaaran jika metode pembayaran yang dipakai adalah RETAIL_OUTLET
paid_amount Jumlah tagihan yang dibayar
updated Waktu ISO yang tercatat saat invoice diperbarui
created Waktu ISO yang tercatat saat invoice dibuat
mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
success_redirect_url Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
failure_redirect_url Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
paid_at Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
credit_card_charge_id Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
payment_method Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET",
"EWALLET"]
payment_channel Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
Contoh : ["BCA", "BRI", "MANDIRI",
"BNI", "PERMATA", "ALFAMART",
"OVO", "CREDIT_CARD"]
payment_destination Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.

Kesalahan Dalam Notifikasi Invoice

Jika kami tidak mendapat respon sukses dari server Anda, kami akan mencoba lagi untuk mengirimkan notifikasi sebanyak 2 kali dengan jeda waktu 30 detik untuk setiap percobaan. Setelah 3 kali gagal, kami akan mendapatkan peringatan internal mengenai pengiriman notifikasi yang gagal. Tim kami akan segera mengontak Anda untuk menyelesaikan isu ini.

Pembayaran Recurring

Membuat Pembayaran Recurring

Endpoint: Membuat Pembayaran Recurring

POST https://api.xendit.co/recurring_payments

Pembayaran Recurring membantu Anda untuk menagih pelanggan Anda menggunakan sistem kami.

Request Pembuatan Recurring

Contoh: Request Pembuatan Recurring

curl https://api.xendit.co/recurring_payments -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d external_id=recurring_31451441 \
   -d payer_email=sample_email@xendit.co \
   -d interval=MONTH \
   -d interval_count=1 \
   -d description='Monthly room cleaning service' \
   -d amount=125000
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'recurring_31451441';
  $amount = 125000;
  $payer_email = 'sample_email@xendit.co';
  $interval = 'MONTH';
  $interval_count = 1;
  $description = 'Monthly room cleaning service';

  $response = $xenditPHPClient->createRecurringPayment($external_id, $amount, $payer_email, $interval, $interval_count, $description);
  print_r($response);
?>
Parameter Deskripsi
external_id
required
string ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
payer_email
required
string Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
description
required
string Deskripsi pembayaran atau tagihan Recurring Anda
amount
required
number Nominal harga per Invoice per interval.
Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
interval
required
string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
interval_count
required
number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
total_recurrence
optional
number Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
invoice_duration
optional
number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
should_send_email
optional

default: false
boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
missed_payment_action
optional

default: IGNORE
string Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu
credit_card_token
optional
string Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
start_date
optional
string (ISO 8601) Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda.
success_redirect_url
optional
string Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar
Contoh : https://yourcompany.com/example_item/10/success_page
failure_redirect_url
optional
string Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa
Contoh : https://yourcompany.com/example_item/10/failed_checkout
recharge
optional
default: true
boolean Isi parameter ini dengan true ketika Anda ingin mengaktifkan auto-charge dan mendapatkan informasi kartu kredit melalui XenInvoice.
charge_immediately
optional

boolean Gunakan true jika Anda ingin melakukan penagihan pertama sebelum penagihan yang akan dilakukan pada start_date,
Invoice selanjutnya yang akan ditagihkan ke pelanggan akan dibuat pada start_date. Dan waktu pembuatan untuk invoice selanjutnya lagi akan jatuh pada
interval*interval_count + start_date

Response Pembuatan Pembayaran Recurring

Contoh: Response Pembuatan Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "ACTIVE",
    "amount": 125000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "MONTH",
    "interval_count": 1,
    "recurrence_progress": 1,
    "should_send_email": false,
    "missed_payment_action": "IGNORE",
    "last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2017-06-12T14:00:00.306Z",
    "start_date": "2017-07-12T14:00:00.306Z",
    "recharge": true
}
Parameter Deskripsi
id ID dari Recurring Anda yang diberikan dari Xendit
user_id Xendit Business ID Anda
external_id ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
status ACTIVE Tagihan Recurring Anda ber-status aktif
STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
payer_email
required
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
last_created_invoice_url URL yang disediakan oleh Xendit untuk penagihan recurring
description
required
Deskripsi pembayaran atau tagihan Recurring Anda
amount
required
Nominal harga per Invoice per interval.
Nominal paling kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
interval
required
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
interval_count
required
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
total_recurrence
optional
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
invoice_duration
optional
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
should_send_email
optional

default: false
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
missed_payment_action
optional

default: IGNORE
Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu
credit_card_token
optional
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
start_date
optional
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda.
success_redirect_url
optional
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar
Contoh : https://yourcompany.com/example_item/10/success_page
failure_redirect_url
optional
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa
Contoh : https://yourcompany.com/example_item/10/failed_checkout
created Sebuah ISO timestamp saat tagihan Recurring dibuat
updated Sebuah ISO timestamp saat tagihan Recurring terakhir kali diubah
recharge Disaat nilai dari parameter ini adalah true, berarti Anda ingin mengaktifkan auto-charge dan mengambil informasi kartu kredit melalui XenInvoice.
charge_immediately
optional

boolean Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date

Eror dalam Pembuatan Pembayaran Recurring

Error Code Description
API_VALIDATION_ERROR
400
Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
INVALID_JSON_FORMAT
400
bukan format JSON yang valid.
INVALID_CREDIT_CARD_TOKEN_ERROR
400
Token kartu kredit tidak valid.
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini

Mendapatkan Sebuah Data Pembayaran Recurring

Endpoint: Mendapatkan Sebuah Data Pembayaran Recurring

GET https://api.xendit.co/recurring_payments/{id}

Request untuk Mendapatkan Sebuah Data Pembayaran Recurring

Contoh Request untuk Mendapatkan Sebuah Data Pembayaran Recurring

curl https://api.xendit.co/recurring_payments/{id} \
  -X GET \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Parameter Deskripsi
id ID dari Recurring Anda yang diberikan dari Xendit

Response dari Mendapatkan Sebuah Data Pembayaran Recurring

Contoh Response dari Mendapatkan Sebuah Data Pembayaran Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "ACTIVE",
    "amount": 125000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "MONTH",
    "interval_count": 1,
    "recurrence_progress": 1,
    "should_send_email": true,
    "missed_payment_action": "IGNORE",
    "last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2018-06-12T14:00:00.306Z",
    "start_date": "2017-07-12T14:00:00.306Z",
    "recharge":true
}
Parameter Deskripsi
id ID dari Recurring Anda yang diberikan dari Xendit
user_id Xendit Business ID Anda
external_id ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
status ACTIVE Tagihan Recurring Anda ber-status aktif
STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
payer_email
required
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
description
required
Deskripsi pembayaran atau tagihan Recurring Anda
amount
required
Nominal harga per Invoice per interval.
Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
interval
required
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
interval_count
required
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
total_recurrence
optional
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
invoice_duration
optional
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
should_send_email
optional

default: false
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
missed_payment_action
optional

default: IGNORE
Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu
credit_card_token
optional
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
start_date
optional
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda.
success_redirect_url
optional
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar
Contoh : https://yourcompany.com/example_item/10/success_page
failure_redirect_url
optional
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa
Contoh : https://yourcompany.com/example_item/10/failed_checkout
created Sebuah ISO timestamp saat tagihan Recurring dibuat
updated Sebuah ISO timestamp saat tagihan Recurring terakhir kali diubah
last_created_invoice_url URL yang disediakan oleh Xendit untuk penagihan recurring
recharge Disaat nilai dari parameter ini adalah true, berarti Anda ingin mengaktifkan auto-charge dan mengambil informasi kartu kredit melalui XenInvoice.
charge_immediately
optional

boolean Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date

Eror dalam Mengambil Pembayaran Recurring

Error Code Description
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
NOT_FOUND_ERROR
404
Tidak dapat menemukan Recurring dengan ID.

Mengubah Pembayaran Recurring

Jika anda ingin mengubah pembayaran Recurring Anda, Anda dapat mengakses API berikut untuk mengubah amount, interval, interval_count, should_send_email, missed_payment_action atau credit_card_token

Endpoint: Mengubah Pembayaran Recurring

PATCH https://api.xendit.co/recurring_payments/{id}

Request Mengubah Pembayaran Recurring

Contoh: Request Mengubah Pembayaran Recurring

curl https://api.xendit.co/recurring_payments/579c8d61f23fa4ca35e52da3 \
   -X PATCH \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d amount=80000 \
   -d interval=WEEK \
   -d interval_count=2 \
   -d should_send_email=true \
   -d missed_payment_action=STOP \
   -d credit_card_token=522f0ba2ab70de5d2b409eee \
Parameter Description
id
required
string ID dari Recurring Anda yang diberikan dari Xendit
amount
optional
number Nominal harga per Invoice per interval.
Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
credit_card_token
optional
string Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
interval
optional
string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
interval_count
optional
number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
should_send_email
optional
boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
invoice_duration
optional
number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
missed_payment_action
optional
string Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu

Response Mengubah Pembayaran Recurring

Contoh: Response Mengubah Pembayaran Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "ACTIVE",
    "amount": 80000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "WEEK",
    "interval_count": 2,
    "recurrence_progress": 1,
    "should_send_email": true,
    "missed_payment_action": "STOP",
    "recharge": true,
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2017-06-12T14:00:00.306Z",
    "start_date": "2017-06-19T14:00:00.306Z"
}

Semua response akan sama dengan Get Recurring

Eror dalam Mengubah Pembayaran Recurring

Error Code Description
NOT_FOUND_ERROR
404
Tidak dapat menemukan Recurring dengan ID.
API_VALIDATION_ERROR
400
Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
INVALID_JSON_FORMAT
400
bukan format JSON yang valid.
INVALID_CREDIT_CARD_TOKEN_ERROR
400
Token kartu kredit tidak valid.
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini

Menghentikan Pembayaran Recurring

Anda dapat menghentikan pembayaran Recurring Anda dengan API berikut.

Endpoint: Menghentikan Pembayaran Recurring

POST https://api.xendit.co/recurring_payments/{id}/stop!

Request Menghentikan Pembayaran Recurring

Contoh: Request Menghentikan Pembayaran Recurring

curl https://api.xendit.co/recurring_payments/{id}/stop! -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $id = '579c8d61f23fa4ca35e52da3';

  $response = $xenditPHPClient->stopRecurring($id);
  print_r($response);
?>
Parameter Deskripsi
id
required
string ID dari Recurring Anda yang diberikan dari Xendit

Response Menghentikan Pembayaran Recurring

Contoh: Response Menghentikan Pembayaran Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "STOPPED",
    "amount": 125000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "MONTH",
    "interval_count": 1,
    "recurrence_progress": 1,
    "should_send_email": true,
    "missed_payment_action": "IGNORE",
    "recharge": true,
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2018-06-12T14:00:00.306Z",
    "start_date": "2017-07-12T14:00:00.306Z"
}

Semua response akan sama dengan Get Recurring

Eror dalam Menghentikan Pembayaran Recurring

Error Code Description
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
NOT_FOUND_ERROR
404
Tidak dapat menemukan Recurring dengan ID

Menghentikan Sementara Pembayaran Recurring

Endpoint: Menghentikan Sementara Pembayaran Recurring

POST https://api.xendit.co/recurring_payments/{id}/pause!

Request Menghentikan Sementara Pembayaran Recurring

Contoh Request Menghentikan Sementara Pembayaran Recurring

curl https://api.xendit.co/recurring_payments/{id}/pause!
  -X POST \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Parameter Deskripsi
id
required
string ID dari Recurring Anda yang diberikan dari Xendit

Response Menghentikan Sementara Pembayaran Recurring

Contoh: Response Menghentikan Sementara Pembayaran Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "PAUSED",
    "amount": 125000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "MONTH",
    "interval_count": 1,
    "recurrence_progress": 1,
    "should_send_email": true,
    "missed_payment_action": "IGNORE",
    "recharge": true,
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2018-06-12T14:00:00.306Z",
    "start_date": "2017-07-12T14:00:00.306Z"
}

Semua response akan sama dengan Get Recurring

Eror Menghentikan Sementara Pembayaran Recurring

Error Code Description
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
NOT_FOUND_ERROR
404
Tidak dapat menemukan Recurring dengan ID

Melanjutkan Pembayaran Recurring

Endpoint: Melanjutkan Pembayaran Recurring

POST https://api.xendit.co/recurring_payments/{id}/resume!

Request Melanjutkan Pembayaran Recurring

Anda dapat melanjutkan pembayaran Recurring yang dihentikan sementara dengan API berikut.

Contoh: Request Melanjutkan Pembayaran Recurring

curl https://api.xendit.co/recurring_payments/{id}/resume!
  -X POST \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Parameter Deskripsi
id
required
string ID dari Recurring Anda yang diberikan dari Xendit

Response Melanjutkan Pembayaran Recurring

Contoh: Response Melanjutkan Pembayaran Recurring

{
    "id": "579c8d61f23fa4ca35e52da3",
    "user_id": "5781d19b2e2385880609791c",
    "external_id": "recurring_31451441",
    "status": "ACTIVE",
    "amount": 125000,
    "payer_email": "sample_email@xendit.co",
    "description": "Monthly room cleaning service",
    "interval": "MONTH",
    "interval_count": 1,
    "recurrence_progress": 1,
    "should_send_email": true,
    "missed_payment_action": "IGNORE",
    "recharge": true,
    "created": "2017-06-12T14:00:00.306Z",
    "updated": "2018-06-12T14:00:00.306Z",
    "start_date": "2017-07-12T14:00:00.306Z"
}

Semua response akan sama dengan Get Recurring

Eror Melanjutkan Pembayaran Recurring

Error Code Description
REQUEST_FORBIDDEN_ERROR
403
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
NOT_FOUND_ERROR
404
Tidak dapat menemukan Recurring dengan ID

Recurring Callback

Xendit akan memberikan notifikasi mengenai pembayaran Recurring Anda melalui Invoice Callback. Response tambahan dari Invoice Callback jika Invoice Anda dihasilkan oleh pembayaran Recurring:

Parameter Deskripsi
recurring_payment_id string ID dari Recurring Anda yang diberikan dari Xendit

Mendapatkan Daftar Pembayaran Recurring

Untuk mendapatkan daftar pembayaran Recurring, Anda dapat melakukannya melalui List all invoices dan menggunakan parameter tambahan. Berikut parameter tambahan yang harus dimasukkan:

Parameter Deskripsi
recurring_payment_id string ID dari Recurring Anda yang diberikan dari Xendit

Disbursement

Dengan Xendit, anda dapat untuk mengirim dana ke bank manapun diseluruh Indonesia.

Pembuatan Disbursement

Endpoint: Pembuatan Disbursement

POST https://api.xendit.co/disbursements

Permintaan Pembuatan Disbursement (Money-out write permission)

Contoh Permintaan Pembuatan Disbursement

curl https://api.xendit.co/disbursements -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -H "X-IDEMPOTENCY-KEY: unique-id-12345" \
   -d external_id=demo_1475459775872 \
   -d bank_code=BCA \
   -d account_holder_name='Bob Jones' \
   -d account_number='1231241231' \
   -d description='Reimbursement untuk sepatu' \
   -d amount=17000
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'demo_1475459775872';
  $amount = 17000;
  $bank_code = 'BCA';
  $account_holder_name = 'Bob Jones';
  $account_number = '1231241231';
  $disbursement_options['description'] = 'Reimbursement for shoes';

  $response = $xenditPHPClient->createDisbursement($external_id, $amount, $bank_code, $account_holder_name, $account_number, $disbursement_options);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{  'external_id': 'disbursement_12345',  'amount': 500000,  'bank_code': 'BCA',  'account_holder_name': 'Rizky',  'account_number': '1231241231',  'description': 'Custom description'}");
Response response = client.target("https://api.xendit.co/disbursements")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
Header Deskripsi
X-IDEMPOTENCY-KEY
optional
string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.

Karakter Spesial dan alfanumerik
Panjang maksimum Tidak ada karakter maksimum
Panjang minimum 1 karakter
Parameter Deskripsi
external_id
required
string ID disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement

Characters Spesial dan alfanumerik
Panjang maksimum 1000 karakter maksimum
Panjang minimum 1 karakter
bank_code
required
string Kode bank tujuan

Kode bank harus menurut daftar kode yang tertera disini here
account_holder_name
required
string Nama pemegang rekening sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.

Characters Spesial dan alfanumerik
Panjang maksimum Tidak ada karakter maksimum
Panjang minimum 1 karakter
account_number
required
string Nomor rekening bank tujuan. Jika menggunakan e-wallet, nomor telfon yang terdaftar dengan akun e-wallet.

Karakter Numerik dan hyphens
Panjang untuk BCA10 karakter
Panjang maksimum untuk bank lain Tidak ada karakter maksimum
Panjang minimum untuk bank lain 1 karakter
E-wallets Nomor telfon yang terdaftar pada e-wallet (Example: 0812XXXXXX)

*** Kami melayani pengiriman dana ke rekening virtual bank-bank utama (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, and NOBU Bank).
*** Kami melayani pengiriman dana ke e-wallet ternama (GoPay, OVO, and Mandiri e-cash).

description
required
string Deskripsi untuk dikirim beserta pengiriman dana

Characters Spesial dan alfanumerik
Panjang maksimum Tidak ada karakter maksimum
Panjang minimum 1 karakter
amount
required
number Jumlah untuk di disburse

Karakter Bilangan bulat numerik, tidak ada desimal
Limit maksimal (BCA, Mandiri, BNI, BNI Syariah, BRI, Sinarmas, CIMB, Permata) Tidak ada limit***
Batas minimum (BCA, Mandiri, BNI, BNI Syariah, BRI, Sinarmas, CIMB, Permata) Tidak ada batas
Batas maksimum (bank lain) Rp 25.000.000
Batas minimum (bank lain) Rp 10.000

*** Walaupun secara teori tidak ada batasan transfer maksimum untuk transfer ke bank-bank ini, harap dicatat bahwa kami mungkin harus melaporkan semua jumlah transaksi di atas Rp 100.000.000 kepada otoritas keuangan di Indonesia bersama dengan dokumentasi pendukung mengenai transaksi yang mendasarinya

Respon Pembuatan Disbursement

Contoh Respon Pembuatan Disbursement

{
  "user_id": "5785e6334d7b410667d355c4",
  "external_id": "12345",
  "amount": 1000,
  "bank_code": "BCA",
  "account_holder_name": "RAIDY WIJAYA",
  "disbursement_description": "Refunds Sepatu",
  "status": "PENDING",
  "id": "57f1ce05bb1a631a65eee662"
}
Parameter Deskripsi
user_id
required
string Business ID Xendit Anda
external_id
required
string Custom ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order.
amount
required
number Jumlah disbursement
bank_code
required
string Kode bank atau e-wallet tujuan. Lihat kode bank
account_holder_name
required
string Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
disbursement_description
required
Ini adalah deskripsi yang anda berikan untuk kami:)
status
required
string
PENDING Proses pengiriman sudah dimulai tetapi belum diselesaikan oleh bank.
id
required
string Unique Disbursement ID

Kesalahan Dalam Pembuatan Disbursement

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Validasi input gagal. Field error merincikan field mana saja yang melanggar validasi
INVALID_JSON_FORMAT
400
Body request tidak dalam format JSON yang valid.
DISBURSEMENT_DESCRIPTION_NOT_FOUND_ERROR
400
Deskripsi disbursement belum di set di Pengaturan > Mengirim Uang > Pengiriman. Tambahkan deskripsi default sebelum mencoba kembali.
DIRECT_DISBURSEMENT_BALANCE_INSUFFICIENT_ERROR
400
Saldo tidak cukup untuk disburse. Tambahkan saldo sebelum mencoba kembali.
DUPLICATE_TRANSACTION_ERROR
400
Kunci Idempotency sudah pernah digunakan sebelumnya. Tambahkan kunci Idempotency dan tambahkan kembali.
BANK_CODE_NOT_SUPPORTED_ERROR
400
Kode bank tujuan tidak supported.
RECIPIENT_ACCOUNT_NUMBER_ERROR
400
Untuk transfer ke BCA, input account_number harus 10 digit. Cek ulang panjang nomor rekening sebelum mencoba kembali.
RECIPIENT_AMOUNT_ERROR
400
Jumlah transfer yang diminta lebih rendah dari minimum yang ditentukan untuk bank tujuan yang dipilih. Ubah jumlah transfer sebelum mencoba ulang..
MAXIMUM_TRANSFER_LIMIT_ERROR
400
Jumlah transfer yang diminta lebih tinggi dari maksimum yang ditentukan untuk bank tujuan yang dipilih. Ubah jumlah transfer sebelum mencoba ulang.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
SERVER_ERROR
500
Koneksi server error. Harap menggunakan API Get disbursement dengan menggunakan external_id untuk memeriksa apakah disbursement sudah dibuat. Jika Anda menerima DIRECT_DISBURSEMENT_NOT_FOUND_ERROR, artinya disbursement belum terbuat; Mohon untuk mencoba kembali dalam 1-2 jam.

Mendapatkan Disbursement dengan ID

Endpoint: Mendapatkan Disbursement dengan ID

GET https://api.xendit.co/disbursements/{disbursement_id}

Endpoint ini digunakan untuk query pengecekan status transaksi disbursement.

Permintaan Mendapatkan Disbursement dengan ID (Money-out read permission)

Contoh Permintaan Mendapatkan Disbursement dengan ID

curl https://api.xendit.co/disbursements/57c9010f5ef9e7077bcb96b6 -X GET \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $disbursement_id = '587cc7ea77535fb94bb4e8eb';

  $response = $xenditPHPClient->getDisbursement($disbursement_id);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/disbursements/{disbursement_id}")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
Parameter Deskripsi
disbursement_id
required
string ID disbursement yang akan diambil
Disbursement_id harus cocok dengan Disbursement ID yang disediakan dalam response berhasilan kami pada saat disbursement

Get Disbursement Response

Respon Permintaan Disbursement dengan ID

{
  "user_id": "5785e6334d7b410667d355c4",
  "external_id": "disbursement_12345",
  "amount": 500000,
  "bank_code": "BCA",
  "account_holder_name": "Rizky",
  "disbursement_description": "Custom description",
  "status": "PENDING",
  "id": "57c9010f5ef9e7077bcb96b6"
}
Parameter Deskripsi
user_id Your Xendit Business ID
external_id ID custom yang ditetapkan saat pembuatan disbursement. Customer kami sering menggunakan nomor telfon, alamat email, atau transaction/order ID
amount Disburse amount
bank_code Kode bank tujuan. Lihat kode bank
account_holder_name Nama pemilik rekening bank sesuai bank records. Digunakan untuk verifikasi dan skenario error / customer support
disbursement_description Ini adalah deskripsi yang Anda berikan kepada kami :)
status PENDING Transfer dimulai.
COMPLETED Bank telah mengkonfirmasi pengiriman dana.
FAILED Bank menolak pencairan. Kami tidak akan mencoba lagi.
id Unique disbursement ID

Kesalahan Mendapatkan Disbursement dengan ID

Kode Kesalahan Deskripsi
INVALID_JSON_FORMAT
400
The request body tidak dalam JSON Format yang valid.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
DIRECT_DISBURSEMENT_NOT_FOUND_ERROR
404
Direct disbursement tidak ditemukan.

Mendapatkan Disbursement dengan External ID

Endpoint: Mendapatkan Disbursement dengan External ID

GET https://api.xendit.co/disbursements?external_id={external_id}

Endpoint ini digunakan untuk query status disbursement dengan external_id.

Permintaan Mendapatkan Disbursement dengan External ID (Money-out read permission)

Contoh Permintaan Mendapatkan disbursement dengan External ID

curl https://api.xendit.co/disbursements?external_id=72655 -X GET \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $external_id = 'disbursement_12345';

  $response = $xenditPHPClient->getDisbursementByExternalId($external_id);
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/disbursements?external_id={external_id}")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
Query Description
external_id
required
string Custom ID disbursement yang ditetapkan oleh customer saat pembuatan disbursement
The external_id harus sama dengan external_id yang digunakan saat pembuatan disbursement

Respon Permintaan Mendapatkan Disbursement dengan External ID

Respon Permintaan Mendapatkan Disbursement dengan External ID

[{
  "user_id": "5785e6334d7b410667d355c4",
  "external_id": "disbursement_12345",
  "amount": 500000,
  "bank_code": "BCA",
  "account_holder_name": "Rizky",
  "disbursement_description": "Contoh deskripsi",
  "status": "PENDING",
  "id": "57c9010f5ef9e7077bcb96b6"
},{
  "user_id": "5785e6334d7b410667d355c4",
  "external_id": "disbursement_45678",
  "amount": 450000,
  "bank_code": "BNI",
  "account_holder_name": "Anita",
  "disbursement_description": "deskripsi",
  "status": "COMPLETED",
  "id": "5a963089fd5fe5b6508f0b7b"
}]
Parameter Deskripsi
user_id Xendit Business ID Anda
external_id Custom ID ditetapkan saat pembuatan disbursement. Customer kami sering menggunakan nomor telfon, alamat email, atau transaction/order ID
amount Disburse amount
bank_code Kode bank tujuan. Lihat kode bank
account_holder_name Nama pemilik rekening bank sesuai bank records. Digunakan untuk verifikasi dan skenario error / customer support
disbursement_description Ini adalah deskripsi yang Anda berikan kepada kami :)
status PENDING Transfer sudah dimulai.
COMPLETED Bank telah mengkonfirmasi pengiriman dana.
FAILED Bank menolak disbursement. Kami tidak akan mencoba kembali.
id Unique disbursement ID

Kesalahan Mendapatkan Disbursement dengan External ID

Kode Kesalahan Deskripsi
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
DIRECT_DISBURSEMENT_NOT_FOUND_ERROR
404
Direct disbursement tidak ditemukan.

Notifikasi Disbursement

Endpoint: Notifikasi Disbursement

POST https://yourcompany.com/disbursement_callback_url
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity payload = Entity.json("{  'id': '57e214ba82b034c325e84d6e',  'user_id': '57c5aa7a36e3b6a709b6e148',  'external_id': 'disbursement_123124123',  'amount': 150000,  'bank_code': 'BCA',  'xendit_fee_amount': 0,  'xendit_fee_user_id': 'XENDIT_FEES',  'account_holder_name': 'XENDIT',  'transaction_id': '57ec8b7e906aa2606ecf8ffc',  'transaction_sequence': '1799',  'disbursement_id': '57ec8b8130d2d0243f438e11',  'disbursement_description': 'Xendit disbursement',  'failure_code': 'INVALID_DESTINATION',  'is_instant': false,  'status': 'FAILED',  'updated': '2016-10-10T08:15:03.404Z',  'created': '2016-10-10T08:15:03.404Z'}");
Response response = client.target("https://api.xendit.co/disbursement_callback_url")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

Ketika transaksi pencairan berhasil, API callback kami akan hit URL Anda yang sudah Anda atur di dashboard. Untuk informasi lebih lanjut tentang callback silakan baca [dokumen] ini (https://docs.xendit.co/xendisburse/).

Contoh ini hanya digunakan untuk menampilkan parameter body yang dikirim dari API Xendit ke URL callback Anda. Jika Anda ingin menguji permintaan panggilan balik ini, gunakan fitur test di dasbor dan pilih Settings -> Configuration -> Disbursement.

Permintaan Notifikasi Disbursement

Contoh Permintaan Notifikasi Disbursement

curl --include \
     --request POST \
     --header "Content-Type: application/json" \
     --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --data-binary "{
    \"id\": \"57e214ba82b034c325e84d6e\",
    \"user_id\": \"57c5aa7a36e3b6a709b6e148\",
    \"external_id\": \"disbursement_123124123\",
    \"amount\": 150000,
    \"bank_code\": \"BCA\",
    \"account_holder_name\": \"XENDIT\",
    \"disbursement_description\": \"Xendit disbursement\",
    \"failure_code\": \"INVALID_DESTINATION\",
    \"is_instant\": false,
    \"status\": \"FAILED\",
    \"updated\": \"2016-10-10T08:15:03.404Z\",
    \"created\": \"2016-10-10T08:15:03.404Z\"
}" \
'https://api.xendit.co/disbursement_callback_url'
Parameter Deskripsi
is_instant Menunjukkan apakah pencairan disalurkan secara instan
user_id Your Xendit Business ID
external_id Custom ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order.
amount Disburse amount
bank_code Kode bank tujuan. Lihat kode bank
account_holder_name Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
disbursement_description Ini adalah deskripsi yang Anda berikan kepada saya :)
status COMPLETED Bank telah mengkonfirmasi pengiriman dana.
FAILED Disbursement gagal karena failure code
failure_code (optional) INSUFFICIENT_BALANCE Saldo di akun Anda tidak cukup untuk melakukan pencairan dalam jumlah yang diinginkan
UNKNOWN_BANK_NETWORK_ERROR Jaringan bank telah mengembalikan error yang tidak diketahui kepada kami. Kami tidak dapat memprediksi apakah disbursement akan berhasil jika Anda mencoba kembali request disbursement yang sama.
TEMPORARY_BANK_NETWORK_ERROR Jaringan bank sedang mengalami error sementara. Coba kembali disbursement dalam 1-3 jam
INVALID_DESTINATION Bank telah melaporkan bahwa rekening tujuan tidak terdaftar atau diblokir. Jika tidak yakin tentang ini, silakan coba lagi atau hubungi bank tujuan langsung
SWITCHING_NETWORK_ERROR Setidaknya salah satu jaringan switching sedang mengalami masalah. Coba lagi pencairan dalam 1-3 jam
REJECTED_BY_BANK Bank telah menolak transaksi ini karena alasan yang tidak jelas. Kami tidak dapat memprediksi apakah pencairan akan berhasil jika Anda mencoba kembali permintaan pencairan yang sama.
TRANSFER_ERROR Kami mengalami error fatal saat memproses pencairan ini. API field tertentu dalam request Anda mungkin tidak valid. Mohon untuk hubungi tim customer support untuk informasi lebih lanjut.
TEMPORARY_TRANSFER_ERROR Kami mengalami masalah sementara saat memproses pencairan ini. Coba lagi disbursement dalam 1-2 jam

Untuk informasi lebih detail mengenai berbagai error code diatas, silakan lihat Common Errors in Disbursements.
id Unique disbursement ID

Kesalahan Notifikasi Disbursement

Dalam kasus di mana kami tidak mendapatkan response berhasil dari server Anda, kami akan melakukan retry sebanyak 2 kali, dengan waktu 30 detik antar setiap retry. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah tersebut.

Mendapatkan Ketersediaan Bank Disbursement

Endpoint: Mendapatkan Ketersediaan Bank Disbursement

GET https://api.xendit.co/available_disbursements_banks

Contoh Permintaan Mendapatkan Ketersediaan Bank Disbursement

curl https://api.xendit.co/available_disbursements_banks -X GET \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $response = $xenditPHPClient->getAvailableDisbursementBanks();
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/available_disbursements_banks")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

API endpoint ini akan memberikan Anda daftar bank yang kami support untuk disbursement. Kami mendukung transfer ke 140+ bank di Indonesia, termasuk beberapa BPD dan BPR, dan akun virtual bank-bank besar (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, dan Bank NOBU). Kami juga mendukung pencairan untuk e-wallet utama (GoPay, OVO, dan Mandiri e-cash). Jika Anda ingin kami mendukung pembayaran ke tujuan tertentu, silakan hubungi kami di support@xendit.co.

Mendapatkan Ketersediaan Bank Disbursement (Money-out read permission)

Mendapatkan Ketersediaan Bank Disbursement

[
  {
    "name": "Bank Mandiri",
    "code": "MANDIRI",
    "can_disburse": true,
    "can_name_validate": true
  },
  {
    "name": "Bank Rakyat Indonesia (BRI)",
    "code": "BRI",
    "can_disburse": true,
    "can_name_validate": true
  },
  {
    "name": "Bank Central Asia (BCA)",
    "code": "BCA",
    "can_disburse": true,
    "can_name_validate": true
  }
]
Parameter Deskripsi
name Nama lengkap bank atau e-wallet
code Kode bank atau e-wallet tujuan disbursement

Batch Disbursement

Batch disbursements adalah sekumpulan petunjuk yang berisi perintah untuk disburse dana ke bank manapun di Indonesia

Idempotency dapat menggunakan kunci X-IDEMPOTENCY-KEY.

Pembuatan Batch Disbursement

Dengan API endpoint ini anda dapat membuat sejumlah disbursement dalam waktu yang sama

Endpoint: Pembuatan batch disbursement

POST https://api.xendit.co/batch_disbursements

Permintaan Pembuatan Batch Disbursement (Money-out write permission)

Header Deskripsi
X-IDEMPOTENCY-KEY
optional
string Unique key to mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production
Parameter Deskripsi
reference
required
string ID batch disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement
required
Disbursement Item[] List disbursement yang ada didalam batch

Disbursement Item

Parameter Deskripsi
amount
required
number Nominal uang yang akan di transfer
bank_code
required
string Kode bank penerima
bank_account_name
required
string Nama pemilik rekening bank penerima
bank_account_number
required
string Nomor rekening bank penerima
description
required
string Catatan untuk disertai dalam transfer
external_id
optional
string ID disbursement pada sistem Anda
email_to
optional
string[] Alamat email yang menerima pemberitahuan disbursement setelah disbursement selesai
email_cc
optional
string[] Alamat email yang menerima carbon copy email pemberitahuan disbursement setelah disbursement selesai
email_bcc
optional
string[] Alamat email yang menerima blind carbon copy email pemberitahuan disbursement setelah disbursement selesai

Respon Pembuatan Batch Disbursement

Contoh Respon Pembuatan Batch Disbursement

{
  "created": "2017-03-30T06:12:47.212Z",
  "reference": "qwerty1234",
  "total_uploaded_amount": 30000,
  "total_uploaded_count": 2,
  "status": "NEEDS_APPROVAL",
  "id": "58dca1dffee4228917d37336"
}
Parameter Deskripsi
created
required
string Timestamp pembuatan batch disbursement creation dalam format ISO
reference
required
string ID batch disbursement dalam sistem Anda yang digunakan untuk rekonsiliasi setelah disbursement selesai
total_uploaded_count
required
number Jumlah disbursement count dalam batch
total_uploaded_amount
required
number Jumlah disbursement amount dalam batch
status
required
string
NEEDS_APPROVAL Batch disbursement telah dibuat tapi butuh persetujuan sebelum diproses lebih lanjut
id
required
string Unique ID batch disbursement pada sistem kami

Kesalahan Dalam Pembuatan Batch Disbursement

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Validasi input gagal. Field errors dalam response akan merincikan fields yang melanggar validasi.
INVALID_JSON_FORMAT
400
Badan request tidak dalam format JSON yang valid.
DUPLICATE_TRANSACTION_ERROR
400
Request gagal karena idempotency key sudah pernah digunakan sebelumnya.
INVALID_API_KEY
401
API key yang digunakan salah.
BATCH_DISBURSEMENT_MAXIMUM_ROWS_LIMIT_EXCEEDED_ERROR
400
Request gagal karena pencairan mengandung lebih dari 1000 item.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

Notifikasi Batch Disbursement

Endpoint: Notifikasi Batch Disbursement

POST https://yourcompany.com/disbursement_callback_url

Setelah membuat batch disbursement melalui API, untuk menerima callback, Anda harus masuk ke Dashboard dan mengikuti langkah-langkah berikut:

Ketika semua disbursement telah diproses, sistem kami akan hit URL callback yang telah Anda tetapkan. Kami juga akan memberi Anda callback jika batch disbursement telah dihapus di dashboard. Anda dapat menyetel konfigurasi notifikasi URL anda melalui Dashboard --> Settings --> Configuration --> Batch Disbursements.

Permintaan Notifikasi Batch Disbursement

Parameter Deskripsi
created Timestamp pembuatan batch disbursement dalam format ISO
updated Timestamp perubahan status batch disbursement terakhir dalam format ISO
reference ID batch disbursement dalam sistem Anda, digunakan untuk merekonsiliasi disbursement setelah proses disbursement selesai
total_uploaded_count Jumlah count seluruh disbursement dalam batch yang di request
total_uploaded_amount Jumlah amount seluruh disbursement dalam batch yang Anda request
approved_at Timestamp batch disbursement yang di approve dalam format ISO
approver_id User ID user yang melakukan approval batch disbursement
status COMPLETED Semua disbursement berhasil
CHECK Sebagian disbursement berhasil dibayarkan
DELETED Batch disbursement telah terhapus
FAILED Seluruh disbursement gagal dibayarkan
id Unique ID batch disbursement dalam sistem kami
user_id Xendit Business ID Anda
total_error_count Jumlah disbursement count dalam sistem yang gagal dibayarkan
total_error_amount Jumlah amount disbursement yang gagal terbayar dalam batch
total_disbursed_count Jumlah disbursement count yang berhasil terbayar dalam batch
total_disbursed_amount Jumlah disbursement amount yang berhasil terbayar dalam batch
disbursements Rincian setiap disbursement dalam batch, dijelaskan di bawah ini

Respon Notifikasi Batch Disbursement

Parameter Deskripsi
created Timestamp pembuatan item batch disbursement dalam format ISO
updated Timestamp status update batch disbursement terakhir dalam format ISO
external_id ID disbursement dari sistem Anda
amount Amount untuk di disburse
bank_code Kode bank penerima. Lihat kode bank
bank_account_number Nomor rekening bank penerima
bank_account_name Nama pemilik rekening bank penerima
description Deskripsi untuk menyertai disbursement
email_to Alamat email yang mendapatkan notifikasi rincian disbursement setelah disbursement selesai
email_cc Alamat email yang menerima carbon copy email pemberitahuan disbursement setelah disbursement selesai
email_bcc Alamat email yang menerima blind carbon copy email pemberitahuan disbursement setelah disbursement selesai
status COMPLETED Disbursement berhasil terbayar
FAILED Disbursement gagal terbayar
bank_reference Nomor referensi transaksi dari bank
valid_name Nama pemegang rekening penerima yang valid sesuai dengan bank penerima
failure_code Error code yang menyertai disbursement failure
failure_message Error message yang menyertai disbursement failure
id Unique ID batch disbursement item pada sistem kami

Kesalahan Notifikasi Batch Disbursement

Dalam kasus di mana kami tidak mendapatkan response berhasil dari server Anda, kami akan melakukan retry sebanyak 2 kali, dengan waktu 30 detik antar setiap retry. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah tersebut.

Mendapatkan Ketersediaan Bank Disbursement

Endpoint: Mendapatkan Ketersediaan Bank Disbursement

GET https://api.xendit.co/available_disbursements_banks

Contoh Panggilan Mendapatkan Ketersediaan Bank Disbursement

curl https://api.xendit.co/available_disbursements_banks -X GET \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
  require 'vendor/autoload.php';

  $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';

  $xenditPHPClient = new XenditClient\XenditPHPClient($options);

  $response = $xenditPHPClient->getAvailableDisbursementBanks();
  print_r($response);
?>
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.xendit.co/available_disbursements_banks")
  .request(MediaType.APPLICATION_JSON_TYPE)
  .header("Authorization", "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));

API endpoint ini akan memberikan Anda daftar bank yang saat ini dapat mendukung disbursement. Daftar bank pendukung saat ini adalah > 140 untuk Indonesia, termasuk beberapa BPD dan BPR.

Respon Mendapatkan Ketersediaan Bank Disbursement (Money-out read permission)

Mendapatkan Respon Ketersediaan Bank Disbursement

[
  {
    "name": "Bank Central Asia (BCA)",
    "code": "BCA"
  },
  {
    "name": "Bank Mandiri",
    "code": "MANDIRI"
  },
  {
    "name": "Bank Rakyat Indonesia (BRI)",
    "code": "BRI"
  }
]
Parameter Deskripsi
name Nama lengkap bank
code Kode bank, relevan saat pembuatan Virtual Account

Errors

Di bawah ini adalah beberapa error paling umum dalam endpoint kami. Setiap error tertentu terletak di bawah setiap endpoint. Jika Anda memiliki pertanyaan, silakan hubungi kami

Error code Meaning
400 Request tidak diterima, error pada validasi, key belum live
401 Akses tidak terotorisasi, contoh: API key salah
403 Akses terlarang, contoh: API tidak dapat memiliki izin untuk endpoint ini
404 Halaman tidak ditemukan
500 Error tidak diketahui - hubungi kami apabila ini terjadi. Apabila ini adalah response untuk request disbursement, mohon untuk cek status pada sumber (contoh: disbursement, refund kartu kredit) sebelum mencoba lagi agar request tidak terproses dua kali