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 menambahkan titik dua and enkripsikan ke Base64 API key yang Anda dapatkan dari dasbor. Sebagai contoh jika API key Anda adalah

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==

Pertama-tama, tambahkan titik dua di belakangnya

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==:

Lalu, enkripsikan ke Base64 key yang sudah dimodifikasi tersebut untuk mendapatkan

eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

API Xendit dikembangkan berdasarkan konsep REST agar lebih bersih dan mudah untuk dimengerti. Semua respons API kami berformat JSON. Untuk mempermudah Anda mempelajari API kami, kami menyediakan API key untuk mode pengembangan dan produksi. Semua request yang dibuat dalam mode pengembangan tidak akan diteruskan ke jaringan bank dan tidak dikenai biaya.

Sebelum mulai menggunakan API, pastikan Anda sudah melakukan registrasi dan akun Anda sudah terotentikasi karena request API yang belum terotentikasi pasti akan gagal. Untuk mengotentikasi, Anda harus menambahkan API key rahasia Anda yang dapat diakses di dasbor Xendit ke request yang dikirimkan. Anda dapat mengatur API key Anda di Dashboard > Settings > API Keys. API key pengembangan dan produksi yang dipakai dalam request akan menentukan mode yang sedang dipakai. Anda diharapkan untuk merahasiakan API key Anda.

Semua request API yang dibuat harus dikirim melalui HTTPS dan bukan HTTP (semua request melalui HTTP akan digagalkan). Kami juga menyediakan PHP client libraries untuk menghemat waktu Anda. Di masa yang akan datang, bila Anda membuat library Anda sendiri, kami akan dengan senang hati mempromosikannya. Sekali lagi, pastikan untuk melakukan otentikasi sebelum Anda menggunakan API kami.

Balance (Saldo)

Saldo Anda mewakili uang di akun cash Instamoney 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));

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

Parameter Deskripsi
account_type
optional
setingan awal: 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

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
setingan awal: false
boolean Penentuan apakah token akan digunakan berulang kali atau tidak
should_authenticate
optional
setingan awal: 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.
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

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

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
setingan awal: 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
The authentication ID has already been used in a 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.
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

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
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

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

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
PENDING Refund sedang diproses.
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
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

Notifikasi Refund

Contoh: Notifikasi Refund (Berhasil)

{
    "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": 'SUCCEEDED',
    "fee_refund_amount": 150,
    "id": '58f984f09d1b74bc08506c34'
}

Contoh: Notifikasi Refund (Gagal)

{
    "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": 'FAILED',
    "failure_reason": "REFUND_REJECTED",
    "fee_refund_amount": 150,
    "id": '58f984f09d1b74bc08506c34'
}

Ketika Xendit telah selesai memproses refund, Anda akan menerima notifikasi dari kami. Pastikan Anda telah menyertakan tautan URL Anda untuk menerima notifikasi refund Konfigurasi Dasbor Xendit Kartu Kredit > Notifikasi URL Refund Kartu Kredit

Pembuatan Langganan

Definisi: Pembuatan Langganan

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

Contoh Permintaan Pembuatan Langganan

curl -X POST \
  https://api.xendit.co/managed_subscriptions \
  -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
  -H 'content-type: application/json' \
  -d '{
    "token_id": "59644ba513c7f01759213052",
    "authentication_id": "59644bb713c7f01759213053",
    "amount": 75000,
    "frequency": "MONTHLY",
    "start_date": "2017-07-15T10:00:00.000Z",
    "end_date": "2018-07-15T10:00:00.000Z"
}'
// BETA - Belum ditambahkan dalam Library PHP

Ketika sebuah Langganan dibuat, Xendit akan melakukan charge pada kartu kredit tersebut secara berkala, dengan interval yang ditentukan pada parameter frequency.

Permintaan Pembuatan Langganan

Parameter Deskripsi
token_id
required
string ID token yang merepresentasikan kartu kredit yang ingin di-charge secara berkala.
authentication_id
pilihan
string ID otentikasi 3DS.
amount
required
number Nominal uang yang akan di-charge secara berkala.
frequency
required
string Nilai numerik yang merepresentasikan frekuensi charge yang akan dilakukan Xendit secara otomatis. Lihat Detil Frekuensi
start_date
required
string Tanggal dalam ISO yang akan digunakan Xendit untuk melakukan charge pertama untuk langganan ini. Catatan: Waktu tidak wajib diisi.
end_date
required
string Tanggal dalam ISO yang akan digunakan Xendit untuk menandai kapan berakhirnya langganan tersebut. Catatan: Waktu tidak wajib diisi.

Contoh Respon Pembuatan Langganan

{
  "token_id": "591e7edafe439c3c698bc8a9",
  "authorization_id": "5963c7b313c7f01759213033",
  "amount": 75000,
  "frequency": "MONTHLY",
  "start_date": "2017-07-10T17:00:00.000Z",
  "end_date": "2018-07-09T17:00:00.000Z",
  "status": "ACTIVE",
  "id": "5963c7b313c7f01759213034"
}

Respon Pembuatan Langganan

Respon pembuatan langganan akan sesuai dengan struktur yang ada di Skema Langganan

Skema Langganan

Parameter Deskripsi
id
required
string Pengidentifikasi unik yang merepresentasikan Langganan.
token_id
required
string ID token yang mepresentasikan kartu kredit yang akan berlangganan.
authorization_id
required
string ID otentikasi yang didapatkan pada saat otentikasi sebelum berlangganan.
amount
required
number Nominal uang yang akan di-charge secara berkala.
frequency
required
string Nilai numerik yang merepresentasikan frekuensi charge yang akan dilakukan Xendit secara otomatis. Lihat Detil Frekuensi
start_date
required
string Tanggal dalam ISO yang akan digunakan Xendit untuk melakukan charge pertama untuk langganan ini. Catatan: Waktu tidak wajib diisi.
end_date
required
string Tanggal dalam ISO yang akan digunakan Xendit untuk menandai kapan berakhirnya langganan tersebut. Catatan: Waktu tidak wajib diisi.
status
required
string Nilai yang mepresentasikan status dari langganan tersebut. Lihat detil status
credit_card_charges
optional
arrayDaftar charge yang dibuat pada langganan ini.

Status Status Langganan

Status Deskripsi
ACTIVE Langganan tersebut aktif dan kartu kredit tersebut akan di-charge secara berkala.
CANCELLED Langganan tersebut dibatalkan dan kartu kredit tersebut tidak akan di-charge lagi.
EXPIRED Tanggal langganan end_date telah lewat. Kartu kredit tersebut tidak akan di-charge lagi.
FAILED Xendit tidak berhasil melakukan charge pada kartu kredit tersebut.

Frekuensi Langganan

Status Deskripsi
DAILY Kartu tersebut akan di-charge setiap hari.
WEEKLY Kartu tersebut akan di-charge setiap 7 hari.
MONTHLY Kartu tersebut akan di-charge pada hari yang sama setiap bulannya, dibulatkan ke tanggal terakhir pada bulan tersebut (contoh : 31 Mei, kemudian 30 Juni).
YEARLY Kartu tersebut akan di-charge pada hari yang sama setiap tahun.

Kesalahan Dalam Pembuatan Langganan

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.
INVALID_START_DATE_ERROR
400
Tanggal yang dimasukkan adalah tanggal sebelum hari ini. (GMT+7)
INVALID_END_DATE_ERROR
400
Tanggal yang dimasukkan tidak setelah tanggal mulai langganan.
AMOUNT_GREATER_THAN_AUTHENTICATED_ERROR
400
Nominal uang melebihi nominal yang disetujui pengguna pada proses otentikasi 3DS.
AUTHENTICATION_ID_MISSING_ERROR
400
Parameter authentication_id tidak disertakan pada pembuatan langganan.
AUTHENTICATION_ALREADY_USED_ERROR
400
Parameterauthentication_id sudahh pernah digunakan.
TOKEN_NOT_FOUND_ERROR
404
ID token yang disertakan tidak dapat ditemukan atau tidak valid.
AUTHENTICATION_NOT_FOUND_ERROR
404
ID otentikasi 3DS yang disertakan tidak ditemukan atau tidak valid.

Notifikasi Langganan

Contoh: Notifikasi Langganan (Charge Berhasil)

{
    "id": "59f7574b3f9ebe7c62214833",
    "status": "CAPTURED",
    "business_id": "5850e55d8d9791bd40096364",
    "subscription_id": "59f755c9d4e70a7279eb95a7",
    "external_id": "59f755c9d4e70a7279eb95a8",
    "merchant_reference_code": "59f7574a3f9ebe7c62214832",
    "merchant_id": "xendit_recurring",
    "card_type": "CREDIT",
    "masked_card_number": "400000XXXXXX0002",
    "charge_type": "RECURRING",
    "card_brand": "VISA",
    "capture_amount": 10000,
    "eci": "7",
    "created": "2017-10-30T16:46:03.550Z"
}

Contoh: Notifikasi Langganan(Charge Gagal)

{
    "id": "59f7574b3f9ebe7c62214833",
    "status": "FAILED",
    "failure_reason": "CARD_DECLINED",
    "business_id": "5850e55d8d9791bd40096364",
    "subscription_id": "59f755c9d4e70a7279eb95a7",
    "external_id": "59f755c9d4e70a7279eb95a8",
    "merchant_reference_code": "59f7574a3f9ebe7c62214832",
    "merchant_id": "xendit_recurring",
    "card_type": "CREDIT",
    "masked_card_number": "400000XXXXXX0002",
    "charge_type": "RECURRING",
    "card_brand": "VISA",
    "capture_amount": 10000,
    "eci": "7",
    "created": "2017-10-30T16:46:03.550Z"
}

Setiap kali sebuah charge dibuat pada interval yang Anda tentukan, kami akan memberitahu Anda melalui notifikasi. Anda dapat menyertakan tautan URL Anda di Dasbor Pengaturan > Konfigurasi > Kartu Kredit > Atur URL Notifikasi Langganan

Parameter Deskripsi
id
required
string ID dari charge yang telah di-capture
status
required
string Status dari charge tersebut. Lihat Status-status pada Charge
failure_reason
optional
string Bila status adalah FAILED, lihat Alasan Kegagalan Charge
business_id
required
string ID akun bisnis Xendit Anda.
subscription_id
required
string ID Langganan yang berhubungan dengan charge tersebut.
external_id
required
string Pengidentifikasian unik untuk charge tersebut.
merchant_reference_code
required
string ID transaksi yang digunakan untuk melakukan rekonsiliasi dengan bank.
merchant_id
required
string Merchant ID yang digunakan untuk melakukan pemrosesan kartu kredit dengan bank.
card_type
required
string Tipe kartu kredit (KREDIT atau DEBIT)
masked_card_number
required
string 6 angka pertama dan 4 angka terakhir pada kartu kredit.
charge_type
required
string Tipe charge. Lihat Tipe Charge
card_brand
required
string Merk kartu (VISA, MASTERCARD,...)
capture_amount
required
number Nominal charge
eci
optional
string Status dari otentikasi 3DS. Lihat Kode ECI
created
required
string Cap waktu ISO yang mencatat kapan charge tersebut dibuat.

Mendapatkan Info Langganan

Definisi: Mendapatkan Info Langganan

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

Contoh Permintaan Mendapatkan Info Langganan

curl https://api.xendit.co/managed_subscriptions/591e7edafe439c3c698bc8a9 \
    -X GET \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
// BETA - Not yet added to PHP Library

Contoh Respon Mendapatkan Info Langganan

{
  "token_id": "591e7edafe439c3c698bc8a9",
  "authorization_id": "5963c7b313c7f01759213033",
  "amount": 75000,
  "frequency": "MONTHLY",
  "start_date": "2017-07-10T17:00:00.000Z",
  "end_date": "2018-07-09T17:00:00.000Z",
  "status": "ACTIVE",
  "id": "5963c7b313c7f01759213034",
  "credit_card_charges": [
        {
            "created": "2017-09-13T12:14:04.885Z",
            "business_id": "5848fdf860053555135587e7",
            "authorized_amount": 10000,
            "external_id": "59b920d8a51f84ad216e0cf8",
            "merchant_id": "xendit_recurring",
            "merchant_reference_code": "59b9210b29cd10f53469348c",
            "card_type": "CREDIT",
            "masked_card_number": "400000XXXXXX0002",
            "charge_type": "RECURRING",
            "card_brand": "VISA",
            "status": "CAPTURED",
            "capture_amount": 10000,
            "id": "5963c7b313c7f01759213034"
        }
    ]
}

Permintaan Mendapatkan Info Langganan

Parameter Deskripsi
id
required
string ID Langganan yang ingin diambil informasinya

Respon Mendapatkan Info Langganan

Respon Get Langganan akan sesuai dengan struktur dari Skema Langganan

Kesalahan Dalam Mendapatkan Info Langganan

Kode Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
MANAGED_SUBSCRIPTION_NOT_FOUND_ERROR
404
ID Langganan tidak dapat ditemukan

Pembatalan Langganan

Definisi: Pembatalan Langganan

POST https://api.xendit.co/managed_subscriptions/:id/cancellation

Contoh Permintaan Pembatalan Langganan

curl https://api.xendit.co/managed_subscriptions/591e7edafe439c3c698bc8a9/cancellation \
    -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
// BETA - Not yet added to PHP Library

Contoh Respon Pembatalan Langganan

{
  "token_id": "591e7edafe439c3c698bc8a9",
  "authorization_id": "5963c7b313c7f01759213033",
  "amount": 75000,
  "frequency": "MONTHLY",
  "start_date": "2017-07-10T17:00:00.000Z",
  "end_date": "2018-07-09T17:00:00.000Z",
  "status": "CANCELLED",
  "id": "5963c7b313c7f01759213034"
}

Permintaan Pembatalan Langganan

Parameter Deskripsi
id
required
string ID berlangganan yang anda mau batalkan.

Respon Pembatalan Langganan

Respon pembatalan Langganan akan mengkonfirmasi ke struktur yang diuraikan di Skema Langganan

Kesalahan Dalam Pembatalan Langganan

Pesan Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
ACTIVE_MANAGED_SUBSCRIPTION_NOT_FOUND_ERROR
404
ID Langganan aktif yang diberikan tidak ditemukan

Pengecekan Risiko Penipuan

Definisi: Pengecekan risiko penipuan

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

Contoh Permintaan Pengecekan Risiko Penipuan

curl -X POST \
  https://api.xendit.co/fraud_detection \
  -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
  -H 'content-type: application/json' \
  -d '{
  "billing_first_name": "Giuseppe",
  "billing_last_name": "Contini",
  "billing_street_1": "123 Elm St.",
  "billing_city": "Cambridge",
  "billing_state": "MA",
  "billing_country": "US",
  "billing_postal_code": "02139",
  "billing_email": "joe@xendit.co",
    "token_id": "5aebf2f75d20a0ba4d105185",
  "billing_customer_id": "joe_16171235678",
  "billing_phone_number": "+16171235678",
  "shipping_first_name": "Joe",
  "shipping_last_name": "Contini",
  "shipping_street_1": "Jl. Casablanca Raya 88",
  "shipping_city": "Jakarta Selatan",
  "shipping_state": "Jakarta",
  "shipping_country": "ID",
  "shipping_postal_code": "12870",
  "shipping_phone_number": "+6281213831234",
  "shipping_method": "JNE",
    "amount": 4000000,
  "items" : [
     {    
       "product_sku" : "106101100105",
       "product_code" : "Lightsaber_green_02",
       "product_name" : "Electrum Lightsaber",
       "quantity" : "1",
       "unit_price" : "4000000"
     }
  ]
}'

Contoh Request Body

{        
    "billing_first_name": "Giuseppe",
    "billing_last_name": "Contini",
    "billing_street_1": "123 Elm St.",
    "billing_city": "Cambridge",
    "billing_state": "MA",
    "billing_country": "US",
    "billing_postal_code": "02139",
    "billing_email": "joe@xendit.co",
    "token_id": "5aebf2f75d20a0ba4d105185",
    "billing_customer_id": "joe_16171235678",
    "billing_phone_number": "+16171235678",
    "shipping_first_name": "Joe",
    "shipping_last_name": "Contini",
    "shipping_street_1": "Jl. Casablanca Raya 88",
    "shipping_city": "Jakarta Selatan",
    "shipping_state": "Jakarta",
    "shipping_country": "ID",
    "shipping_postal_code": "12870",
    "shipping_phone_number": "+6281213831234",
    "shipping_method": "JNE",
    "amount": 4000000,
    "items" : [
       {    
         "product_sku" : "106101100105",
         "product_code" : "Lightsaber_green_02",
         "product_name" : "Electrum Lightsaber",
         "quantity" : "1",
         "unit_price" : "4000000"
       }
    ]
}

Contoh Respon Pengecekan Risiko Penipuan

{
    "id": "586f4a15dd75f9e1722f8488",
    "risk_score": 29,
    "recommendation": "ALLOW"
}

API ini memberikan nilai risiko dari suatu skenario transaksi, nilai risiko yang lebih tinggi berkemungkinan lebih tinggi bahwa transaksi tersebut adalah penipuan

Kolom pada Penipuan

Parameter Deskripsi
billing_first_name
required
string Nama depan
billing_last_name
required
string Nama akhir
billing_street_1
required
string Alamat
billing_city
required
string Kota
billing_state
required
string Negara bagian. Wajib diisi hanya untuk US/Canada.
billing_country
required
string Negara
billing_postal_code
required
string Kode pos. Wajib diisi hanya untuk US/Canada.
billing_email
required
string email
token_id
optional
string Token ID dari tokenisasi kartu
billing_customer_id
optional
string ID pelanggan
billing_phone_number
optional
string Nomor telepon
shipping_first_name
optional
string Nama depan pengiriman
shipping_last_name
optional
string Nama akhir pengiriman
shipping_street_1
optional
string Alamat pengiriman
shipping_city
optional
string Kota pengiriman
shipping_state
optional
string Negara bagian pengiriman. Wajib diisi hanya untuk U.S. and Canada
shipping_country
optional
string Negara pengiriman
shipping_postal_code
optional
string Kode pos pengiriman. Wajib diisi hanya untuk US/Canada.
shipping_phone_number
optional
string Nomor telepon pengiriman
shipping_method
optional
string Metode pengiriman
amount
required bila tidak ada masukan
items
number Jumlah total transaksi
items
required bila tidak ada masukan
amount
array Barang dalam pesanan. Lihat Detail barang penipuan

Kolom Barang pada Penipuan

Parameter Deskripsi
product_sku
required
string SKU produk
product_code
required
string Kode produk
product_name
required
string Nama produk
quantity
required
string Jumlah
unit_price
required
string Harga barang

Respon Pengecekan Risiko Penipuan

Parameter Deskripsi
id
string ID request
risk_score
number Nilai risiko penipuan dari suatu skenario transaksi
recommendation
string Tindakan yang disarankan untuk skenario transaksi. Lihat Rekomendasi

Rekomendasi

Rekomendasi Deskripsi
ALLOW
Skenario transaksi tidak terindikasi penipuan
BLOCK
Transaksi terindikasi penipuan dan seharusnya ditolak

Kesalahan Dalam Pengecekan Risiko Penipuan

Pesan Kesalahan Deskripsi
API_VALIDATION_ERROR
400
Input menggagalkan validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
INVALID_JSON_FORMAT
400
Request body bukan format JSON yang valid.
TOKEN_NOT_FOUND_ERROR
404
Token ID yang valid tidak dapat ditemukan
CARD_EXPIRED_ERROR
400
Token berisi informasi kartu yang sudah kedaluwarsa

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 Bank yang Tersedia Untuk Virtual Account

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

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

Pembaruan fixed virtual accounts

Endpoint: Pembaruan Fixed Virtual Account (FVA)

PATCH https://api.xendit.co/callback_virtual_accounts/{fixed_virtual_account_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

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

Notifikasi fixed virtual account

Endpoint: Notifikasi 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", "eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .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 settings -> configuration -> fixed virtual account.

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: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
     --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: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
     --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.

Permintaan 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

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
CALLBACK_VIRTUAL_ACCOUNT_PAYMENT_NOT_FOUND_ERROR
404
Tidak dapat menemukan notofi kasi pembayaran virtual account berdasarkan payment id

Mendapatkan informasi fixed virtual account

Endpoint: Mendapatkan Informasi Fixed Virtual Account

GET https://api.xendit.co/callback_virtual_accounts/{callback_virtual_account_id}

Contoh Permintaan Mendapatkan Informasi Fixed Virtual Account

curl https://api.xendit.co/callback_virtual_accounts/{callback_virtual_account_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

Parameter Deskripsi
callback_virtual_account_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
CALLBACK_VIRTUAL_ACCOUNT_NOT_FOUND_ERROR
404
Tidak dapat menemukan virtual account ini

Retail Outlets

Pembuatan fixed Virtual Account

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

Pembuatan Permintaan fixed Virtual Account

Contoh permintaan pembuatan fixed Virtual Account

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 Virtual Account 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 Virtual Account yang ingin Anda tetapkan. Jika Anda tidak mengirimkan, maka akan dipilih secara acak
expiration_date
optional
ISO Date Waktu yang ditentukan ketika fixed Virtual Account akan kedaluwarsa
is_single_use
optional
boolean Jika disetel ke true, fixed Virtual Account tidak akan aktif setelah dibayarkan

Pembuatan Kode Respon Pembayaran Tetap

Contoh Pembuatan Kode Respon Pembayaran Tetap

{
   "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 untuk Retail Outlet yang relevan, misalnya ALFAMART
prefix 3-6 karakter yang membedakan fixed Virtual Account Anda dari yang lain
name Nama untuk fixed Virtual Account 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 Virtual Account akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika fixed Virtual Account akan kedaluarsa
id Kode unik untuk fixed Virtual Account

Pembuatan Kode Kesalahan Pembayaran Tetap

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 Virtual Account 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

Pembaharuan fixed Virtual Account

Endpoint: Pembaharuan fixed Virtual Account

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

fixed Virtual Account sangat mudah disesuaikan, dan semuanya didasarkan pada kebutuhan Anda. Oleh karena itu, kami memberikan Anda endpoint ini untuk dengan mudah memperbarui fixed Virtual Account Anda yang Anda inginkan.

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

Pembaharuan respon fixed Virtual Account

Contoh Pembaharuan Respon fixed Virtual Account

{
   "owner_id": "5b614aa8e79f9214007244d4",
   "external_id": "123",
   "retail_outlet_name": "ALFAMART",
   "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 untuk Retail Outlet yang relevan, misalnya ALFAMART
prefix 3-6 karakter yang membedakan fixed Virtual Account Anda dari yang lain
name Nama untuk fixed Virtual Account 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 Virtual Account akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika fixed Virtual Account akan kedaluarsa
id Kode unik untuk fixed Virtual Account

Pembaharuan fixed Virtual Account

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 Virtual Account 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

Mendapatkan fixed Virtual Account

Endpoint: Mendapatkan fixed Virtual Account

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

Terkadang anda harus mengetahui detil dari fixed Virtual Account anda. Endpoint ini dapat digunakan untuk mendapatkan detil terakhir dari fixed Virtual Account anda.

Mendapatkan Permintaan fixed Virtual Account

Parameter Deskripsi
fixed_payment_code_id
required
string ID fixed Virtual Account yang akan diambil

Mendapatkan Respon fixed Virtual Account

Contoh Mendapatkan respon fixed Virtual Account

{
   "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 untuk Retail Outlet yang relevan, misalnya ALFAMART
prefix 3-6 karakter yang membedakan fixed Virtual Account Anda dari yang lain
name Nama untuk fixed Virtual Account 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 Virtual Account akan aktif setelah dibayar atau tidak
expiration_date Waktu ketika fixed Virtual Account akan kedaluarsa
id Kode unik untuk fixed Virtual Account

Mendapatkan Kesalahan fixed Virtual Account

Kode Kesalahan Deskripsi
FIXED_PAYMENT_CODE_NOT_FOUND_ERROR
404
fixed Virtual Account tidak dapat ditemukan

Memperbaiki Callback Kode Pembayaran

Endpoint: Memperbaiki callback kode pembayaran

POST https://yourcompany.com/fixed_payment_code_paid_callback_url

Ketika seseorang membayar ke fixed Virtual Account 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 pengaturan -> konfigurasi -> gerai ritel.

Memperbaiki permintaan callback fixed Virtual Account

Parameter Deskripsi
fixed_payment_code_payment_id ID unik untuk pembayaran fixed Virtual Account
owner_id ID pengguna anda
fixed_payment_code_id ID unik untuk fixed Virtual Account
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 Virtual Account Anda dari yang lain
retail_outlet_name Nama untuk Retail Outlet yang relevan, misalnya ALFAMART
amount Nominal yang telah dibayarkan
name Nama untuk fixed Virtual Account
transaction_timestamp Tanggal saat fixed Virtual Account dibayarkan

Memperbaiki kesalahan callback kode pembayaran

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

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

setingan awal: 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 faktur khusus ini.
Contoh : ["BRI", "MANDIRI", "BNI",
"ALFAMART", "CREDIT_CARD"]

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"
}
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 setingan awal 24 jam. Jika Anda ingin mengganti setingan tersebut, Anda dapat menghubungi customer support kami.
available_banks
bank_code
collection_type
bank_account_number
transfer_amount
Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
Kode Bank (Lihat Kode Bank)
POOL Tipe nonfixed virtual account
Akun bank tujuan pembayaran
Jumlah tagihan yang harus dibayar
available_retail_outlets

retail_outlet_name
payment_code
transfer_amount
Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
Nama outlet ritel
Kode unik identifikasi pembayaran
Jumlah tagihan yang harus dibayar
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

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.
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

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"
}
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 setingan awal 24 jam. Jika Anda ingin mengganti setingan tersebut, Anda dapat menghubungi customer support kami.
available_banks

bank_code
collection_type
bank_account_number
transfer_amount
Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
Kode Bank (Lihat Kode Bank)
POOL Tipe nonfixed virtual account
Akun bank tujuan pembayaran
Jumlah tagihan yang harus dibayar
available_retail_outlets

retail_outlet_name
payment_code
transfer_amount
Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
Nama outlet ritel
Kode unik identifikasi pembayaran
Jumlah tagihan yang harus dibayar
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 Mendapatkan Invoice

Kode Kesalahan Deskripsi
INVALID_JSON_FORMAT
400
Request body bukan format JSON yang valid.
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

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 setingan awal 24 jam. Jika Anda ingin mengganti setingan tersebut, Anda dapat menghubungi customer support kami.
available_banks

bank_code
collection_type
bank_account_number
transfer_amount
Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
Kode Bank (Lihat Kode Bank)
POOL Tipe nonfixed virtual account
Akun bank tujuan pembayaran
Jumlah tagihan yang harus dibayar
available_retail_outlets

retail_outlet_name
payment_code
transfer_amount
Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
Nama outlet ritel
Kode unik identifikasi pembayaran
Jumlah tagihan yang harus dibayar
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.
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", "eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==")
  .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 Settings -> Configuration -> Accept Payments.

Permintaan Notifikasi Invoice

Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Bank

curl --include \
     --request POST \
     --header "X-CALLBACK-TOKEN: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
     --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: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
     --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
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

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.

Disbursement

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

Create disbursement

Endpoint: Create Disbursement

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

Create Disbursement Request

Contoh Create Disbursement Request

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 Unique key to 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

Create Disbursement Response

Example Create Disbursement Response

{
  "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

Create Disbursement Errors

Kode Eror 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 Dashboard > Configuration > Disbursement. 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.
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.

Get disbursement by id

Endpoint: Get Disbursement by id

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

Endpoint ini digunakan untuk query pengecekan status transaksi disbursement.

Get Disbursement Request

Contoh Get Disbursement Request

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

Contoh Get Disbursement Response

{
  "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

Get Disbursement Errors

Error Codes Deskripsi
INVALID_JSON_FORMAT
400
The request body tidak dalam JSON Format yang valid.
INVALID_PERMISSION_ERROR
403
Disbursement tidak dapat diakses.
DIRECT_DISBURSEMENT_NOT_FOUND_ERROR
404
Direct disbursement tidak ditemukan.

Get disbursement by external_id

Endpoint: Get Disbursement by external_id

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

Endpoint ini digunakan untuk query status disbursement dengan external_id.

Get Disbursement Request

Contoh Get Disbursement Request

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

Get Disbursement Response

Contoh Get Disbursement Response

[{
  "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

Get Disbursement Errors

Error Code Deskripsi
DIRECT_DISBURSEMENT_NOT_FOUND_ERROR
404
Direct disbursement tidak ditemukan.

Disbursement callback

Endpoint: Disbursement Callback

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] (https://dashboard.xendit.co). Untuk informasi lebih lanjut tentang callback silakan baca [dokumen] ini (https://dashboard.xendit.co/docs/disbursements).

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.

Disbursement Callback Request

Contoh Disbursement Callback Request

curl --include \
     --request POST \
     --header "Content-Type: application/json" \
     --header "X-CALLBACK-TOKEN: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
     --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

Disbursement Callback Errors

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.

Get available disbursement banks

Endpoint: Get Available Disbursement Banks

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

Example Get Available Disbursement Banks Request

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.

Get Available Disbursement Banks Response

Get Available Disbursement Banks Response

[
  {
    "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.

Create batch disbursement

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

Endpoint: Create Batch Disbursement

POST https://api.xendit.co/batch_disbursements
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 Jumlah amount untuk di disburse
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 Description untuk menyertai disbursement
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

Create Batch Disbursement Response

Example Create Disbursement Response

{
  "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

Create Batch Disbursement Errors

Error Code 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.

Batch disbursement callback

Endpoint: Disbursement Callback

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. Silakan hubungi technical support kami untuk menetapkan URL callback Anda.

Disbursement Callback Request

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

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

Batch Disbursement Callback Errors

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.

Get available disbursement banks

Endpoint: Get Available Disbursement Banks

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

Contoh Get Available Disbursement Banks Request

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.

Get Available Disbursement Banks Response

Get Available Disbursement Banks Response

[
  {
    "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
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