NAV undefined
bash php javascript java go python csharp

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.

Untuk mempermudah proses eksplorasi dan pembelajaran API Xendit, kami merangkum seluruh API Xendit dalam bentuk Postman collection yang dapat Anda eksplorasi secara detil di bawah

Run in Postman

Silakan kunjungi Panduan Postman untuk pelajari lebih lanjut!

Otentikasi

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

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==

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

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

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

Lalu, enkripsikan ke frasa sandi Base64

eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

Tambahkan enkripsi tersebut ke dalam HTTP(s) header

Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

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

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

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

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

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

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

Libraries / SDKs

Xendit memiliki libraries untuk bahasa yang berbeda-beda. Setiap harinya, kami selalu berusaha untuk menambah jumlah libraries yang ada. Jika anda telah membuat library untuk bahasa lain dan ingin menambahkannya ke dalam daftar disini, kirimkan kepada kami link dari kode library tersebut dan kami akan menambahkannya ke daftar library yang telah ada!

Produk yang didukung

  1. Credit / Debit Cards (melalui Payments API)
  2. E-Wallets (melalui Payments API)
  3. QR Codes (melalui Payments API)
  4. Direct Debit (melalui Payments API)
  5. Transfer Bank / Virtual Accounts (melalui Payments API)
  6. Retail Outlets (melalui Payments API)
  7. Invoices
  8. Payouts
  9. Customers

Node.js

Instalasi melalui npm

npm install xendit-node

Lihat kode sumber pada Github Node.js library adalah library sisi server yang dapat membantu anda melakukan integrasi dengan Xendit melalui Node.js.

Instalasi

Anda dapat menginstall library ini dengan menggunakan npm npm install xendit-node atau lihat kode selengkapnya pada Github

PHP

Download package PHP di sini

https://packagist.org/packages/xendit/xendit-php

Library PHP adalah klien yang dibuat di atas PHP sehingga lebih mudah bagi Anda untuk berintegrasi dengan kami untuk menerima pembayaran melalui payment channel yang kami dukung.

Anda bisa mengunjungi library PHP kami di Packagist

Instalasi dan panduan upgrade

Lihat sumber Github kami untuk mempelajari cara meng-instal atau meng-upgrade library PHP Xendit

Go

Lihat sumber pada Github

Library Go adalah library sisi server yang dapat membantu anda melakukan integrasi dengan Xendit melalui bahasa pemrograman Go.

Instalasi

Anda dapat menginstall library Go ini dengan mengunjungi sumber kami di Github untuk panduan instalasi lengkap

Python

Instalasi melalui pip

pip install xendit-python

Lihat kode sumber pada Github

Xendit Python library adalah library sisi server yang dapat membantu anda melakukan integrasi dengan Xendit melalui Python.

Instalasi

Anda dapat menginstall library ini dengan menggunakan pip pip install xendit-python atau lihat kode selengkapnya pada Github

Android

Unduh Xendit Android SDK

https://github.com/xendit/xendit-sdk-android

Android SDK membantu Anda memproses pembayaran digital menggunakan Xendit dengan fitur sebagai berikut:

  1. Tokenisasi kartu kredit/debit dengan single-use token
  2. Tokenisasi kartu kredit/debit dengan multiple-use token
  3. Otentikasi transaksi kartu kredit/debit

iOS

Unduh Xendit iOS SDK

https://github.com/xendit/xendit-sdk-ios-src

iOS SDK membantu Anda memproses pembayaran digital menggunakan Xendit dengan fitur sebagai berikut:

  1. Tokenisasi kartu kredit/debit dengan single-use token
  2. Tokenisasi kartu kredit/debit dengan multiple-use token
  3. Otentikasi transaksi kartu kredit/debit

Request ID

Setiap permintaan API memiliki identifikasi yang terhubung dengan permintaan tersebut. Anda dapat mendapatkan informasi identifikasi permintaan API Request-ID pada header respon. Anda dapat menggunakan Request-ID untuk mencari log pada Log API di Dasbor. Pelajari lebih lanjut cara mencari Log API menggunakan Request-ID pada dokumentasi API Log.

Apabila Anda perlu menghubungi kami untuk pengecekan permintaan API yang spesifik, Anda dapat memberikan informasi Request-ID kepada kami untuk pengecekan yang lebih cepat dan akurat.

Versioning

Contoh Versioning

curl https://api.xendit.co/ewallets -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -H X-API-VERSION='2020-02-01' \
   -d external_id='ovo-ewallet' \
   -d amount=1000 \
   -d phone='08123123123'\
   -d ewallet_type='OVO'

Xendit selalu melakukan perkembangan terhadap API kami sebagai bentuk pertumbuhan kami bersama bisnis Anda. Kami selalu berusaha untuk membuat perubahan yang selalu kompatibel dengan versi sebelumnya. Ketika kami melakukan launching API yang tidak kompatibel dengan versi sebelumnya, kami menggunakan versioning untuk menghindari hal-hal yang tidak diharapkan seperti hal-hal yang dapat menyebabkan sistem Anda berhenti bekerja. Anda dapat melakukan upgrade ke versi terbaru kapanpun Anda siap untuk melakukannya.

Anda dapat mengunjungi Dasbor Anda untuk melihat versi API apa yang sedang berjalan. Untuk melakukan pengetesan versi API yang spesifik, Anda dapat mencantumkan versi API yang ingin anda gunakan melalui API-version header pada request API

Header Deskripsi
API-Version
optional
string Cantumkan parameter ini dalam request API untuk memilih versi API yang diinginkan.

Format: YYYY-MM-DD. Contoh: 2020-02-01

Bila tidak dicantumkan, Xendit akan menggunakan versi API yang sesuai dengan settingan Anda

Kompatibilitas Dengan Versi Sebelumnya

Perubahan-perubahan berikut merupakan perubahan API kami yang kompatibel dengan versi sebelumnya:

Panduan Migrasi

Panduan berikut dibuat untuk membantu Anda melakukan migrasi dengan aman dari versi sekarang ke versi yang terbaru:

  1. Tes API baru dengan menggunakan header API-Version di mode Test. Pastikan Anda telah menangani request, respon, error, dan callback data yang terbaru dengan benar. Skenario testing dapat dilihat di bagian Skenario Testing
  2. Ketika semua skenario testing telah berjalan sesuai yang diharapkan, Anda dapat mengganti versi API Anda untuk mode Test di Dasbor. Ketika Anda mengganti versi API Anda melalui Dasbor, maka versi yang akan dipakai untuk pemanggilan API yang tidak mencantumkan API-version pada header akan sesuai dengan nilai yang ada di setingan Dasbor
  3. Ulangi langkah nomor 1 dan 2 pada mode Live
  4. Ketika Anda menemukan kendala pada proses migrasi ini, Anda tetap dapat mengganti ulang ke versi API sebelumnya yang masih beroperasi

Catatan Perubahan

Versi API Resources Path Catatan Perubahan
2020-02-21 eWallets /ewallets Pembayaran OVO diproses secara asinkron dan callback akan dikirimkan setelah pembayaran telah selesai diproses
2019-05-01 Credit Cards /credit_card_charges/refunds Pembuatan Refund Kartu Kredit diproses secara sinkron

Rate Limit

API Rate Limit adalah fitur yang membatasi jumlah permintaan yang dapat dibuat oleh seorang pengguna atau akun ke API dalam jangka waktu tertentu. Ini sering digunakan untuk mencegah penggunaan yang berlebihan atau tidak pantas terhadap API, dan untuk memastikan bahwa semua pengguna memiliki akses yang adil terhadap sumber daya yang disediakan oleh API.

Xendit menggunakan algoritma Sliding Window untuk menerapkan API Rate Limit. Algoritma ini membagi jangka waktu tertentu (seperti sejam atau sehari) menjadi jendela yang lebih kecil, dan melacak jumlah permintaan yang dibuat dalam setiap jendela. Misalnya, jika Rate Limit adalah 50 permintaan per detik (RPS), dan ukuran jendela adalah satu menit, algoritma akan mengizinkan hingga 3000 permintaan dalam setiap jendela satu menit.

Secara umum, API Rate Limit diatur pada 3000 permintaan per menit (RPM) per endpoint per akun untuk mode Tes. Untuk mode Live, Rate Limit diatur pada 6000 permintaan per menit (RPM) per endpoint per akun. Nilai Rate Limit dapat berbeda per endpoint apabila dituliskan pada dokumentasi API tertentu. Kami menampilkan headers berikut dalam respons API agar Anda dapat memeriksa detail Rate Limit

Header Respon Contoh Nilai Deskripsi
Rate-Limit-Limit 6000 Kuota permintaan pada setiap jendela waktu
Rate-Limit-Remaining 5839 Sisa kuota permintaan pada jendela waktu sekarang
Rate-Limit-Reset 58.379 Waktu tersisa pada jendela waktu sekarang, didefinisikan dalam detik

Selain itu, setiap alamat IP yang unik dari klien diberlakukan limitasi (Rate Limit) untuk melakukan permintaan sampai dengan maksimum 18.000 permintaan per menit (RPM)

Jika Anda melebihi Rate Limit untuk sebuah endpoint, Anda akan menerima kode status HTTP 429 (Too Many Requests) dengan kode kesalahan RATE_LIMIT_EXCEEDED. Penting untuk menangani kesalahan ini dan kontrol/tunda permintaan Anda sampai kuota Rate Limit terisi kembali.

Berikut adalah beberapa praktik terbaik untuk menangani Rate Limit API dengan lancar sebagai klien:

  1. Implementasikan Rate Limit di aplikasi Anda: Penting untuk mengimplementasikan Rate Limit di aplikasi Anda sendiri agar tidak melebihi Rate Limit API. Ini dapat dilakukan dengan melacak jumlah permintaan yang dibuat dan waktu pembuatan mereka, serta membandingkannya dengan kebijakan Rate Limit API.
  2. Tangani kesalahan Rate Limit: Jika Anda menerima kode status HTTP 429 (Too Many Requests) dengan kode kesalahan RATE_LIMIT_EXCEEDED, penting untuk menangani kesalahan ini dengan lancar di aplikasi Anda. Salah satu cara untuk melakukannya adalah dengan mencoba meminta ulang setelah selang waktu tertentu telah berlalu, untuk memberi kuota Rate Limit kesempatan untuk terisi kembali.
  3. Gunakan backoff eksponensial: Anda dapat implementasi backoff eksponensial saat mencoba meminta ulang setelah kesalahan Rate Limit. Ini berarti meningkatkan jumlah waktu yang Anda tunggu antara cobaan ulang dengan faktor dua (atau kelipatan lainnya) setiap kali Anda menerima kesalahan Rate Limit. Misalnya, Anda mungkin mencoba meminta ulang setelah 1 detik, kemudian 2 detik, kemudian 4 detik, dan seterusnya. Ini membantu mengurangi risiko membebani API dengan terlalu banyak cobaan ulang dalam jangka waktu yang sangat singkat.
  4. Gunakan caching: Menyimpan hasil permintaan API secara lokal dapat membantu mengurangi jumlah permintaan yang dibuat ke API, serta meningkatkan performa aplikasi Anda. Dengan menyimpan hasil permintaan API secara lokal dan menggunakannya kembali sampai mereka menjadi kedaluwarsa, Anda dapat mengurangi kebutuhan untuk membuat permintaan sering ke API. Dengan mengikuti praktik terbaik ini, Anda dapat membantu menjamin bahwa aplikasi Anda menangani Rate Limit dengan lancar dan memberikan pengalaman yang andal dan konsisten untuk pengguna Anda.

Kami dapat mengurangi Rate Limit untuk mencegah penyalahgunaan, atau menaikkan limit untuk aplikasi yang mempunyai traffic tinggi. Untuk meningkatkan Rate Limit untuk akun Anda, Anda dapat menghubungi kami melalui email api.xendit.co 4 minggu lebih awal dengan menyediakan informasi Business ID Anda. Kami akan meninjau permintaan Anda dan mungkin dapat meningkatkan batas tergantung pada kebutuhan aplikasi Anda dan penggunaan keseluruhan API.

Secara keseluruhan, penting bagi Anda untuk mengelola penggunaan API Anda dengan hati-hati untuk memastikan bahwa Anda tidak melebihi Rate Limit dan mengganggu layanan untuk pengguna lain. Dengan menerapkan Rate Limit dan penanganan kesalahan yang tepat dalam aplikasi Anda, Anda dapat memastikan bahwa pengguna Anda memiliki pengalaman yang stabil dan konsisten saat mengakses API.

Error

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

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

Webhook

Xendit menggunakan webhook untuk memberikan notifikasi ke sistem atau aplikasi Anda ketika ada yang terjadi pada akun Anda, seperti disbursement telah berhasil dilakukan, Virtual Account telah dibuat atau dibayar, atau Invoice telah kedaluwarsa

Instalasi

Anda perlu menyediakan endpoint sistem Anda untuk menerima webhook dari Xendit. Notifikasi webhook yang dikirimkan akan melalui request POST ke URL yang Anda cantumkan di Dashboard. Anda dapat melakukan konfigurasi webhook URL Anda melalui Pengaturan Webhook. Anda juga dapat menggunakan tool seperti ngrok untuk membuat endpoint sementara untuk menerima webhook pada saat melakukan testing

Upaya Pengiriman dan Pengiriman Ulang

Penjelasan mengenai upaya pengiriman webhook ke sistem serta pengiriman ulang yang akan dijalankan apabila webhook tidak direspon dengan baik oleh sistem Anda

Melihat Events

Anda dapat mengecek informasi-informasi perihal upaya pengiriman webhook dari Xendit ke sistem Anda seperti respon terakhir dari sistem Anda, upaya-upaya pengiriman ulang, waktu untuk merespon webhook, dan status HTTP yang Xendit terima untuk setiap pengiriman. Semua informasi ini dapat Anda akses melalui Webhook tab

Upaya Pengiriman Ulang

Xendit akan mengirimkan webhook ke sistem Anda sebanyak 6 kali dengan jeda interval yang eksponensial dan akan berhenti ketika kami telah mendapatkan respon sukses dari sistem Anda atau pengiriman ulang sebanyak 6 kali telah dilakukan

Upaya Pengiriman Ulang Interval (relatif terhadap upaya terakhir) Interval (relatif terhadap upaya pertama)
1 15 menit 15 menit
2 45 menit 1 jam
3 2 jam 3 jam
4 3 jam 6 jam
5 6 jam 12 jam
6 12 jam 24 jam

Unduh Statistik Webhook Melalui Email

Anda juga dapat menerima ringkasan statistik webhook Anda (jumlah sukses dan gagal) setiap 6 jam yang akan dikirimkan ke alamat email yang Anda cantumkan. Anda dapat mengaktifkan fitur ini melalui Pengaturan Penerima Email

Penangan Event

Penangan webhook event dengan benar sangatlah krusial untuk memastikan integrasi Anda berjalan sesuai yang diharapkan

Segera Merespon Event

Bila Anda memiliki webhook script yang menjalankan logika-logika kompleks atau membuat panggilan lain melalui jaringan (network), besar kemungkinan script tersebut akan timeout sebelum Xendit mendapatkan respon berhasil. Idealnya, sistem Anda harus segera merespon event yang dikirimkan dengan kode status 2xx dan logika-logika tambahan untuk melanjutkan proses penanganan webhook Anda dianjurkan untuk dipisah agar webhook diterima dengan sukses dan cepat dan tidak timeout

Penanganan Events yang duplikat

Endpoint webhook kadang-kadang dapat menerima lebih dari satu event yang sama, biasanya akibat upaya pengiriman ulang setelah terjadi gangguan pengiriman pada pengiriman sebelumnya. Untuk menangani event yang duplikat, kami sarankan Anda untuk memproses event secara idempoten. Salah satu cara untuk melakukan ini adalah untuk mencatat event yang telah Anda proses dan tidak melakukan pemrosesan tambahan bila event tersebut telah dicatatkan sebelumnya

Urutan Events

Xendit tidak menjamin urutan pengiriman event dapat sesuai dengan waktu pembuatan webhook tersebut. Endpoint Anda dianjurkan untuk tidak menangani event secara berurutan. Anda juga dapat menggunakan API untuk mengambil data-data yang kurang, bila ada

Keamanan

Sangatlah penting untuk menjaga keamanan endpoint Anda untuk melindungi informasi customer Anda. Xendit menyediakan beberapa cara untuk melakukan verifikasi event agar event yang dikirimkan dapat dijamin berasal dari Xendit dengan kemanan yang terukur

Terima events dengan server HTTPS

Xendit akan melalukan validasi koneksi ke server Anda untuk mengecek keamanan koneksi antar server sebelum mengirimkan data webhook ke sistem Anda. Server Anda harus terkonfigurasi HTTPS dengan sertifikat server yang valid untuk menjamin keamanan koneksi antar server

Verifikasi events yand dikirimkan oleh Xendit

Xendit dapat menandai event webhook yang akan dikirimkan ke server Anda untuk menyatakan bahwa event tersebut dapat dijamin berasal dari Xendit. Kami akan melampirkan x-callback-token di header pada setiap event. Ini bertujuan untuk membantu Anda melakukan verifikasi bahwa data yang dikirimkan berasal dari Xendit dan bukan dari pihak lain

Parameter Header Keterangan
x-callback-token
string Webhook token unik untuk akun Xendit Anda yang digunakan untuk verifikasi asal mula event yang dikirimkan ke sistem Anda

Anda dapat mengambil data webhook token anda melalui Dasbor pada Pengaturan Webhook. Setiap token adalah unik per environment

Balance (Saldo)

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

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

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

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

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

Permintaan Pengecekan Saldo

Contoh Permintaan Pengecekan Saldo

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

  use Xendit\Xendit;
  require 'vendor/autoload.php';

  Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');

  $getBalance = \Xendit\Balance::getBalance('CASH');
  var_dump($getBalance);

?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });

const { Balance } = x;
const balanceSpecificOptions = {};
const b = new Balance(balanceSpecificOptions);

const resp = await b.getBalance()
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
  Balance balance = Balance.get();
} catch (XenditException e) {
  e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="

data := balance.GetParams{
  AccountType: "CASH",
}

resp, err := balance.Get(&data)
if err != nil {
  log.Fatal(err)
}

fmt.Printf("balance: %+v\n", resp)
from xendit import Xendit, BalanceAccountType

api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
Balance = xendit_instance.Balance

balance = Balance.get(
    account_type=BalanceAccountType.CASH,
)

print(balance)
string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

XenditClient xendit = new XenditClient(apiKey);
BalanceClient balance = xendit.Balance;

BalanceResponse holdingBalance = await balance.Get(BalanceAccountType.Holding);

Parameter Request (Money-out read permission)

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

Parameter Header Tipe Deskripsi
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

Parameter Query Tipe Deskripsi
account_type
optional
default: CASH
string Jenis akun yang dipilih (CASH atau HOLDING).
currency
optional
string Filter mata uang untuk pelanggan yang memiliki akun dengan lebih dari satu mata uang. Kolom ini bersifat opsional jika Anda hanya memiliki 1 mata uang. Jika lebih, harap pilih mata uang yang Anda inginkan.

contoh: IDR, PHP, USD
at_timestamp
optional
string Datetime format
Saldo yang dikembalikan dalam response ini merupakan saldo berdasarkan waktu atau timestamp yang diberikan

contoh: 2024-01-01T00:00:00.000Z

Parameter Respon

Contoh Respon Permintaan Pengecekan Saldo

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

Customers

API yang berguna untuk melakukan request yang terkait dengan customer. Dengan API ini anda bisa membuatkan profil customer anda, bisnis atau individual, beserta status KYC pendaftarannya, dan informasi lainnya. API ini berguna untuk anda yang menggunakan berbagai macam API pembayaran Xendit, termasuk penggunaan channel pembayaran Direct Debit, atau untuk memenuhi informasi KYC untuk registrasi transfer.

Customer Object

Customer Object adalah struktur data standar yang memuat informasi salah satu customer anda. Komponen-koponen utama yang dimiliki adalah:

Ketika satu (atau lebih) customer dikembalikan oleh endpoint yang ada di bagian ini, body response akan memuat Customer Object (atau array dari beberapa Customer Object). Setiap object memiliki struktur berikut:

Contoh Customer Object - Individual

{
    "id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
    "reference_id": "demo_1475801962607",
    "type": "INDIVIDUAL",
    "individual_detail": {
        "given_names": "John",
        "surname": "Doe",
        "nationality": "ID",
        "place_of_birth": "Jakarta",
        "date_of_birth": "1980-01-01",
        "gender": "MALE",
        "employment": {
            "employer_name": "Xendit",
            "nature_of_business": "Payment Gateway",
            "role_description": "Test dummy"
        }
    },
    "business_detail": null,
    "email": "customer@website.com",
    "mobile_number": "+628121234567890",
    "phone_number": "+628121234567890",
    "addresses": [{
        "street_line1": "Panglima Polim IV",
        "street_line2": "Ruko Grand Panglima Polim, Blok E",
        "city": "Jakarta Selatan",
        "province_state": "DKI Jakarta",
        "postal_code": "993448",
        "country": "ID",
        "category": "HOME",
        "is_primary": true
    }],
    "identity_accounts": [{
        "type": "CREDIT_CARD",
        "company": "OCBC",
        "description": "My account",
        "country": "ID",
        "properties":{
            "token_id": "586f0ba2ab70de5d2b409e0d"
        }
    }],
    "kyc_documents": [{
        "type": "IDENTITY_CARD",
        "sub_type": "NATIONAL_ID",
        "country": "ID",
        "document_name": "KTP",
        "document_number": "12356789012456",
        "expires_at": null,
        "holder_name": "John Doe",
        "document_images": [
            "file-ec700c1c-db17-4496-b1fb-04ebe551b412"
        ]
    }],
    "description": "My first customer",
    "date_of_registration": "2020-03-30",
    "domicile_of_registration": "ID",
    "metadata": {
        "foo": "bar"
    },
    "created": "2020-03-30T06:12:47.212Z",
    "updated": "2020-03-30T06:12:47.212Z"
}

Example Customer Object - Business

{
    "id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
    "reference_id": "demo_1475801962607",
    "type": "BUSINESS",
    "individual_detail": null,
    "business_detail": {
        "business_name": "ACME Corp",
        "business_type": "CORPORATION",
        "nature_of_business": null,
        "business_domicile": null,
        "date_of_registration": null
    },
    "email": "customer@website.com",
    "mobile_number": null,
    "phone_number": null,
    "addresses": [],
    "identity_accounts": [],
    "kyc_documents": [],
    "description": null,
    "metadata": null,
    "created": "2020-03-30T06:12:47.212Z",
    "updated": "2020-03-30T06:12:47.212Z"
}

Versi

Anda sedang melihat API versi 2020-10-31. Klik di sini untuk melihat versi sebelumnya.

Versi Changelog
2020-10-31 (terbaru) Pembaruan untuk mendukung jenis BUSINESS dan akun identitas umum
2020-05-19 Versi asli
Body Parameter Tipe Deskripsi
id string Customer ID yang dihasilkan oleh Xendit. Dimulai dengan cust-...
reference_id
required
string Identifikasi customer dari merchant
type
required
string Tipe customer.
Nilai-nilai yang didukung: INDIVIDUAL, BUSINESS
individual_detail
optional
object Objek JSON yang memuat informasi individual. Akan kosong apabila type bukan INDIVIDUAL
Parameter detail individu
given_names
required
string Nama depan customer
surname
optional
string Nama belakang atau nama keluarga customer
nationality
optional
string Kode negara kebangsaan customer

Format ISO 3166-2 Country Code
place_of_birth
optional
string Kota atau lokasi lain yang relevan dengan tempat lahir customer
date_of_birth
optional
string Tanggal lahir customer

Format YYYY-MM-DD string
gender
optional
string Jenis kelamin customer. Nilai-nilai yang didukung: MALE,
FEMALE,
OTHER
employment
optional
string Nama pemegang akun sesuai dengan pemberi akun
employer_name
optional
string Nama pemberi pekerjaan
nature_of_business
optional
string Industri atau jenis bisnis
role_description
optional
string Jenis pekerjaan atau jabatan
business_detail
optional
object Objek JSON yang memuat detail bisnis. Akan kosong apabila type bukan BUSINESS
Parameter detail bisnis
business_name
required
string Nama bisnis
trading_name
optional
string Nama trading
business_type
required
string Tipe entitas legal bisnis
Nilai-nilai yang didukung: CORPORATION,
SOLE_PROPRIETOR,
PARTNERSHIP,
COOPERATIVE,
TRUST,
NON_PROFIT,
GOVERNMENT
nature_of_business
optional
string Deskripsi free text dari tipe bisnis yang dijalankan oleh bisnis. Contoh: Ecommerce, Travel
business_domicile
optional
string Negara dimana bisnis teregistrasi

Format ISO 3166-2 Country Code
date_of_registration
optional
string Tanggal registrasi bisnis

Format YYYY-MM-DD string
mobile_number
optional
string Nomor telepon customer dalam format E.164

Maximum length 15 digits (not including "+")
phone_number
optional
string Nomor kontak tambahan customer dalam format E.164. Bisa juga telepon rumah

Maximum length 15 digits (not including "+")
FormatE.164 international standard +(country code)(subscriber number)
email
optional
string Alamat email customer

Maximum length 15 digits (not including "+")
addresses
optional
array Array dari alamat objek JSON yang memuat informasi alamat customer.
Parameter alamat
Field Description
country
required
string Negara tempat tinggal customer

Format ISO 3166-2 Country Code
street_line1
optional
string Lini 1 dari alamat jalan, contoh, nama gedung dan nomor apartemen

Maximum length 255 characters
street_line2
optional
string Lini 1 dari alamat jalan, contoh, nama dan nomor jalan

Maximum length 255 characters
city
optional
string Kota, kecamatan, atau kelurahan tempat tinggal customer

Maximum length 255 characters
province_state
optional
string Provinsi, negarabagian, atau wilayah tempat tinggal customer

Maximum length 255 characters
postal_code
optional
string ZIP/Kodepos customer

Maximum length 255 characters
category
optional
string Tipe alamat. Nilai-nilai yang didukung: HOME,
WORK,
PROVINCIAL
is_primary
optional
boolean Default ke false. Mengindikasi bahwa informasi yang diberikan mengacu ke alamat utama customer
identity_accounts
required
array Array dari objek JSON dengan informasi yang berhubungan dengan finansial, media sosial, atau akun lain yang terkait dengan customer. Array ini menyimpan informasi untuk tujuan KYC dan dapat menyimpan informasi akun untuk eksekusi pembayaran dalam ekosistem API Xendit.
Parameter akun identitas
Field Description
type
required
string Tipe akun. Nilai-nilai yang didukung: BANK_ACCOUNT,
EWALLET,
CREDIT_CARD,
PAY_LATER,
OTC,
QR_CODE,
SOCIAL_MEDIA
company
optional
string Institusi penerbit yang terkahir dengan akun (contoh, OCBC, GOPAY, 7-11). Apabila menambahkan akun finansial yang didukung oleh Xendit, kami menganjurkan anda untuk menggunakan channel_code untuk field ini

Maximum length 100 characters
description
optional
string Deskripsi free text dari akun

Maximum length 255 characters
country
optional
string Negara penerbit akun, apabila relevan

Format ISO 3166-2 Country Code
properties
optional
string Objek JSON dengan kontek spesifik akun sesuai yang dibutuhkan contoh,

For BANK_ACCOUNT types:
Parameter akun bank
account_number
required
string Pengidentifikasi unik akun sesuai dengan catatan bank
account_holder_name
required
string Nama pemegang akun sesuai dengan catatan bank. Harus sama persis dengan nama pemegang akun yang teregistrasi
swift_code
optional
string Kode swift untuk pembayaran internasional
account_type
optional
string Tipe akun free text, contoh, Savings, Transaction, Virtual Account
account_details
optional
string Informasi akun yang berpotensi disembunyikan, hanya untuk tujuan penampilan
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

For EWALLET types:
Parameter ewallet
account_number
required
string Pengidentifikasi akun unik sesuai dengan catatan ewallet
account_holder_name
optional
string Nama pemegang akun sesuai dengan catatan ewallet. Harus sama persis dengan nama pemegang akun yang teregistrasi
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe CREDIT_CARD:
Parameter kartu kredit
token_id
required
string Token id yang didapatkan saat tokenisasi

Untuk tipe OTC:
Parameter Over The Counter
payment_code
required
string Fixed payment code yang lengkap (termasuk prefix)
expires_at
optional
string Tanggal kadaluwarsa payment code

Format YYYY-MM-DD string

Untuk tipe QR_CODE:
Parameter kode QR
qr_string
required
string Representasi string dari kode QR unik

Untuk tipe PAY_LATER:
Parameter bayar nanti
account_id
required
string String alfanumerik yang mengidentifikasi akun ini. Biasanya adalah alamat email atau nomor telepon
account_holder_name
optional
string Nama pemegang akun sesuai dengan pemberi akun
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe SOCAL_MEDIA:
Parameter media sosial
account_id
required
string String alfanumerik yang mengidentifikasi akun ini. Biasanya adalah alamat email atau nomor telepon
account_handle
optional
string Nama akun sesuai dengan pemberi akun
kyc_documents
required
array Array dari objek JSON berisi dokumen KYC customer ini.
Parameter dokumen kyc
Field Description
country
required
string Negara penerbit dokumen

Format ISO 3166-2 Country Code
type
required
string Tipe ID generik
Nilai-nilai yang didukung: BIRTH_CERTIFICATE,
BANK_STATEMENT,
DRIVING_LICENSE,
IDENTITY_CARD,
PASSPORT,
VISA,
BUSINESS_REGISTRATION,
BUSINESS_LICENSE
sub_type
optional
string Tipe ID spesifik untuk tipe IDENTITY_CARD.
Nilai-nilai yang didukung: NATIONAL_ID,
CONSULAR_ID,
VOTER_ID,
POSTAL_ID,
RESIDENCE_PERMIT,
TAX_ID,
STUDENT_ID,
MILITARY_ID,
MEDICAL_ID
document_name
optional
string Deskripsi free text dari tipe dokumen (contoh, NIB, SIUP, AKTA)

Maximum length 255 characters
document_number
optional
string Alfanumerik unik dari nomor atau kode dokumen identitas

Maximum length 255 characters
expires_at
optional
string Tanggal kadaluwarsa, apabila relevan.

Format YYYY-MM-DD string
holder_name
optional
string Free text untuk menyimpan nama lengkap individu atau bisnis sesuai yang tertera di dokumen, apabila relevan

Maximum length 255 characters
document_images
required
string[] Array dari file id yang didapatkan dari mengunggah file ke files endpoint, merepresentasikan gambar depan/belakang dokumen, dalam png/jpg/jpeg/pdf format
description
optional
string Deskripsi customer dari merchant.

Maximum length 500 characters
date_of_registration
optional
string Tanggal dimana akun pembeli sudah dibuat di dalam website merchant

Format YYYY-MM-DD string
domicile_of_registration
optional
string Negara dimana akun pembeli ini dibuat di dalam website merchant

Format ISO 3166-2 Country Code
metadata
optional
object Objeck dari informasi tambahan yang diberikan pada saat pembuatan customer
created
required
string Timestamp pembuatan customer dalam format ISO
updated
required
string Timestamp perubahan status customer terakhir dalam format ISO

Create Customer

Lakukan request POST ke endpoint ini untuk membuat customer untuk penggunaan nanti dengan endpoint-endpoint pembayaran.

Endpoint: Create Customer

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

Versi

Anda sedang melihat API versi 2020-10-31. Klik di sini untuk melihat versi sebelumnya.

Versi Changelog
2020-10-31 (terbaru) Pembaruan untuk mendukung jenis BUSINESS dan akun identitas umum
2020-05-19 Versi asli

Parameter Request

Contoh Request Create Customer

curl https://api.xendit.co/customers -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -H 'Content-Type: application/json'
   --data-raw '{
     "reference_id": "demo_1475801962607"
     "type": "INDIVIDUAL",
     "individual_detail": {
       "given_names": "John",
       "surname": "Doe"
     },
     "email": "customer@website.com",
     "mobile_number": "+628121234567890"
     }'
<?php
  $url = "https://api.xendit.co/customers";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";
  $data = [
    "reference_id" => "demo_1475801962607"
    "type" => "INDIVIDUAL",
    "individual_detail" => [
       "given_names" => "John",
       "surname" => "Doe"
    ],
    "email" => "customer@website.com",
    "mobile_number" => "+628121234567890"
  ];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
let url = "https://api.xendit.co/customers";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");

var reqBody = JSON.stringify({
  "reference_id": "demo_1475801962607"
  "type": "INDIVIDUAL",
  "individual_detail": {
    "given_names": "John",
    "surname": "Doe"
  },
  "email": "customer@website.com",
  "mobile_number": "+628121234567890"});

var requestOptions = {
  method: 'POST',
  headers: headers,
  body: reqBody,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/customers"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')

payload = {
  "reference_id": "demo_1475801962607",
  "type": "INDIVIDUAL",
  "individual_detail": {
    "given_names": "John",
    "surname": "Doe"
  },
  "email": "customer@website.com",
  "mobile_number": "+628121234567890"
}
auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

XenditClient xendit = new XenditClient(apiKey);
CustomerClient customer = xendit.Customer;

CustomerParameter individualParameter = new CustomerParameter
{
  ReferenceId = "demo_11212163",
  Type = CustomerType.Individual,
  IndividualDetail = new IndividualDetail
  {
    GivenNames = "John",
    Gender = CustomerGender.Male,
  },
  IdentityAccount = new IdentityAccount[]
  {
    new IdentityAccount
    {
      Country = Country.Indonesia,
      Type = CustomerIdentityAccountType.BankAccount,
      Properties = new IdentityAccountProperties { AccountNumber = "account_number" }
    }
  },
  KycDocuments = new KycDocument[]
  {
    new KycDocument
    {
      Country = Country.Indonesia,
      Type = CustomerKycDocumentType.IdentityCard,
      SubType = CustomerKycDocumentSubType.NationalId,
    }
  },
};

CustomerResponse individualCustomerVersion20201031 = await customer.Create(individualParameter);
Header Parameter Tipe Deskripsi
IDEMPOTENCY-KEY
optional
string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.

Karakter Spesial dan alfanumerik
Panjang maksimum 100 karakter
Panjang minimum 1 karakter
API-VERSION
optional
string Versi API dalam format tanggal (contoh: 2020-10-31). Gunakan header ini untuk menggunakan versi API tertentu. Daftar versi API dapat ditemukan di sini.
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
Body Parameter Tipe Deskripsi
reference_id
required
string Pengidentifikasi customer yang diberikan oleh merchant.
Request dengan reference_id duplikat akan mengembalikan error. Anda harus melakukan PATCH request pada resource customer object.

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
type
required
string Tipe customer.
Nilai-nilai yang didukung: INDIVIDUAL, BUSINESS
individual_detail
conditionally required
object Object JSON yang memuat informasi individual. Dibutuhkan apabila tipe adalah INDIVIDUAL
Parameter detail individu
given_names
required
string Nama depan atau nama utama customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
surname
optional
string Nama belakang atau nama keluarga customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
nationality
optional
string Kode negara kebangsaan customer

Format ISO 3166-2 Country Code
place_of_birth
optional
string Kota atau lokasi yang relevan dengan tempat tinggal customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
date_of_birth
optional
string Tanggal lahir customer

Format YYYY-MM-DD string
gender
optional
string Jenis kelamin customer. Nilai-nilai yang didukung: MALE,
FEMALE,
OTHER
employment
optional
string Nama pemegang akun sesuai dengan pemberi akun
employer_name
optional
string Nama pemberi pekerjaan

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
nature_of_business
optional
string Industri atau sifat bisnis

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
role_description
optional
string Jenis pekerjaan atau jabatan

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_detail
conditionally required
object Object JSON object yang memuat informasi bisnis. Dibutuhkan apabila tipe adalah BUSINESS
Parameter detail bisnis
business_name
required
string Nama bisnis. Dibutuhkan apabila tipe adalah BUSINESS

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
trading_name
optional
string Trading name.

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_type
required
string Tipe entitas legal bisnis
Nilai-nilai yang didukung: CORPORATION,
SOLE_PROPRIETOR,
PARTNERSHIP,
COOPERATIVE,
TRUST,
NON_PROFIT,
GOVERNMENT
nature_of_business
optional
string Deskripsi free text mengenai tipe bisnis yang dilakukan oleh entitas ini. Contoh: Ecommerce, Travel

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_domicile
optional
string Negara dimana bisnis teregistrasi

Format ISO 3166-2 Country Code
date_of_registration
optional
string Tanggal registrasi bisnis

Format YYYY-MM-DD string
mobile_number
optional
string Nomor HP customer dalam format E.164

Maximum length 50 characters
phone_number
optional
string Nomor kontak tambahan customer dalam format E.164. Bisa sebagai telepon rumah

Maximum length 50 characters
FormatE.164 international standard +(country code)(subscriber number)
hashed_phone_number
optional
string Hashed phone number

Maximum length 255 characters
email
optional
string Alamat email customer

Maximum length 50 characters
addresses
optional
array Array dari alamat objeck JSON yang memuat informasi alamat customer.
Parameter alamat
Field Description
country
required
string Negara tempat tinggal customer

Format ISO 3166-2 Country Code
street_line1
optional
string Lini satu alamat, contoh, nama gedung dan nomor apartemen

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
street_line2
optional
string Lini dua alamat, contoh, nama dan nomor jalan

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
city
optional
string Kota, kecamatan, atau kelurahan tempat tinggal customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
province_state
optional
string Provinsi, negarabagian, atau wilayah tempat tinggal customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
postal_code
optional
string ZIP/Kodepos customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
category
optional
string Tipe alamat. Nilai-nilai yang didukung: HOME,
WORK,
PROVINCIAL

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
is_primary
optional
boolean Default ke false. Mengindikasi bahwa informasi yang diberikan mengacu pada alamat utama customer
identity_accounts
optional
array Array objek JSON yang memuat informasi yang berhubungan dengan finansial, media sosial, atau akun lain yang terkair dengan customer. Array ini menyimpan informasi untuk tujuan KYC dan informasi akun untuk eksekusi pembayaran dalam ekosistem pembayaran dengan API Xendit.
Parameter akun identitas
Field Description
type
required
string Tipe akun. Nilai-nilai yang didukung: BANK_ACCOUNT,
EWALLET,
CREDIT_CARD,
PAY_LATER,
OTC,
QR_CODE,
SOCIAL_MEDIA
company
optional
string Institusi penerbit yang berhubungan dengan akun (contoh, OCBC, GOPAY, 7-11). Apabila menambahkan akun finansial yang didukung Xendit, kami menganjurkan anda untuk menggunakan channel_code untuk field ini

Maximum length 100 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
description
optional
string Deskripsi free text untuk akun

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
country
optional
string Negara penerbit akun, apabila relevan

Format ISO 3166-2 Country Code
properties
optional
string Objek JSON dengan kontek spesifik akun sesuai dengan yang dibutuhkan, contoh ,

Untuk tipe BANK_ACCOUNT:
Parameter akun bank
account_number
required
string Pengidentifikasi akun unik sesuai dengan catatan bank

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_holder_name
required
string Nama pemegang akun sesuai dengan catatan bank. Harus sama persis dengan nama yang terdaftar

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
swift_code
optional
string Kode swift untuk pembayaran internasional

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_type
optional
string Tipe akun free text, contoh, Savings, Transaction, Virtual Account

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_details
optional
string Informasi akun yang berpotensi disembunyikan, hanya untuk tujuan penampilan

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe EWALLET:
Parameter ewallet
account_number
required
string Pengidentifikasi akun unik sesuai dengan catatan ewallet

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_holder_name
optional
string Nama pemegang akun sesuai dengan catatan ewallet. Harus sama persis dengan nama yang terdaftar

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe CREDIT_CARD:
Parameter kartu kredit
token_id
required
string Token id yang didapatkan saat tokenisasi

Untuk tipe OTC:
Parameter Over The Counter
payment_code
required
string Fixed payment code selengkapnya (termasuk prefix)
expires_at
optional
string Tanggal kadaluwarsa payment code

Format YYYY-MM-DD string

Untuk tipe QR_CODE:
Parameter kode QR
qr_string
required
string Representasi string dari kode unik QR

Untuk tipe PAY_LATER:
Parameter bayar nanti
account_id
required
string String alfanumerik yang mengidentifikasi akun ini. Biasanya adalah alamat email atau nomor telepon
account_holder_name
optional
string Nama pemegang akun sesuai dengan catatan bank

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe SOCAL_MEDIA:
Parameter media sosial
account_id
required
string String alfanumerik yang mengidentifikasi akun ini. Biasanya adalah alamat email atau nomor telepon
account_handle
optional
string Nama pemegang akun sesuai dengan pemberi akun

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
kyc_documents
optional
array Array objek JSON dengan dokumen yang dikumpulkan untuk KYC customer ini.
Parameter dokumen kyc
Field Description
country
required
string Negara penerbit dokumen ini

Format ISO 3166-2 Country Code
type
required
string Tipe ID generik
Nilai-nilai yang didukung: BIRTH_CERTIFICATE,
BANK_STATEMENT,
DRIVING_LICENSE,
IDENTITY_CARD,
PASSPORT,
VISA,
BUSINESS_REGISTRATION,
BUSINESS_LICENSE
sub_type
optional
string Tipe ID spesifik untuk tipe IDENTITY_CARD.
Nilai-nilai yang didukung: NATIONAL_ID,
CONSULAR_ID,
VOTER_ID,
POSTAL_ID,
RESIDENCE_PERMIT,
TAX_ID,
STUDENT_ID,
MILITARY_ID,
MEDICAL_ID
document_name
optional
string Deskripsi free text dari tipe dokumen (contoh, NIB, SIUP, AKTA)

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
document_number
optional
string Nomor atau kode alfanumerik unik identitas

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
expires_at
optional
string Tanggal kadaluwarsa, apabila relevan.

Format YYYY-MM-DD string
holder_name
optional
string Free text untuk menangkap nama lengkap invidual atau bisnis sesuai yang ada di dokumen, apabila relevan

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
document_images
optional
string[] Array dari file id yang didapatkan dari upload ke files endpoint, mengrepresentasikan gambar depan/belakang dokumen, dalam format png/jpg/jpeg/pdf
description
optional
string Deskripsi customer yang diberikan merchant.

Maximum length 500 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
date_of_registration
optional
string Tanggal dimana akun pembeli sudah dibuat di dalam website merchant

Format YYYY-MM-DD string
domicile_of_registration
optional
string Negara dimana akun pembeli ini dibuat di dalam website merchant

Format ISO 3166-2 Country Code
metadata
optional
object Objek dari informasi tambahan yang berhubungan dengan customer. Definisikan sifat dan nilai JSON sesuai yang dibutuhkan untuk meneruskan informasi melalui API.
Anda bisa melakukan spesifikasi sampai 50 kunci, dengan nama kunci sampai 40 karakter dan nilai sampai 500 karakter.
Ini hanya untuk penggunaan anda dan tidak akan digunakan oleh Xendit.

Parameter Respon

Respon sukses akan berisi satu Customer Object

Kode Error

Lihat lainnya error pada umumnya di sini.

Kode Error Deskripsi
DUPLICATE_ERROR
409
Permintaan dengan reference_id yang sama telah dibuat sebelumnya. Harap masukkan reference_id yang unik.
IDEMPOTENCY_ERROR
409
Idempotency-key telah digunakan sebelumnya. Gunakan idempotency-key yang unik dan coba kembali.

Get Customer

Untuk mendapatkan satu objek customer

Endpoint: Get Customer

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

Versi

Anda sedang melihat API versi 2020-10-31. Klik di sini untuk melihat versi sebelumnya.

Versi Changelog
2020-10-31 (terbaru) Pembaruan untuk mendukung jenis BUSINESS dan akun identitas umum
2020-05-19 Versi asli

Parameter Request

Contoh Request Get Customer

curl https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f -X GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   --header 'API-VERSION: 2020-10-31'
<?php
  $url = "https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";
  $headers[] = "API-VERSION: 2020-10-31";

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
let url = "https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
headers.append("API-VERSION", "2020-10-31");

var requestOptions = {
  method: 'GET',
  headers: headers,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="

data := customer.getCustomer{
  id: 'cust-239c16f4-866d-43e8-9341-7badafbc019f'
}

resp, err := customer.getCustomer(&getCustomerByReferenceIDData)
if err != nil {
  log.Fatal(err)
}

fmt.Printf("retrieved customer: %+v\n", resp)
try {
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

    Customer[] customers = Customer.getCustomer("cust-239c16f4-866d-43e8-9341-7badafbc019f");
} catch (XenditException e) {
    e.printStackTrace();
}
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')

auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("GET", url, headers=headers)

print(response.text)
Header Parameter Tipe Deskripsi
API-VERSION
optional
string Versi API dalam format tanggal (contoh: 2020-10-31). Gunakan header ini untuk menggunakan versi API yang anda inginkan. Daftar versi API dapat ditemukan di sini.
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
Parameter Tipe Deskripsi
id string Customer ID yang dihasilkan oleh Xendit. Dimulai dengan cust-...

Parameter Respon

Respon sukses akan berisi satu Customer Object

Kode Error

Lihat lainnya error pada umumnya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
id yang diberikan tidak ada. Mohon cek id tersebut dan coba kembali

Get Customer by Reference ID

Untuk mendapatkan array customer objek sesuai dengan reference_id - pengidentifikasi yang anda berikan

Endpoint: Get Customer menggunakan Reference ID

GET https://api.xendit.co/customers?reference_id={reference_id}

Versi

Anda sedang melihat API versi 2020-10-31. Klik di sini untuk melihat versi sebelumnya.

Versi Changelog
2020-10-31 (terbaru) Pembaruan untuk mendukung jenis BUSINESS dan akun identitas umum
2020-05-19 Versi asli

Parameter Request

Contoh Request Get Customer menggunakan Reference ID

curl https://api.xendit.co/customers?reference_id=demo_1475801962607 -X GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
<?php
  $url = "https://api.xendit.co/customers";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";

  $queryString = "?reference_id=demo_1475801962607";

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
let url = "https://api.xendit.co/customers";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");

let queryString = "?reference_id=demo_1475801962607";

var requestOptions = {
  method: 'GET',
  headers: headers,
  redirect: 'follow'
};

fetch(url + queryString, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/customers?reference_id=demo_1475801962607"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')

auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("GET", url, headers=headers)

print(response.text)
Query Parameter Tipe Deskripsi
reference_id
required
string Pengidentifikasi anda untuk customer

Parameter Respon

Contoh respon sukses Get Customer menggunakan Reference ID

{
    "data": [{
        "id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "demo_1475801962607",
        "type": "INDIVIDUAL",
        "individual_detail": {
            "given_names": "John",
            "surname": "Doe",
            "nationality": null,
            "place_of_birth": null,
            "date_of_birth": null,
            "gender": null,
            "employment": null
        },
        "business_detail": null,
        "email": "customer@website.com",
        "mobile_number": null,
        "phone_number": null,
        "hashed_phone_number": null,
        "addresses": [],
        "identity_accounts": [],
        "kyc_documents": [],
        "description": null,
        "metadata": null,
        "created": "2020-03-30T06:12:47.212Z",
        "updated": "2020-03-30T06:12:47.212Z"
    }],
    "has_more": false
}
Header Parameter Tipe Deskripsi
API-VERSION
optional
string Versi API dalam format tanggal (contoh: 2020-10-31). Gunakan header ini untuk menggunakan versi API yang anda inginkan. Daftar versi API dapat ditemukan di sini.
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
Body Parameter Tipe Deskripsi
data array Array dari Customer Objects yang dikembalikan oleh query. Array bisa kosong
has_more boolean Mengidentifikasi apakah ada item lainnya yang dapat di-query dengan after_id dari item terakhir pada hasil sekarang

Kode Error

Lihat lainnya error pada umumnya di sini.

Update Customer

Lakukan request PATCH ke endpoint ini untuk melakukan update pada data customer Anda. Anda hanya dapat mengubah data-data sesuai dengan parameter yang tersedia pada request. Perubahan apapun pada field-field di objek customer akan menggantikan data tersebut secara keseluruhan.

Apabila anda ingin menambahkan data pada suatu array, request PATCH Anda harus memiliki kondisi akhir array yang diinginkan (contoh, konten yang ada sekarang dan elemen array baru yang ingin anda tambahkan). Berikan nilai NULL untuk menghapus konten yang ada sekarang.

Perhatikan bahwa reference_id dan type pada suatu customer tidak dapat di-update.

Endpoint: Update Customer

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

Versi

Anda sedang melihat API versi 2020-10-31. Klik di sini untuk melihat versi sebelumnya.

Versi Changelog
2020-10-31 (terbaru) Pembaruan untuk mendukung jenis BUSINESS dan akun identitas umum
2020-05-19 Versi asli

Parameter Request

Contoh Request Update Customer

curl https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f -X PATCH \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -H 'Content-Type: application/json'
   --data-raw '{
     "individual_detail": {
       "given_names": "Jane",
       "surname": "Doe"
     }
     }'
<?php
  $url = "https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";
  $data = [
    "individual_detail" => [
       "given_names" => "Jane",
       "surname" => "Doe"
    ]
  ];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
let url = "https://api.xendit.co/customers/cust-239c16f4-866d-43e8-9341-7badafbc019f";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");

var reqBody = JSON.stringify({
  "type": "INDIVIDUAL",
  "individual_detail": {
    "given_names": "John",
    "surname": "Doe"
  },
  "email": "customer@website.com",
  "mobile_number": "+628121234567890"});

var requestOptions = {
  method: 'PATCH',
  headers: headers,
  body: reqBody,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/customers"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')

payload = {
  "type": "INDIVIDUAL",
  "individual_detail": {
    "given_names": "John",
    "surname": "Doe"
  },
  "email": "customer@website.com",
  "mobile_number": "+628121234567890"
}
auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("PATCH", url, headers=headers, data=payload)

print(response.text)
string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

XenditClient xendit = new XenditClient(apiKey);
CustomerClient customer = xendit.Customer;

CustomerParameter individualParameter = new CustomerParameter
{
  Type = CustomerType.Individual,
  IndividualDetail = new IndividualDetail
  {
    GivenNames = "John",
    Gender = CustomerGender.Male,
  }
};

CustomerResponse individualCustomerVersion20201031 = await customer.Update(individualParameter);
Header Parameter Tipe Deskripsi
API-VERSION
optional
string Versi API dalam format tanggal (contoh: 2020-10-31). Gunakan header ini untuk menggunakan versi API yang anda inginkan. Daftar versi API dapat ditemukan di sini.
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
Body Parameter Tipe Deskripsi
individual_detail
optional
object Objek JSON object yang memuat detil individu. Akan gagal validasi API apabila type bukan INDIVIDUAL
Parameter detail individu
given_names
required
string Nama awal atau nama utama dari suatu customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
surname
optional
string Nama akhir atau nama keluarga dari suatu customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
nationality
optional
string Kode negara dari kewarganeraan customer

Format ISO 3166-2 Country Code
place_of_birth
optional
string Kota atau lokasi lain yang relevan dengan tempat kelahiran customer

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
date_of_birth
optional
string Tanggal lahir customer

Format YYYY-MM-DD string
gender
optional
string Jenis kelamin customer. Supported values: MALE,
FEMALE,
OTHER
employment
optional
string Nama pemegang akun sesuai dengan pemberi akun
employer_name
optional
string Nama pemberi kerja

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
nature_of_business
optional
string Industri atau jenis bisnis

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
role_description
optional
string Okupasi atau jabatan

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_detail
optional
object Objek JSON object yang memuat detil bisnis. Akan gagal validasi API apabila type bukan BUSINESS
Parameter detail bisnis
business_name
required
string Nama bisnis

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_type
required
string Tipe entitas legal dari bisnis
Nilai-nilai yang didukung: CORPORATION,
SOLE_PROPRIETOR,
PARTNERSHIP,
COOPERATIVE,
TRUST,
NON_PROFIT,
GOVERNMENT
nature_of_business
optional
string Deskripsi free text dari tipe bisnis yang dikejar oleh bisnis ini. Contoh: Ecommerce, Travel

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
business_domicile
optional
string Negara yang teregistrasi untuk bisnis ini

Format ISO 3166-2 Country Code
date_of_registration
optional
string Tanggal registrasi bisnis

Format YYYY-MM-DD string
mobile_number
optional
string Nomor seluler dari customer dalam format E.164

Maximum length 50 characters
phone_number
optional
string Nomor kontak customer tambahan dalam format E.164. Bisa sebagai telepon rumah

Maximum length 50 characters
FormatE.164 international standard +(country code)(subscriber number)
email
optional
string Alamat e-mail customer

Maximum length 50 characters
addresses
optional
array Array dari alamat objek JSON yang memuat berbagai informasi alamat customer.
Parameter alamat
Field Description
country
required
string Negara tempat tinggal customer

Format ISO 3166-2 Country Code
street_line1
optional
string Line 1 dari alamat, contoh, nama gedung dan nomor apartment

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
street_line2
optional
string Line 2 dari alamat, contoh, nama dan nomor jalan

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
city
optional
string Kota, kecamatan, atau kelurahan tempat tinggal customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
province_state
optional
string Provinsi, negarabagian, atau wilayah tempat tinggal customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
postal_code
optional
string ZIP/Kodepos customer

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
category
optional
string Tipe alamat. Nilai-nilai yang didukung: HOME,
WORK,
PROVINCIAL

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
is_primary
optional
boolean Nilai default adalah false. Menandakan bahwa informasi yang diberikan mengacu pada alamat utama customer
identity_accounts
optional
array Array dari objek JSON dengan informasi yang terkait dengan finansial, media sosial, atau akun lain yang berhubungan dengan customer. Array ini dapat menyimpan informasi untuk tujuan KYC dan mendukung penyimpanan informasi akun untuk melakukan pembayaran dalam ekosistem API Xendit.
Parameter akun identitas
Field Description
type
required
string Tipe akun. Nilai-nilai yang didukung: BANK_ACCOUNT,
EWALLET,
CREDIT_CARD,
PAY_LATER,
OTC,
QR_CODE,
SOCIAL_MEDIA
company
optional
string Institusi penerbit yang terasosiasi dengan akun tersebut (contoh, OCBC, GOPAY, 7-11). Apabila menambahkan akun finansial yang didukung oleh Xendit, kami menganjurkan anda untuk menggunakan channel_code for this field

Maximum length 100 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
description
optional
string Deskripsi free text untuk akun

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
country
optional
string Negara penerbit akun, apabila relevan

Format ISO 3166-2 Country Code
properties
optional
string Objek JSON dengan konten akun spesifik sesuai yang dibutuhkan, contoh,

For BANK_ACCOUNT types:
Parameter akun bank
account_number
required
string Pengenal akun unik sesuai catatan bank

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_holder_name
required
string Nama pemegang akun sesuai catatan bank. Harus sama dengan nama teregistrasi sama persis

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
swift_code
optional
string Kode swift untuk pembayaran internasional

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_type
optional
string Tipe akun free text, contoh, Savings, Transaction, Virtual Account

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_details
optional
string Informasi akun yang berpotensi disembunyikan, hanya untuk tujuan penampilan

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

For EWALLET types:
Parameter ewallet
account_number
required
string Pengenal unik akun sesuai catatan ewallet

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
account_holder_name
optional
string Nama pemegang akun sesuai catatan ewallet records. Harus sama dengan nama teregistrasi sama persis

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe-tipe CREDIT_CARD:
Parameter kartu kredit
token_id
required
string Token id yang dikembalikan pada saat tokenisasi

Untuk tipe-tipe OTC:
Parameter Over The Counter
payment_code
required
string Fixed payment code lengkap (termasuk prefix)
expires_at
optional
string Tanggal kadaluwarsa kode pembayaran

Format YYYY-MM-DD string

Untuk tipe-tipe QR_CODE:
Parameter kode QR
qr_string
required
string Representasi string dari kode unik QR

Untuk tipe-tipe PAY_LATER:
Parameter bayar nanti
account_id
required
string String alfanumerik yang menandakan akun ini. Biasanya adalah alamat email atau nomor telepon
account_holder_name
optional
string Nama pemegang akun sesuai dengan pemberi akun

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
currency
optional
string Kurs utama akun, apabila relevan.

Format ISO 4217 Currency Code

Untuk tipe-tipe SOCAL_MEDIA:
Parameter media sosial
account_id
required
string String alfanumerik yang menandakan akun tersebut. Biasanya adalah alamat email atau nomor telepon
account_handle
optional
string Nama akun sesuai pemberi akun

Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
kyc_documents
optional
array Array objek JSON dengan dokumen yang dikumpulkan untuk KYC customer ini.
Parameter dokumen kyc
Field Description
country
required
string Negara penerbit dokumen

Format ISO 3166-2 Country Code
type
required
string Tipe ID generik
Nilai-nilai yang didukung: BIRTH_CERTIFICATE,
BANK_STATEMENT,
DRIVING_LICENSE,
IDENTITY_CARD,
PASSPORT,
VISA,
BUSINESS_REGISTRATION,
BUSINESS_LICENSE
sub_type
optional
string ID spesifik untuk tipe IDENTITY_CARD.
Nilai-nilai yang didukung: NATIONAL_ID,
CONSULAR_ID,
VOTER_ID,
POSTAL_ID,
RESIDENCE_PERMIT,
TAX_ID,
STUDENT_ID,
MILITARY_ID,
MEDICAL_ID
document_name
optional
string Deskripsi free text tipe dokumen (contoh, NIB, SIUP, AKTA)

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
document_number
optional
string Alfanumerik unik dari nomor atau kode dokumen identitas

Maximum length 255 characters
expires_at
optional
string Tanggal kadaluwarsa, apaibla relevan.

Format YYYY-MM-DD string
holder_name
optional
string Free text untuk menangkap nama lengkap individu atau bisnis yang tertera pada dokumen, apabila relevan

Maximum length 255 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
document_images
optional
string[] Array dari file id yang dikembalikan dari upload ke files endpoint, merepresentasikan depan/belakang gambar dokumen, dalam png/jpg/jpeg/pdf format
description
optional
string Deskripsi yang diberikan merchant untuk customer.

Maximum length 500 characters
Karakter Alfanumerik. Tidak ada karakter spesial yang diperbolehkan.
date_of_registration
optional
string Tanggal dimana akun pembeli sudah dibuat di dalam website merchant

Format YYYY-MM-DD string
domicile_of_registration
optional
string Negara dimana akun pembeli ini dibuat di dalam website merchant

Format ISO 3166-2 Country Code
metadata
optional
object Informasi tambahan objek yang berhubungan dengan customer. Definisikan sifat JSON dan nilai-nilai sesuai yang dibutuhkan untuk meneruskan informasi via API.
Anda bisa menetapkan sampai 50 kunci, dengan kata kunci sampai 40 karakter dan nilai-nilai sampai 500 karakter.
Ini hanya untuk penggunaan anda dan tidak akan digunakan oleh Xendit.

Parameter Respon

Respon sukses akan berisi satu Customer Object dengan konten yang diperbarui

Kode Error

Lihat lainnya error pada umumnya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
id yang diberikan tidak ada. Mohon cek id tersebut dan coba kembali

Files

API untuk anda melakukan operasi terkait file kustomer anda. Dapat digunakan untuk file customer bersifat bisnis dan individu untuk kebutuhan KYC dan bukti untuk chargeback

Upload File

Lakukan request POST ke endpoint ini untuk mengupload file untuk KYC atau Chargeback Evidence. Saat ini kami mendukung penguploadan file PNG, JPG/JPEG, PDF yang kurang dari 10 MB.

Endpoint: Upload File

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

Parameter Request

Contoh Request Upload File

curl https://api.xendit.co/files -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   --form 'file=@/Users/utkarshagarwal/Desktop/Screenshot 2020-10-13 at 5.28.45 PM.png' \
   --form 'purpose=CHARGEBACK_EVIDENCE'
<?php
  $url = "https://api.xendit.co/files";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
  $headers = [];
  $headers[] = "Content-Type: application/json";
  $payload = array('file'=> new CURLFILE('~/yourpath/file.png'),'purpose' => 'CHARGEBACK_EVIDENCE');

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
let url = "https://api.xendit.co/files";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
var formdata = new FormData();
formdata.append("file", fileInput.files[0], "file.png");
formdata.append("purpose", "CHARGEBACK_EVIDENCE");

var requestOptions = {
  method: 'POST',
  headers: headers,
  body: formdata,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/files"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')

payload={'purpose': 'CHARGEBACK_EVIDENCE'}
files=[
  ('file', open('/yourpath/file.png','rb'))
]
auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
Body Parameter Tipe Deskripsi
purpose
required
string Tujuan dari file yang terupload
Nilai-nilai yang didukung: KYC_DOCUMENT, CHARGEBACK_EVIDENCE
file
required
file File itu. Nilai-nilai yang didukung: application/pdf, image/png, image/jpg, image/jpeg

Parameter Respon

Contoh Respon Sukses Upload File

{
  "id": "file-ec700c1c-db17-4496-b1fb-04ebe551b412",
  "business_id": "ec700c1c-db17-4496-b1fb-04ebe551b412",
  "purpose": "CHARGEBACK_EVIDENCE",
  "created": "2020-10-08T06:38:33.479Z",
  "updated": "2020-10-08T06:38:33.479Z",
  "type": "image/png",
  "size": 10000,
  "url": "https://files.xendit.co/file-ec700c1c-db17-4496-b1fb-04ebe551b412"
}
Body Parameter Tipe Deskripsi
id
required
string ID unik yang di generate oleh Xendit untuk setiap file
business_id
required
string ID bisnis yang terdaftar di Xendit
purpose
required
string Tujuan dari file yang terupload
created
required
string UTC Timestamp pembuatan file dalam format ISO
updated
required
string UTC Timestamp perubahan file terakhir dalam format ISO
type
required
string Tipe file
size
required
integer Ukuran file dalam satuan bytes
url
required
string URL untuk mengunduh file

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
API_VALIDATION_ERROR
400
Validasi input gagal. Field errors dalam response akan merincikan fields yang melanggar validasi.
FILE_TOO_LARGE
413
Ukuran file lebih besar dari 2.000.000 byte dan melebihi batas ukuran. Kecilkan payload sebelum mencoba kembali.
UNSUPPORTED_CONTENT_TYPE_ERROR
415
Format file tidak didukung. Lihat kembali tipe file sebelum mencoba lagi.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
RATE_LIMIT_EXCEEDED
429
Anda telah melampaui batas maksimal request. Mohon dicoba lagi dengan rentang waktu yang lebih lama.

Get File by Id

Melakukan request GET ke endpoint ini untuk mendapatkan informasi detail dari file

Endpoint: Get File

GET https://api.xendit.co/files/{file-id}

Contoh Request Get File

curl https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412 --request GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php

  $fileId = "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
  $url = "https://api.xendit.co/files/" . $fileId;
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
let fileId= "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
let url = "https://api.xendit.co/files/"+fileId;

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));


var requestOptions = {
  method: 'GET',
  headers: headers,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')
payload={}

auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Parameter Respon

Contoh Respon Sukses Get File

{
  "id": "file-ec700c1c-db17-4496-b1fb-04ebe551b412",
  "business_id": "ec700c1c-db17-4496-b1fb-04ebe551b412",
  "purpose": "CHARGEBACK_EVIDENCE",
  "created": "2020-10-08T06:38:33.479Z",
  "updated": "2020-10-08T06:38:33.479Z",
  "type": "image/png",
  "size": 10000,
  "url": "https://files.xendit.co/file-ec700c1c-db17-4496-b1fb-04ebe551b412"
}
Body Parameter Tipe Deskripsi
id
required
string ID unik yang di generate oleh Xendit untuk setiap file
business_id
required
string ID bisnis yang terdaftar di Xendit
purpose
required
string Tujuan dari file yang terupload
created
required
string UTC Timestamp pembuatan file dalam format ISO
updated
required
string UTC Timestamp perubahan file terakhir dalam format ISO
type
required
string Tipe file
size
required
integer Ukuran file dalam satuan bytes
url
required
string URL untuk mengunduh file

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
File tidak ditemukan

Download File by Id

Melakukan request GET ke endpoint ini untuk mengunduh file

Endpoint: Download File

GET https://api.xendit.co/files/{file-id}/download

Example Download File Request

curl https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412/download --request GET \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php

  $fileId = "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
  $url = "https://api.xendit.co/files/" . $fileId . "/download";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
let fileId= "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
let url = "https://api.xendit.co/files/"+fileId+"/download";

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));


var requestOptions = {
  method: 'GET',
  headers: headers,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412/download"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')
payload={}

auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response)

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
File tidak ditemukan
RATE_LIMIT_EXCEEDED
429
Anda telah melampaui batas maksimal request. Mohon dicoba lagi dengan rentang waktu yang lebih lama.

Delete File by Id

Melakukan request DELETE ke endpoint ini untuk menghapus file

Endpoint: Delete File

DELETE https://api.xendit.co/files/{file-id}

Contoh request menghapus file

curl https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412 --request DELETE \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php

  $fileId = "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
  $url = "https://api.xendit.co/files/" . $fileId;
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
let fileId= "file-ec700c1c-db17-4496-b1fb-04ebe551b412";
let url = "https://api.xendit.co/files/"+fileId;

var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));


var requestOptions = {
  method: 'DELETE',
  headers: headers,
  redirect: 'follow'
};

fetch(url, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
import requests
import base64

api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
url = "https://api.xendit.co/files/file-ec700c1c-db17-4496-b1fb-04ebe551b412"

api_key_bytes = api_key.encode('ascii')
base64_bytes = base64.b64encode(api_key_bytes)
base64_token = base64_bytes.decode('ascii')
payload={}

auth_token = 'Basic ' + base64_token
headers = {
  'Authorization': auth_token
}

response = requests.request("DELETE", url, headers=headers, data=payload)

print(response.text)

Parameter Respon

Contoh respon sukses menghapus file

{
  "is_deleted": true,
  "id": "file-ec700c1c-db17-4496-b1fb-04ebe551b412",
  "business_id": "b647524d-9c5d-414c-843a-3c819853d6b0"
}
Body Parameter Tipe Deskripsi
id
required
string ID unik yang di generate oleh Xendit untuk setiap file
business_id
required
string ID bisnis yang terdaftar di Xendit
is_deleted
required
boolean Status penghapusan

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
File tidak ditemukan

Laporan

Sebuah API unutk menghasilkan dan mendapatkan laporan. Laporan yang tersedia adalah Laporan Saldo dan Transaksi. Anda dapat menggunakan endpoint ini untuk menghasilkan laporan secara otomatis. Anda dapat menggunakan isi dari laporan untuk melakukan rekonsiliasi. Isi dari laporan pada API ini sama persis dengan yang dapat anda peroleh dari mengunduh di dashboard.

Objek Laporan

Contoh Objek Laporan

{
    "id": "report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28",
    "type": "BALANCE_HISTORY",
    "status": "COMPLETED",
    "filter": {
        "from": "2021-06-23T04:01:55.574Z",
        "to": "2021-06-24T04:01:55.574Z"
    },
    "format": "CSV",
    "url": "https://transaction-report-files.s3-us-west-2.amazonaws.com/{report_name}",
    "currency": "IDR",
    "business_id": "5f34f60535ba7c1c0eed846a",
    "created": "2021-06-24T04:01:55.570Z",
    "updated": "2021-06-24T04:01:55.570Z"
}
Parameter Body Tipe Deskripsi
id
required
string Id unik dari laporan. Id ini akan memiliki prefiks report_.
type
required
string Tipe dari laporan.

Tipe yang tersdia:
Tipe Deskripsi
BALANCE_HISTORY Laporan yang menunjukkan daftar riwayat dari saldo Anda. Laporan ini sama dengan laporan saldo di dashboard. Lihat Laporan Riwayat Saldo untuk informasi lebih lanjut.
TRANSACTIONS Laporan yang menunjukkan daftar transaksi. Laporan ini sama dengan laporan transaksi di dashboard. Lihat Laporan Transaksi untuk informasi lebih lanjut.
UPCOMING_TRANSACTIONS Laporan yang menunjukkan daftar transaksi mendatang yang akan masuk/keluar dari saldo Anda. Laporan ini sama dengan Laporan Saldo Tertunda/Mendatang di dashboard.
filter
required
object Filter yang diterapkan pada laporan.
Parameter Filter
Kunci Nilai
from
required
string (ISO 8601) Waktu awal transaksi yang ada di laporan pada UTC+0.
to
required
string (ISO 8601) Waktu akhir transaksi yang ada di laporan pada UTC+0.
format
required
string Format dari laporan.
Format yang tersedia adalah CSV.
status
required
string Status dari laporan. Status awal akan PENDING ketika Anda menghasilkan laporan melalui API.
Tipe Deskripsi
PENDING Permintaan pembuatan laporan diterima dan sedang diproses.
COMPLETED Laporan berhasil dibuat dan dapat diunduh
FAILED Laporan gagal untuk dibuat. Anda dapat mencoba ulang pembuatan laporan
url
optional
string URL untuk mengunduh laporan setelah berhasil.

Laporan hanya dapat diundah dalam waktu 24 jam. Ketika url kedaluwarsa, Anda harus mengirim permintaan ulang untuk menghasilkan laporan.
currency
required
string Mata uang di dalam laporan
Lihat daftar mata uang yang didukung.
business_id
required
string Id dari bisnis Xendit tempat transaksi dilakukan.
created
required
string (ISO 8601 Waktu ketika laporan pertama kali diminta pada UTC+0.
updated
required
string (ISO 8601 Waktu ketika laporan diperbarui pada UTC+0.

Menghasilkan Laporan

Endpoint: Menghasilkan Laporan

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

Gunakan endpoint ini untuk menghasilkan laporan. Anda dapat menentukan tipe dan filter dari konten yang ada pada laporan. Alur dari endpoint ini bersifat asynchronous. Ini berarti Xendit akan mengirimkan callback kepada Anda ketika laporan selesai dibuat. Lihat notifikasi laporan untuk informasi lebih lanjut. Cara lainnya, Anda dapat menggunakan endpoint mendaptakan laporan untuk melihat detail dan status dari laporan.

Parameter Request

Header Parameter Tipe Deskripsi
for-user-id
optional
string User-id sub-akun yang akan digunakan untuk mendapatkan transaksi.

.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut.

Contoh Permintaan Menghasilkan Laporan

curl https://api.xendit.co/reports -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -d type=BALANCE_HISTORY \
   -d currency=IDR

Contoh Respon Menghasilkan Laporan

{
    "id": "report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28",
    "type": "BALANCE_HISTORY",
    "status": "PENDING",
    "filter": {
        "from": "2021-06-23T04:01:55.574Z",
        "to": "2021-06-24T04:01:55.574Z"
    },
    "format": "CSV",
    "currency": "IDR",
    "business_id": "5f34f60535ba7c1c0eed846a",
    "created": "2021-06-24T04:01:55.570Z",
    "updated": "2021-06-24T04:01:55.570Z"
}
Parameter Body Tipe Deskripsi
type
required
string Tipe dari laporan yang akan dihasilkan.

Tipe yang tersdia:
Tipe Deskripsi
BALANCE_HISTORY Laporan yang menunjukkan daftar riwayat dari saldo Anda. Laporan ini sama dengan laporan saldo di dashboard. Lihat Laporan Riwayat Saldo untuk informasi lebih lanjut.
TRANSACTIONS Laporan yang menunjukkan daftar transaksi. Laporan ini sama dengan laporan transaksi di dashboard. Lihat Laporan Transaksi untuk informasi lebih lanjut.
UPCOMING_TRANSACTIONS Laporan yang menunjukkan daftar transaksi mendatang yang akan masuk/keluar dari saldo Anda. Laporan ini sama dengan Laporan Saldo Tertunda/Mendatang di dashboard.
TRANSACTION_ANALYSIS Laporan transaksi yang mencakup data pembayaran dan status payment lifecycle yang lebih lengkap (Refunded/Partially Refunded/Refund Pending/Failed)
Sebelumnya dinamakan sebagai TRANSACTION_ANALYSIS, nama TRANSACTION_ANALYSIS ini akan tetap bisa digunakan dan memberikan hasil laporan yang sama dengan laporan DETAIL_TRANSACTIONS
filter
required
object Filter yang diterapkan pada laporan.
Parameter Filter
Kunci Nilai
from
string (ISO 8601)
required
Waktu awal dari transaksi yang akan difilter.

Jika tidak ditetapkan, from adalah 24 jam sebelum waktu sekarang
to
string (ISO 8601)
required
Waktu akhir dari transaksi yang akan difilter.

Jika tidak ditetapkan, to adalah waktu saat ini. Ini berarti jika kedua from and to tidak ditetapkam, laporan yang dihasilkan adalah laporan 24 jam ke belakang.

Kombinasi dari from dan to harus kurang dari 31 hari.
format
optional

default: CSV
string Format dari laporan.
Format yang tersedia adalah CSV.
currency
optional

default: IDR
string Mata uang untuk difilter
Lihat daftar mata uang yang didukung.
report_version
optional
string Parameter ini mengindikasikan versi report/laporan yang hendak Anda gunakan. Parameter ini hanya hanya tersedia untuk Laporan Transaksi (Transactions Report)
Nilai default: VERSION_0

Nilai versi <> perubahan:
  • VERSION_0: Versi original
  • VERSION_1: Meliputi Status Settlement, Actual Settlement Time, Estimated Settlement Time
  • VERSION_2: Meliputi kolom Early Settlement Fee, Payment ID diganti dengan Product ID
  • Parameter Respon

    Mengembalikan Objek Laporan dengan kode status 201

    Kode Error

    Lihat daftar kode error umum lainnya disini.

    Kode Error Deskripsi
    FEATURE_NOT_AVAILABLE
    400
    Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini.
    INVALID_DATE_RANGE
    400
    Rentang dari filter from dan to terlalu besar. Harap kurangi rentang sesuai batasan yang ada pada parameter.

    Mendapatkan Laporan

    Endpoint: Mendapatkan Laporan

    GET https://api.xendit.co/reports/{report_id}

    Gunakan endpoint ini untuk mengapatkan detail laporan secara spesifik berdasarkan id. Anda dapat menggunakan endpoint ini sebagai alternatif dibandingkan menggukanakan callback laporan.

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string The sub-account user-id that you want to get this transaction for.

    This header is only used if you have access to xenPlatform. See xenPlatform for more information

    Contoh Mendapatkan Laporan

    curl https://api.xendit.co/transactions/report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28 -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:

    Contoh Respon Mendapatkan Laporan

    {
        "id": "report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28",
        "type": "BALANCE_HISTORY",
        "status": "COMPLETED",
        "filter": {
            "from": "2021-06-23T04:01:55.574Z",
            "to": "2021-06-24T04:01:55.574Z"
        },
        "format": "CSV",
        "url": "https://transaction-report-files.s3-us-west-2.amazonaws.com/{report_name}",
        "currency": "IDR",
        "business_id": "5f34f60535ba7c1c0eed846a",
        "created": "2021-06-24T04:01:55.570Z",
        "updated": "2021-06-24T04:01:55.570Z"
    }
    
    Parameter Path Tipe Deskripsi
    report_id
    required
    string The id of report.

    Parameter Respon

    Mengembalikan Objek Laporan dengan kode status 200

    Kode Error

    Lihat daftar kode error umum lainnya disini.

    Kode Error Deskripsi
    FEATURE_NOT_AVAILABLE
    400
    Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini.

    Notifikasi Laporan

    Endpoint: Notifikasi Laporan

    POST https://yourcompany.com/report_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika laporan berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Isi Notifikasi

    Contoh Notifikasi Laporan pada Laporan yang Berasil

    curl --include \
         --request POST \
         --header "x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --header "Content-Type: application/json" \
         --data-binary "{
        \"id\": \"report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28\",
        \"type\": \"BALANCE_HISTORY\",
        \"status\": \"PENDING\",
        \"filter\": {
            \"from\": \"2021-06-23T04:01:55.574Z\",
            \"to\": \"2021-06-24T04:01:55.574Z\"
        },
        \"format\": \"CSV\",
        \"currency\": \"IDR\",
        \"business_id\": \"5f34f60535ba7c1c0eed846a\",
        \"created\": \"2021-06-24T04:01:55.570Z\",
        \"updated\": \"2021-06-24T04:01:55.570Z\"
    }}" \
    '{{your_company_domain}}/{{webhook_url}}'
    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event
    wajib
    string Tipe dari notifikasi. Tipe yang tersedia:
    Tipe Deskripsi
    reports.completed Laporan berhasil. Anda dapata mengunduh laporan dari parameter url.
    reports.failed Laporan gagal untuk dihasilkan. Anda dapat mencoba ulang untuk menghasilkan laporan.
    Report Object Parameter lainnya sama dengan objek laporan.

    Laporan Riwayat Saldo

    Laporan riwayat saldo adalah laporan yang menunjukkan daftar riwayat dari pergerakan saldo pada akun anda. Laporan ini sama dengan laporan pada Menu Saldo di dashboard. Anda dapat menggukan laporan ini untuk memeriksa saldo harian atau melakukan rekonsiliasi antara data transaksi Anda dengan saldo yang berubah pada akun. Pada API laporan, Anda dapat menghasilkan laporan ini menggunakan tipe BALANCE_HISTORY.

    Kolom Laporan

    Kolom Deskripsi
    Product Id ID yang dihasilkan oleh Xendit untuk tiap produk
    Transaction Id Id unik Xendit yang dihasilkan pada setiap transaksi. Anda dapat menggunakan id ini untuk mencocokkan transaksi dan biayanya, atau mencocokkan antara transaksi pada laporan transaksi dan riwayat saldo.
    Transaction Type Daftar tipe transaksi:
    VA_PAYMENT Pembayaran menggunakan Virtual Account
    RO_PAYMENT Pembayaran menggunakan Retail Outlet
    EWALLET_PAYMENT Pembayaran menggunakan Ewallet
    CARDLESS_CREDIT_PAYMENT Pembayaran menggunakan Cardless Credit
    DIRECT_DEBIT_PAYMENT Pembayaran menggunakan Direct Debit
    CREDIT_CARD_PAYMENT Pembayaran menggunakan Kartu Kredit
    QR_CODE_PAYMENT Pembayaran menggunakan QR Code
    DISBURSEMENT Disbursement
    BATCH_DISBURSEMENT Batch Disbursement
    REMITTANCE_PAYOUT Remittance Payout
    DEPOSIT Topup saldo ke akun Anda
    WITHDRAWAL Penarikan dari saldo Anda
    Line Type Tipe baris yang tersedia:
    TRANSACTION Baris transaksi, penambahan atau pengurangan salso karena transaksi
    FEE Baris biaya, pengurangan saldo karena biaya
    VAT Baris PPN, pengurangan saldo karena pajak
    TRANSACTION_REVERSAL, FEE_REVERSAL, VAT_REVERSAL Pembatalan atau reversal dari TRANSACTION, FEE, or VAT
    Payment Channel Kanal untuk mengidentifikasi sumber dari transaki.
    Lihat kode kanal untuk informasi lebih lanjut.
    Reference Id yang dihasilkan oleh Anda dan dikirimkan ke sistem Xendit. Pada beberapa produk ini disebut dengan ‘external_id’
    Currency Mata uang transaksi.
    Lihat daftar mata uang yang didukung.
    Amount Nominal dari transaksi.
    Angka desimal di belakang koma akan berbeda untuk tiap uang berdasarkan ISO 4217.
    Balance Saldo Anda pada transaksi ini.
    Debit or Credit
    DEBIT Pengurangan saldo
    CREDIT Penambahan saldo
    Created Date ISO Waktu ketika transaksi dibuat berdasarkan format ISO 8601.
    Timezone Zona waktu dengan format “+XXXX UTC”.
    Zona waktu akan selalu +0000 UTC ketika laporan dihasilkan melalui API. Ini berbeda dengan dashboard yang berdasrkan zona waktu pengguna.
    Created Date Waktu ketika transaksi dibuat.
    Payment Date Waktu ketika pembayaran diterima tetapi belum masuk ke saldo Anda. Hanya tersedia untuk transaksi pembayaran.
    Settlement Date Waktu ketika pembayaran diterima dan ditambahkan pada saldo Anda. Hanya tersedia untuk transaksi pembayaran.
    Completed Date Waktu ketika dana telah dikirimkan ke penerima. Hanya tersedia untuk transaksi disbursement.
    Bank Code Kode bank yang digunakan sebagai sumber atau tujuan transaksi. Hanya tersedia untuk VA_PAYMENT and DISBURSEMENT.
    Name Nama dari VA atau penerima. Hanya tersedia untuk VA_PAYMENT and DISBURSEMENT..
    Account Number Nomor rekening VA atay penerima. Hanya tersedia untuk VA_PAYMENT and DISBURSEMENT.
    Description Deskripsi dari transaksi.
    Invoice ID Id invoice. Hanya tersedia untuk pembayaran melalui invoice..
    Bank Reference Referensi bank yang digunakan unuk transaksi DISBUSEMENT

    Laporan Transaksi

    Laporan transaksi adalah laporan yang menunjukkan semua transaksi yang ada entah transaksi itu telah masuk ke saldo atau tidak. Laporan ini tidak akan menunjukkan topup dan withdrawal yang bukan merupakan transaksi. Laporan ini sama dengan laporan pada Menu Transaksi di dashboard. Pada API laporan, Anda dapat menghasilkan laporan ini menggunakan tipe TRANSACTIONS.

    Kolom Laporan

    Kolom Deskripsi
    Status Status dari transaksi
    PENDING Transaksi masih diproses. Ini merupakan status ketika transaksi uang keluar ketika dana masih ditahan
    SUCCESS Transaksi telah berhasil dikirim untuk uang keluar atau telah diterima untuk uang masuk
    FAILED Transaksi yang gagal untuk dikirim atau diterima
    VOIDED Transaksi uang masuk yang dibatalkan oleh Anda
    REVERSED Transaksi yang kembalikan oleh Xendit
    Type Tipe dari transaksi
    DISBURSEMENT Transaki disbursement
    PAYMENT Transaksi pembayaran untuk semua jenis uang masuk
    REMITTANCE_PAYOUT Transaksi remittance
    TRANSFER Transfer antar akun Xendit. Ini dapat berupa transfer keluar atau masuk
    REFUND Dana yang dikembalikan kepada Anda
    TOP UP Penambahan dana yang ditambahkan ke saldo Anda
    WITHDRAWAL Penarikkan dana dari saldo ke akun rekening Anda
    Channel Kanal untuk mengidentifikasi sumber dari transaksi.
    Kanal yang tersedia untuk tiap tipe adalah:
    Tipe Kanal
    DISBURSEMENT and REMITTANCE_PAYOUT BANK and CASH
    PAYMENT CARDS, CARDLESS_CREDIT, DIRECT_DEBIT, EWALLET, PAYLATER, QR_CODE, RETAIL_OUTLET, VIRTUAL_ACCOUNT
    TRANSFER XENPLATFORM
    Channel Name Nama kanal yang tersedia akan berbeda untuk tiap kanal.
    Lihat kode kanal untuk informasi lebih lanjut
    Account Number Nomor akun yang digunakan pada transaksi. Hal ini akan berbeda untuk tiap kanal. Sebagai contoh, pada kanal CARD ini akan berupa sebagian nomor kartu kredit dan pada kanal BANK akan berupa nomor rekening.
    Currency Mata uang transaki.
    See our supported currencies.
    Amount Nominal dari transaksi.

    Angka desimal di belakang koma akan berbeda untuk tiap uang berdasarkan ISO 4217.
    Fee Amount Nominal dari biaya.
    VAT Amount Nominal PPN dari transaski
    Net Amount Nominal bersih transaksi setelah dikurangi biaya dan pajak.
    Reference Refernsi dari transksi. Ini dihasilkan dari sisi Anda dan dikirimkan ke sistem Xendit. Pada beberapa produk ini disebut dengan External Id
    Transaction Id Id dari transaksi
    Invoice Id Id dari invoice. Jika ini transaksi pembayaran menggunakan invoice.
    Batch Id Id batch settlement untuk transaksi kartu kredit
    Payment Id Id pembayaran yang dihasilkan oleh Xendit dan sama dengan id pada produk
    Payment Date Waktu ketika pembayaran tercatat di Xendit
    Timestamp - Created Waktu ketika transaksi dibuat pertama kali
    Timestamp - Updated Waktu ketika transaksi diperbarui
    Timestamp - Settled Waktu ketika transaksi telah masuk ke saldo Anda
    Timezone Zona waktu dengan format “+XXXX UTC”.
    Zona waktu akan selalu +0000 UTC ketika laporan dihasilkan melalui API. Ini berbeda dengan dashboard yang berdasrkan zona waktu pengguna.
    Description Deskripsi transaksi
    Channel Reference Referensi yang dihasilkan oleh mitra kanal kami. Ini dapat digunakan untuk rekonsiliasi antara sisi Anda, Xendit, dan mitra kami.

    Transaksi

    Sebuah API untuk mencari dan melihat transaksi. Transaksi yang ada meliputi uang masuk, uang keluar, dan transfer yg terjadi dalam akun. Anda dapat menggunakan endpoint tunggal ini untuk mendapatkan status transaksi dan melakukan rekonsiliasi. API ini sama persis dengan menu transaksi yang ada di dashboard. Lihat dokumentasi kami tentang petunjuk penggunan menu transaksi untuk rekonsiliasi.

    Objek Transaksi

    Contoh Objek Transaksi

    {
        "id": "txn_13dd178d-41fa-40b7-8fd3-f83675d6f413",
        "product_id": "d290f1ee-6c54-4b01-90e6-d701748f0701",
        "type": "PAYMENT",
        "channel_category": "RETAIL_OUTLET",
        "channel_code": "ALFAMART",
        "reference_id": "ref23232",
        "account_identifier": null,
        "currency": "IDR",
        "amount": 1,
        "cashflow": "MONEY_IN",
        "status": "SUCCESS",
        "business_id": "5fc9f5b246f820517e38c84d",
        "created": "2021-06-23T02:42:15.601Z",
        "updated": "2021-06-23T02:42:15.601Z",
        "fee": {
            "xendit_fee": 1500,
            "value_added_tax": 500,
            "xendit_withholding_tax": 0,
            "third_party_withholding_tax": 0,
            "status": "COMPLETED"
        }
    }
    Body Parameter Type Description
    id
    required
    string Id unik dari transaksi. Id akan memiliki prefiks txn_.
    product_id
    required
    string Id produk dari sebuah transaksi. Id ini akan memiliki prefiks yang berbeda untuk tiap produk. Anda dapat menggukana id ini untuk mencocokkan antara transaksi dari API ini ke tiap API produk.
    type
    required
    string Tipe dari transaksi.

    Tipe yang tersedia::
    Type Description
    DISBURSEMENT Disbursement dari transaksi uang keluar.
    PAYMENT Pembayaran yang meliputi semua jenis uang masuk.
    REMITTANCE_PAYOUT Transaksi remittance untuk payout.
    TRANSFER Transaksi transfer antar akun Xendit. Transfer bisa keluar atau masuk.
    REFUND Sebuah transaksi pengembalian dana telah dibuat untuk melakukan pengembalian dana dari transaksi masuk.
    channel_code
    optional
    string Kanal dari transaksi yang digunakan.
    Lihat kode kanal untuk daftar kanal yang ada tiap kategori.
    reference_id
    required
    string Referensi dari sebuat transaksi
    Untuk beberapa produk, referensi lebih dikenal dengan external_id. Ini adalah id yang dibuat oleh Anda dan dapat digunakan untuk rekonsiliasi..
    account_identifier
    optional
    string Account identifer atau pengenal dari akun yang digunakan untuk setiap transaksi.
    Formatnya akan berbeda untuk setiap jeniis kanal transaksi. Sebagai contoh, pada kanal BANK akan berisi nomer rekining dan pada CARD akan berisi sebagian nomor kartu kredit.
    currency
    optional
    string (ISO 4217) ata uang transaksi.
    Lihat daftar mata uang yang didukung oleh Xendit.
    amount
    required
    number Nominal dari transaksi.
    Jumlah angka desimal akan berbeda untuk tiap mata uang sesuai ISO 4217.
    net_amount
    required
    number Nominal bersih dari transaksi yang telah dipotong biaya dan pajak..
    cashflow
    required
    string Menunjukkan apakah transaksi uang masuk atau uang keluar. Untuk transfer, transfer keluar akan tercatat sebagai uang keluar dan transfer masuk sebagai uang masuk.
    Nilai yang tersedia adalah MONEY_IN untuk uang masuk and MONEY_OUT untuk uang keluar.
    status
    required
    string string | Status transaksi.

    Status yg tersedia:
    Status Description
    PENDING Transaksi masih menunggu diproses. Ini merujuk pada transaksi uang keluar ketika saldo uang Anda masih ditahan.
    SUCCESS Transaksi uang keluar telah berashil dikirim atau uang masuk telah diterima.
    FAILED Transaksi gagal untuk dikirim/diterima.
    VOIDED Transaksi uang masuk dibatalkan oleh kustomer.
    REVERSED Transaksi dibatalkan oleh Xendit.
    channel_category
    required
    string Kategori kanal dari transaksi untuk mengidentifikasi sumber dari transaksi
    kanal yang tersedia untuk tiap tipe adalah:
    Type Channels
    DISBURSEMENT and REMITTANCE_PAYOUT BANK and CASH
    PAYMENT CARDS, CARDLESS_CREDIT, DIRECT_DEBIT, EWALLET, PAYLATER, QR_CODE, RETAIL_OUTLET, VIRTUAL_ACCOUNT
    TRANSFER XENPLATFORM
    business_id
    required
    string Id dari bisnis yang melakukan transaksi ini.
    created
    required
    string (ISO 8601) Waktu ketika transaksi ini dibuat saat UTC+0.
    updated
    required
    string (ISO 8601) Waktu terakhir ketika transaksi ini diperbarui saat UTC+0.
    fee
    required
    object
    Body Parameter Type Description
    xendit_fee number Nominal dari biaya.
    value_added_tax number Nominal PPN dari transaski.
    xendit_withholding_tax number Jumlah dari Xendit Pajak Potong untuk transaksi ini, jika berlaku.
    Buka dokumentasi pajak untuk informasi lebih lanjut.
    third_party_withholding_tax number Nominal Pajak Potong pihak Ketiga untuk transaksi ini, jika berlaku.
    Contoh pihak ketiga : Bank
    status string Status biaya
    Status Description
    PENDING Biaya sedang dalam proses untuk ditagihkan.
    COMPLETED Biaya telah berhasil ditagihkan.
    CANCELED Transaksi gagal dan biaya dibatalkan.
    REVERSED Transaksi telah di reverse dan biaya dikembalikan.
    settlement_status
    optional
    string Status settlement akan muncul untuk transaksi uang masuk.
    Untuk transaksi uang keluar, nilainya adalah NULL
    Settlement Status Description
    PENDING Nominal transaksi belum ter-settle ke saldo merchant
    SETTLED Nominal transaksi telah ter-settle ke saldo merchant
    estimated_settlement_time
    optional
    string (ISO 8601) Estimated settlement time akan muncul untuk transaksi uang masuk.
    Untuk transaksi uang keluar, nilainya adalah NULL
    Estimasi tanggal dan jam di mana nominal transaksi akan ter-settle ke saldo merchant.
    Contoh: "2022-04-26T08:44:39.566Z"

    Mendapatkan Transaksi

    Endpoint: Mendapatkan Transaksi

    GET https://api.xendit.co/transactions/{transaction_id}

    Gunakan endpoint ini untuk mendaptkan sebuah detail transaksi yang spesifik berdasarkan id transaksi. Jika Anda ingin melakukan pencarian menggunakan parameter lain atau menginginkan hasil yang banyak, lihat mendapatkan daftar transaksi

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id sub-akun yang akan digunakan untuk mendapatkan transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut.

    Contoh Permintaan Mendapatkan Transaksi

    curl https://api.xendit.co/transactions/txn_13dd178d-41fa-40b7-8fd3-f83675d6f413 -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:

    Contoh Respon Mendapatkan Transaksi

    {
        "id": "txn_13dd178d-41fa-40b7-8fd3-f83675d6f413",
        "product_id": "d290f1ee-6c54-4b01-90e6-d701748f0701",
        "type": "PAYMENT",
        "status": "SUCCESS",
        "channel_category": "RETAIL_OUTLET",
        "channel_code": "ALFAMART",
        "reference_id": "ref23232",
        "account_identifier": null,
        "currency": "IDR",
        "amount": 1,
        "cashflow": "MONEY_IN",
        "business_id": "5fc9f5b246f820517e38c84d",
        "created": "2021-06-23T02:42:15.601Z",
        "updated": "2021-06-23T02:42:15.601Z"
    }
    
    Parameter Path Tipe Deskripsi
    transaction_id
    required
    string Id dari transaksi.

    Parameter Respon

    Mengembalikan Objek Transaksi dengan kode HTTP status 200

    Kode Error

    Lihat contoh umum error lainya di sini.

    Kode Error Deskripsi
    TRANSACTION_NOT_FOUND
    404
    Transaksi dengan id ini tidak ditemukan.
    FEATURE_NOT_AVAILABLE
    400
    Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini.

    Mendapatkan Daftar Transaksi

    Endpoint: Mendapatkan Daftar Transaksi

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

    Gunakan endpoint ini untuk mendapatkan seluruh transaksi atau memilih filter dan kata kunci tertentu. Anda dapat melakukan filter menggunakan waktu, tipe, atau status. Anda juga dapat melakukan pencarian berdasarkan referensi atau id produk. Hasil daftar transaksi yang dikembalikan akan menggunakan paginasi dan terurut berdasakan waktu pembuatan.

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id sub-akun yang akan digunakan untuk mendapatkan transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut.

    Contoh Permintaan Mendapatkan Daftar Transaksi

    curl https://api.xendit.co/transactions?types=PAYMENT&statuses=SUCCESS&channel_categories=EWALLET&channel_categories=RETAIL_OUTLET&limit=2 -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    Parameter Query Tipe Deskripsi
    types
    optional
    array of strings Tipe transaksi yang akan difilter. Jika tidak ditentukan, semua tipe transaksi akan dikembalikan.

    Tipe yang tersedia:
    DISBURSEMENT: Disbursement dari transaksi uang keluar.
    PAYMENT: Pembayaran yang meliputi semua jenis uang masuk.
    REMITTANCE_PAYOUT: Transaksi remittance untuk payout.
    TRANSFER: Transaski transfer antar akun Xendit. Transfer bisa keluar atau masuk.
    REFUND: Sebuah transaksi pengembalian dana telah dibuat untuk melakukan pengembalian dana dari transaksi masuk.
    statuses
    optional
    array of strings Status transaksi yang akan difilter. Jika tidak ditentukan, semua status transaksi akan dikembalikan.

    Status yg tersedia:
    PENDING: Transaksi masih menunggu diproses. Ini merujuk pada transaksi uang keluar ketika saldo uang Anda masih ditahan.
    SUCCESS: Transaksi uang keluar telah berashil dikirim atau uang masuk telah diterima.
    FAILED: Transaksi gagal untuk dikirim/diterima.
    VOIDED: Transaksi uang masuk dibatalkan oleh kustomer.
    REVERSED: Transaksi dibatalkan oleh Xendit.
    channel_categories
    optional
    array of strings Kanal transaksi yang akan difilter. Jika tidak ditentukan, semua kanal transaksi akan dikembalikan.

    Untuk tipe DISBURSEMENT dan REMITTANCE_PAYOUT, kategori kanal yang tersedia adalah BANK and CASH.
    Untuk tipe PAYMENT, kategori kanal yang tersedia adalah CARDS, CARDLESS_CREDIT, DIRECT_DEBIT, EWALLET, PAYLATER, QR_CODE, RETAIL_OUTLET, VIRTUAL_ACCOUNT.
    Sedangkan untuk tipe TRANSFER, kategori kanal yang tersedia adalah XENPLATFORM.
    reference_id
    optional
    string Referensi yang akan dicari. Pencarian menggunakan referensi adalah case sensitive dan dapat parsial.
    product_id
    optional
    string Id produk yang akan dicari. Pencarian menggunakan id produk adalah case sensitive dan sama persis.
    account_identifier
    optional
    string Account identifier yang akan dicari. Pencarian menggunakan ccount identifier adalah case sensitive dan sama persis.
    currency
    optional

    default: IDR
    string (ISO 4217) Mata uang yang akan difilter. Lihat datafat mata uang yang didukung.
    amount
    optional
    number Nominal transaksi yang akan dicari. Pencarian ini akan mencari dengan nilai yang sama persis.
    created[gte]
    optional
    string (ISO 8601) Batas awal waktu transaksi berdasakan kapan transaksi itu dibuat. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    created[lte]
    optional
    string (ISO 8601) Batas akhi waktu transaksi berdasakan kapan transaksi itu dibuat. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    updated[lte]
    optional
    string (ISO 8601) Batas awal waktu transaksi berdasakan kapan transaksi itu diperbarui. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    updated[gte]
    optional
    string (ISO 8601) Batas akhir waktu transaksi berdasakan kapan transaksi itu diperbarui. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    limit
    optional

    default: 10
    number Batas dari jumlah transaksi yang dikembalikan untuk tiap request.
    Batas berada dalam rentang 1 and 50.
    after_id
    optional
    string Batas id dari transaksi sebelumnya. Gunakan ini bersama links pada respon untuk keperluan paginasi.
    before_id
    optional
    string Batas id dari transaksi setelahnya.

    Parameter Respon

    Contoh Respon Mendapatkan Daftar Transaksi

    {
        "has_more": true,
        "data": [
            {
                "id": "txn_13dd178d-41fa-40b7-8fd3-f83675d6f413",
                "product_id": "d290f1ee-6c54-4b01-90e6-d701748f0701",
                "type": "PAYMENT",
                "status": "SUCCESS",
                "channel_category": "RETAIL_OUTLET",
                "channel_code": "ALFAMART",
                "reference_id": "ref23244",
                "account_identifier": null,
                "currency": "IDR",
                "amount": 1,
                "cashflow": "MONEY_IN",
                "business_id": "5fc9f5b246f820517e38c84d",
                "created": "2021-06-23T02:42:15.601Z",
                "updated": "2021-06-23T02:42:15.601Z"
            },
            {
                "id": "txn_a765a3f0-34c0-41ee-8686-bca11835ebdc",
                "product_id": "d290f1ee-6c54-4b01-90e6-d701748f0700",
                "type": "PAYMENT",
                "status": "SUCCESS",
                "channel_category": "RETAIL_OUTLET",
                "channel_code": "ALFAMART",
                "reference_id": "ref242424",
                "account_identifier": null,
                "currency": "IDR",
                "amount": 1,
                "cashflow": "MONEY_IN",
                "business_id": "5fc9f5b246f820517e38c84d",
                "created": "2021-06-23T02:39:23.176Z",
                "updated": "2021-06-23T02:39:23.176Z"
            }
        ],
        "links": [
            {
                "href": "/transactions?types=PAYMENT&statuses=SUCCESS&channel_categories=EWALLET&channel_categories=RETAIL_OUTLET&limit=2&after_id=txn_a765a3f0-34c0-41ee-8686-bca11835ebdc",
                "method": "GET",
                "rel": "next"
            }
        ]
    }
    
    Parameter Body Tipe Deskripsi
    data
    required
    array of objects Mengembalikan array Objek Transaksi. Mengembalikan array kosong bila hasil tidak ditemukan.
    has_more
    required
    bolean Mengindikasikan apakah masih ada transaksi lainnya pada halaman selanjutnya menggukan parameter after_id.
    Gunakan links untuk mendapatkan hasil selanjutnya.
    links
    optional
    object Tautan ke hasil selanjutnya berdasakan HATEOAS jika ada.
    Format HATEOAS adalah:
    href: URI dari target, ini akan berisi tautan ke halaman selanjutnya.
    rel: Hubungan antara sumber dan target, nilainya akan berisi next.
    method: Metode HTTP, ini akan berisi GET.

    Kode Error

    Lihat contoh umum error lainya di sini.

    Kode Error Deskripsi
    FEATURE_NOT_AVAILABLE
    400
    Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini.

    Credit Cards

    Fitur API kartu kredit kami membantu Anda untuk memroses transaksi kartu kredit / debit baik yang diterbitkan di Indonesia maupun internasional, yang berasosiasi dengan skema utama: Visa, Mastercard, dan JCB. Untuk memroses kartu yang diterbitkan dengan skema AMEX, Anda harus menggunakan akun pelanggan Anda yang terdaftar pada bank BCA di Indonesia.

    Kami mendesain API kami sebaik dan semodular mungkin demi memberikan Anda pengendalian penuh untuk setiap tahapan pemrosesan pembayaran. Saat menggunakan Xendit, data sensitif yang terdapat pada kartu tidak akan melewati server Anda. Integrasi pembayaran kartu kredit yang kami bangun mengutamakan optimisasi tingkat sukses / penerimaan transaksi. Kamis udah memroses pembayaran kartu pada lebih dari 100 negara sampai hari ini.

    Untuk mendapatkan penjelasan lebih lanjut bagaimana proses integrasi dengan sistem kami, mohon dapat melihat tautan dokumentasi.

    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 dengan data tagihan pemilik kartu

    {        
        "amount": "10000",        
        "card_data": {
            "account_number": "4456530000001096",        
            "exp_month": "12",        
            "exp_year": "2020"
        },
        "card_cvn": "123",
        "is_multiple_use": false,
        "should_authenticate": true,
        "billing_details": {
            "given_names": "John",
            "surname": "Hudson",
            "email": "john@xendit.co",
            "mobile_number": "+6208123123123",
            "phone_number": "+6208123123123",
            "address": {
                "country": "ID",
                "street_line1": "Panglima Polim IV",
                "street_line2": "Ruko Grand Panglima Polim, Blok E",
                "city": "Jakarta Selatan",
                "province_state": "DKI Jakarta",
                "postal_code": "12345"
            }
        }
    }

    Contoh objek tokenData dengan data pemilik kartu (dapat berupa alamat pengiriman barang)

    {        
        "amount": "10000",        
        "card_data": {
            "account_number": "4456530000001096",        
            "exp_month": "12",        
            "exp_year": "2020"
        },
        "card_cvn": "123",
        "is_multiple_use": false,
        "should_authenticate": true,
        "customer": {
            "reference_id": "123e4567-e89b-12d3-a456-426614174000",
            "mobile_number": "+6208123123123",
            "email": "john@xendit.co",
            "given_names": "John",
            "surname": "Hudson",
            "phone_number": "+6208123123123",
            "nationality": "ID",
            "addresses": [{
                "country": "ID",
                "street_line1": "Panglima Polim IV",
                "street_line2": "Ruko Grand Panglima Polim, Blok E",
                "city": "Jakarta Selatan",
                "province_state": "DKI Jakarta",
                "postal_code": "12345",
                "category": "WORK"
            }],
            "date_of_birth": "1990-04-13",
            "description": "customer using promo",
            "metadata": {}
        }
    }

    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. Untuk contoh implementasi SDK, dapat dilihat di halama dokumentasi Xendit untuk Android SDK and IOS SDK.

    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.

    Parameter Request (Money-in write permission)

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.
    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Bodi Tipe Deskripsi
    amount
    optional
    string Jumlah biaya yang ingin dikenakan. Wajib diisi untuk Token Sekali Pakai karena digunakan untuk proses otentikasi.
    card_data
    required
    object Detail informasi kartu pelanggan
    paramater objek data kartu
    Key Value
    account_number
    required
    string Nomor kartu yang akan dikonversi menjadi token
    exp_month
    required
    string Bulan kedaluwarsa kartu yang akan dikonversi menjadi token
    exp_year
    required
    string Tahun kedaluwarsa kartu yang akan dikonversi menjadi token
    card_cvn
    optional
    string Kode CVN/CVC kartu. Opsional namun sangat direkomendasikan. Dibutuhkan untuk kartu yang diterbitkan di Eropa.
    is_multiple_use
    optional default: false
    boolean Penentuan apakah token akan digunakan berulang kali atau tidak
    currency
    optional
    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Xendit secara default mendukung mata uang IDR untuk Indonesia dan PHP untuk Filipina. Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan mata uang sesuai dengan negara dari bisnis Anda
    should_authenticate
    default: true
    boolean Penentuan apakah proses tokenisasi akan digabung dengan proses otentikasi atau tidak.
    billing_details
    optional
    object Rincian tagihan pemilik kartu. Jika dimasukkan pada input, data data ini harus sesuai dengan data yang dimiliki oleh penerbit kartu kredit. Parameter ini dibutuhkan untuk menunjang sistem 3DS EMV dan verifikasi alamat (AVS) - hanya untuk kartu yang diterbitkan dari negara Amerika / Kanada / Inggris Raya
    parameter pada detil data tagihan
    Kunci Nilai
    given_names
    optional
    string Nama pertama pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    surname
    optional
    string Nama belakang pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    email
    optional
    string Alamat email pelanggan atau pemilik kartu yang terasosiasi dengan kartu
    mobile_number
    optional
    string Nomor telepon genggam pelanggan atau pemilik kartu dalam format E.164
    phone_number
    optional
    string Nomor telepon lain pelanggan atau pemilik kartu dalam format E.164 (dapat berupa nomor telepon rumah atau kantor)
    address
    optional
    object Alamat tagihan pemilik kartu
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    parameter objek alamat
    Kunci Nilai
    country
    required
    string 2-huruf ISO 3166-2 kode negara untuk menunjukkan negara pemilik kartu
    street_line1
    optional
    string Nama bangunan dan nomor unit apartemen / rumah
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    street_line2
    optional
    string Alamat lengkap bangunan
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan:
    Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    city
    optional
    string Kabupaten/Kota pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    province_state
    optional
    string Provinsi, state, atau region pemilik kartu. Jika pemilik kartu merupakan penduduk Amerika, pastikan nilai yang dimasukkan adalah kode negara bagian (contoh gunakan CA untuk California)
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    postal_code
    optional
    string Kode ZIP atau Kode Pos bila tersedia
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    category
    optional
    string Kategori alamat yang dimasukkan sebagai nilai. Nilai hanya dapat berisikan HOME, WORK, dan PROVINCIAL
    customer
    optional
    object Informasi yang berkaitan dengan pelanggan (pemilik kartu), contohnya rincian kontak. Parameter ini direkomendasikan untuk menjalankan protokol otentikasi yang lebih baik, meningkatkan tingkat kesuksesan transaksi, dan mencegah tindakan-tindakan penipuan (fraud). Cantumkan parameter ini untuk mencatat alamat pengiriman pelanggan, bila tersedia.
    Parameter Objek Pelanggan
    Kunci Nilai
    reference_id
    optional
    string Nilai parameter ini adalah ID yang merepresentasi pelanggan Anda di sistem Anda. Nilai dapat disamakan dengan reference_id pada API pembuatan Customer.
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    mobile_number
    optional
    string Nomor telepon genggam pelanggan atau pemilik kartu dalam format E.164
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    phone_number
    optional
    string Nomor telepon lain pelanggan atau pemilik kartu dalam format E.164 (dapat berupa nomor telepon rumah atau kantor)
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    email
    optional
    string Alamat email pelanggan atau pemilik kartu
    Catatan: Required for AVS and 3DS 2.0
    given_names
    optional
    string Nama pertama pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    surname
    optional
    string Nama belakang pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    nationality
    optional
    string 2-huruf ISO 3166-2 kode negara kewarnegaraan pemilik kartu
    date_of_birth
    optional
    string Tanggal, bulan, dan tahun lahir pelanggan atau pemilik kartu dengan format YYYY-MM-DD
    description
    optional
    string Deskripsi yang diberikan oleh merchant terkait dengan data pelanggan yang dimasukkan sebagai input
    jumlah karakter minimum: 1 karakter
    jumlah karakter maksimum: 500 karakter
    metadata
    optional
    object Data bebas dengan format json yang dapat digunakan pelanggan sebagai data pelengkap.
    addresses
    optional
    Array of JSON Informasi alamat pelanggan. Gunakan parameter ini untuk mengirimkan alamat pengiriman milik pelanggan kepada Xendit jika tersedia. Untuk alamat penagihan, mohon disertakan pada parameter billing_details di atas
    object Parameter Objek Alamat
    Kunci Nilai
    country
    required
    string 2-huruf ISO 3166-2 kode negara untuk menunjukkan negara pemilik kartu
    street_line1
    optional
    string Nama bangunan dan nomor unit apartemen / rumah
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    street_line2
    optional
    string Alamat bangunan
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    city
    optional
    string Kabupaten/Kota pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    province_state
    optional
    string Provinsi, state, atau region pemilik kartu. Jika pemilik kartu merupakan penduduk Amerika, pastikan nilai yang dimasukkan adalah kode negara bagian (contoh gunakan CA untuk California)
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)
    postal_code
    optional
    string Kode ZIP atau kode POS bila tersedia
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    Catatan: Dibutuhkan untuk mendukung 3DS 2.0 dan AVS (Verifikasi Alamat)

    Contoh Respon Tokenisasi

    {
        "id": "5fcd8deb93e9a90020d8fd2d",
        "masked_card_number": "445653XXXXXX1096",
        "authentication_id": "5fcd8deb93e9a90020d8fd2e",
        "status": "IN_REVIEW",
        "card_info": {
            "bank": "PT. Bank Rakyat Indonesia (Persero)",
            "country": "ID",
            "type": "CREDIT",
            "brand": "VISA"
        },
        "payer_authentication_url": "https://redirect-staging.xendit.co/redirects/authentications/bundled/5fcd8deb93e9a90020d8fd2d?api_key=xnd_public_development_bPgL7lc65YTfywEk10f5qneRuu537yonRbfgQRMBLPUr1mZP4nNVd7iNHU"
    }

    Response Parameters

    Body Parameter Type Description
    id
    required
    string ID token kartu kredit/debit. ID token ini akan digunakan kemudian untuk melakukan proses charge pada kartu kredit.
    authentication_id
    required
    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 proses tokenisasi. Lihat Status Tokenisasi
    payer_authentication_url
    optional
    string Dikembalikan pada respon hanya jika permintaan pembuatan token dilakukan bersamaan dengan permintaan otentikasi dan status yang dikembalikan bernilai IN_REVIEW. Parameter ini berisikan dengan URL yang nantinya akan diakses oleh pemilik kartu untuk melakukan otentikasi 3DS (memasukkan OTP.
    failure_reason
    optional
    string Jika tokenization yang digabung dengan otentikasi mengalami kegalan dengan status FAILED, parameter ini menjelaskan alasan dari kegagalan tersebut. Lihat Alasan Kegagalan pada Proses Tokenisasi
    card_info
    optional
    object Informasi kartu yang sudah dilakukan proses tokenisasi.
    parameter info kartu
    Kunci Nilai
    bank
    optional
    string Nama bank penerbit kartu
    country
    optional
    string 2-huruf ISO 3166-2 kode negara Kode negara penerbit kartu
    type
    optional
    string Tipe kartu kredit/debit yang sudah dilakukan tokenisasi. Dapat bernilai CREDIT, DEBIT, PREPAID, dan UNKNOWN
    brand
    optional
    string Merek atau skema dari kartu yang sudah dilakukan tokenisasi. Dapat bernilai VISA, MASTERCARD, JCB, dan AMEX

    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. Merchant dapat melihat kode ECI untuk mengecek perpindahan liabilitas sebelum dilanjutkan ke proses Charge.
    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

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    INVALID_JSON_FORMAT
    400
    Isi dari request bukan format JSON yang benar. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    ACCOUNT_NUMBER_INVALID_ERROR
    400
    Nomor kartu kredit tidak valid atau salah. Mohon cek kembali kesesuaian nomor kartu.
    VALIDATION_ERROR
    400
    Data dikirimkan dengan format yang salah. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    BRAND_NOT_SUPPORTED_ERROR
    400
    Merek kartu tidak didukung. Sarankan pengguna untuk menggunakan Visa/Mastercard.
    AUTHENTICATION_REQUIRED_ERROR
    400
    Anda tidak menyertakan authentication_id yang valid dalam request dan akun anda tidak dikonfigurasi untuk otentikasi pilihan. Sertakan authentication_id yang valid atau hubungi kami bila Anda ingin mematikan setingan wajib otentikasi.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    VERIFICATION_TIMEOUT_ERROR
    408
    Jaringan kartu kredit mengalami timed out ketika berusaha melakukan tokenisasi.
    TEMPORARY_SERVICE_ERROR
    503
    Terjadi masalah ketika melakukan tokenisasi pada jaringan kartu kredit. Coba kembali dalam beberapa saat.
    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.

    Mendapatkan Token

    Definisi: Mendapatkan Token

    GET https://api.xendit.co/credit_card_tokens/:credit_card_token_id?

    Contoh Melakukan Permintaan Mendapatkan Token Request Menggunakan Token ID

    curl https://api.xendit.co/credit_card_tokens/605c05d3f81fa60011b2fa4e \
        -X GET \
        -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==:

    Contoh Respon Token Response

    {
      "business_id": "602103396f17450020ca2246",
      "created": "2021-03-25T03:38:59.318Z",
      "id": "605c05d3f81fa60011b2fa4e",
      "status": "VALID",
      "card_expiration_month": "12",
      "card_expiration_year": "2025",
      "metadata": {
          "bank": "PT. Bank Rakyat Indonesia (Persero)",
          "country_code": "US",
          "type": "CREDIT",
          "brand": "VISA",
      },
      "card_info": {
          "bank": "PT. Bank Rakyat Indonesia (Persero)",
          "country": "ID",
          "type": "CREDIT",
          "brand": "VISA",
          "card_art_url": "",
          "fingerprint": "6021f7d3717e0500115fbb0d",
      },
    }

    Ini adalah endpoint untuk mengambil suatu objek token. Anda perlu menentukan nilai dari token_id.

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda dapatkan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Query Tipe Deskripsi
    credit_card_token_id
    required
    string Dapat diinput dengan nilai diantara id token dari kartu kredit yang sudah di tokenisasi.

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    CREDIT_CARD_TOKEN_NOT_FOUND_ERROR
    404
    credit_card_token_id tidak ditemukan

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

    Parameter Request (Money-in write permission)

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    amount
    required
    string Jumlah biaya yang ingin diotentikasi.
    token_id
    required
    string Token untuk otentikasi.
    currency
    optional
    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Xendit secara default mendukung mata uang IDR untuk Indonesia dan PHP untuk Filipina. Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan mata uang sesuai dengan negara dari bisnis Anda.
    xenditResponseHandler
    required
    function Penanganan respon, dipanggil setelah percobaan otentikasi untuk menangani kesalahan dan respon.

    Parameter Respon

    Parameter Tipe 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 Otorisasi

    Pembuatan otorisasi menggunakan API yang sama dengan pembuatan charge, hanya saja parameter capture diisi dengan nilai false

    Definisi: Pembuatan Otorisasi

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

    Contoh Permintaan Pembuatan Otorisasi

    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": 140000,
          "authentication_id":"598d5d0f51e0870d44c61535",
          "capture":false
        }'
    <?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 = 140000;
      $authentication_id = '58e2097218b815f555c8a526';
      $capture = false;
    
      $response = $xenditPHPClient->captureCreditCardPayment($external_id, $token_id, $amount);
      print_r($response);
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.createAuthorization({
      externalID: 'sample-external-id-1475459775872',
      tokenID: 'sample-token-id-1475459775872',
      amount: 140000,
      authID: '58e2097218b815f555c8a526',
    })
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardCharge creditCardCharge = CreditCard.createAuthorization(
      "token_id", // tokenId
      "postman-charge-1502436793", // externalId
      140000, // amount
      "auth_id", // authenticationId
      false // capture
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    charge = CreditCard.create_authorization(
        token_id="5f0410898bcf7a001a00879d",
        external_id="card_preAuth-1594106356",
        amount=75000
    )
    print(charge)

    Contoh Respon Pembuatan Otorisasi

    {
        "created": "2020-01-11T07:33:14.442Z",
        "status": "AUTHORIZED",
        "business_id": "5850e55d8d9791bd40096364",
        "authorized_amount": 140000,
        "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",
        "id": "598d5dba51e0870d44c61539"
    }

    You can do authorization using create charge endpoint. Just capture field as false, and you will receive an authorized charge response.

    Otorisasi Dengan Nilai 0

    Pembuatan otorisasi menggunakan API yang sama dengan pembuatan charge, hanya saja parameter amount diisi dengan nilai 0 Pembuatan Charge. Kegunaan dari fitur ini adalah untuk melakukan pengecekan apakah kartu dapat melakukan transaksi atau tidak.

    Otorisasi dengan nilai 0 tidak tersedia untuk transaksi melalui MIGS dan koneksi langsung ke bank. Apabila Anda melakukan proses transaksi dengan metode aggregator, fitur ini akan otomatis bekerja untuk Anda. Fitur ini juga otomatis bekerja pada mode tes

    Example Zero Amount Authorization Request

    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": 0,
          "authentication_id":"598d5d0f51e0870d44c61535"
        }'
    <?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 = 0;
      $authentication_id = '58e2097218b815f555c8a526';
    
      $response = $xenditPHPClient->captureCreditCardPayment($external_id, $token_id, $amount);
      print_r($response);
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.createAuthorization({
      externalID: 'sample-external-id-1475459775872',
      tokenID: 'sample-token-id-1475459775872',
      amount: 0,
      authID: '58e2097218b815f555c8a526',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardCharge creditCardCharge = CreditCard.createAuthorization(
      "token_id", // tokenId
      "test_id", // externalId
      0, // amount
      "auth_id", // authenticationId
      false // capture
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }

    Example Zero Amount Authorization Response

    {
        "created": "2020-01-11T07:33:14.442Z",
        "status": "AUTHORIZED",
        "business_id": "5850e55d8d9791bd40096364",
        "authorized_amount": 0,
        "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",
        "id": "598d5dba51e0870d44c61539"
    }

    Pengembalian Otorisasi (Reverse Auhorization)

    Definisi: Pembuatan Reverse Authorization

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

    Contoh Permintaan Pembuatan Reverse Authorization

    curl -X POST \
      https://api.xendit.co/credit_card_charges/:charge_id/auth_reversal \
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -d '{
        "external_id": "reverse-authorization-1502436817",
        }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '5ecc82736275b80019591c91';
      $params = ['external_id' => 'reverse-authorization-1502436817'];
    
      $reverseAuth = \Xendit\Cards::reverseAuthorization(
          $id,
          $params
      );
      var_dump($reverseAuth);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.reverseAuthorization({
      externalID: 'reverse-authorization-1502436817',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardReverseAuth creditCardReverseAuth = CreditCard.reverseAuthorization(
        "1234567", //chargeId
        "reverse-authorization-1502436817" //externalId
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    reverseAuthorizationData := card.ReverseAuthorizationParams{
      ChargeID:   "123",
      ExternalID: "reverse-authorization-1502436817",
    }
    
    reverseAuthorizationResp, err := card.ReverseAuthorization(&reverseAuthorizationData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("reversed authorization: %+v\n", reverseAuthorizationResp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    reverse_authorization = CreditCard.reverse_authorizatiton(
        credit_card_charge_id="5f0421fa8cc1e8001973a1d6",
        external_id="reverse-authorization-1594106387",
    )
    print(reverse_authorization)

    Contoh dari bentuk permintaan

    {        
        "external_id": "reverse-authorization-1502436817",
    }

    Contoh dari respon pengembalian otorisasi

    {
        "status": "SUCCEEDED",
        "currency": "IDR",
        "credit_card_charge_id": "5ecc82640d679500199621ad",
        "business_id": "5dd7928f4e6d9a2ec299ea43",
        "external_id": "reverse-authorization-1502436817",
        "amount": 5000,
        "created": "2020-05-26T02:44:03.458Z",
        "id": "5ecc82736275b80019591c91"
    }

    API ini dapat melakukan pengembalian transaksi yang sudah memiliki status AUTHORIZED dan belum dilakukan capture (pemindahan uang ke acquiring bank).

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    external_id
    required
    string Referensi untuk mengidentifikasi permintaan pengembalian otorisasi dari pelanggan.

    Parameter Respon

    Parameter Tipe Deskripsi
    status
    required
    string Reverse Authorization status. Lihat Status Pengembalian Otorisasi.
    currency
    required
    string Mata uang dari otorisasi yang ingin dikembalikan.
    credit_card_charge_id
    required
    string ID dari otorisasi / charge yang ingin dikembalikan.
    business_id
    required
    string ID akun bisnis Xendit Anda.
    external_id
    required
    string Referensi untuk mengidentifikasi permintaan pengembalian otorisasi dari pelanggan.
    amount
    required
    number Nominal uang yang dikembalikan untuk permintaan pengembalian otorisasi ini.
    created
    required
    string Cap waktu ISO yang mencatat kapan permintaan pengembalian otorisasi tersebut dibuat reverse authorization
    Timezone: GMT+0
    .
    id
    required
    string ID dari pengembalian otorisasi.
    failure_reason
    optional
    string Jika status FAILED, parameter ini menjelaskan alasan dari kegagalan permintaan tersebut. Lihat Alasan Kegagalan Pengembalian Otorisasi.

    Status Pengembalian Otorisasi

    Status Deskripsi
    SUCCEEDED Pengembalian Otorisasi telah berhasil dilakukan.
    FAILED Pengembalian Otorisasi gagal

    Alasan Kegagalan Pengembalian Otorisasi

    Failure Reason Description
    REVERSE_AUTHORIZATION_REJECTED_BY_BANK Permintaan pengembalian otorisasi ditolak oleh bank. Hal ini mungkin terjadi apabila otorisasi sudah lewat dari masa tenggang, ataupun kredit (uang) sudah dikembalikan ke akun pemegang kartu.
    PROCESSOR_ERROR Permintaan pengembalian otorisasi gagal karena terdapat isu integrasi antara pemroses dengan bank penerbit kartu. Hubungi Kami apabila anda mengalami permasalahan ini

    Error Pada Permintaan Pengembalian Otorisasi

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Nilai yang dimasukkan pada parameter mengalami kesalaham. Pada objek error dijelaskan paramater mana yang mengalami kesalahan. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    CHARGE_ALREADY_REVERSED_ERROR
    400
    Charge telah dilakukan pengembalian, maka dari itu pengembalian otorisasi tidak dapat dilakukan
    CHARGE_ALREADY_CAPTURED_ERROR
    400
    Charge telah dilaukan capture, maka dari itu pengembalian otorisasi tidak dapat dilakukan
    CHARGE_FAILED_ERROR
    400
    Charge gagal, maka dari itu pengembalian otorisasi tidak dapat dilakukan
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang dipakai tidak memiliki izin untuk melakukan permintaan pengembalian otorisasi. Mohon gunakan API key yang mempunyai izin yang sesuai. Pelajari lebih lanjut here
    CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan untuk permintaan ini. Mohon gunakan credit_card_charge_id lain yang valid
    INVALID_AMOUNT_FOR_REVERSE_AUTHORIZATION_ERROR
    400
    Nominal yang ingin dikembalikan tidak sesuai. Mohon dipastikan bahwa nominal charge tidak sama dengan 0.

    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": 900000,
          "authentication_id": "598d5d0f51e0870d44c61535",
          "descriptor": "My new store",
          "currency": "IDR",
          "mid_label": "IDR_MID",
          "billing_details": {
            "given_names": "John",
            "surname": "John Doe",
            "email": "johndoe@xendit.co",
            "mobile_number": "+62899336634448",
            "phone_number": "+629934448",
            "address": {
              "street_line1": "Panglima Polim IV",
              "street_line2": "Ruko Grand Panglima Polim, Blok E",
              "city": "Jakarta Selatan",
              "province_state": "DKI Jakarta",
              "postal_code": "993448",
              "country": "ID"
            }
          },
          "promotion": {
              "reference_id": "BCA_10",
              "original_amount": 1000000
          },
          "installment": {
              "count": 3,
              "interval": "month"
          },
          "metadata": {}
        }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
          'token_id' => '5e2e8231d97c174c58bcf644',
          'external_id' => 'card_' . time(),
          'authentication_id' => '5e2e8658bae82e4d54d764c0',
          'amount' => 15000,
          'capture' => false
      ];
    
      $createCharge = \Xendit\Cards::create($params);
      var_dump($createCharge);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const resp = await card.createCharge({
      externalID: 'sample-external-id-1475459775872',
      tokenID: 'sample-token-id-1475459775872',
      amount: 900000,
      authID: '58e2097218b815f555c8a526',
      descriptor: "My new store",
      currency: "IDR",
      midLabel: "IDR_MID",
      billingDetails: {
          given_names: "John",
          surname: "John Doe",
          email: "johndoe@xendit.co",
          mobile_number: "+62899336634448",
          phone_number: "+629934448",
          address: {
              street_line1: "Panglima Polim IV",
              street_line2: "Ruko Grand Panglima Polim, Blok E",
              city: "Jakarta Selatan",
              province_state: "DKI Jakarta",
              postal_code: "993448",
              country: "ID"
          }
      },
      promotion: {
          referenceId: "BCA_10",
          originalAmount: 1000000
      },
      installment: {
          count: 3,
          interval: "month"
      }
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardCharge creditCardCharge = CreditCard.createCharge(
        "token_id", //tokenId
        "postman-authorize-1502437417", //externalId
        90000, //amount
        "auth_id", //authenticationId
        "XDT*MYBUSINESS-MY NEW STORE" //Descriptor
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createChargeData := card.CreateChargeParams{
      TokenID:          "example-token-id",
      AuthenticationID: "example-authentication-id",
      ExternalID:       "postman-charge-1502436793",
      Amount:           900000,
      Capture:          new(bool),
    }
    
    chargeResp, err := card.CreateCharge(&createChargeData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created charge: %+v\n", chargeResp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    charge = CreditCard.create_charge(
        token_id="5f0410898bcf7a001a00879d",
        external_id="card_charge-1594106478",
        amount=900000
    )
    print(charge)

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

    Parameter Request (Money-in write permission)

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    with-split-rule
    opsional
    string ID Split Rule yang ingin Anda aplikasikan ke pembayaran kartu ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan.

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe 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.
    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.
    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.
    capture
    optional

    default: true
    boolean Kondisi dimana Anda akan menentukan apakah akan melakukan Capture langsung atau tidak langsung. Ubah nilai menjadi false bila Anda menginginkan otentikasi saja (penahanan uang), untuk kemudian di-capture dengan capture endpoint.
    Catatan: Otorisasi akan kedaluwarsa dalam 7 hari.
    descriptor
    optional
    string Deskriptor khusus untuk mengidentifikasi merchant pada laporan penggunaan kartu kredit pemilik kartu.
    Note:
    Untuk pelanggan dengan mode aggregator, nilai yang akan dikembalikan adalah XDT*[MERCHANT_NAME]-DESCRIPTOR
    Untuk pelanggan dengan mode switcher, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR
    currency
    optional

    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Xendit secara default mendukung mata uang IDR untuk Indonesia dan PHP untuk Filipina. Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan mata uang sesuai dengan negara dari bisnis Anda
    mid_label
    optional
    string Karakter spesifik yang digunakan untuk memberi tanda pada Merchant ID (MID) yang sudah di daftarkan di akun Xendit dan akan digunakan untuk bertransaksi. Parameter tersebut dan dikonfigurasi pada daftar MID yang terdapat di pengaturan dashbor Anda. (Jika tidak ada input pada parameter ini dan jika Anda memiliki lebih dari 1 MID, maka transaksi akan menggunakan MID yang tertera paling atas / prioritas pertama pada pengaturan dasbor Anda.
    Note:
    Hanya dapat digunakan untuk pelanggan dengan mode switcher
    billing_details
    optional
    object Rincian tagihan dari pemegang kartu. Jika dimasukkan pada input, data data ini harus sesuai dengan data yang dimiliki oleh penerbit kartu kredit. Parameter ini dibutuhkan untuk menunjang sistem verifikasi alamat (AVS) - hanya untuk kartu yang diterbitkan di negara USA / Canada / Ingrris Raya.
    parameter pada detil data tagihan
    Kunci Nilai
    given_names string Nama pertama
    surname
    optional
    string Nama belakang
    email
    optional
    string Alamat email
    mobile_number
    optional
    string Nomor handphone
    phone_number
    optional
    string Nomor telepon lain (telpon rumah atau kantor)
    address
    required
    object Objek Alamat
    parameter objek alamat
    street_line1
    optional
    string Nama bangunan dan nomor unit apartemen / rumah
    street_line2
    optional
    string Alamat bangunan
    city
    optional
    string Kota
    province_state
    optional
    string Gunakan parameter ini untuk memasukkan provinsi, state, atau region dari pemilik kartu. Jika pemilik kartu merupakan penduduk USA, pastikan nilai yang input adalah kode negara bagian (contoh gunakan CA untuk California)
    postal_code
    required
    string Kode POS atau kode ZIP
    country
    optional
    string 2-hufur ISO 3166-2 kode negara untuk menunjukkan negara pemilik kartu
    metadata
    optional
    object Data bebas dengan format json yang dapat digunakan pelanggan sebagai data pelengkap.
    promotion
    optional
    object Jika Anda ingin menggunakan promosi, Anda harus memasukkan parameter ini pada permintaan transaksi Anda
    reference_id
    optional
    string Kode unik yang digunakan untuk ID referensi pada API Pembuatan Promo.
    original_amount
    optional
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    installment
    optional
    object Parameter ini diperlukan sebagai penanda bahwa permintaan Charge menggunakan metode cicilan. Untuk mengecek apakah BIN atau token id yang digunakan mempunyai opsi cicilan, mohon mengacu pada Opsi Charge.
    count
    required
    numberBersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan tenor 3 bulan, maka nilai yang dimasukkan adalah 3.
    interval
    required
    string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan periode bulanan, maka nilai yang dimasukkan adalah month. Untuk saat ini Xendit hanya menyediakan cicilan dengan periode interval bulanan.

    Contoh Respon Pembuatan Charge

    {
        "created": "2020-01-11T07:33:14.442Z",
        "status": "CAPTURED",
        "business_id": "5850e55d8d9791bd40096364",
        "authorized_amount": 900000,
        "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": 900000,
        "descriptor": "XDT*MYBUSINESS-MY NEW STORE",
        "id": "598d5dba51e0870d44c61539",
        "mid_label": "IDR_MID",
        "promotion": {
            "reference_id": "BCA_10",
            "original_amount": "1000000"
        },
        "installment": {
            "month": 3,
            "interval": "month"
        }
    }

    Contoh Respon Otorisasi

    {
        "created": "2020-01-11T07:43:39.563Z",
        "status": "AUTHORIZED",
        "business_id": "5850e55d8d9791bd40096364",
        "authorized_amount": 90000,
        "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",
        "descriptor": "XDT*MYBUSINESS-MY NEW STORE",
        "id": "598d602b51e0870d44c6153d",
        "mid_label": "IDR_MID",
        "promotion": {
            "reference_id": "BCA_10",
            "original_amount": "100000"
        },
        "installment": {
            "month": 3,
            "interval": "month"
        }
    }

    Respon Pembuatan Charge



    Parameter Tipe Deskripsi
    created
    required
    string Cap waktu ISO yang mencatat kapan charge tersebut dibuat 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.
    card_type
    required
    string Tipe kartu yang sudah dilakukan charge. Dapat bernilai CREDIT, DEBIT, PREPAID, dan UNKNOWN.
    masked_card_number
    required
    string Enam angka pertama dan Empat angka terakhir pada kartu kredit.
    charge_type
    required
    string Tipe tipe dari charge. Lihat Tipe Charge.
    merchant_id
    required
    string Merchant ID yang digunakan untuk melakukan pemrosesan kartu kredit dengan bank.
    card_brand
    required
    string Merek kartu (VISA, MASTERCARD, JCB, ...).
    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 yang akan di-capture untuk charge ini. Nilai maksimumnya adalah nilai authorized_amount.
    status
    required
    string Status dari transaksi charge yang dikembalikan oleh sistem Xendit. Lihat [Status pada charge] (#status-status-pada-Charge).
    failure_reason
    optional
    string Bila status charge adalah FAILED, lihat Status-status pada Charge untuk keterangan lebih lanjut.
    approval_code
    optional
    string Suatu kode berisikan angka yang berurutan (biasanya 6 atau 8 digit) yang mengindikasikan bahwa proses otorisasi telah disetujui oleh penerbit kartu.
    cvn_code
    optional
    string Respon yang didapatkan dari validasi CVN (3 digit kode keamanan yang terdapat dibalik kartu). Parameter ini tidak akan tertera pada respon apabila CVN tidak disertakan pada saat permintaan pembuatan charge atau pembuatan token. Lihat Kode CVN.
    merchant_reference_code
    required
    string Kode merchant yang digunakan untuk melakukan rekonsiliasi transaksi dengan bank.
    descriptor
    optional
    string Deskriptor khusus untuk menentukan identitas merchant.
    Catatan:
    Untuk aggregator merchant, nilai yang akan dikembalikan adalah XDT*[MERCHANT_NAME]-DESCRIPTOR
    Untuk switcher merchant, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR
    currency
    optional

    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Xendit secara default mendukung mata uang IDR untuk Indonesia dan PHP untuk Filipina. Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan mata uang sesuai dengan negara dari bisnis Anda
    mid_label
    optional
    string Karakter string spesifik yang digunakan untuk memberikan label pada MID pelanggan. Konfigurasi penanda label ini dapat dilakukan melalui menu pengaturan kartu kredit di Dasbor, pada menu pengaturan kartu kredit ( Jika pelanggan tidak menyertakan mid_label bersamaan dengan request transaksi, transaksi akan diproses menggunakan MID prioritas 1.
    Catatan:
    Hanya dikembalikan pada response untuk switcher merchant
    id
    required
    string ID dari charge di sistem Xendit.
    promotion
    optional
    object Jika Anda ingin menggunakan promosi pada transaksi charge, Anda harus memasukkan parameter di bawah ini.
    detil objek promosi
    reference_id
    optional
    string Referensi unik seperti nama atau ID yang diberikan pada promo yang telah dibuat.
    original_amount
    optional
    number Nominal asli dari transaksi (sebelum diberikan potongan harga).
    installment
    optional
    object Parameter ini diberikan pada respon sebagai penanda bahwa permintaan Charge menggunakan metode cicilan. Untuk melihat apakah BIN mempunyai cicilan yang tersedia atau tidak, lihat [Permintaan Opsi Charge] (#permintaan-opsi-charge).
    detil objek installment
    count
    required
    number Bersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran.
    interval
    required
    string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran.

    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.
    REVERSED Otorisasi telah berhasil dikembalikan. Pada tahap ini, nominal transaksi dikembalikan ke pemilik kartu.
    AUTHORIZED Charge telah berhasil diotorisasi.
    FAILED Charge gagal. Lihat Alasan Kegagalan Charge

    Kode CVN

    Kode Deskripsi
    M Cocok - CVN yang disertakan pada permintaan pembuatan charge cocok dengan data CVN yang dimiliki oleh penerbit kartu.
    N Tidak cocok - CVN yang disertakan pada permintaan tidak cocok dengan data CVN yang dimiliki oleh penerbit kartu.
    P Tidak diproses - Dapat terjadi jika kartu tidak memiliki CVN yang valid, atau CVN tidak diterima oleh penerbit kartu. Dapat melakukan permintaan charge kembali, apabila hasil yang didapatkan tetap sama, mohon dapat menggunakan kartu yang lain.

    Alasan Kegagalan Pembuatan Charge

    Alasan Gagal Deskripsi

    Failure Reasons

    Failure Reason Description
    AUTHENTICATION_FAILED Pembayaran ditolak karena transaksi belum diotentikasi. Rekomendasikan pemegang kartu untuk mengotentikasi ulang transaksi dengan 3DS. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain, bentuk pembayaran lain, atau menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online.
    DECLINED_BY_ISSUER Pembayaran ditolak oleh penerbit kartu tanpa memberikan informasi lebih lanjut kepada Xendit. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    DECLINED_BY_PROCESSOR Pembayaran ditolak oleh prosesor tanpa memberikan informasi lebih lanjut kepada Xendit. Rekomendasikan pemegang kartu untuk mencoba kembali. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    EXPIRED_CARD Pembayaran ditolak karena kartu telah kedaluwarsa. Rekomendasikan pemegang kartu untuk memasukkan tanggal kedaluwarsa yang benar. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    ISSUER_SUSPECT_FRAUD Pembayaran ditolak oleh penerbit kartu karena mereka mencurigai pembayaran ini sebagai penipuan. Tinjau kembali pemegang kartu. Jika Anda yakin pemegang kartu tersebut sah, rekomendasikan pemegang kartu untuk menggunakan kartu lain atau bentuk pembayaran lainnya. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.
    INACTIVE_OR_UNAUTHORIZED_CARD Pembayaran ditolak oleh penerbit kartu karena kartu tidak diizinkan untuk transaksi online. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INSUFFICIENT_BALANCE Pembayaran ditolak oleh penerbit kartu karena dana di rekening pemegang kartu tidak mencukupi. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INVALID_CARD Pembayaran ditolak oleh penerbit kartu karena informasi kartu yang diberikan salah. Rekomendasikan pemegang kartu untuk meninjau informasi kartu dan coba kembali. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INVALID_CVV Pembayaran ditolak oleh penerbit kartu karena CVN / CVV / CSC kartu yang diberikan salah. Rekomendasikan pemegang kartu untuk meninjau kembali CVV / CVN / CSC dari kartu yang dipakai dan coba kembali (biasanya kode 3-4 digit di bagian belakang kartu). Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    ISSUER_UNAVAILABLE Pembayaran ditolak oleh prosesor karena penerbit kartu tidak dapat dijangkau. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    PROCESSOR_ERROR Pembayaran ditolak oleh prosesor karena kendala teknis di sisi prosesor. Rekomendasikan pemegang kartu untuk mencoba kembali dalam beberapa menit. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan bentuk pembayaran lainnya.
    STOLEN_CARD Pembayaran ditolak oleh penerbit kartu karena kartu dilaporkan dicuri / hilang oleh pemegang kartu. Tinjau kembali pemegang kartu. Jika Anda yakin pemegang kartu tersebut sah, rekomendasikan pemegang kartu untuk menggunakan kartu lain atau bentuk pembayaran lainnya. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.
    PROCESSOR_TIMEOUT Kami mendapatkan timeout dari pemroses kami saat meminta pembayaran yang menunjukkan masalah koneksi intermiten. Sarankan pelanggan untuk mencoba ulang transaksi.
    FRAUD_RISK_BLOCKED Pembayaran ditolak oleh penilaian risiko Xendit. Silahkan merujuk ke bagian Penilaian Risiko Penipuan untuk detail lebih lanjut. Tinjau pemegang kartu, karena pembayaran diblokir oleh daftar blokir Anda. Jika Anda yakin pemegang kartu itu sah, hapus identifikasi kartu tersebut dari daftar blokir dan anjurkan pemegang kartu untuk mencoba kembali. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    INVALID_JSON_FORMAT
    400
    Isi dari request bukan format JSON yang benar. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    TOKEN_ALREADY_USED_ERROR
    400
    ID Token Sekali Pakai sudah pernah digunakan ketika melakukan Charge. Mohon untuk menggunakan ID Token yang berbeda untuk melakukan Charge.
    AUTHENTICATION_ALREADY_USED_ERROR
    400
    ID otentikasi sudah pernah digunakan ketika melakukan charge. Mohon untuk menggunakan ID otentikasi yang berbeda untuk melakukan Charge
    INVALID_TOKEN_ID_ERROR
    400
    Format ID token tidak valid. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    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. Mohon untuk cek apabila digit CVN yang dimasukkan sudah sesuai format kemudian coba kembali.
    AUTHENTICATION_ID_MISSING_ERROR
    400
    ID Otentikasi wajib diisi. Mohon untuk menambahkan ID otentikasi ke dalam request.
    AMOUNT_GREATER_THAN_AUTHENTICATED_ERROR
    400
    Jumlah nominal angka yang di-charge melampaui jumlah yang diotentikasi. Pastikan nominal Charge sudah sesuai dengan yang telah terotentikasi.
    INVALID_AUTHENTICATION_ID_ERROR
    400
    Format ID otentikasi tidak valid. Cek kembali apakah format ID otentikasi telah sesuai kemudian coba kembali.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    TOKEN_NOT_FOUND_ERROR
    404
    ID token tersebut tidak ditemukan dalam sistem. Mohon cek kembali apakah API key yang tertera sudah benar. Untuk Charge, API key yang digunakan adalah secret API key.
    AUTHENTICATION_NOT_FOUND_ERROR
    404
    Token yang telah diotentikasi dengan otentikasi ID tersebut tidak ditemukan. Mohon cek kembali apakah ID otentikasi tersebut sudah terdaftar.
    MID_NOT_FOUND_ERROR
    404
    MID yang digunakan pada parameter mid_label tidak dapat ditemukan. Lakukan pengecekan ulang jika Anda sudah mendaftarkan mid tersebut atau lakukan pengecekan pada input parameter mid Anda.
    INVALID_PROMOTION_DETAILS
    400
    Detil promosi yang dimasukkan tidak valid. Mohon dapat melakukan permintaan kembali dengan mengganti input objek promo yang ingin digunakan.
    CARDHOLDER_NAME_REQUIRED
    400
    Mohon dapat menyertakan nama pemilik kartu pada parameter billing_details pada request Anda.
    INSTALLMENT_BELOW_AMOUNT_MINIMUM
    400
    Nominal transaksi yang ingin dilakukan berada di bawah minimum batas transaksi cicilan.
    INSTALLMENT_UNAVAILABLE
    404
    Kemungkinan penjelasan kesalahan:
  • Fitur cicilan tidak tersedia untuk kartu yang diterbitkan oleh bank tersebut. Mohon dicoba kembali menggunakan kartu yang lain.
  • Interval dari cicilan yang diajukan tidak tersedia. Mohon dicoba kembali menggunakan interval periode cicilan yang lain.
  • AMOUNT_BELOW_MINIMUM_LIMIT
    400
    Nominal yg dimasukkan pada input di bawah batas minimum transaksi. Mohon lakukan permintaan dengan nominal yang sama atau lebih dari batas minimum. Batas minimum yang ditentukan dari sistem berdasarkan mata uang yg digunakan adalah sebagai berikut:
  • IDR: 5000.
  • PHP: 20.

  • AMOUNT_ABOVE_MAXIMUM_LIMIT
    400
    Nominal yg dimasukkan pada input di atas batas maksimum transaksi. Mohon lakukan permintaan dengan nominal yang sama atau kurang dari batas maksimum. Batas maksimum yang ditentukan dari sistem berdasarkan mata uang yg digunakan adalah sebagai berikut:
  • IDR: 200000000.
  • PHP: 700000.

  • INCOMPLETE_AUTHENTICATION
    400
    authentication_id yang dimasukkan tidak dapat digunakan karena proses otentikasi tidak dapat diselesaikan. Hal ini biasanya terjadi karena adanya kendala saat menampilkan render halaman 2FA, pelanggan tidak menyelesaikan proses 3DS, atau hal lain terjadi seperti timeout dari sisi bank. Mohon mencoba lagi transaksi ini atau Anda dapat menghilangkan authentication_id dari Charge request apabila 3DS opsional sudah diaktifkan untuk bisnis Anda. (Apabila Anda ingin dapat melakukan otentikasi secara opsional/dinamis 3DS, kontak kami untuk mengaktifkan fitur ini. Lihat dokumentasi otentikasi untuk panduan integrasi dan testing.)

    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
    0 Tidak bisa diotentikasi (MasterCard)
    1 Percobaan Otentikasi(MasterCard)
    2 Otentikasi Berhasil (MasterCard)
    5 Otentikasi Berhasil (Visa, AMEX, JCB)
    6 Percobaan Otentikasi (Visa, AMEX, JCB)
    7 Tidak bisa diotentikasi (Visa, AMEX, JCB)

    Charge menggunakan CVV untuk Multi-Use Token

    Contoh Charge dengan CVV menggunakan Xendit.js

    const tokenData = {
        token_id: “sample-token-id-6ab4hmu832j8oenx71b”, (wajib)
        card_cvn: “123”,
        billing_details: object, 
        customer: object
    };

    Contoh Charge dengan CVV menggunakan Android SDK

    final Xendit xendit = new Xendit(getApplicationContext(), <PUBLISHABLE_KEY>, this);
    
    xendit.storeCVN(
            <tokenId>, (wajib)
            <cardCVN>,
            <billingDetails>,
            <customerDetails>,
            null,
            callback);

    Contoh Charge dengan CVV menggunakan iOS SDK

    let storeCVNRequest = XenditStoreCVNRequest.init(tokenId: <tokenId>) (wajib);
    authenticationRequest.cardCvn = <cardCvn>;
    
    Xendit.storeCVN(
            fromViewController: self,
            storeCVNRequest: storeCVNRequest,
            onBehalfOf: nil,
            completion: completion)

    CVV merupakan salah satu bagian dari proses transaksi kartu kredit, di mana pemilik kartu menyediakan tiga atau empat kode angka untuk otorisasi transaksi tersebut. Mengapa memasukkan CVV adalah hal yang penting:

    Apabila Anda ingin melakukan transaksi menggunakan CVN/CVV untuk multi-use token, Anda dapat mengikuti panduan ini.

    Apa itu CVV?

    CVV adalah singkatan dari “Card Verification Value”, terdiri dari tiga atau empat kode angka yang terletak pada bagian depan atau belakang kartu. CVV digunakan oleh issuer sebagai lapisan tambahan untuk keamanan transaksi, memasukkan CVV dapat meningkatkan tingkat kesuksesan transaksi dan menurunkan kemungkinan terjadinya penipuan.

    CVV merupakan bagian dari Sensitive Authentication Data (SAD) yang diregulasi ketat oleh PCI. Merujuk pada peraturan PCI, sebuah bisnis tidak diperbolehkan untuk menyimpan CVN/CVV setelah proses otorisasi dilakukan dan sistem yang digunakan harus mengikuti regulasi PCI serta memproses CVN/CVV harus dilakukan di dalam Card Data Environment (CDE) yang diaudit.

    Cara penggunaan

    Siapkan ID token penggunaan yang ingin Anda gunakan untuk melakukan charge. Gunakan ID token tersebut sesuai dengan acuan pada contoh kode di bagian kanan.

    Pembuatan Safe Acceptance

    Fitur ini merupakan alternatif dari API charge, dimana dapat digunakan untuk kondisi sebagai berikut

    Gunakan halaman demo ini untuk menguji skenario menggunakan Safe Acceptance, dan untuk melihat contoh bagaimana Safe Acceptance dapat diintegrasikan di halaman web.

    Penjelasan Metode Integrasi dari Pemrosesan Pembayaran pada Safe Acceptance

    Kekuatan dari fitur Safe Acceptance API yang Kami miliki terletak pada kemampuan untuk mendukung proses pembayaran kartu kredit pada metode integrasi yang umum digunakan secara fleksibel. Secara umum, terdapat beberapa metode integrasi yang dijelaskan sebagai berikut:

    Perlu dijadikan catatan bahwa pada fitur Safe Acceptance, parameter token_id masih dapat digunakan untuk melakukan transaksi

    Definis: Pembuatan Transaksi Safe Acceptance

    POST 
    https://api.xendit.co/credit_cards/safe_acceptance

    Contoh Permintaan Safe Acceptance

    {
        "amount": "1200000",
        "return_url": "https://mybusiness.co",
        "reference_id": "xdt-safe-acceptance-007",
        "transaction_type": "SALES",
        "request_timestamp": "2021-01-10T09:50:40+03:00",
        "descriptor": "INV-SAFE-ACCEPTANCE-007",
        "card_number": "1889800000000171",
        "card_exp_year": "2021",
        "card_exp_month": "03",
        "card_cvn": "101",
        "should_authenticate": true,
        "currency": "IDR",
        "promotion_reference_id": "promo-jan-0c927488-b4df-11ec-b909-0242ac120002",
        "promotion_original_amount: 50000,
        "authorization": "Basic eG5kX3B1YmxpY19kZXZlbG9wbWVudF9PNDZBZkw4azFlRGtwSnRmN3RPSERDV01OQ2w4dFI0azNibVJ4bm1EUnIyb0NnZHdnQTo=",
        "signed_field_names": "reference_id,amount,currency,request_timestamp,return_url,authorization,signed_field_names",
        "signature": "37c0323212908b9d4fe607f9d237c95aae2503a799d278afdc663268b5f8906e"
    }

    Contoh Respon Safe Acceptance yang dikirimkan ke webhook (Kartu dengan skema Visa / MasterCard / JCB)

    {
            "created": "2021-01-10T09:50:40+03:00",
            "business_id": "5d08a4nfea3b620019cfa213c",
            "authorized_amount": 1200000,
            "reference_id": "ecm-8112",
            "merchant_reference_code": "5d1ec8f4a3bcd10019a7e2de",
            "masked_card_number": "400000XXXXXX0002",
            "charge_type": "SINGLE_USE_TOKEN",
            "card_brand": "VISA",
            "card_type": "CREDIT",
            "status": "CAPTURED",
            "bank_reconciliation_id": "5622988916826241203012",
            "eci": "05",
            "capture_amount": "1200000",
            "currency": "IDR",
            "id": "5d1eca0ca3bcd10019a7e2ee",
            "authorized_amount": "1200000",
            "merchant_id" : "00080091009103589348501",
            "descriptor": "INV-SAFE-ACCEPTANCE-007",
            "promotion_reference_id": "promo-jan-0c927488-b4df-11ec-b909-0242ac120002",
               "promotion_original_amount: 50000,
            "signed_field_names": "create,business_id,authorized_amount,reference_id,merchant_reference_code,masked_card_number,charge_type,card_brand,card_type,status,bank_reconciliation_id,eci,capture_amount,currency,id,authorized_amount,merchant_id,mid_label,descriptor",
            "signature": "25798ae4db8361fa4ee423e7321a1558a1b0bf0863e8082e0551e62fd8e7a771"
    }

    Contoh Respon Safe Acceptance yang dikirimkan ke webhook (Kartu dengan skema BCA)

    {
            "created": "2021-01-10T09:50:40+03:00",
            "business_id": "5d08a4nfea3b620019cfa213c",
            "authorized_amount": 1200000,
            "reference_id": "ecm-8112",
            "merchant_reference_code": "5d1ec8f4a3bcd10019a7e2de",
            "masked_card_number": "143481XXXXXX0002",
            "charge_type": "SINGLE_USE_TOKEN",
            "card_brand": "BCA",
            "status": "CAPTURED",
            "bank_reconciliation_id": "5622988916826241203012",
            "eci": "05",
            "capture_amount": "1200000",
            "currency": "IDR",
            "id": "5d1eca0ca3bcd10019a7e2ee",
            "authorized_amount": "1200000",
            "merchant_id" : "00080091009103589348501",
            "descriptor": "INV-SAFE-ACCEPTANCE-007",
            "promotion_reference_id": "promo-jan-0c927488-b4df-11ec-b909-0242ac120002",
                "promotion_original_amount: 50000,
            "signed_field_names": "create,business_id,authorized_amount,reference_id,merchant_reference_code,masked_card_number,charge_type,card_brand,card_type,status,bank_reconciliation_id,eci,capture_amount,currency,id,authorized_amount,merchant_id,mid_label,descriptor",
            "signature": "25798ae4db8361fa4ee423e7321a1558a1b0bf0863e8082e0551e62fd8e7a771"
    }    

    Contoh Respon Safe Acceptance yang dikirimkan ke webhook (Kartu dengan skema GPN)

    {
            "created": "2021-01-10T09:50:40+03:00",
            "business_id": "5d08a4nfea3b620019cfa213c",
            "authorized_amount": 1200000,
            "reference_id": "ecm-8112",
            "merchant_reference_code": "5d1ec8f4a3bcd10019a7e2de",
            "masked_card_number": "143481XXXXXX0002",
            "charge_type": "SINGLE_USE_TOKEN",
            "card_brand": "GPN",
            "status": "CAPTURED",
            "bank_reconciliation_id": "5622988916826241203012",
            "eci": "05",
            "capture_amount": "1200000",
            "currency": "IDR",
            "id": "5d1eca0ca3bcd10019a7e2ee",
            "authorized_amount": "1200000",
            "merchant_id" : "00080091009103589348501",
            "descriptor": "INV-SAFE-ACCEPTANCE-007",
            "promotion_reference_id": "promo-jan-0c927488-b4df-11ec-b909-0242ac120002",
                "promotion_original_amount: 50000,
            "signed_field_names": "create,business_id,authorized_amount,reference_id,merchant_reference_code,masked_card_number,charge_type,card_brand,card_type,status,bank_reconciliation_id,eci,capture_amount,currency,id,authorized_amount,merchant_id,mid_label,descriptor",
            "signature": "25798ae4db8361fa4ee423e7321a1558a1b0bf0863e8082e0551e62fd8e7a771"
    }    

    Parameter Permintaan

    Parameter Tipe Deskripsi
    amount
    required
    number Jumlah biaya yang akan di-charge.
    reference_id
    required
    string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
    request_timestamp
    required
    string Stempel waktu saat permintaan pembuatan safe acceptance dilakukan, dengan format ISO8601. Dibutuhkan untuk membuat signature untuk kemudian digunakan sebagai validasi pada sistem Xendit.
    Contoh: 2021-01-10T09:50:40+03:00
    currency
    required
    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Mata uang yang tersedia:
    • Bisnis yang beroperasi di Indonesia: IDR
    • Bisnis yang beroperasi di Filipina: PHP, USD
    return_url
    required
    string URL ini akan digunakan untuk mengarahkan pelanggan akhir apabila transaksi pembayaran sudah selesai. URL ini akan dipanggil menggunakan metode HTML form POST dengan hasil transaksi yang dicantumkan pada response. Singature akan dikirimkan pada response untuk dapat divalidasi oleh pelanggan.
    authorization
    required
    string Public API Key dari sistem Xendit Anda (yang sudah dikonversi menjadi format base-64).
    signature
    required
    string Nilai dari parameter ini didapatkan dengan menggunakan dari secret API key Xendit yg dapat diambil dari Dasbor Anda, kemudian membuat hash dari parameter yang dicantumkan pada permintaan dengan methode sha256. Lihat Dokumentasi Safe Acceptance Kami sebagai petunjuk.
    signed_field_names
    required
    string Nilai dari parameter ini harus berisikan dengan nilai kunci dari parameter yang nantinya akan digunakan untuk melakukan verifikasi signature, dipisahkan dengan tanda koma.
    Makndatori:(jika permintaan Anda berisikan parameter tersebut):
    amount, currency, authorization, reference_id, request_timestamp,mid_label, channel_code, return_url, should_authenticate
    channel_code
    optional
    string Nilai yang digunakan untuk menentukan konektor mana yang akan digunakan dalam proses Safe Acceptance. Jika tidak diisi, nilai defaultnya adalah Visa/MasterCard/JCB/AMEX. Untuk transaksi lain, lihat:
    • GPN: (Gerbang Pembayaran Nasional) gunakan nilai ini untuk melakukan transaksi menggunakan kartu GPN (metode 3 party)
    • BCA: gunakan nilai ini untuk melakukan transaksi menggunakan kartu dengan skema Bank BCA untuk diproses menggunakan konektor inhouse (metode 2.5 party)
    card_number
    optional
    string Nomor kartu kredit/debit online yang akan dikonversi menjadi token.
    Note: Dibutuhkan pada transaksi metode 2.5 dan 3 party
    card_exp_year
    optional
    string Tahun kedaluwarsa kartu kredit / debit online (4 digit angka)
    Note: Dibutuhkan pada transaksi metode 2.5 dan 3 party
    card_exp_month
    optional
    string Tanggal kedaluwarsa kartu kredit / debit online (2 digit angka)
    Note: Dibutuhkan pada transaksi metode 2.5 dan 3 party
    card_cvn
    optional
    string Kode keamanan yang terdapat pada bagian belakang kartu (3 atau 4 digit)
    Note: Dibutuhkan pada transaksi metode 2.5 dan 3 party
    card_holder_name
    optional
    string Nama lengkap dari pemilik kartu
    token_id
    optional
    string ID Token yang digunakan untuk melakukan Charge.
    Hanya dibutuhkan jika prosesor yang digunakan membutuhkan proses tokenisasi, dan Anda memiliki token ID yang didapatkan dari proses tokenisasi sebelumnya.
    should_authenticate
    optional
    boolean Penentuan apakah proses tokenisasi akan digabung dengan proses otentikasi atau tidak. Jika tidak diinput, maka akan menyesuaikan dengan pengaturan 3DS merchant pada sistem Xendit. Nilai yang diterima:
    • true: 3DS akan diinisiasi
    • false: 3DS akan dilewati
    given_names
    optional
    string Nama pertama pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    surname
    optional
    string Nama belakang pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    email
    optional
    string Alamat email pelanggan atau pemilik kartu yang terasosiasi dengan kartu
    mobile_number
    optional
    string Nomor telepon genggam pelanggan atau pemilik kartu dalam format E.164
    phone_number
    optional
    string Nomor telepon lain pelanggan atau pemilik kartu dalam format E.164 (dapat berupa nomor telepon rumah atau kantor)
    country
    required
    string 2-huruf ISO 3166-2 kode negara untuk menunjukkan negara pemilik kartu
    street_line1
    optional
    string Nama bangunan dan nomor unit apartemen / rumah
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    street_line2
    optional
    string Alamat lengkap bangunan
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    city
    optional
    string Kabupaten/Kota pemilik kartu
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    province_state
    optional
    string Provinsi, state, atau region pemilik kartu. Jika pemilik kartu merupakan penduduk Amerika, pastikan nilai yang dimasukkan adalah kode negara bagian (contoh gunakan CA untuk California)
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    postal_code
    optional
    string Kode ZIP atau Kode Pos bila tersedia
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    descriptor
    optional
    string Penanda spesifik yang menjelaskan identitas merchant. Niali ini akan tercantum pada tagihan pemilik kartu.
    Jumlah karakter minimum: 1 karakter
    Jumlah karakter maksimum: 255 karakter
    use_reward
    optional
    boolean Penanda bahwa transaksi pembayaran akan menggunakan rewards yang tersedia dari bank penerbit kartu. Hanya dapat disertakan pada permintaan jika Anda mendapatkan parameter rewards pada respond dari Get Charge Option. Nilai yang diterima:
    ‘true’: semua rewards yang tersedia akan digunakan untuk pembayaran
    ‘false’: reward tidak akan digunakan untuk pembayaran
    installment_count
    optional
    number Parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan tenor 3 bulan, maka nilai yang dimasukkan adalah 3.
    installment_interval
    optional
    string Parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan tenor 3 bulan, maka nilai yang dimasukkan adalah month.
    installment_code
    optional
    string Digunakan untuk mengidentifikasi tipe cicilan dan fitur yang berkaitan dengan cicilan tersebut seperti bunga dan tagian.
    Parameter ini mandatori untuk disertakan pada permintaan jika Xendit mengembalikan parameter installment_code pada respons Get Charge Option untuk kartu pelanggan akhir.
    promotion_reference_id
    optional
    string Kode unik yang digunakan untuk ID referensi pada API Pembuatan Promo.
    promotion_original_amount
    optional
    string Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    mid_label
    optional
    string Karakter spesifik yang digunakan untuk memberi tanda pada Merchant ID (MID) yang sudah di daftarkan di akun Xendit dan akan digunakan untuk bertransaksi. Parameter tersebut dan dikonfigurasi pada daftar MID yang terdapat di pengaturan dashbor Anda. (Jika tidak ada input pada parameter ini dan jika Anda memiliki lebih dari 1 MID, maka transaksi akan menggunakan MID yang tertera paling atas / prioritas pertama pada pengaturan dasbor Anda.
    Note:
    Hanya dapat digunakan untuk pelanggan dengan mode switcher

    Response Parameters

    Parameter Type Description
    id
    required
    string ID unik dari charge di sistem Xendit.
    created
    required
    string Cap waktu ISO yang mencatat kapan charge tersebut dibuat Charge.
    reference_id
    required
    string Pengindentifikasi unik sesuai dengan pilihan Anda.
    business_id
    required
    string ID akun bisnis Xendit Anda.
    card_brand
    required
    string Skema kartu (VISA, MASTERCARD, JCB, AMEX, GPN)
    card_type
    required
    string Tipe kartu (CREDIT atau DEBIT)
    masked_card_number
    required
    number Enam angka pertama dan Empat angka terakhir pada kartu kredit. 6 atau 8 digit pertama adalah nomor pengidentifkasi kartu
    authorized_amount
    required
    number Nominal uang yang diotorisasi untuk Charge ini.
    capture_amount
    required
    number Nominal yang akan di-capture untuk charge ini. Nilai maksimumnya adalah nilai authorized_amount.
    currency
    required
    string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO.Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan IDR.
    status
    required
    string Status dari transaksi charge yang dikembalikan oleh sistem Xendit. Lihat Status pada charge.
    eci
    required
    string Status dari otentikasi 3DS. Lihat Kode ECI
    cvn_code
    optional
    string Response from validating the CVN (3-digit security code on back of card). See CVN Codes.
    merchant_id
    optional
    string Merchant ID yang digunakan untuk melakukan pemrosesan kartu kredit dengan bank. Paremeter ini dapat digunakan untuk mengidentifikasi MID yang digunakan saat transaksi dan dapat digunakan untuk rekonsilisasi. Hanya dikembalikan apabila Anda menggunakan MID Anda sendiri.
    merchant_reference_code
    required
    string Kode merchant yang digunakan untuk melakukan rekonsiliasi transaksi dengan bank.
    bank_reconciliation_id
    required
    string ID transaksi yang dapat digunakan untuk rekonsiliasi dengan bank. Digunakan untuk melakukan rekonsiliasi dengan penerbit kartu dan bank penerima transaksi.
    descriptor
    optional
    string Deskriptor khusus untuk menentukan identitas merchant.
    Catatan:
    Untuk aggregator merchant, nilai yang akan dikembalikan adalah XENDIT*[MERCHANT_NAME]-DESCRIPTOR
    Untuk switcher merchant, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR.
    signed_field_names
    required
    string Nilai dari parameter ini harus berisikan dengan nilai kunci dari parameter yang nantinya akan digunakan untuk melakukan verifikasi signature, dipisahkan dengan tanda koma.
    signature
    required
    string Nilai dari parameter ini didapatkan dengan menggunakan dari secret API key Xendit yg dapat diambil dari Dasbor Anda, kemudian membuat hash dari parameter yang dicantumkan pada permintaan dengan methode sha256. Lihat instruksi dan contoh kode untuk membuat signature.
    reward_balance
    required
    string Saldo rewards yang tersisa dari yang diberikan oleh penerbit kartu. Hanya dikembalikan pada respond jika parameter use_reward disertakan pada permintaan Safe Acceptance dengan nilai true.
    installment_count
    required
    string Bersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran.
    installment_interval
    required
    string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran.
    installment_code
    required
    string Dikembalikan pada respons untuk sebagai penanda bahwa transaksi ini adalah transaksi cicilan. Digunakan untuk mengidentifikasi tipe cicilan yang berkaitan dengan bunga cicilan.
    promotion_reference_id
    required
    string Dikembalikan pada respon sebagai tanda transaksi yang memiliki promo. Digunakan untuk mengidentifikasi ID referensi promo.
    promotion_original_amount
    required
    string Dikembalikan pada respon sebagai tanda transaksi yang memiliki promo. Digunakan untuk mengidentifikasi jumlah sebelum dikenakan promo.
    approval_code
    required
    string Suatu kode berisikan angka yang berurutan (biasanya 6 atau 8 digit) yang mengindikasikan bahwa proses otorisasi telah disetujui oleh penerbit kartu

    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

    Kode CVN

    Kode Deskripsi
    M Cocok - CVN yang disertakan pada permintaan pembuatan charge cocok dengan data CVN yang dimiliki oleh penerbit kartu.
    N Tidak cocok - CVN yang disertakan pada permintaan tidak cocok dengan data CVN yang dimiliki oleh penerbit kartu.
    P Tidak diproses - Dapat terjadi jika kartu tidak memiliki CVN yang valid, atau CVN tidak diterima oleh penerbit kartu. Dapat melakukan permintaan charge kembali, apabila hasil yang didapatkan tetap sama, mohon dapat menggunakan kartu yang lain.

    Alasan Kegagalan Pembuatan Charge

    Alasan Gagal Deskripsi
    AUTHENTICATION_FAILED Pembayaran ditolak karena transaksi belum diotentikasi. Rekomendasikan pemegang kartu untuk mengotentikasi ulang transaksi dengan 3DS. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain, bentuk pembayaran lain, atau menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online.
    DECLINED_BY_ISSUER Pembayaran ditolak oleh penerbit kartu tanpa memberikan informasi lebih lanjut kepada Xendit. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    DECLINED_BY_PROCESSOR Pembayaran ditolak oleh prosesor tanpa memberikan informasi lebih lanjut kepada Xendit. Rekomendasikan pemegang kartu untuk mencoba kembali. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    EXPIRED_CARD Pembayaran ditolak karena kartu telah kedaluwarsa. Rekomendasikan pemegang kartu untuk memasukkan tanggal kedaluwarsa yang benar. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    ISSUER_SUSPECT_FRAUD Pembayaran ditolak oleh penerbit kartu karena mereka mencurigai pembayaran ini sebagai penipuan. Tinjau kembali pemegang kartu. Jika Anda yakin pemegang kartu tersebut sah, rekomendasikan pemegang kartu untuk menggunakan kartu lain atau bentuk pembayaran lainnya. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.
    INACTIVE_OR_UNAUTHORIZED_CARD Pembayaran ditolak oleh penerbit kartu karena kartu tidak diizinkan untuk transaksi online. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INSUFFICIENT_BALANCE Pembayaran ditolak oleh penerbit kartu karena dana di rekening pemegang kartu tidak mencukupi. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INVALID_CARD Pembayaran ditolak oleh penerbit kartu karena informasi kartu yang diberikan salah. Rekomendasikan pemegang kartu untuk meninjau informasi kartu dan coba kembali. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    INVALID_CVV Pembayaran ditolak oleh penerbit kartu karena CVN / CVV / CSC kartu yang diberikan salah. Rekomendasikan pemegang kartu untuk meninjau kembali CVV / CVN / CSC dari kartu yang dipakai dan coba kembali (biasanya kode 3-4 digit di bagian belakang kartu). Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    ISSUER_UNAVAILABLE Pembayaran ditolak oleh prosesor karena penerbit kartu tidak dapat dijangkau. Rekomendasikan pemegang kartu untuk menghubungi bank penerbit kartu untuk menyelesaikan masalah pada transaksi online. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan kartu lain atau bentuk pembayaran lainnya.
    PROCESSOR_ERROR Pembayaran ditolak oleh prosesor karena kendala teknis di sisi prosesor. Rekomendasikan pemegang kartu untuk mencoba kembali dalam beberapa menit. Sebagai alternatif, pemegang kartu dapat mencoba menggunakan bentuk pembayaran lainnya.
    STOLEN_CARD Pembayaran ditolak oleh penerbit kartu karena kartu dilaporkan dicuri / hilang oleh pemegang kartu. Tinjau kembali pemegang kartu. Jika Anda yakin pemegang kartu tersebut sah, rekomendasikan pemegang kartu untuk menggunakan kartu lain atau bentuk pembayaran lainnya. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.
    PROCESSOR_TIMEOUT Kami mendapatkan timeout dari pemroses kami saat meminta pembayaran yang menunjukkan masalah koneksi intermiten. Sarankan pelanggan untuk mencoba ulang transaksi.
    FRAUD_RISK_BLOCKED Pembayaran ditolak oleh penilaian risiko Xendit. Silahkan merujuk ke bagian Penilaian Risiko Penipuan untuk detail lebih lanjut. Tinjau pemegang kartu, karena pembayaran diblokir oleh daftar blokir Anda. Jika Anda yakin pemegang kartu itu sah, hapus identifikasi kartu tersebut dari daftar blokir dan anjurkan pemegang kartu untuk mencoba kembali. Jika tidak, hindari memproses transaksi dari pemegang kartu demi mencegah chargeback.

    Error Codes

    Error Code Description
    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_API_KEY
    400
    Mohon gunakan Public API key untuk transaksi ini.
    SIGNATURE_VALIDATION_ERROR
    400
    Signature yang digunakan tidak valid. Mohon lakukan permintaan dengan signature yang valid.

    Capture Charge

    Definisi: Capture Charge

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

    Contoh Permintaan Capture Charge

    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.captureCharge({
      chargeID: id,
      amount: 10000,
    });
    console.log(resp)
    curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e/capture \
        -X POST \
        -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
        -d amount=15000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '598942c4bb91a4ec309e9a37';
      $params = ['amount' => 10000];
    
      $captureCharge = \Xendit\Cards::capture($id, $params);
      var_dump($captureCharge);
    
    ?>
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardCharge creditCardCharge = CreditCard.captureCharge(
        "12345678", //chargeId
        10000 //amount
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    captureChargeData := card.CaptureChargeParams{
        ChargeID: "598942c4bb91a4ec309e9a37",
        Amount:   9900,
    }
    
    chargeResp, err := card.CaptureCharge(&captureChargeData)
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Printf("captured charge: %+v\n", chargeResp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    charge = CreditCard.capture_charge(
        credit_card_charge_id="5f0422aa2bbbe50019a368c2",
        amount=75000,
    )
    print(charge)

    Contoh Respon Capture Charge

    {
      "created": "2020-01-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

    Parameter Request (Money-in write permission)

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

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

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    INVALID_JSON_FORMAT
    400
    Isi dari request bukan format JSON yang benar. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    AMOUNT_GREATER_THAN_AUTHORIZED_ERROR
    400
    Nominal capture melebihi nominal yang terotorisasi.
    INVALID_CHARGE_STATUS_ERROR
    400
    Status charge tidak terotorisasi. Mohon untuk otorisasi transaksi dan lakukan capture kembali
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan
    AUTHORIZATION_EXPIRED
    400
    Otorisasi sudah dikembalikan (dapat berarti juga bahwa uang sudah kembali ke pemilik kartu) atau sudah kedaluwarsa. Mohon untuk membuat auhorization atau charge baru.

    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
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
          'external_id' => 'postman-charge-1502436793',
          'amount' => 15000,
          'X-IDEMPOTENCY-KEY' => 'unique-id'
      ];
    
      $refund = \Xendit\Cards::createRefund($id, $params);
      var_dump($refund);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.createRefund({
      chargeID: '5877255293ff67900c6aa64e',
      amount: 15000,
      externalID: 'unique-external-id',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardRefund creditCardRefund = CreditCard.createRefund(
        "1234567", //id
        50000, //amount
        "external_id" //externalId
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createRefundData := card.CreateRefundParams{
      IdempotencyKey: "unique-idempotency-key",
      ChargeID:       "58f984f09d1b74bc08506c34",
      Amount:         15000,
      ExternalID:     "unique-external-id",
    }
    
    refundResp, err := card.CreateRefund(&createRefundData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("refunded charge: %+v\n", refundResp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    refund = CreditCard.create_refund(
        credit_card_charge_id="5f0422aa2bbbe50019a368c2",
        amount=10000,
        external_id="card_refund-1594106755",
    )
    print(refund)

    Contoh Respon Pembuatan Refund

    {
      "updated": "2020-01-21T04:05:09.755Z",
      "created": "2020-01-21T04:05:04.936Z",
      "credit_card_charge_id": "58f89041780d51ed097896c5",
      "user_id": "57c5aa7a36e3b6a709b6e148",
      "amount": 15000,
      "external_id": "unique-external-id",
      "status": "REQUESTED",
      "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. Beberapa refund parsial dapat dilakukan selama nilai dari dari total jumlah refund tidak lebih besar dari jumlah nilai transaksi.

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

    Parameter Request (Money-in write permission)

    Parameter Header Tipe Deskripsi
    X-IDEMPOTENCY-KEY
    optional
    string Sebuah kunci unik yang digunakan untuk menghindari duplikasi pemrosesan suatu request. Wajib unik untuk lingkungan development maupun production
    x-api-version
    mandatory
    string Nilai dari parameter ini harus “2019-05-01”
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    amount
    required
    string Nominal uang yang akan di-refund.
    external_id
    required
    string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.

    Parameter Respon

    Parameter Tipe 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
    Timezone: GMT+0
    .
    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 Keterangan yang diberikan apabila permintaan refund gagal. lihat Alasan Refund Gagal.
    fee_refund_amount
    required
    number Nilai nominal dari biaya transaksi yang dikembalikan (nilai ini diproporsikan sesuai dengan jumlah nilai refund yang diminta).
    id
    required
    string ID unik yang digunakan sebagai referensi dari permintaan refund.

    Status status Refund

    Status Deskripsi
    REQUESTED Permintaan refund berhasil.
    FAILED Permintaan refund gagal.

    Kode Error

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

    Alasan Refund Gagal

    Alasan Gagal Deskripsi
    INSUFFICIENT_BALANCE Saldo pada akun Xendit Anda tidak cukup untuk melakukan refund (saldo tersebut digunakan untuk mengembalikan biaya transaksi)
    REFUND_FAILED Permintaan refund telah ditolak oleh bank. Mohon dicoba kembali atau hubungi kami di help@xendit.co
    REFUND_PERIOD_EXPIRED Masa berlaku refund telah kadaluarsa. Anda dapat melakukan refund kepada merchant dengan menggunakan disbursement.

    Mendapatkan Charge

    Definisi: Mendapatkan Charge

    GET https://api.xendit.co/credit_card_charges/:credit_card_id?id_type=charge

    Contoh Melakukan Permintaan Mendapatkan Charge Request Menggunakan External ID

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

    Contoh Melakukan Permintaan Mendapatkan Charge Request Menggunakan Charge ID (Default)

    curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e \
        -X GET \
        -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '598942c4bb91a4ec309e9a37';
      $getCharge = \Xendit\Cards::retrieve($id);
      var_dump($getCharge);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Card } = x;
    const cardSpecificOptions = {};
    const card = new Card(cardSpecificOptions);
    
    const resp = await card.getCharge({ chargeID: '5877255293ff67900c6aa64e' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      CreditCardCharge creditCardCharge = CreditCard.getCharge("5877255293ff67900c6aa64e");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getChargeData := card.GetChargeParams{
      ChargeID: "598942c4bb91a4ec309e9a37",
    }
    
    chargeResp, err := card.GetCharge(&getChargeData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved charge: %+v\n", chargeResp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    charge = CreditCard.get_charge(
        credit_card_charge_id="5f0422aa2bbbe50019a368c2",
    )
    print(charge)

    Contoh Respon Charge Response

    {
      "created": "2020-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

    Parameter Request (Money-in read permission)

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Query Tipe Deskripsi
    credit_card_id
    required
    string Dapat diinput dengan nilai diantara id charge dari transaksi yang sudah di otorisasi atau capture ATAU menggunakan external_id dari transaksi yang diinput oleh pengguna pada saat pembuatan charge.
    id_type
    optional
    string Dijelaskan di [Tipe ID] (tipe-id). Jika tidak diinput, nilai akan diisi dengan charge.

    Tipe ID

    Type Description
    charge Pencarian transaksi charge akan menggunakan ID charge yang diberikan oleh Xendit dimana data tersebut tertera pada respon transaksi charge atau otorisasi
    external Pencarian transaksi charge akan menggunakan external ID yang diinput oleh pengguna pada saat pengguna melakukan permintaan pembuatan charge atau otorisasi

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan

    Permintaan Opsi Charge

    Saat menerima transaksi kartu kredit untuk pelanggan Anda, Anda pasti mengharapkan untuk dapat memberikan tambahan pilihan metode pembayaran. Hal ini meliputi:

    Opsi tersebut harus dipilih oleh pengguna sebelum melakukan permintaan Charge. Contohnya apabila Anda ingin mengecek apakah kartu yang ingin digunakan memiliki promo dan diskon, maka sebelum Anda melakukan permintaan untuk pembayaran dengan kartu kredit, Anda dapat mengecek terlebih dahulu apakah terdapat opsi cicilan atau tidak, dan Anda dapat menampilkan opsi tersebut kepada pengguna, untuk kemudian dipilih oleh pengguna.

    API Permintaan Opsi Charge kami dapat membantu Anda dalam hal tersebut. Anda dapat mengirimkan permintaan ke endpoint kami edngan mengirimkan info yang sudah dimasukkan oleh pengguna (seperti BIN (Nomor Identifikasi Kartu), kode promo), kemudian Xendit akan melakukan pengecekan apakah terdapat opsi charge untuk permintaan tersebut. Respon yang diberikan akan berisi tentang opsi opsi yang tersedia untuk parameter yang dimasukkan. Anda dapat memilih opsi tersebut dan melakukan transaksi charge dengan rincian yang sudah diberikan pada respon.

    Definisi: Permintaan Opsi Charge

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

    Contoh Permintaan Opsi Charge

    curl -X GET \
      https://api.xendit.co/credit_card_charges/option
      -u xnd_public_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \
      -d {
          "bin": "552002",
          "amount": 1000000,
          "currency": "IDR”
        }

    Contoh Respon dari Permintaan Opsi Charge

    {
        "business_id": "5ea2a0cdb62b6a00108ed248",
        "bin": "552002",
        "promotions":[{
            "reference_id": "some_promo_1",
            "discount_percent": "25",
            "original_amount": 1000000,
            "final_amount": 750000,
            "currency": "IDR"
        }],
        "installments" : [{
            "count": 3,
            "interval": "month",
            "acquirer": "BRI",
            "currency": "IDR",
            "minimum_amount": 500000
        },{
            "count": 6,
            "interval": "month",
            "acquirer": "BRI",
            "currency": "IDR",
            "minimum_amount": 500000
        },{
            "count": 12,
            "interval": "month",
            "acquirer": "BRI",
            "currency": "IDR",
            "minimum_amount": 500000
        }]
    }

    Permintaan Untuk Mendapatkan Opsi Charge

    Parameter Deskripsi
    amount
    required
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    bin
    optional
    array of strings BIN (6 atau 8 digit) yang diinput oleh pemegang kartu, dimana BIN ini kemudian digunakan untuk mengecek apakah BIN berasosiasi dengan Promo yang tersedia dan masih dalam status aktif.
    currency
    default: IDR
    string Mata uang yang akan digunakan untuk pembayaran.
    promo_code
    optional
    string Kode promo yang dapat digunakan oleh pengguna untuk mengaktifkan promo. Masukkan nilai pada parameter ini apabila user ingin pelanggan menggunakan kode promo untuk mengaktifkan promo.
    Karaktera-z, A-Z, 0-9; simbol yang diterima - _ \
    token_id
    required
    string ID token dari kartu, didapatkan saat melakukan proses tokenisasi dengan xendit. Kami akan mencari nilai BIN dari token ID yang dimasukkan.

    Respon Permintaan Opsi Charge

    Parameter Deskripsi
    business_id
    required
    stringID dari bisnis Anda yang terdapat di dalam sistem Xendit.
    bin
    required
    stringBIN yang diinput oleh pemegang kartu, dimana BIN ini kemudian digunakan untuk mengecek apakah BIN berasosiasi dengan Promo yang tersedia dan masih dalam status aktif.
    promotions
    optional
    array Array berisikan detil dari daftar promo yang tersedia
    rincian parameter promosi
    reference_id
    optional
    string Referensi unik yang diberikan untuk promo yang Anda buat.
    Charactersa-z, A-Z, 0-9; accepted symbols - _ \
    original_amount
    required
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    discount_amount
    optional
    number Nominal dari jumlah potongan yang akan diberikan pada objek promo (menerima desimal).
    MaximumNone
    Minimum0
    discount_percent
    optional
    number Nominal dari persentase jumlah potongan yang akan diberikan pada objek promo (menerima desimal).
    Maximum100
    Minimum0
    final_amount
    required
    number Nominal final setelah potongan harga diberikan berdasarkan promo yang digunakan. User harus menggunakan nominal ini untuk melakukan transaksi charge.
    currency
    required
    string Mata uang yang akan digunakan untuk pembayaran.
    min_original_amount
    optional
    number Nilai minimum transaksi agar promo dapat digunakan.
    max_discount_amount
    optional
    number Nilai maksimum dari diskon yang dapat digunakan pada promo.
    installments
    optional
    object Menjelaskan tentang opsi cicilan yang tersedia.
    parameter tambahan untuk cicilan
    count
    required
    numberBersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan tenor 3 bulan, maka nilai yang dimasukkan adalah 3.
    interval
    required
    string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan periode bulanan, maka nilai yang dimasukkan adalah month. Untuk saat ini Xendit hanya menyediakan cicilan dengan periode interval bulanan.
    acquirer
    required
    string Bank yang akan memproses transaksi dan berkorelasi dengan kartu penerbit untuk menyediakan jasa cicilan.
    currency
    required
    string Mata uang yang akan digunakan untuk pembayaran.
    minimum_amount
    required
    number Jumlah minimum yang dibutuhkan untuk melakukan transaksi cicilan. Permintaan charge di bawah nilai ini tidak dapat menggunakan opsi cicilan.

    Nilai ini dapat berbeda untuk setiap bank.
    code
    optional
    string Akan dikembalikan pada respons jika bank penerbit kartu memberikan nilai installment_code sebagai identitas dan kategori dari program cicilan yang tersedia.
    description
    optional
    string Akan dikembalikan jika bank penerbit kartu memberikan deskripsi dari rencana cicilan.
    interest_free_duration
    optional
    number Menjelaskan jumlah bulan dimana bunga dari cicilan ditiadakan (0 %) jika tersedia. Hanya akan dikembalikan jika disediakan oleh bank penerbit kartu.
    installment_amount
    optional
    number Jumlah nominal yang harus dibayarkan oleh pemilik kartu pada setiap periode tagihan cicilan. Mengacu dari total jumlah transaksi dibagi dengan installment_count.
    maximum_amount
    optional
    number Akan dikembalikan jika batasan rencana cicilan membatasi nominal transaksi pembayaran. Jika nominal transaksi yang ada melebihi nilai ini, maka error akan dikembalikan pada respons.
    reward
    optional
    object Jika fitur rewards tersedia pada kartu, objek ini akan dikembalikan di dalam respons.
    parameter rinci dari reward
    Key Value
    balance
    required
    number Saldo dari rewards yang tersedia dan dapat digunakan pada kartu.

    Pembuatan Promo

    Cara terbaik untuk menarik pelanggan adalah dengan menawarkan potongan harga berdasarkan tipe kartu kredit yang mereka gunakan. Bank penerbit kartu kredit sering kali bekerja sama dengan badan usaha untuk menyediakan potongan harga kepada pemegang kartu jika mereka memilih untuk melakukan pembayaran menggunakan kartu kredit. Hal terpenting dari fitur yang terdapat dalam alur pembayaran adalah kemampuan untuk melakukan pengecekan terhadap nomor kartu, apakah kartu tersebut diterbitkan oleh bank yang spesifik.

    Xendit memberikan layanan promo API untuk membantu tipe promosi tersebut di atas. Fitur tersebut mengizinkan pengguna untuk membuat promo dan memilih rentang dari Bank Identification Numbers (BINs; merupakan 6 angka digit pertama dari kartu kredit), untuk mendapatkan promo yang ingin digunakan. Saat melakan proses pembayaran kartu kredit, pengguna dapat mengirimkan permintaan GET kalkulasi promo. Jika terdapat promo yang sesuai dengan jenis kartu yang digunakan, maka Xendit akan secara otomatis menerapkan potongan harga dan memberikan response terkait dengan informasi potongan harga tersebut, sehingga pengguna dapat melanjutkan proses pembayaran dengan nominal yang sudah dipotong.

    Definisi: Pembuatan Promo

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

    Contoh Membuat Permintaan Pembuatan Promo

    curl -X POST \
      https://api.xendit.co/promotions
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \
      -d {
          "reference_id": "BRI_20_JAN",
          "description": "20% discount applied for all BRI cards",
          "bin_list": [
              "400000",
              "460000"
          ],
          "discount_percent": 20,
          "channel_code": "BRI",
          "currency": "IDR",
          "min_original_amount": 25000,
          "max_discount_amount": 5000
        }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CreditCard = xendit_instance.CreditCard
    
    promotion = CreditCard.create_promotion(
        reference_id="BRI_20_JAN-1594176600",
        description="20% discount applied for all BRI cards",
        discount_amount=10000,
        bin_list=['400000', '460000'],
        start_time="2020-01-01T00:00:00.000Z",
        end_time="2021-01-01T00:00:00.000Z",
        min_original_amount=25000,
        max_discount_amount=5000
    )
    print(promotion)

    Contoh Response Permintaan Pembuatan Promo

    {
        "id": "36ab1517-208a-4f22-b155-96fb101cb378",
        "business_id": "5e61664b3dba955c203d232e",
        "reference_id": "BRI_20_JAN",
        "description": "20% discount applied for all BRI cards",
        "start_time": "2020-01-01 00:00:00.000Z",
        "end_time": "2020-01-01 00:00:00.000Z",
        "status": "ACTIVE",
        "bin_list": [
          "400000",
          "460000"
        ],
        "discount_percent": 20,
        "channel_code": "BRI",
        "currency": "IDR",
        "min_original_amount": 25000,
        "max_discount_amount": 5000
    }

    Permintaan Pembuatan Promo

    Parameter Tipe Deskripsi
    reference_id
    required
    string Karakter alfanumerik unik yang digunakan sebagai referensi dari promo yang dibuat oleh user, dapat berupa ID atau nama promo.
    Karaktera-z, A-Z, 0-9; simbol yang diterima semua karakter spesial dapat digunakan.
    description
    required
    text Deskripsi dari objek promo yang akan dibuat. User dapat mengekspos deskripsi ini pada tampilan antarmuka untuk memberikan informasi terkait dengan promo yang akan digunakan.
    promo_code
    optional
    string Promo code yang akan digunakan oleh pengguna untuk mengaktifkan promo.
    Masukkan parameter ini pada saat permintaan pembuatan promo supaya pengguna akhir dapat mengaktifkan promo menggunakan kode promo. Sebuah obejk promosi dapat dibuat dengan menggunakan kombinasi antara promo_code dan bin_list atau channel_code, jika Anda ingin kode promo hanya dapat digunakan pada beberapa kartu tertentu .
    Karaktera-z, A-Z, 0-9; simbol yang diterima semua karakter spesial dapat digunakan.
    bin_list
    optional
    array of strings Daftar dari BIN yang dapat diperbolehkan untuk menggunakan promo.
    Contoh: ["400000", "460000"]
    channel_code
    optional
    string Kode bank yang diperbolehkan untuk fitur promosi.
    Jika memilih spesifik Bank untuk dapat melakukan promo, semua BIN yang terdeteksi oleh Xendit dan terdaftar pada Bank tersebut dapat menggunakan promo.
    Contoh: "BCA"
    discount_percent
    optional
    number Persentase dari potongan harga yang akan diberikan pada promosi. Contoh: jika user ingin mempunyai promo yang memberikan 20% potongan harga.
    User dapat memilih diantara discount_percent atau discount_amount dan harus diisikan pada parameter.
    KarakterAngka (includes decimals)
    Maksimum 100
    Minimum0
    discount_amount
    optional
    number Nominal dari jumlah potongan yang akan diberikan pada objek promo. Contoh: jika user ingin mempunyai promo yang memberikan 20% potongan harga.
    User dapat memilih diantara discount_percent atau discount_amount dan harus diisikan pada parameter.
    KarakterAngka (includes decimals)
    Maksimum tidak ada
    Minimum0
    currency
    default: IDR
    string Mata uang yang akan digunakan untuk pembayaran. Mohon dapat mengacu pada tiga huruf standard ISO kode mata uang.
    Untuk bank yang memiliki cabang di lebih dari satu negara, promo hanya akan dapat digunakan pada kartu dengan mata uang yang tertera pada parameter ini. Contoh: jika mata uang adalah IDR dan channel_code adalah DBS, maka promo hanya akan dapat digunakan pada BIN yang diterbitkan oleh DBS Indonesia.
    start_time
    required
    ISO Semua promo yang dibuat akan langsung berlaku pada saat itu juga.
    User dapat menggunakan parameter ini apabila user menginginkan promo yang dibuat dapat digunakan pada waktu tertentu.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    end_time
    required
    ISO Waktu dimana promo akan berakhir dan tidak dapat digunakan kembali.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    min_original_amount
    optional
    number Nilai minimum transaksi agar dapat menggunakan promo.
    max_discount_amount
    optional
    number Nilai maksimum promo diskon yang akan diberikan untuk suatu transaksi.

    Response Pembuatan Promo

    Objek Promo

    Parameter Tipe Deskripsi
    id string Deretan karakter alfanumerik unik yang merupakan identitas dari promo yang sudah dibuat (dibuat oleh Xendit).
    business_id string Deretan karakter alfanumerik unik yang merupakan identitas dari akun Anda dalam sistem Xendit, digunakan untuk mengidentifikasi akun Anda.
    status string Status dari suatu objek promo. Lihat Status Promo
    reference_id string Karakter alfanumerik unik yang digunakan sebagai referensi dari promo yang dibuat oleh user, dapat berupa ID atau nama promo. simbol yang diterima semua karakter spesial dapat digunakan.
    description string Deskripsi dari objek promo yang akan dibuat. User dapat mengekspos deskripsi ini pada tampilan antarmuka untuk memberikan informasi terkait dengan promo yang akan digunakan.
    promo_code
    optional
    string Promo code yang akan digunakan oleh pengguna untuk mengaktifkan promo.
    Masukkan parameter ini pada saat permintaan pembuatan promo supaya pengguna akhir dapat mengaktifkan promo menggunakan kode promo. Sebuah obejk promosi dapat dibuat dengan menggunakan kombinasi antara promo_code dan bin_list atau channel_code, jika Anda ingin kode promo hanya dapat digunakan pada beberapa kartu tertentu .
    Karaktera-z, A-Z, 0-9; simbol yang diterima semua karakter spesial dapat digunakan.
    bin_list array of strings Daftar dari BIN yang diperbolehkan untuk melakukan transaksi menggunakan promo.
    Saat memilih spesifik bank, semua BIN yang terasosiasi dengan sistem promosi yang terdaftar di Xendit akan dapat menggunakan promo tersebut. Kode bank harus sesuai dengan daftar yang tertera di sini.
    channel_code string Kode bank yang diperbolehkan untuk melakukan transaksi menggunakan promo. Jika memilih spesifik Bank untuk dapat melakukan promo, semua BIN yang terdeteksi oleh Xendit dan terdaftar pada Bank tersebut dapat menggunakan promo.
    discount_percent number Persentase dari jumlah potongan yang akan diberikan pada objek promo.

    Saat objek promo telah dibuat menggunakan discount_percent, parameter ini akan ditampilan pada response.
    KarakterAngka (termasuk desimal)
    Maksimum100
    Minimum0
    discount_amount number Nominal dari jumlah potongan yang akan diberikan pada objek promo.

    Saat objek promo telah dibuat menggunakan discount_amount, parameter ini akan ditampilan pada response.
    KarakterAngka (termasuk desimal)
    Maksimumtidak ada
    Minimum0
    currency
    default: IDR
    string Mata uang yang akan digunakan untuk pembayaran.
    Untuk bank yang memiliki cabang di lebih dari satu negara, promo hanya akan dapat digunakan pada kartu dengan mata uang yang tertera pada parameter ini. Contoh: jika mata uang adalah IDR dan channel_code adalah DBS, maka promo hanya akan dapat digunakan pada BIN yang diterbitkan oleh DBS Indonesia.
    start_time ISO Semua promo yang dibuat akan langsung berlaku pada saat itu juga.
    User dapat menggunakan parameter ini apabila user menginginkan promo yang dibuat dapat digunakan pada waktu tertentu.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    end_time ISO Waktu dimana promo akan berakhir dan tidak dapat digunakan kembali.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    min_original_amount number Nilai minimum transaksi agar dapat menggunakan promo.
    max_discount_amount number Nilai maksimum promo diskon yang akan diberikan untuk suatu transaksi.

    Status Promo

    Status Description
    ACTIVE Promo aktif dan dapat digunakan
    INACTIVE Promo tidak aktif karena belum melewati start_time
    EXPIRED Promo sudah kedaluarsa karena melewati batas end_time
    PAUSED Promo diberhentikan sementara atas permintaan dari pengguna

    Kesalahan Pembuatan Promo

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Input yang dimasukkan gagal dalam proses validasi. Penjelasan dijeslakan dalam rincian pesan Error.
    INVALID_JSON_FORMAT
    400
    Permintaan tidak memenuhi standar format JSON.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan permintaan. Mohon dapat menggunakan izin yang tepat pada API key atau gunakan API key yang berbeda.
    REFERENCE_IN_USE
    409
    Referensi sudah digunakan pada promo lain. Mohon gunakan nama atau referensi yang lain.
    PROMO_CODE_IN_USE
    409
    Kode promo sudah terdaftar pada promo yang tersedia. Mohon gunakan kode promo yang lain

    Mendapatkan Promo

    API ini dapat digunakan untuk mendapatkan rincian dari promo yang telah dibuat. Hal ini sangat berguna untuk mendapatkan daftar dari promo yang tersedia. Jika parameter yang dimasukkan memberikan kecocokan di lebih dari satu promo, hasil yang akan diberikan pada response akan berbentuk array.

    Definisi: Mendapatkan Promo

    GET https://api.xendit.co/promotions?reference_id={reference_id}

    Contoh Permintaan Untuk Mendapatkan Promo

    curl -X GET \
      https://api.xendit.co/promotions?reference_id=BRI_20_JAN
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \

    Contoh Respon Permintaan Untuk Mendapatkan Promo

    {
        "id": "36ab1517-208a-4f22-b155-96fb101cb378",
        "business_id": "5e61664b3dba955c203d232e",
        "reference_id": "BRI_20_JAN",
        "description": "20% discount applied for all BRI cards",
        "start_time": "2020-01-01 00:00:00.000Z",
        "end_time": "2020-01-01 00:00:00.000Z",
        "status": "ACTIVE",
        "bin_list": [
            "400000",
            "460000"
        ],
        "discount_percent": 20,
        "channel_code": "BRI",
        "currency": "IDR",
        "min_original_amount": 25000,
        "max_discount_amount": 5000
    }

    Parameter Yang dapat Digunakan

    Parameter Tipe Deskripsi
    reference_id
    optional
    string Masukkan karakter spesifik reference_id dari satu objek promo yang telah dibuat.
    status
    required
    enum Status dari Promo yang telah dibuat.
    ACTIVE or INACTIVE.
    bin
    optional
    string BIN spesifik dari kartu.

    Contoh: 460000
    channel_code
    optional
    string Kode bank yang diperbolehkan untuk menggunakan Promo.
    currency
    optional
    default: IDR
    string Mata uang yang digunakan untuk pembayaran.
    Sementara ini hanya menerima IDR.

    Respon Permintaan Mendapatkan Promo

    Rincian dari promo yang tersedia dikembalikan dalam bentuk array dalam format Objek Promo., tergantung pada input yang dimasukkan oleh user saat melakukan permintaan untuk mendapatkan promo. Contohnya, jika user memasukkan nilai pada parameter bin_list yaitu [ "400000" ], maka response yang diberikan akan berupa array dari promo yang tersedia, yang berkaitan dengan BIN tersebut

    Jika tidak ada promo yang tersedia dan cocok dengan permintaan user, response akan berupa array kosong.

    Mendapatkan Perhitungan Promo

    API ini dapat digunakan untuk menghitung berapa jumlah potongan harga yang akan diberikan pada nominal transaksi yang akan dilakukan (di-charge). API ini menerima BIN atau promo_code, dan juga nominal original dari transaksi. Jika ditemukan kecocokan pada BIN atau promo_code terhadap promo yang sudah dibuat, Xendit akan menerapkan potongan harga pada nominal asli dan mengembalikan nominal yang sudah dipotong pada response. Fitur ini hanya melakukan perhitungan pada promo yang memiliki status ACTIVE.

    Kami telah membangun halaman untuk Anda melakukan test dengan mengirimkan request Get Promotion Calculations sebelum Anda integrasi. Anda bisa mencoba nya disini. Anda memerlukan kunci / key API Publik Anda, yang dapat Anda dapatkan dengan melakukan registrasi di Dashboard kami dan menuju ke halaman Settings.

    Definisi: Mendapatkan Perhitungan Promo

    GET https://api.xendit.co/promotions/calculate?amount={amount}&bin={bin}

    Contoh Permintaan Perhitungan Promo Menggunakan 6 Digit Pertama Kartu Kredit (BIN)

    curl -X GET \
      https://api.xendit.co/promotions/calculate?amount=1000000&bin=460000
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \

    Contoh Permintaan Perhitungan Promo Menggunakan Token ID

    curl -X GET \
      https://api.xendit.co/promotions/calculate?amount=1000000&token_id=598d5d0e51e0870d44c61534
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \

    Contoh Respon dari Permintaan Penghitungan Promo

      {
            "original_amount": 1000000,
            "discount_percent": 20,
            "reference_id": "BRI_20_JAN",
            "final_amount": 800000,
            "currency": "IDR",
          "description": "20% discount applied for all BRI cards",
          "min_original_amount": 500000,
          "max_discount_amount": 100000
      }
    }

    Permintaan Mendapatkan Perhitungan Promo

    Parameter Tipe Deskripsi
    amount
    required
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    bin
    optional
    string BIN yang diinput oleh pemegang kartu, dimana BIN ini kemudian digunakan untuk mengecek apakah BIN berasosiasi dengan Promo yang tersedia dan masih dalam status aktif.
    promo_code
    optional
    string Karakter promo_code yang dimasukkan oleh pemegang kartu, dimana nilai dari parameter ini kemudian digunakan untuk mengecek apakah promo_code tersebut berasosiasi dengan Promo yang tersedia dan masih dalam status aktif.
    currency
    optional
    default: IDR
    string Mata uang yang digunakan untuk pembayaran.
    Sementara ini hanya menerima IDR.
    token_id
    optional
    string Id token dari kartu, yang didapatkan dari proses tokenisasi pada sistem Xendit. Kami akan mengasosiasikan token ID tersebut dengan enam digit pertama kartu kredit.

    Response Perhitungan Promo

    Parameter Tipe Deskripsi
    reference_id
    optional
    string Referensi unik yang diberikan untuk promo yang Anda buat.
    original_amount
    required
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    discount_percent
    optional
    number Persentase dari potongan harga yang akan diberikan pada promo.
    Dikembalikan pada response apabila promo dibuat mengguakan parameter discount_percent.
    discount_amount
    optional
    number Nominal dari potongan harga yang akan diberikan pada promo.

    Dikembalikan pada response apabila promo dibuat mengguakan parameter discount_percent.
    final_amount
    required
    number Nominal final setelah potongan harga diberikan berdasarkan promo yang digunakan. User harus menggunakan nominal ini untuk melakukan transaksi charge.
    description string Deskripsi dari objek promo yang akan dibuat. User dapat mengekspos deskripsi ini pada tampilan antarmuka untuk memberikan informasi terkait dengan promo yang akan digunakan.

    Diberikan pada response saat mengirimkan permintaan pada Get Promotion.
    min_original_amount
    optional
    number Nilai minimum transaksi agar promo dapat digunakan.
    max_discount_amount
    optional
    number Nilai maksimum dari diskon yang dapat digunakan pada promo.

    Pembaruan Promo

    Anda dapat menggunakan fitur ini untuk melakukan pembaruan pada promosi yang telah dibuat sebelumnya.

    Definisi: Pembaruan Promo

    PATCH https://api.xendit.co/promotions/:promotion_id

    Contoh Permintaan Pembaruan Promotion

    curl -X GET \
      https://api.xendit.co/promotions/36ab1517-208a-4f22-b155-96fb101cb378
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
      -H 'content-type: application/json' \
     -d {
            "description": "20% discount applied for all BCA cards",
            "bin_list": [
              "411455",
              "422566"
            ],
            "discount_percent": 20,
            "channel_code": "BCA",
            "currency": "IDR"
        }

    Contoh Respon Pembaruan Promotion

    {
        "id": "36ab1517-208a-4f22-b155-96fb101cb378",
        "business_id": "5e61664b3dba955c203d232e",
        "reference_id": "BCA_20",
        "description": "20% discount applied for all BRI cards",
        "start_time": "2020-01-01 00:00:00.000Z",
        "end_time": "2020-01-01 00:00:00.000Z",
        "transaction_limit": 0,
        "is_deleted": false,
        "status": "ACTIVE",
        "bin_list": [
            "411455",
            "422566"
        ],
        "discount_percent": 20,
        "channel_code": "BCA",
        "currency": "IDR",
        "min_original_amount": 25000,
        "max_discount_amount": 5000
    }
    

    Parameter Permintaan Pembaruan Promo

    Tidak semua parameter dari Objek Promo dapat diperbaharui. Parameter yang dapat diperbaharui adalah sebagai berikut:

    Body Parameter Tipe Deskripsi
    description
    required
    text Deskripsi dari objek promo yang akan dibuat. User dapat mengekspos deskripsi ini pada tampilan antarmuka untuk memberikan informasi terkait dengan promo yang akan digunakan.
    promo_code
    optional
    string Promo code yang akan digunakan oleh pengguna untuk mengaktifkan promo.
    Masukkan parameter ini pada saat permintaan pembuatan promo supaya pengguna akhir dapat mengaktifkan promo menggunakan kode promo. Sebuah objek promosi dapat dibuat dengan menggunakan kombinasi antara promo_code dan bin_list atau channel_code, jika Anda ingin kode promo hanya dapat digunakan pada beberapa kartu tertentu .
    Karaktera-z, A-Z, 0-9; simbol yang diterima semua karakter spesial dapat digunakan.
    bin_list
    optional
    array of strings Daftar dari BIN yang dapat diperbolehkan untuk menggunakan promo.
    Contoh: ["400000", "460000"]
    channel_code
    optional
    string Kode bank yang diperbolehkan untuk fitur promosi.
    Jika memilih spesifik Bank untuk dapat melakukan promo, semua BIN yang terdeteksi oleh Xendit dan terdaftar pada Bank tersebut dapat menggunakan promo.Kode bank harus sesuai dengan kode yang tertera di sini.
    discount_percent
    optional
    number Persentase dari potongan harga yang akan diberikan pada promosi. Contoh: jika user ingin mempunyai promo yang memberikan 20% potongan harga.
    User dapat memilih diantara discount_percent atau discount_amount dan harus diisikan pada parameter.
    KarakterAngka (includes decimals)
    Maksimum 100
    Minimum0
    discount_amount
    optional
    number Nominal dari jumlah potongan yang akan diberikan pada objek promo. Contoh: jika user ingin mempunyai promo yang memberikan 20% potongan harga.
    User dapat memilih diantara discount_percent atau discount_amount dan harus diisikan pada parameter.
    KarakterAngka (includes decimals)
    Maksimum tidak ada
    Minimum0
    currency
    default: IDR
    string Mata uang yang akan digunakan untuk pembayaran. Mohon dapat mengacu pada tiga huruf standard ISO kode mata uang.
    Untuk bank yang memiliki cabang di lebih dari satu negara, promo hanya akan dapat digunakan pada kartu dengan mata uang yang tertera pada parameter ini. Contoh: jika mata uang adalah IDR dan channel_code adalah DBS, maka promo hanya akan dapat digunakan pada BIN yang diterbitkan oleh DBS Indonesia.
    start_time
    required
    ISO Semua promo yang dibuat akan langsung berlaku pada saat itu juga.
    User dapat menggunakan parameter ini apabila user menginginkan promo yang dibuat dapat digunakan pada waktu tertentu.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    end_time
    required
    ISO Waktu dimana promo akan berakhir dan tidak dapat digunakan kembali.
    Promo end_time (waktu akhir promo) harus dibuat pada tanggal sesudah tanggal promo start date(waktu awal promo).
    min_original_amount
    optional
    number Nilai minimum transaksi agar dapat menggunakan promo.
    max_discount_amount
    optional
    number Nilai maksimum promo diskon yang akan diberikan untuk suatu transaksi.

    Respon Pembaruan Promo

    Mengembalikan Objek Promo. Parameter yang Anda masukkan pada permintaan pembaruan promo akan tertera pada respon.

    Error Codes

    Error Code Description
    API_VALIDATION_ERROR
    400
    Input yang dimasukkan gagal dalam proses validasi. Penjelasan dijeslakan dalam rincian pesan Error.
    INVALID_JSON_FORMAT
    400
    Permintaan tidak memenuhi standar format JSON.
    PROMOTION_NOT_FOUND_ERROR
    404
    Objek promo dengan ID tersebut tidak dapat ditemukan. Mohon gunakan id yang valid
    PROMO_CODE_IN_USE
    400
    Kode promo ini telah digunakan pada promo sebelumnya atau sedang digunakan pada promo yang sedang berjalan. Mohon gunakan kode promo yang lain.
    INVALID_DISCOUNT_TYPE
    400
    Objek promo dengan id tersebut mempunya tipe diskon persen / diskon jumlah. Mohon sesuaikan dengan objek promo yang ada.
    INVALID_START_TIME_UPDATE
    400
    Objek promo dengan id promo tersebut memiliki masa berlaku waktu habis. Mohon sesuaikan dengan waktu promo dimulai.

    Menghapus Promo

    Gunakan fitur ini untuk menghapus promo yang telah dibuat.

    Definition: Menghapus Promo

    DELETE https://api.xendit.co/promotions/:promotion_id

    Contoh Permintaan Menghapus Promo

    curl -X DELETE \
      https://api.xendit.co/promotions/6055a96c-a870-4a2f-b61f-4015af6478cb
      -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \

    Contoh Respon Permintaan Menghapus Promo

    {
          "id":"6055a96c-a870-4a2f-b61f-4015af6478cb",
          "created":"2020-07-29T10:57:47.426Z",
          "business_id":"5edfb2a5d40e3040347d91fd",
          "reference_id":"Cypress-Test-Promo-Delete-1596020266435",
          "start_time":"2020-07-29T10:57:46.373Z",
          "end_time":"2020-07-30T10:57:46.373Z",
          "status":"DELETED",
          "type":"PROMO_CODE",
          "discount_amount":5000,
          "promo_code":"Cypress-Test-Promo-Delete-1596020266435",
          "currency":"IDR",
          "min_original_amount": 25000,
          "max_discount_amount": 5000
       }
    }
    

    Parameter Permintaan Menghapus Promo

    Path Parameter Tipe Deskripsi
    promotion_id
    optional
    string Spesifik id yang diberikan oleh Xendit dari suatu objek promo yang telah dibuat.

    Respon Permintaan Menghapus Promo

    Parameter Tipe Deskripsi
    id string Id unik dari promo yang akan dihapus (ID pada promo yg dibuat oleh Xendit).
    is_deleted boolean Status dari pada suatu objek promo yang menandakan bahwa objek promo sudah dihapus.

    Error Codes

    Error Code Description
    PROMOTION_NOT_FOUND_ERROR
    404
    Objek promo dengan ID tersebut tidak dapat ditemukan. Mohon gunakan id yang valid

    eWallet

    eWallet API kami memungkinkan Anda untuk melakukan charge dan menerima pembayaran langsung dari penyedia layanan ewallet terkemuka. Dengan melakukan satu integrasi, Anda akan mendapatkan akses ke seluruh eWallet yang tersedia termasuk integrasi di masa depan. Sampai saat ini, kami telah memproses jutaan transaksi eWallet.

    Untuk detil di setiap API termasuk panduan integrasi, silakan merujuk pada dokumentasi kami.

    Versi API

    Anda sedang melihat versi terbaru API eWallet kami. Pada versi ini, dengan sekali integrasi Anda akan mendapatkan akses ke seluruh eWallet yang tersedia dan eWallet yang akan tersedia mendatang! API ini juga memungkinkan Anda untuk melakukan alur tokenized payment dan auth/capture payment di masa mendatang. Klik di sini untuk melihat versi sebelumnya.

    Versi Changelog
    2021-01-25
    Terbaru
    API eWallet baru yang mendukung top eWallet provider di Indonesia dan Filipina. API versioning tidak butuhkan. Anda dapat mengakses API eWallet baru dengan memanggil POST /ewallets/charges

    Pembuatan Charge eWallet

    Endpoint: Pembuatan Request Charge eWallet

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

    eWallet

    Parameter Request

    Contoh: Pembuatan Request Charge eWallet

    curl https://api.xendit.co/ewallets/charges -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
        "reference_id": "order-id-123",
        "currency": "IDR",
        "amount": 25000,
        "checkout_method": "ONE_TIME_PAYMENT",
        "channel_code": "ID_SHOPEEPAY",
        "channel_properties": {
            "success_redirect_url": "https://redirect.me/payment"
            },
        "metadata": {
            "branch_area": "PLUIT",
            "branch_city": "JAKARTA"
            }
        }' \
    try {
        Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
        Map<String, String> channelProperties = new HashMap<>();
        channelProperties.put("success_redirect_url", "https://dashboard.xendit.co/register/1");
        Map<String, String> metadata = new HashMap<>();
        metadata.put("branch_code", "tree_branch");
    
        Map<String, Object> params = new HashMap<>();
        params.put("reference_id", "test-reference-id");
        params.put("currency", "IDR");
        params.put("amount", 1000);
        params.put("checkout_method", "ONE_TIME_PAYMENT");
        params.put("channel_code", "ID_SHOPEEPAY");
        params.put("channel_properties", channelProperties);
        params.put("metadata", metadata);
    
        EWalletCharge charge = EWalletCharge.createEWalletCharge(params);
    } catch (XenditException e) {
        e.printStackTrace();
    }
    <?php
    
    use Xendit\Xendit;
    require 'vendor/autoload.php';
    
    Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
    $params = [
        'reference_id' => 'test-reference-id',
        'currency' => 'IDR',
        'amount' => 1000,
        'checkout_method' => 'ONE_TIME_PAYMENT',
        'channel_code' => 'ID_SHOPEEPAY',
        'channel_properties' => [
            'success_redirect_url' => 'https://dashboard.xendit.co/register/1',
        ],
        'metadata' => [
            'branch_code' => 'tree_branch'
        ]
    ];
    
    $createEWalletCharge = \Xendit\EWallets::createEWalletCharge($ewalletChargeParams);
    var_dump($createEWalletCharge);
    
    ?>
    from xendit import EWallet
    
    ewallet_charge = EWallet.create_ewallet_charge(
        reference_id="test-reference-id",
        currency="IDR",
        amount=1000,
        checkout_method="ONE_TIME_PAYMENT",
        channel_code="ID_SHOPEEPAY",
        channel_properties={
            "success_redirect_url": "https://dashboard.xendit.co/register/1",
        },
        metadata={
            "branch_code": "tree_branch",
        },
    )
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := ewallet.CreateEWalletChargeParams{
        ReferenceID:    "test-reference-id",
        Currency:       "IDR",
        Amount:         1000,
        CheckoutMethod: "ONE_TIME_PAYMENT",
        ChannelCode:    "ID_SHOPEEPAY",
        ChannelProperties: map[string]string{
            "success_redirect_url": "https://dashboard.xendit.co/register/1",
        },
        Metadata: map[string]interface{}{
            "branch_code": "tree_branch",
        },
    }
    
    charge, chargeErr := ewallet.CreateEWalletCharge(&data)
    if chargeErr != nil {
        log.Fatal(chargeErr)
    }
    
    fmt.Printf("created e-wallet charge: %+v\n", charge)
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { EWallet } = x;
    const ewalletSpecificOptions = {};
    const ew = new EWallet(ewalletSpecificOptions);
    
    const resp = await ew.createEWalletCharge({
      referenceID: 'test-reference-id',
      currency: 'IDR',
      amount: 1000,
      checkoutMethod: 'ONE_TIME_PAYMENT',
      channelCode: 'ID_SHOPEEPAY',
      channelProperties: {
        successRedirectURL: 'https://dashboard.xendit.co/register/1',
      },
      metadata: {
        branch_code: 'tree_branch'
      }
    });
    console.log(resp);
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    EWalletChargeClient eWalletCharge = xendit.EWalletCharge;
    
    EWalletChargeParameter parameter = new EWalletChargeParameter
    {
      ReferenceId = "demo-reference-id",
      Currency = Currency.IDR,
      Amount = 1000,
      CheckoutMethod = EWalletEnum.CheckoutMethod.OneTimePayment,
      ChannelCode = EWalletEnum.ChannelCode.IdOvo,
      ChannelProperties = new EWalletChargeProperties
      {
        MobileNumber = "+628123123123",
      },
    };
    
    EWalletChargeResponse eWalletChargeResponse = await eWalletCharge.Create(parameter);
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-account yang Anda ingin gunakan untuk membuat transaksi

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform . Silakan buka xenPlatform untuk informasi lebih lanjut.
    with-split-rule
    opsional
    string ID Split Rule yang ingin Anda aplikasikan ke pembayaran eWallet ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan.

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    reference_id
    wajib
    string Reference ID yang disediakan oleh merchant (255 karakter)
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    amount
    wajib
    number Nominal yang harus dibayarkan
    Minimal - 1,000 IDR untuk ID_JENIUSPAY dan 100 IDR atau 1 PHP untuk eWallet lainnya
    Maksimal - berdasarkan saldo maksimal eWallet
    checkout_method
    wajib
    string Metode checkout yang menentukan alur pembayaran untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    TOKENIZED_PAYMENT dapat digunakan untuk pembayaran berulang
    channel_code
    wajib jika checkout_method = ONE_TIME_PAYMENT, opsional jika checkout_method = TOKENIZED_PAYMENT
    string Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_ASTRAPAY, ID_JENIUSPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    channel_properties
    wajib ketika checkout_method dan channel_code digunakan
    object Menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    OVO - one time payment parameter wajib
    Paramater Nilai
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164 (Contoh. +628123123123)
    JENIUS PAY parameter wajib
    Paramater Nilai
    cashtag
    wajib
    string Pengenal unik untuk setiap akun Jenius, mirip dengan nama pengguna. Selalu mulai dengan tanda “$”. 3-15 karakter tidak termasuk tanda “$”. Alfanumerik dan tanda “_”
    OVO - tokenized payment parameter wajib
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. REDEEM_ALL hanya dapat digunakan ketika promosi disetujui oleh OVO.
    DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    SHOPEEPAY - parameter wajib tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. Hanya 50% nominal transaksi (dibulatkan ke bawah) dapat dibayar menggunakan koin ShopeePay
    GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    MAYA (PAYMAYA) parameter wajib . End-customer dapat mencoba kembali pembayaran di link yang sama dalam waktu 15 menit
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan
    payment_method_id
    wajib jika checkout_method = TOKENIZED_PAYMENT, opsional jika checkout_method = ONE_TIME_PAYMENT
    string ID dari payment method. Payment method digunakan untuk melakukan tokenisasi pembayaran untuk menandai eWallet end user sebagai metode pembayaran
    customer_id
    opsional
    string ID dari customer object dimana payment method akan dihubungkan. Gunakan Create Customer API untuk melakukan request Customer
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail parameter objek
    Key Nilai
    reference_id
    wajib
    string Pengidentifikasi dari merchant untuk suatu produk tertentu<= 255 karakter
    name
    wajib
    string Nama product
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. Anda dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Parameter Respon

    Contoh: Respon Sukses Pembuatan Charge eWallet API

    {
      "id": "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
      "business_id": "5f218745736e619164dc8608",
      "reference_id": "test-reference-id",
      "status": "PENDING",
      "currency": "IDR",
      "charge_amount": 1000,
      "capture_amount": 1000,
      "refunded_amount": null,
      "checkout_method": "ONE_TIME_PAYMENT",
      "channel_code": "ID_SHOPEEPAY",
      "channel_properties": {
        "success_redirect_url": "https://dashboard.xendit.co/register/1"
      },
      "actions": {
        "desktop_web_checkout_url": null,
        "mobile_web_checkout_url": null,
        "mobile_deeplink_checkout_url": "https://deeplinkcheckout.this/",
        "qr_checkout_string": "ID123XenditQRTest321DI"
      },
      "is_redirect_required": true,
      "callback_url": "https://calling-back.com/xendit/shopeepay",
      "created": "2017-07-21T17:32:28Z",
      "updated": "2017-07-21T17:32:28Z",
      "void_status": null,
      "voided_at": null,
      "capture_now": true,
      "customer_id": null,
      "payment_method_id": null,
      "failure_code": null,
      "basket": null,
      "metadata": {
        "branch_code": "tree_branch"
      }
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4
    business_id
    wajib
    string Business ID dari merchant
    reference_id
    wajib
    string Reference ID yang dibuat oleh merchant
    status
    wajib
    string Status request charge
    Key Value
    SUCCEEDED
    Transaksi pembayaran untuk spesifik charge_id sukses dilakukan
    PENDING
    Transaksi pembayaran untuk spesifik charge_id menunggu pembayaran dilakukan oleh end user
    FAILED
    Transaksi pembayaran untuk spesifik charge_id telah gagal, silakan lihat failure codes untuk alasan kegagalan
    VOIDED
    Transaksi pembayaran untuk spesifik charge_id telah dilakukan void
    REFUNDED
    Transaksi pembayaran untuk spesifik charge_id telah dilakukan refund sebagian atau refund penuh
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest dari merchant
    capture_amount
    opsional
    number Nominal capture yang direquest oleh merrchant. Saat ini, capture_amount akan selalu sama dengan charge_amount
    refunded_amount
    opsional
    number Total nominal refund dari merchant kepada end user
    checkout_method
    wajib
    string Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    channel_code
    wajib
    string Channel Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_ASTRAPAY, ID_JENIUSPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    channel_properties
    wajib
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    OVO - one time payment parameter wajib
    Paramater Nilai
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164 (Contoh. +628123123123)
    JENIUS PAY parameter wajib
    Paramater Nilai
    cashtag
    wajib
    string Pengenal unik untuk setiap akun Jenius, mirip dengan nama pengguna. Selalu mulai dengan tanda “$”. 3-15 karakter tidak termasuk tanda “$”. Alfanumerik dan tanda “_”
    OVO - tokenized payment parameter wajib
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. REDEEM_ALL hanya dapat digunakan ketika promosi disetujui oleh OVO.
    DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    SHOPEEPAY - parameter wajib tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. Hanya 50% nominal transaksi (dibulatkan ke bawah) dapat dibayar menggunakan koin ShopeePay
    GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    Parameter wajib MAYA (PAYMAYA)
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End-customer dapat mencoba kembali pembayaran di tautan yang sama dalam waktu 15 menit
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_required yang dikembalikan dalam respon adalah true. Merchant harus memilih opsi yang tersedia berdasarkan pengalaman ideal untuk alur pembayaran merchant
    Key Nilai
    desktop_web_checkout_url
    Penyedia layanan eWallet menampilkan URL untuk web checkout yang diakses menggunakan desktop
    mobile_web_checkout_url
    Penyedia layanan eWallet menampilkan URL untuk web checkout yang diakses menggunakan perangkat mobile
    mobile_deeplink_checkout_url
    Penyedia layanan eWallet membuat URL untuk deeplink checkout pada perangkat mobile (transaksi langsung masuk ke eWallet app untuk konfirmasi pembayaran)
    qr_checkout_string
    Provider eWallet membuat qr string untuk checkout yang harus digunakan dengan cara melakukan pemindaian pada layar perangkat
    Channel wajib pengalihan informasi lebih lanjut
    Tipe DANA LINKAJA SHOPEEPAY (ID & PH) ASTRAPAY MAYA (PAYMAYA) GCASH GRABPAY SAKUKU
    desktop_web_checkout_url
    mobile_web_checkout_url
    mobile_deeplink_checkout_url
    qr_checkout_string
    is_redirect_required
    wajib
    boolean Menandakan apakah redirection/pengalihan wajib dilakukan untuk menyelesaikan pembayaran
    Ketika True, merchants mengalihkan end user ke url yang diberikan pada bagian “actions”. Ketika False, tidak diperlukan adanya redirection untuk melanjutkan pembayaran
    callback_url
    wajib
    string Callback URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk update object charge. Timezone UTC+0
    void_status
    opsional
    string Status request void. Nilai tersedia: PENDING, FAILED, SUCCEEDED
    voided_at
    opsional
    string ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0
    capture_now
    wajib
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi
    payment_method_id
    opsional
    string ID metode pembayaran dari Xendit sebagai representasi metode pembayaran pelanggan Anda. Hanya dapat digunakan untuk kanal yang mendukung pembayaran tokenisasi
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user maupun dari provider eWallet. Kode kegagalan akan diberitahukan kepada merchant pada callback pembayaran atau melalui GET payment status setelah transaksi dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Nilai
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek tambahan yang mungkin digunakan sebagai tambahan atribut produk
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan

    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter

    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit

    Kode Eror

    Contoh: Respon Eror Pembuatan Request Charge eWallet API

    {
        "error_code": "UNSUPPORTED_CURRENCY",
        "message": "The payment currency request is not supported for this payment channel. Please refer to our API reference or docs to pick available currencies"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    UNSUPPORTED_CURRENCY
    400
    Mata uang pembayaran pada request tidak mendukung untuk channel pembayaran ini. Silakan merujuk pada API reference atau docs untuk melihat mata uang yang tersedia
    INVALID_PAYMENT_METHOD_ID
    400
    Terdapat ketidaksesuaian antara channel_code atau customer_id dalam request dengan data yang digunakan dalam pembuatan payment_method_id, atau payment_method_id tidak tersedia untuk akun terkait. Silakan mencoba kembali dengan payment_method_id yang valid
    INVALID_API_KEY
    401
    Format API key tidak valid
    INVALID_MERCHANT_CREDENTIALS
    401
    Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request
    CHANNEL_NOT_ACTIVATED
    403
    Request pembayaran gagal dikarenakan channel pembayaran yang direquest belum diaktifkan di Xendit. Silakan melakukan aktivasi melalui dashboard atau menghubungi customer support Xendit
    CALLBACK_URL_NOT_FOUND
    404
    Request pembayaran gagal dikarenakan tidak ditemukan callback url pada dashboard Xendit atau pada request header. Silakan masukkan callback url pada dashboard Xendit
    UNSUPPORTED_CONTENT_TYPE
    403
    Tidak mendukung tipe konten yang di request
    CHARGE_LIMIT_EXCEEDED
    429
    Telah terjadi 3 kali percobaan permintaan ke Jenius Pay per cashtag dalam kurun waktu 10 menit. Harap menunggu selama 10 menit sebelum mencoba memulai permintaan baru
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider eWallet akan diberitahukan untuk penyelesaian isu

    Notifikasi Pembayaran

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada bagian eWallets paid di Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Webhook Payload

    Contoh: Payload Webhook Pembayaran Sukses

    {
      "event": "ewallet.capture",
      "business_id": "5abe2389ewpejrt238",
      "created": "2020-04-20T16:25:52Z",
      "data": {
        "id": "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
        "business_id": "5f218745736e619164dc8608",
        "reference_id": "test-reference-id",
        "status": "SUCCEEDED",
        "currency": "IDR",
        "charge_amount": 1000,
        "capture_amount": 1000,
        "checkout_method": "ONE_TIME_PAYMENT",
        "channel_code": "ID_SHOPEEPAY",
        "channel_properties": {
          "success_redirect_url": "https://dashboard.xendit.co/register/1"
        },
        "actions": {
          "desktop_web_checkout_url": null,
          "mobile_web_checkout_url": null,
          "mobile_deeplink_checkout_url": "https://deeplinkcheckout.this/",
          "qr_checkout_string": "ID123XenditQRTest321DI"
        },
        "is_redirect_wajib": true,
        "callback_url": "https://calling-back.com/xendit/shopeepay",
        "created": "2017-07-21T17:32:28Z",
        "updated": "2017-07-21T17:32:28Z",
        "voided_at": null,
        "capture_now": true,
        "customer_id": null,
        "payment_method_id": null,
        "failure_code": null,
        "basket": null,
        "metadata": {
          "branch_code": "tree_branch"
        }
      }
    }
    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.capture terjadi ketika provider eWallet mengkonfirmasi status transaksi pembayaran
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    data
    opsional
    object Objek charge eWallet akan dikumpulkan pada parameter ini. Silakan lihat bagian ini untuk informasi lengkapnya
    Data fields
    Key Nilai
    id
    wajib
    string Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4
    business_id
    wajib
    string Business ID dari merchant
    reference_id
    wajib
    string Reference ID yang dibuat oleh merchant
    Catatan: Harus unik per request pembayaran
    status
    wajib
    Status request charge - SUCCEEDED, FAILED, VOIDED, REFUNDED
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest dari merchant
    capture_amount
    opsional
    number Nominal capture yang direquest Anda. Saat ini, capture_amount akan selalu sama dengan charge_amount
    refunded_amount
    opsional
    number Total nominal refund dari merchant kepada end user
    checkout_method
    wajib
    string Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    channel_code
    wajib
    string Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_ASTRAPAY, ID_JENIUSPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    channel_properties
    opsional
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    OVO - one time payment parameter wajib
    Paramater Nilai
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164 (Contoh. +628123123123)
    JENIUS PAY parameter wajib
    Paramater Nilai
    cashtag
    wajib
    string Pengenal unik untuk setiap akun Jenius, mirip dengan nama pengguna. Selalu mulai dengan tanda “$”. 3-15 karakter tidak termasuk tanda “$”. Alfanumerik dan tanda “_”
    OVO - tokenized payment parameter wajib
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. REDEEM_ALL hanya dapat digunakan ketika promosi disetujui oleh OVO.
    DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    SHOPEEPAY - parameter wajib tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. Hanya 50% nominal transaksi (dibulatkan ke bawah) dapat dibayar menggunakan koin ShopeePay
    GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    Parameter wajib MAYA (PAYMAYA)
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End-customer dapat mencoba kembali pembayaran di link yang sama dalam waktu 15 menit
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_wajib yang dikembalikan dalam respon adalah true. Merchant harus memilih opsi yang tersedia berdasarkan pengalaman ideal untuk alur pembayaran merchant
    is_redirect_wajib
    wajib
    boolean Tanda yang mengindikasikan apakah pengalihan diwajibkan untuk end user dapat menyelesaikan pembayaran
    Ketika True, merchant harus mengarahkan end user ke url yang disediakan pada parameter “actions”. Ketika False, tidak ada pengalihan yang harus dilakukan untuk menyelesaikan pembayaran.
    callback_url
    opsional
    string Webhook URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp for charge object creation. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    void_status
    opsional
    string Status request void. Nilai tersedia: PENDING, FAILED, SUCCEEDED
    voided_at
    opsional
    string ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0
    capture_now
    opsional
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID akan dihubungkan dengan transaksi
    payment_method_id
    opsional
    string Pengidentifikasi dari Xendit untuk token pembayaran end user yang terhubung dengan merchant. Hanya digunakan untuk saluran pembayaran yang mendukung tokenisasi pembayaran
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user atau eWallet issuer. Failure_code diinformasikan kepada merchant melalui webhook atau GET payment status setelah pembayaran dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Nilai
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah per unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge. Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter. Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge. Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter. Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit

    Kode Kegagalan

    Contoh: Respon Eror - Pembuatan Void eWallet

    {
      "event": "ewallet.capture",
      "business_id": "5abe2389ewpejrt238",
      "created": "2020-04-20T16:25:52Z",
      "data": {
        "id": "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
        "business_id": "5f218745736e619164dc8608",
        "reference_id": "test-reference-id",
        "status": "FAILED",
        "currency": "IDR",
        "charge_amount": 1000,
        "capture_amount": 1000,
        "refunded_amount": null,
        "checkout_method": "ONE_TIME_PAYMENT",
        "channel_code": "ID_SHOPEEPAY",
        "channel_properties": {
          "success_redirect_url": "https://dashboard.xendit.co/register/1"
        },
        "actions": {
          "desktop_web_checkout_url": null,
          "mobile_web_checkout_url": null,
          "mobile_deeplink_checkout_url": "https://deeplinkcheckout.this/",
          "qr_checkout_string": "ID123XenditQRTest321DI"
        },
        "is_redirect_wajib": true,
        "callback_url": "https://calling-back.com/xendit/shopeepay",
        "created": "2017-07-21T17:32:28Z",
        "updated": "2017-07-21T17:32:28Z",
        "void_status": null,
        "voided_at": null,
        "capture_now": true,
        "customer_id": null,
        "payment_method_id": null,
        "failure_code": "USER_DID_NOT_AUTHORIZE_THE_PAYMENT",
        "basket": null,
        "metadata": {
          "branch_code": "tree_branch"
        }
      }
    }
    Kode Kegagalan Pesan Eror
    ACCOUNT_ACCESS_BLOCKED
    Akun end user tidak dapat diakses dikarenakan akses telah ditutup oleh eWallet provider. End user harus menghubungi eWallet provider untuk penyelesaian.
    INVALID_MERCHANT_CREDENTIALS
    Terdapat eror dengan kredensial merchant yang disediakan oleh eWallet provider. Silakan hubungi customer support Xendit untuk penyelesaian.
    USER_DECLINED_PAYMENT
    End user menolak request pembayaran.
    INVALID_ACCOUNT_DETAILS
    End user menyediakan informasi yang salah untuk pembayaran ini.
    MAXIMUM_LIMIT_REACHED
    Transaksi ini telah mencapai limit maksimum yang telah ditentukan oleh en duser atau penyedia ewallet. Pembayaran dapat dilakukan kembali setelah limit kembali.
    USER_UNREACHABLE
    Provider eWallet/server tidak dapat menjangkau aplikasi/nomor user. Alasan pada umumnya dikarenakan koneksi tidak stabil, perangkat eror atau perangkat jailbreak.
    CHANNEL_UNAVAILABLE
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. eWallet provider akan diberitahukan untuk penyelesaian isu.
    INSUFFICIENT_BALANCE
    End user tidak memiliki cukup saldo untuk menyelesaikan pembayaran.
    ACCOUNT_NOT_ACTIVATED
    Akun user tidak dapat diakses karena akun belum diaktifkan. User harus memastiukan akun telah aktif dan memiliki cukup saldo sebelum mencoba kembali.
    INVALID_TOKEN
    Penghubungan akun untuk end user ini telah expired. Silakan lakukan penghubungan kembali sebelum mencoba ulang Binding.
    FAILURE_DETAILS_UNAVAILABLE
    Detail mengenai rikues pembayaran yang gagal tidak disediakan oleh penyedia eWallet provider.

    Get eWallet Charge Status

    Endpoint: Get eWallet Charge Status

    GET https://api.xendit.co/ewallets/charges/{id}

    Endpoint ini digunakan untuk mendapatkan status charge request. Anda perlu memasukkan id pada response body ketika melakukan request Pembuatan request charge eWallet

    Version

    Anda sedang melihat versi terbaru API eWallet kami. Klik di sini untuk melihat versi sebelumnya.

    Parameter Request

    Contoh: Check eWallet Charge Status Request

    curl 'https://api.xendit.co/ewallets/charges/ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2' \
       -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    try {
        Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
        EWalletCharge charge = EWalletCharge.getEWalletChargeStatus("ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2");
    } catch (XenditException e) {
        e.printStackTrace();
    }
    <?php
    
    use Xendit\Xendit;
    require 'vendor/autoload.php';
    
    Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
    $charge_id = 'ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2';
    $getEWalletChargeStatus = \Xendit\EWallets::getEWalletChargeStatus($charge_id);
    var_dump($getEWalletChargeStatus);
    
    ?>
    from xendit import EWallet
    
    ewallet_charge = EWallet.get_ewallet_charge_status(
        charge_id="ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
    )
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := ewallet.GetEWalletChargeStatusParams{
        ChargeID: "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
    }
    
    charge, chargeErr := ewallet.GetEWalletChargeStatus(&data)
    if chargeErr != nil {
        log.Fatal(chargeErr)
    }
    
    fmt.Printf("retrieved e-wallet charge: %+v\n", charge)
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { EWallet } = x;
    const ewalletSpecificOptions = {};
    const ew = new EWallet(ewalletSpecificOptions);
    
    const resp = await ew.getEWalletChargeStatus({
      chargeID: 'ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2',
    });
    console.log(resp);
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    EWalletChargeClient eWalletCharge = xendit.EWalletCharge;
    
    EWalletChargeResponse eWalletChargeRepsonse = await eWalletCharge.Get("ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2");
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-account yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut.

    Parameter Query Tipe Deskripsi
    charge_id
    wajib
    string Anda perlu memasukkan id pada response body ketika melakukan request Pembuatan request charge eWallet

    Contoh: Respon Sukses Check eWallet Charge Status

    Respon Sukses Check eWallet Charge Status

    {
      "id": "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
      "business_id": "5f218745736e619164dc8608",
      "reference_id": "test-reference-id",
      "status": "PENDING",
      "currency": "IDR",
      "charge_amount": 1000,
      "capture_amount": 1000,
      "refunded_amount": null,
      "checkout_method": "ONE_TIME_PAYMENT",
      "channel_code": "ID_SHOPEEPAY",
      "channel_properties": {
        "success_redirect_url": "https://dashboard.xendit.co/register/1"
      },
      "actions": {
        "desktop_web_checkout_url": null,
        "mobile_web_checkout_url": null,
        "mobile_deeplink_checkout_url": "https://deeplinkcheckout.this/",
        "qr_checkout_string": "ID123XenditQRTest321DI"
      },
      "is_redirect_required": true,
      "callback_url": "https://calling-back.com/xendit/shopeepay",
      "created": "2017-07-21T17:32:28Z",
      "updated": "2017-07-21T17:32:28Z",
      "void_status": null,
      "voided_at": null,
      "capture_now": true,
      "customer_id": null,
      "payment_method_id": null,
      "failure_code": null,
      "basket": null,
      "metadata": {
        "branch_code": "tree_branch"
      }
    }

    Parameter Body Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4
    business_id
    wajib
    string Business ID dari merchant
    reference_id
    wajib
    string Reference ID yang dibuat oleh merchant
    Catatan: Harus unik per request pembayaran.
    status
    wajib
    string Status request charge
    Key Nilai
    SUCCEEDED
    Transaksi pembayaran untuk spesifik charge_id sukses dilakukan
    PENDING
    Transaksi pembayaran untuk spesifik charge_id menunggu pembayaran dilakukan oleh end user
    FAILED
    Transaksi pembayaran untuk spesifik charge_id telah gagal, silakan lihat failure codes untuk alasan kegagalan
    VOIDED
    Transaksi pembayaran untuk spesifik charge_id telah dilakukan void
    REFUNDED
    Transaksi pembayaran untuk spesifik charge_id telah dilakukan refund sebagian atau refund penuh
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest dari merchant
    capture_amount
    opsional
    number Nominal capture yang direquest oleh merchant. Saat ini, capture_amount akan selalu sama dengan charge_amount
    refunded_amount
    opsional
    number Total nominal refund dari merchant kepada end user
    checkout_method
    wajib
    string Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    channel_code
    wajib
    string Channel Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_ASTRAPAY, ID_JENIUSPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    channel_properties
    opsional
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    OVO - one time payment parameter wajib
    Paramater Nilai
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164 (Contoh. +628123123123)
    JENIUS PAY parameter wajib
    Paramater Nilai
    cashtag
    wajib
    string Pengenal unik untuk setiap akun Jenius, mirip dengan nama pengguna. Selalu mulai dengan tanda “$”. 3-15 karakter tidak termasuk tanda “$”. Alfanumerik dan tanda “_”
    OVO - tokenized payment parameter wajib
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. REDEEM_ALL hanya dapat digunakan ketika promosi disetujui oleh OVO.
    DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    SHOPEEPAY - parameter wajib tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. Hanya 50% nominal transaksi (dibulatkan ke bawah) dapat dibayar menggunakan koin ShopeePay
    GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    Parameter wajib MAYA (PAYMAYA)
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End-customer dapat mencoba kembali pembayaran menggunakan tautan yang sama dalam waktu 15 menit
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_required yang dikembalikan dalam respon adalah true. Merchant harus memilih opsi yang tersedia berdasarkan pengalaman ideal untuk alur pembayaran merchant
    Key Nilai
    desktop_web_checkout_url
    Penyedia layanan eWallet menampilakn URL untuk web checkout yang diakses menggunakan desktop
    mobile_web_checkout_url
    Penyedia layanan eWallet menampilakn URL untuk web checkout yang diakses menggunakan perangkat mobile
    mobile_deeplink_checkout_url
    Penyedia layanan eWallet membuat URL untuk deeplink checkout pada perangkat mobile (transaksi langsung masuk ke eWallet app untuk konfirmasi pembayaran)
    qr_checkout_string
    Provider eWallet membuat qr string untuk checkout yang harus digunakan dengan cara melakukan pemindaian pada layar perangkat
    is_redirect_required
    wajib
    boolean Menandakan apakah redirection/pengalihan wajib dilakukan untuk menyelesaikan pembayaran
    Ketika True, merchants mengalihkan end user ke url yang diberikan pada bagian “actions”. Ketika False, tidak diperlukan adanya redirection untuk melanjutkan pembayaran
    callback_url
    wajib
    string Callback URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk update object charge. Timezone UTC+0
    void_status
    opsional
    string Status request void. Nilai tersedia: PENDING, FAILED, SUCCEEDED
    voided_at
    opsional
    string ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0
    capture_now
    wajib
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi
    payment_method_id
    opsional
    string ID dari metode pembayaran . Hanya dapat digunakan untuk channel yang mendukung tokenisasi pembayaran
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user maupun dari provider eWallet. Kode kegagalan akan diberitahukan kepada merchant pada callback pembayaran atau melalui GET payment status setelah transaksi dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Value
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek tambahan yang mungkin digunakan sebagai tambahan atribut produk
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit

    Kode Eror

    Contoh: Eror Respon Check eWallet Charge Request

    {
        "error_code": "INVALID_API_KEY",
        "message": "API key format is invalid"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    INVALID_API_KEY
    401
    Format API key tidak valid
    INVALID_MERCHANT_CREDENTIALS
    401
    Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian
    DATA_NOT_FOUND
    404
    Spesifik Charge ID tidak ditemukan. Silakan cek query Anda lagi
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu

    Void eWallet Charge

    Void API akan memungkinkan Anda untuk melakukan void pada pembayaran eWallet yang sukses dimana 100% nominal akan dikembalikan kepada end user

    Melakukan void untuk charge eWallet didefinisikan sebagai pembatalan pembayaran eWallet yang dilakukan di hari yang sama sebelum batas akhir pukul 23:50:00. Jika charge eWallet dibuat pada pukul 19:00:00 waktu lokal pada tanggal 1 September 2021, maksimum pembatalan transaksi ini adalah pukul 23:50:00 di hari yang sama

    Untuk melakukan pembatalan pembayaran eWallet setelah waktu cut off, silakan menggunakan Refund API

    Void API hanya akan bekerja untuk charge yang dibuat melalui /ewallets/charges API dengan status SUCCEEDED

    Void API akan mengembalikan PENDING void_status sebagai response setelah request dibuat. Callbak/notifikasi akan dikirimkan ke webhook/callback URL Anda setelah void diproses dengan sukses

    Indonesia


    Nilai OVO DANA SHOPEEPAY LINKAJA ASTRAPAY JENIUS PAY SAKUKU
    Tersedia di Xendit?
    ✓ untuk One-Time Payment, ✕ untuk Tokenized Payment
    Periode Valid
    Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat N/A Di hari yang sama sebelum 23:50:00 waktu setempat N/A
    Fee Transaksi Dikembalikan?
    N/A N/A

    Philippines

    Nilai GCASH MAYA (PAYMAYA) GRABPAY SHOPEEPAY
    Tersedia di Xendit?
    Periode Valid
    Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat Di hari yang sama sebelum 23:50:00 waktu setempat
    Fee Transaksi Dikembalikan?

    Endpoint: Pembuatan Void eWallet

    POST https://api.xendit.co/ewallets/charges/{id}/void

    Parameter Request

    Contoh: Request - Pembuatan Void eWallet

    curl https://api.xendit.co/ewallets/charges/ewc_532as23lew2321id/void -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
       -H 'Content-Type: application/json' \
    Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-account yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut
    Path Parameter Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk transaksi charge request (dikembalikan sebagai id pada request charge eWallet)

    Parameter Respon

    Contoh: Respon Pembuatan Void eWallet

    {
        "id" : "ewc_532as23lew2321id",
        "business_id" : "5easfnn23aadlmnaa42",
        "reference_id" : "test_reference_id",
        "status" : "SUCCEEDED",
        "currency" : "IDR",
        "charge_amount" : 123456,
        "capture_amount" : 123456,
        "refunded_amount" : null,
        "checkout_method" : "ONE_TIME_PAYMENT",
        "channel_code" : "ID_DANA",
        "channel_properties" : 
            {
            "mobile_number" : "+6287777771111"
            },
        "actions" : null,
        "is_redirect_required" : false,
        "callback_url" : "https://webhook.me/gethooked",
        "created" : "2020-04-20T16:23:52Z",
        "updated" : "2020-04-20T16:23:52Z",
        "void_status" : "PENDING",
        "voided_at" : null,
        "capture_now" : true,
        "customer_id" : null,
        "payment_method_id" : null,
        "failure_code" : null,
        "basket" : null,
        "metadata" : 
            {
            "branch_code" : "senayan_372"
            }
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk request charge transaksi. Akan selalu berawalan 'ewc_', diikuti dengan UUIDv4
    business_id
    wajib
    string Business ID dari merchant
    reference_id
    wajib
    string Reference ID yang disediakan oleh merchant
    Note: Harus unik per request pembayaran.
    status
    wajib
    string Status request charge
    Key Nilai
    SUCCEEDED
    Pembayaran transaksi untuk spesifik charge_id sukses dilakukan
    currency
    wajib
    string string Mata uang yang digunakan pada transaksi dalam format ISO4217
    Nilai yang didukung: IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest
    capture_amount
    opsional
    number Nominal capture yang direquest oleh merrchant. Saat ini, capture_amount akan selalu sama dengan charge_amount
    refunded_amount
    opsional
    number Total nominal refund dari merchant kepada end user
    checkout_method
    wajib
    string Checkout method menentukan flow pembayaran yang digunakan untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali waktu
    TOKENIZED_PAYMENT dapat digunakan untuk pembayaran berulang
    channel_code
    wajib
    string Channel Code menunjukkan eWallet mana yang digunakan untuk memproses transaksi
    Channel tersedia: ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_JENIUSPAY, PH_PAYMAYA,PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    channel_properties
    opsional
    object Informasi spesifik yang diwajibkan untuk tersedia dari spesifik channel yang digunakan.
    OVO - one time payment parameter wajib
    Paramater Nilai
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164 (Contoh. +628123123123)
    JENIUS PAY parameter wajib
    Paramater Nilai
    cashtag
    wajib
    string Pengenal unik untuk setiap akun Jenius, mirip dengan nama pengguna. Selalu mulai dengan tanda “$”. 3-15 karakter tidak termasuk tanda “$”. Alfanumerik dan tanda “_”
    OVO - tokenized payment parameter wajib
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. REDEEM_ALL hanya dapat digunakan ketika promosi disetujui oleh OVO.
    DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    SHOPEEPAY - parameter wajib tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" "REDEEM_NONE" - tidak ada point yang akan digunakan atau "REDEEM_ALL" - point akan digunakan sebelum cash balance digunakan. Hanya 50% nominal transaksi (dibulatkan ke bawah) dapat dibayar menggunakan koin ShopeePay
    GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    Parameter Wajib MAYA (PAYMAYA)
    Key Nilai
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika otorisasi sukses
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika otorisasi dibatalkan. End-customer dapat mencoba kembali pembayaran dengan link yang sama dalam 15 menit.
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_required yang dikembalikan pada response adalah true. Merchants harus memilih salah satu dari opsi tersedia berdasarkan pengalaman ideal untuk alur pembayaran Anda
    Key Nilai
    desktop_web_checkout_url
    Penyedia layanan eWallet menampilkan URL untuk web checkout yang diakses menggunakan desktop
    mobile_web_checkout_url
    Penyedia layanan eWallet menampilkan URL untuk web checkout yang diakses menggunakan perangkat mobile
    mobile_deeplink_checkout_url
    Penyedia layanan eWallet membuat URL untuk deeplink checkout pada perangkat mobile (transaksi langsung masuk ke eWallet app untuk konfirmasi pembayaran)
    qr_checkout_string
    Provider eWallet membuat qr string untuk checkout yang harus digunakan dengan cara melakukan pemindaian pada layar perangkat
    is_redirect_required
    wajib
    boolean Tanda yang mengindikasikan apakah pengalihan diwajibkan untuk end user dapat menyelesaiakan pembayaran
    Ketika True, merchant harus mengarahkan end user ke url yang disediakan pada parameter “actions”. Ketika False, tidak ada pengalihan yang harus dilakukan untuk menyelesaikan pembayaran.
    callback_url
    wajib
    string Callback URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk update object charge. Timezone UTC+0
    void_status
    opsional
    string Status dari void request. Nilai seharusnya PENDING
    voided_at
    opsional
    string Timestamp dengan ISO 8601 ketika transaksi divoid
    capture_now
    wajib
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID akan dihubungkan dengan transaksi
    payment_method_id
    opsional
    string ID dari payment method . Hanya digunakan untuk channel yang mendukung tokenisasi pembayaran
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user atau eWallet issuer. Failure_code is diinformasikan kepada merchant melalui callbak atau GET payment status setelah pembayaran dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Nilai
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah per unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit

    Kode Eror

    Contoh: Respon Eror - Pembuatan Void eWallet

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Resource not found. Please check your query again."
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter.
    VOID_NOT_SUPPORTED
    400
    Fitur void tidak tersedia pada eWallet provider.
    VOID_TEMPORARILY_UNAVAILABLE
    400
    Fitur void tidak dapat digunakan antara pukul 00:00:00 dan pukul 05:00:00 UTC+07:00/UTC+08:00 setiap harinya untuk transaksi ShopeePay. Silakan coba lagi setelah pukul 05:00:00 UTC+07:00/UTC+08:00.
    INVALID_API_KEY
    401
    Format API key tidak valid.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request.
    INELIGIBLE_TRANSACTION
    403
    Pembayaran telah melewati periode valid void (setelah 23:50:00 UTC+07:00/UTC+08:00) untuk request atau status charge bukan SUCCEEDED.
    INELIGIBLE_MERCHANT
    403
    Merchant memiliki pengaturan settlement yang tidak berhak untuk melakukan void transaksi. Silakan contact Xendit customer support untuk resolusinya.
    DATA_NOT_FOUND
    404
    Sumber tidak ditemukan. Silakan check kembali query Anda.
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu.
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider eWallet akan diberitahukan untuk penyelesaian isu.

    Get Void

    Untuk mendapatkan status request void, gunakan Get eWallet Charge Status API dimana response termasuk parameter void_status and voided_at

    Callback Void

    Void callback akan dikirimkan sebagai POST request ke endpoint yang sama yang digunakan untuk melakukan charge eWallet. Catatan: Mohon untuk memberikan response callback dengan status 200 sehingga kami mengetahui callback telah diterima dan tidak diperlukan pengiriman ulang

    Callback Payload

    Contoh: Callback Payload Void eWallet Sukses

    {
      "event": "ewallet.void",
      "business_id": "5abe2389ewpejrt238",
      "created": "2020-04-20T16:25:52Z",
      "data": {
        "id": "ewc_532as23lew2321id",
        "reference_id": "test_reference_id",
        "status": "VOIDED",
        "currency": "IDR",
        "checkout_method": "ONE_TIME_PAYMENT",
        "charge_amount": 123456,
        "capture_amount": 123456,
        "refunded_amount": null,
        "channel_code": "ID_DANA",
        "channel_properties": {
          "mobile_number": "+6287777771111"
        },
        "actions": null,
        "is_redirect_required": false,
        "callback_url": "https://webhook.me/gethooked",
        "created": "2020-04-20T16:23:52Z",
        "updated": "2020-04-20T16:23:52Z",
        "void_status": "SUCCEEDED",
        "voided_at": "2020-04-20T23:24:30Z",
        "capture_now": true,
        "customer_id": null,
        "payment_method_id": null,
        "failure_code": null,
        "basket": null,
        "metadata": {
          "branch_code": "senayan_372"
        }
      }
    }
    Parameter Header Tipe Deskripsi
    x-callback-token
    string Callback token Xendit Anda untuk memverifikasi sumber callback

    Parameter Body Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.void terjadi ketika provider eWallet mengkonfirmasi status request void
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Timestamp dalam ISO 8601 untuk pembuatan notifikasi callback. Timezone UTC+0
    data
    opsional
    object object eWallet void, dengan tidak menampilkan business_id

    Refund eWallet Charge

    Refund API memungkinkan Anda untuk melakukan refund secara penuh atau partial. Anda dapat melakukan beberapa kali refund request untuk satu transaksi selama total nominal refund tidak melebihi nominal asli transaksi

    Selain Refund API, Void API dapat juga digunakan untuk membatalkan pembayaran eWallet di hari yang sama dengan pembuatan charge dan sebelum batas waktu 23:50:00 waktu setempat. Pada transaksi Void, fee dan VAT akan dikembalikan karena pembatalan terjadi sebelum ada perpindahan dana. Secara spesifik untuk pembayaran DANA, fee transaksi dan PPN akan dikembalikan pada request void sukses dan bukan request refund sukses

    Refund API hanya bisa digunakan untuk charge yang dibuat melalui /ewallets/charges API dengan status SUCCEEDED or REFUNDED

    Refund API akan mengembalikan status PENDING pada respon. Webhook/notifikasi akan dikirimkan ke sistem URL Anda setelah refund diproses dengan sukses

    Indonesia


    Nilai OVO DANA SHOPEEPAY LINKAJA ASTRAPAY JENIUS PAY SAKUKU
    Tersedia di Xendit?
    ✕ untuk One-Time Payment, ✓ untuk Tokenized Payment ✓ untuk One-Time Payment, ✕ untuk Tokenized Payment
    Partial Refund Diperbolehkan?
    N/A N/A
    Multiple Refunds Diperbolehkan?
    N/A ✕ (Hanya 1 pengembalian dana sebagian diperbolehkan untuk setiap pembayaran) N/A
    Periode Valid
    14 Hari 30 Hari 365 Hari 30 Hari N/A Selalu Valid/Tidak Kedaluwarsa N/A
    Fee Transaksi Dikembalikan?
    N/A ✓ untuk Full Refund, ✕ untuk Partial Refund N/A

    Filipina



    Nilai GCASH MAYA (PAYMAYA) GRABPAY SHOPEEPAY
    Tersedia di Xendit?
    Partial Refund Diperbolehkan?

    (Tidak di hari yang sama)
    Multiple Refund Diperbolehkan?

    (Dibatasi maksimal 7 kali)
    Periode Valid
    180 Hari 365 Hari 365 Hari 365 Hari
    Fee Transaksi Dikembalikan?

    Endpoint: Pembuatan Refund eWallet

    POST https://api.xendit.co/ewallets/charges/{id}/refunds

    Parameter Request

    Contoh: Request - Pembuatan Refund eWallet

    curl hhttps://api.xendit.co/ewallets/charges/ewc_532as23lew2321id/refunds -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
       -H 'Content-Type: application/json' \
       --data-raw '{
        "amount": "1000",
        "reason": "REQUESTED_BY_CUSTOMER"
    }'

    Contoh: Sampel JSON request

    {
        "amount": 1000,
        "reason": "REQUESTED_BY_CUSTOMER"
    }
    Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-account yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut
    Path Parameter Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk transaksi charge request (dikembalikan sebagai id pada request charge eWallet)
    Parameter Body Tipe Deskripsi
    amount
    opsional
    number Nominal untuk direfund kepada customer. Akumulasi nomial yang direfund tidak boleh melebihi nominal asli transaksi.

    Jika nominal tidak dicantumkan dalam body request, nominal tersisa yang belum direfund akan diproses
    reason
    opsional
    string Alasan refund, salah satu nilai yang dapat digunakan.
    Nilai yang tersedia: DUPLICATE, FRAUDULENT, REQUESTED_BY_CUSTOMER, CANCELLATION, OTHERS

    Parameter Respon

    Contoh: Response - Pembuatan Refund eWallet

    { 
        "id" : "ewr_532as23lew2321id",
        "charge_id" : "5easfnn23aadlmnaa42",
        "status" : "PENDING",
        "currency" : "IDR",
        "channel_code" : "ID_DANA",
        "capture_amount" : 123456,
        "refund_amount" : 123456,
        "reason" : "REQUESTED_BY_CUSTOMER",
        "failure_code" : null,
        "created" : "2020-04-20T16:23:52Z",
        "updated" : "2020-04-20T16:23:52Z"
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi refund
    charge_id string Pengidentifikasi unik untuk transaksi charge
    status string Status refund request
    Nilai tersedia: SUCCEEDED, FAILED, PENDING
    currency string Mata uang yang digunakan pada transaksi menggunakan format ISO 4217
    Mata uang yang didukung: IDR, PHP
    capture_amount number Nominal capture yang direquest
    refund_amount number Nominal untuk direfund
    channel_code string Kode channel yang mengindikasikan provider eWallet
    Channel tersedia: ID_OVO, ID_DANA, ID_SHOPEEPAY, ID_LINKAJA, ID_JENIUSPAY, PH_PAYMAYA,PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    reason string Alasan Refund
    failure_code string Alasan kegagalan transaksi refund
    created string Timestamp dalam format ISO 8601 untuk request refund
    updated number Timestamp dalam format ISO 8601 untuk update refund objek

    Kode Eror

    Contoh: Respon Eror - Pembuatan Refund eWallet

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Resource not found. Please check your query again."
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Request refund gagal karena refund dengan nominal penuh telah mencapai maksimum limit.
    MAXIMUM_REFUND_TRANSACTION_REACHED
    400
    Anda telah mencapai transaksi pengembalian dana maksimum yang diizinkan untuk pembayaran ini. Silakan periksa batasan pengembalian dana untuk semua kanal eWallet di sini https://docs.xendit.co/id/ewallet/payment-flows/void-and-refund#charge-pengembalian-dana-ewallet.
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Request refund sebagian gagal karena refund sebagian tidak tersedia pada penyedia eWallet.
    REFUND_TEMPORARILY_UNAVAILABLE
    400
    Fitur refund tidak dapat digunakan antara pukul 00:00:00 dan pukul 05:00:00 UTC+07:00/UTC+08:00 setiap harinya untuk transaksi ShopeePay. Silakan coba lagi setelah pukul 05:00:00 UTC+07:00/UTC+08:00.
    REFUND_TEMPORARILY_UNAVAILABLE
    400
    Refund sebagian tidak tersedia untuk Maya (PayMaya) pada hari transaksi. Silakan coba lagi setelah 23:59:59.
    REFUND_NOT_SUPPORTED
    400
    Request refund gagal karena refund tidak tersedia pada penyedia eWallet.
    REFUND_IN_PROGRESS
    400
    Refund request secara bersamaan untuk charge eWallet yang sama tidak diperbolehkan. Silakan melakukan refund request kembali setelah request sebelumnya selesai.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request.
    INELIGIBLE_TRANSACTION
    403
    Pembayaran telah melewati masa berlaku refund atau status transaksi “FAILED”, “PENDING”, atau “VOIDED”.
    INSUFFICIENT_BALANCE
    403
    Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.
    CHANNEL_UNAVAILABLE
    503
    Saluran pembayaran saat ini sedang mengalami kendala tak terduga. Penyedia paylater akan diifnormasikan untuk menyelesaikan isu.

    Callback Refund

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada bagian eWallets paid di Dasbor Xendit.

    Ketika refund berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Webhook Payload

    Contoh: Payload Webhook Success Refund

    {
      "event": "ewallet.refund",
      "business_id": "5abe2389ewpejrt238",
      "created": "2020-04-20T16:25:52Z",
      "data": {
        "id": "ewr_532as23lew2321id",
        "charge_id": "ewc_5easfnn23aadlmnaa42",
        "status": "SUCCEEDED",
        "currency": "IDR",
        "channel_code": "ID_DANA",
        "capture_amount": 123456,
        "refund_amount": 123456,
        "reason": "REQUESTED_BY_CUSTOMER",
        "failure_code": null,
        "created": "2020-04-20T16:23:52Z",
        "updated": "2020-04-20T16:23:52Z"
      }
    }
    Parameter Header Tipe Description
    x-callback-token
    required
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    required
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.refund terjadi ketika provider eWallet mengkonfirmasi status request refund
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Timestamp dalam ISO 8601 untuk pembuatan notifikasi webhook. Timezone UTC+0
    data
    opsional
    object object eWallet Refund, dengan tidak menampilkan business_id

    Kode Kegagalan

    Kode Kegagalan Deskripsi
    INELIGIBLE_TRANSACTION
    Transaksi telah melewati periode valid untuk melakukan refund atau jumlah request refund telah melampaui jumlah yang diperbolehkan.
    INSUFFICIENT_BALANCE
    Akun Switcher tidak memiliki cukup saldo untuk melakukan refund. Silakan mencoba kembali setelah memastikan saldo akun switcher cukup.
    REFUND_TEMPORARILY_UNAVAILABLE
    Refund sementara tidak tesedia dikarenakan limitasi settlement dengan penyedia eWallet. Silakan coba kembali.
    MAXIMUM_USER_BALANCE_EXCEEDED
    Refund tidak dapat diproses karena penerimaan refund akan mengakibatkan saldo user melebihi maksimum limit.
    INELIGIBLE_PARTIAL_REFUND_TRANSACTION
    Transaksi tidak dapat dilakukan refund sebagian karena keterbatasan di sisi penyedia eWallet. Anda dapat emncoba kembali dengan melakukan refund penuh. Grabpay tidak memperbolehkan refund sebagian untuk transaksi promo dan transaksi menggunakan Grabpoint.

    Get Refund

    Dapatkan detil status refund untuk eWallet dengan menggunakan Refund ID

    Endpoint: Get Refund eWallet menggunakan Refund ID

    GET https://api.xendit.co/ewallets/charges/{charge_id}/refunds/{refund_id}

    Parameter Request

    Contoh: Request - GET Refund eWallet menggunakan Refund ID

    curl https://api.xendit.co/ewallets/charges/ewc_5easfnn23aadlmnaa42/refunds/ewr_532as23lew2321id -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Type Description
    charge_id
    wajib
    string ID dari charge eWallet
    refund_id
    wajib
    string ID dari refund eWallet

    Parameter Respon

    Contoh: Respond - GET Refund eWallet menggunakan Refund ID

    { 
        "id" : "ewr_532as23lew2321id",
        "charge_id" : "5easfnn23aadlmnaa42",
        "status" : "SUCCEEDED",
        "currency" : "IDR",
        "channel_code" : "ID_DANA",
        "capture_amount" : 123456,
        "refund_amount" : 100000,
        "reason" : "REQUESTED_BY_CUSTOMER",
        "failure_code" : null,
        "created" : "2020-04-20T16:23:52Z",
        "updated" : "2020-04-20T16:23:52Z"
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik dari refund transaksi
    charge_id string Pengidentifikasi unik untuk transaksi charge
    status string Status dari request refund
    Nilai tersedia: SUCCEEDED, FAILED, PENDING
    currency string Mata uang yang digunakan pada transaksi menggunakan format ISO 4217
    Mata uang yang didukung: IDR, PHP
    capture_amount number Nominal capture yang direquest
    refund_amount number Nominal untuk direfund
    channel_code string Kode channel yang mengindikasikan provider eWallet
    Channel tersedia: ID_OVO, ID_DANA, ID_SHOPEEPAY, ID_LINKAJA, ID_JENIUSPAY, PH_PAYMAYA,PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    reason string Alasan Refund
    failure_code string Alasan kegagalan transaksi refund
    created string Timestamp dalam format ISO 8601 untuk request refund
    updated number Timestamp dalam format ISO 8601 untuk update refund objek

    Kode Eror

    Contoh: Respon Eror - GET Refund eWallet menggunakanRefund ID

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Resource not found. Please check your query again."
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.

    Daftar Refund

    Dapatkan detail seluruh refund eWallet yang berafiliasi dengan satu eWallet charge dengan menggunakan Charge ID

    Endpoint: Daftar Refund eWallet Refunds menggunakan Charge ID

    GET https://api.xendit.co/ewallets/charges/{id}/refunds

    Parameter Request

    Contoh: Request - Daftar Refund eWallet menggunakan Charge ID

    curl https://api.xendit.co/ewallets/charges/ewc_532as23lew2321id/refunds -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Type Description
    id
    wajib
    string Pengidentifikasi unik untuk transaksi charge (dikembalikan sebagai pada request charge eWallet)
    Query Parameter Type Description
    limit
    opsional
    number Jumlah hasil maksimum yang dapat dikembalikan
    Default: 10
    Minimum: 1
    Maksimum: 50
    status
    opsional
    string Refund Status yang dikembalikan
    Nilai yang tersedia: SUCCEEDED, FAILED, PENDING

    Parameter Respon

    Contoh: Respon - Daftar Refund eWallet menggunakan - Response

    {
      "data": [
        { 
            "id" : "ewr_532as23lew2321id",
            "charge_id" : "ewc_5easfnn23aadlmnaa42",
            "status" : "SUCCEEDED",
            "currency" : "IDR",
            "channel_code" : "ID_DANA",
            "capture_amount" : 123456,
            "refund_amount" : 100000,
            "reason" : "REQUESTED_BY_CUSTOMER",
            "failure_code" : null,
            "created" : "2020-04-20T16:23:52Z",
            "updated" : "2020-04-20T16:23:52Z"
        },
        { 
            "id" : "ewr_532as23lew2321id",
            "charge_id" : "5easfnn23aadlmnaa42",
            "status" : "SUCCEEDED",
            "currency" : "IDR",
            "channel_code" : "ID_DANA",
            "capture_amount" : 123456,
            "refund_amount" : 23456,
            "reason" : "OTHER",
            "failure_code" : null,
            "created" : "2020-04-20T16:23:52Z",
            "updated" : "2020-04-20T16:23:52Z"
        }
      ],
      "has_more": false
    }
    Parameter Body Tipe Deskripsi
    data array Himpunan data object refund eWallet yang berhubungan dengan charge ID tertentu
    Parameter Refund Objeck
    Kunci Nilai
    id string Pengidentifikasi unik dari transaksi refund
    charge_id string Pengidentifikasi unik untuk transaksi charge
    status string Status request refund
    Nilai tersedia: SUCCEEDED, FAILED, PENDING
    currency string Mata uang yang digunakan pada transaksi dalam format ISO4217
    Nilai yang didukung: IDR, PHP
    capture_amount number Nominal capture yang direquest
    refund_amount number Total nominal refund dari merchant kepada end user
    channel_code string Kode channel yang mengindikasikan provider eWallet
    Channel tersedia: ID_OVO, ID_DANA, ID_SHOPEEPAY, ID_LINKAJA, ID_JENIUSPAY, PH_PAYMAYA,PH_GCASH, PH_GRABPAY, PH_SHOPEEPAY
    reason string Alasan refund
    failure_code string Alasan kegagalan request refund
    created string UTC+0 Timestamp dalam format ISO 8601 untuk refund request
    updated string UTC+0 Timestamp dalam format ISO 8601 untuk refund update
    has_more boolean Mengindikasikan apakah item lebih tersedia untuk ditampilkan. Jika hasil kosong has_more akan false

    Kode Eror

    Contoh: Respon Eror - Daftar Refund eWallet menggunakan Charge ID

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Resource not found. Please check your query again."
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.

    Tokenisasi - Buat Customer Objek

    Versi

    Anda sedang melihat versi terbaru dari eWallet API kami. Dalam versi API ini, integrasikan satu kali untuk mendapatkan akses ke semua eWallet yang tersedia maupun yang akan ada di Xendit! API ini juga akan digunakan untuk mendukung alur pembayaran tokenisasi dan auth/capture dalam waktu dekat.

    Versi Log Perubahan
    Account linking metode pembayaran
    Terbaru
    Penyederhanaan alur tokenisasi dan Account Linking menjadi 1 API. Tersedia untuk OVO, DANA, LINKAJA, dan SHOPEEPAY untuk kanal Indonesia dan PAYMAYA, GRABPAY dan SHOPEEPAY untuk kanal Filipina

    Anda dapat mengakses API baru dengan mudah dengan memanggil POST .../v2/payment_methods
    LAT account linking flow
    versi dengan account linking akun sebelumnya
    Tokenisasi dan alur account linking menggunakan 2 API yg berbeda.

    Ada 2 langkah yang diperlukan untuk melakukan account linking menggunakan alur tokenisasi kami - dimulai dengan pembuatan Customer Objeck dan pembuatan metode pembayaran.

    Langkah 1 - Pembuatan Customer Objek melalui /customers API adalah langkah pertama yang diperlukan sebelum memulai account linking tokenisasi eWallet.

    Silakan lihat persyaratan setiap saluran pembayaran di bawah ini dan bagian Customer untuk membuat customer objek.

    Tokenisasi DANA / SHOPEEPAY (ID & PH) / MAYA (PAYMAYA) / GRABPAY - isian wajib di Customer Objek

    Anda dapat mengisi parameter wajib yang tertera pada API /customers. Tidak ada informasi wajib lainnya yang perlu diberikan untuk tokenisasi DANA, ShopeePay (ID & PH), Maya (PayMaya), GrabPay.

    Tokenisasi OVO - Isian wajib di Customer Objek

    Contoh Customer Object - Tokenisasi OVO

    curl https://api.xendit.co/customers -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
        "reference_id": "demo_1475801962607",
        "given_names": "John",
        "mobile_number": "+6287774441111",
        "email": "customer@website.com"
        }' \
    Request Body Parameter Tipe Deskripsi
    reference_id
    wajib
    string ID yang disediakan merchant untuk pelanggan (maks 255 karakter)
    mobile_number
    wajib
    string Identitas yang digunakan oleh OVO untuk account linking. Nomor ponsel pelanggan menggunakan Standar internasional E.164 yang harus sesuai dengan database OVO.
    Format: +(kode negara)(nomor pelanggan)
    given_names
    wajib
    string Nama depan utama pelanggan (maks 255 karakter)

    Tokenisasi LINKAJA - Isian wajib di Customer Objek

    Contoh Customer Object - Tokenisasi LINKAJA

    curl https://api.xendit.co/customers -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
        "reference_id": "demo_1475801962607",
        "mobile_number": "+6287774441111"
        }' \
    Request Body Parameter Tipe Deskripsi
    reference_id
    wajib
    string ID yang disediakan merchant untuk pelanggan (maks 255 karakter)
    mobile_number
    wajib
    string Identitas yang digunakan oleh LinkAja untuk account linking. Nomor ponsel pelanggan menggunakan Standar internasional E.164 yang harus sesuai dengan database LinkAja.
    Format: +(kode negara)(nomor pelanggan)

    Buat Customer - Eror

    Lihat kesalahan umum lainnya di sini

    Error Code Keterangan
    DUPLICATE_ERROR
    409
    Permintaan dengan reference_id yang sama telah dibuat sebelumnya. Harap masukkan reference_id yang unik
    IDEMPOTENCY_ERROR
    409
    Idempotency-key telah digunakan sebelumnya. Gunakan idempotency-key yang unik dan coba kembali

    Tokenized - Account Linking

    Langkah 2 - Account linking di tokenisasi eWallet ditandai dengan dilakukannya transaksi oleh merchant melalui token (linking) yang sudah diberikan otorisasi oleh eWallet (akun) pengguna akhir. Endpoint ini memulai proses otorisasi, dan sebagai hasilnya, payment method akan diberikan.

    Pengguna akhir akan diarahkan ke halaman host penyedia eWallet untuk mengotorisasi account linking. Setelah account linking diselesaikan, pemberitahuan account linking akan dikirim ke URL callback yang ditentukan di dasbor Xendit di bagian metode pembayaran.

    Tabel berikut menunjukkan aktivasi atau persetujuan yang diperlukan untuk menggunakan berbagai jenis alur pembayaran tokenisasi. Pada dasarnya, semua alur pembayaran tokenisasi membutuhkan persetujuan resmi dari mitra eWallet. Anda membutuhkan persetujuan khusus dari mitra eWallet untuk menggunakan fitur auto debit.

    Indonesia

    Nilai OVO DANA LINKAJA SHOPEEPAY
    Pembayaran dengan pengalihan
    Persetujuan normal diperlukan Persetujuan normal diperlukan Persetujuan normal diperlukan Persetujuan normal diperlukan
    Pembayaran auto debit
    Persetujuan khusus diperlukan Persetujuan khusus diperlukan Persetujuan khusus diperlukan

    Filipina

    Nilai SHOPEEPAY MAYA (PAYMAYA) GRABPAY
    Pembayaran auto debit
    Persetujuan normal diperlukan Persetujuan normal diperlukan Persetujuan normal diperlukan

    Endpoint: Account Linking - Create Payment Method

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

    Account Linking - Metode Pembayaran - Request

    Contoh account linking - Metode Pembayaran - Request

    curl https://api.xendit.co/v2/payment_methods -X POST \
       --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
       --header 'Content-Type: application/json' \
       --data-raw '{
          "type": "EWALLET",
          "reusability": "MULTIPLE_USE",
          "ewallet": {
            "channel_code": "OVO",
            "channel_properties": {
              "success_return_url": "https://your-redirect-website.com/success",
              "failure_return_url": "https://your-redirect-website.com/failure"
            }
          },
          "customer_id": "fc4c060b-3c41-4707-b7b2-df9c3376edde"
    }' \
    {
      "type": "EWALLET",
      "reusability": "MULTIPLE_USE",
      "ewallet": {
        "channel_code": "OVO",
        "channel_properties": {
          "success_return_url": "https://your-redirect-website.com/success",
          "failure_return_url": "https://your-redirect-website.com/failure"
        }
      },
      "customer_id": "fc4c060b-3c41-4707-b7b2-df9c3376edde"
    }
    Request Body Parameter Tipe Deskripsi
    type
    wajib
    string Jenis metode pembayaran - gunakan EWALLET
    reusability
    wajib
    string Menjelaskan apakah metode pembayaran dapat digunakan kembali untuk pembayaran berikutnya tanpa melalui proses penautan yang sama.

    gunakan MULTIPLE_USE sebagai nilai untuk eWallet
    customer_id
    wajib
    string ID customer objek yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk membuat ID customer
    country
    wajib
    string 2-huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Ini juga digunakan sebagai indikator untuk channel yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH untuk Filipina, ID untuk Indonesia
    reference_id
    opsional
    string Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    description
    opsional
    string Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    string Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan dari pembuatan request.
    Objek dapat berisi hingga 50 keys, dengan panjang key name hingga 40 karakter dan nilai hingga 500 karakter
    ewallet
    wajib
    object Untuk type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet


    Key Nilai
    channel_code
    wajib
    string Pengenal untuk mitra saluran pembayaran
    eWallet yang didukung dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object Objek yang berisi informasi yang diperlukan untuk melakukan account linking dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Ket Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit

    Account Linking - Metode Pembayaran - Respons

    Contoh Account Linking - Metode Pembayaran - Respons Sukses

    {
        "id": "pm-123123123-f4d9-421c-9f0b-ab3b2b6bbc39",
        "type": "EWALLET",
        "country": "ID",
        "business_id": "5f27a14a9bf05c73123123123",
        "customer_id": "fc4123123-3c41-4707-b7b2-df9c3376edde",
        "reference_id": "b63798d3-8240-48c3-af12-3b3c62c0981a",
        "reusability": "MULTIPLE_USE",
        "status": "REQUIRES_ACTION",
        "actions": [
            {
                "action": "AUTH",
                "url": "https://link-web.xendit.co/auth/lat-bcf19cc8-f097-44fb-839c-6e4aed807d00/confirm",
                "url_type": "WEB",
                "method": "GET"
            }
        ],
        "description": null,
        "created": "2021-08-18T03:52:56.936277373Z",
        "updated": "2021-08-18T03:52:56.936277373Z",
        "metadata": {
            "sku": "IPHONE20"
        },
        "ewallet": {
            "channel_code": "OVO",
            "channel_properties": {
                "failure_return_url": "https://your-redirect-website.com/failure",
                "success_return_url": "https://your-redirect-website.com/success"
            },
            "account": {
                "name": null,
                "account_details": null,
                "balance": null,
                "point_balance": null
            }
        },
        "direct_bank_transfer": null,
        "direct_debit": null,
        "card": null,
        "over_the_counter": null,
        "qr_code": null,
        "virtual_account": null
    }
    Body Parameter Tipe Deskripsi
    id
    wajib
    string Pengenal unik untuk metode pembayaran. Memiliki awalan pm-. Example: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39
    type
    wajib
    string Jenis metode pembayaran - gunakan EWALLET
    reusability
    wajib
    string Menjelaskan apakah metode pembayaran dapat digunakan kembali untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi.

    gunakan MULTIPLE_USE
    customer_id
    wajib
    string ID dari customer object yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk mendapatkan Customer ID
    business_id
    wajib
    string Pengenal yang diberikan Xendit untuk bisnis yang memiliki transaksi
    reference_id
    opsional
    string Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    status
    wajib
    string Status metode pembayaran. Nilai yang diperbolehkan - PENDING, REQUIRES_ACTION, ACTIVE, INACTIVE, EXPIRED

    REQUIRES_ACTION - Permintaan lulus validasi tetapi memerlukan langkah tambahan untuk mengaktifkan metode pembayaran yang digunakan. Tindakan umum adalah bagi merchant untuk memicu validasi OTP atau mengarahkan pelanggan Anda ke halaman autentikasi.
    ACTIVE - Metode pembayaran dapat digunakan untuk permintaan pembayaran.
    INACTIVE - Merchant yang membatalkan tautan pada metode pembayaran akan memicu status ini. Status ini mencegah transaksi lebih lanjut dari metode pembayaran dan dapat dibatalkan.
    EXPIRED - Otorisasi yang mendasari telah kedaluwarsa, tidak valid, atau telah dibatalkan tautannya. Status ini tidak dapat dibalik
    country
    wajib
    string 2-huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Ini juga digunakan sebagai indikator untuk channel yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH untuk Filipina, ID untuk Indonesia
    actions
    wajib
    object Jika status=REQUIRES_ACTION, berisi objek yang merinci kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
    Key Nilai
    method
    wajib
    string HTTP method for calling the url. Allowed values: GET, POST
    url_type
    wajib
    stringTipe URL untuk aksi yang spesifik.
    API - Url yang disediakan adalah API sisi server, merchant harus memberikan informasi yang diperlukan ke API
    WEB - Url pengalihan yang disediakan dioptimalkan untuk desktop atau tampilan web. Dapat juga digunakan jika tidak ada URL MOBILE yang disediakan. Merchant harus mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    MOBILE - URL pengalihan yang disediakan dioptimalkan untuk perangkat seluler. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir mereka ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    DEEPLINK - URL pengalihan yang menggunakan pengalihan ke platform mitra saluran. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran
    action
    wajib
    string AUTH - Picu tindakan ini untuk mengotorisasi linking atau pembayaran.
    RESEND_AUTH - Picu tindakan ini untuk mengirim ulang kode otorisasi ke pelanggan akhir
    url
    wajib
    string URL yang dihasilkan untuk melakukan tindakan
    ewallet
    wajib
    object Untuk type='EWALLET', ini berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
    Key Nilai
    channel_code
    wajib
    Pengidentifikasi string untuk mitra saluran pembayaran
    eWallet yang didukung dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object Objek yang berisi informasi yang diperlukan untuk melakukan account linking dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit
    account
    wajib
    object Berisi informasi mengenai akun eWallet yang telaht terhubung
    Key Nilai
    account_details
    opsional
    string ID akun eWallet yang disensor. Biasanya berisi nomor ponsel yang terdaftar ke eWallet. Akan berisi null apabila informasi tidak tersedia
    name
    opsional
    string Nama pemegang akun eWallet. Akan berisi null apabila informasi tidak tersedia
    balance
    opsional
    number Jumlah saldo eWallet saat ini. Akan berisi null jika tidak tersedia
    point_balance
    opsional
    string Jumlah poin eWallet yang dapat digunakan saat ini. Akan berisi null apabila informasi tidak tersedia
    created
    wajib
    string Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0
    updated
    wajib
    string Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0
    description
    opsional
    object Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan dari pembuatan request.
    Objek dapat berisi hingga 50 keys, dengan panjang key name hingga 40 karakter dan nilai hingga 500 karakter

    Account Linking - Buat Metode Pembayaran - Eror

    Error Code Keterangan
    API_VALIDATION_ERROR
    400
    Ada masukan yang tidak valid di salah satu bidang permintaan yang diperlukan
    INVALID_API_KEY
    401
    Format API key tidak valid
    CHANNEL_NOT_ACTIVATED
    403
    Permintaan pembayaran gagal karena saluran pembayaran khusus ini belum diaktifkan melalui Xendit. Silakan aktifkan melalui dasbor Xendit atau Customer Success kami
    REQUEST_FORBIDDEN_ERROR
    403
    API key dilarang untuk melakukan permintaan ini
    DUPLICATE_ERROR
    409
    Kode Xendit yang mengindikasikan eror berikut: Ada catatan yang sudah ada dengan rincian yang diberikan
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah tersebut
    CHANNEL_UNAVAILABLE
    503
    Saluran pembayaran yang diminta saat ini mengalami masalah yang tidak terduga. Penyedia eWallet akan diberi tahu untuk mengatasi masalah ini

    Tokenisasi - Callback Status Account Linking

    Merupakan pemberitahuan saat metode pembayaran berhasil diaktifkan. Callback dipicu ketika metode pembayaran tertentu telah berhasil dibuat dan dapat digunakan untuk pembayaran. Pastikan Anda memiliki URL callback yang terdaftar di bagian Metode Pembayaran di pengaturan Dasbor Anda. Setelah Anda menerima webhook aktivasi metode pembayaran, Anda siap untuk melakukan transaksi pembayaran melalui eWallets Charge endpint kami.

    Muatan Callback

    Contoh: Muatan Callback Aktivasi Metode Pembayaran

    {
      "event": "payment_method.activated",
      "business_id": "5f27a14a9bf05c73dd040bc8",
      "created": "2020-08-29T09:12:33.001Z",
      "data": {
        "id": "pm-123123123-f4d9-421c-9f0b-ab3b2b6bbc39",
        "type": "EWALLET",
        "country": "ID",
        "business_id": "5f27a14a9bf05c73123123123",
        "customer_id": "fc4123123-3c41-4707-b7b2-df9c3376edde",
        "reference_id": "b63798d3-8240-48c3-af12-3b3c62c0981a",
        "reusability": "MULTIPLE_USE",
        "status": "ACTIVE",
        "actions": [
            {
                "action": "AUTH",
                "url": "https://link-web.xendit.co/auth/lat-bcf19cc8-f097-44fb-839c-6e4aed807d00/confirm",
                "url_type": "WEB",
                "method": "GET"
            }
        ],
        "description": null,
        "created": "2021-08-18T03:52:56.936277373Z",
        "updated": "2021-08-18T03:52:56.936277373Z",
        "metadata": {
            "sku": "IPHONE20"
        },
        "ewallet": {
            "channel_code": "SHOPEEPAY",
            "channel_properties": {
                "failure_return_url": "https://your-redirect-website.com/failure",
                "success_return_url": "https://your-redirect-website.com/success"
            },
            "account": {
                "name": null,
                "account_details": "+62*****3123",
                "balance": 10000,
                "point_balance": 10000
            }
        },
        "direct_bank_transfer": null,
        "direct_debit": null,
        "card": null,
        "over_the_counter": null,
        "qr_code": null,
        "virtual_account": null
      }
    }
    Body Parameter Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu pemberitahuan ke merchant - payment_method.activated
    business_id
    wajib
    string Identifikasi bisnis merchant yang diberikan oleh Xendit
    created
    wajib
    string Stempel Waktu ISO 8601 pembuatan notifikasi callback. Zona waktu UTC+0.
    data
    opsional
    object Objek metode pembayaran
    Bidang data
    Body Parameter Deskripsi
    id
    wajib
    Pengidentifikasi unik untuk metode pembayaran. Memiliki awalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39
    type
    wajib
    Jenis metode pembayaran - gunakan EWALLET
    reusability
    wajib
    Menjelaskan apakah metode pembayaran dapat digunakan kembali atau tidak untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi.

    Gunakan MULTIPLE_USE untuk eWallet
    customer_id
    wajib
    ID customer objek yang akan dihubungkan dengan token akun. Panggil Tokenized - Create Customer untuk menghasilkan Customer ID
    business_id
    wajib
    Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi
    reference_id
    opsional
    Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    status
    wajib
    Status metode pembayaran. Nilai yang diizinkan - PENDING, REQUIRES_ACTION, ACTIVE, INACTIVE, EXPIRED

    REQUIRES_ACTION - Permintaan memenuhi syarat validasi tetapi memerlukan langkah tambahan untuk mengaktifkan metode pembayaran yang akan digunakan. Tindakan yang biasa dilakukan merchant adalah memicu validasi OTP atau mengarahkan pelanggan Anda ke halaman autentikasi.
    ACTIVE - Metode pembayaran dapat digunakan untuk permintaan pembayaran.
    INACTIVE - Penjual membatalkan tautan pada metode pembayaran sehingga memicu status ini yang mencegah transaksi lebih lanjut dari metode pembayaran. Status dapat dibatalkan.
    EXPIRED - Otorisasi telah kedaluwarsa, tidak valid, atau telah dibatalkan tautannya. Status ini tidak dapat dibatalkan
    country
    wajib
    2-huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Ini juga digunakan sebagai indikator untuk saluran yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH, ID
    actions
    wajib
    Jika status=REQUIRES_ACTION, ada objek yang merinci kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
    Key Nilai
    method
    wajib
    string metode HTTP untuk memanggil URL. Nilai yang diizinkan: GET, POST
    url_type
    wajib
    string Jenis URL untuk tindakan tertentu.
    API - URL yang disediakan adalah API sisi server, merchant harus memberikan informasi yang diperlukan ke API
    WEB - URL pengalihan dioptimalkan untuk desktop atau tampilan web. Dapat juga digunakan jika tidak ada URL MOBILE yang disediakan. Merchant harus mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    MOBILE - URL pengalihan yang dioptimalkan untuk perangkat seluler. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    DEEPLINK - URL pengalihan ke platform mitra saluran. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran
    action
    wajib
    string AUTH - Picu tindakan ini untuk mengotorisasi linking atau pembayaran.
    RESEND_AUTH - Picu tindakan ini untuk mengirim ulang kode otorisasi ke pelanggan akhir
    url
    wajib
    string URL yang dihasilkan untuk melakukan tindakan
    ewallet
    wajib
    Untuk type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
    Key Nilai
    channel_code
    wajib
    Pengidentifikasi string untuk mitra saluran pembayaran
    eWallet yang didukung dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object Objek yang berisi informasi yang diperlukan untuk melakukan linking account dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit
    account
    wajib
    object Berisi informasi mengenai aku eWallet yang dihubungkan
    Key Nilai
    account_details
    opsional
    string ID akun eWallet yang tertutup. Biasanya berisi nomor ponsel yang terdaftar ke eWallet. Akan berisi null jika tidak tersedia
    name
    opsional
    string Nama pemegang akun eWallet. Akan berisi null jika tidak tersedia
    balance
    opsional
    number Jumlah saldo eWallet saat ini. Akan berisi null jika tidak tersedia
    point_balance
    opsional
    number Jumlah poin eWallet yang dapat digunakan saat ini. Akan berisi null jika tidak tersedia
    created
    wajib
    Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0
    updated
    wajib
    Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0
    description
    opsional
    Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan dari permintaan pembuatan objek.
    Objek dapat berisi hingga 50 key, dengan key name hingga 40 karakter dan nilai hingga 500 karakter

    Tokenisasi - Dapatkan Saldo Akun / Rincian Metode Pembayaran

    Endpoint: Dapatkan saldo akun / rincian metode pembayaran

    GET https://api.xendit.co/v2/payment_methods/{id}

    Dapatkan Saldo Akun / Rincian Metode Pembayaran - Request

    Contoh Dapatkan Saldo Akun dengan Permintaan Token Linked Account

    curl https://api.xendit.co/v2/payment_methods/pm-EM8sad8as56dasdabk -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Path Parameter Tipe Deskripsi
    id
    wajib
    string id metode pembayaran diterima dari langkah account linking. Memiliki awalan pm-.

    Dapatkan Saldo Akun / Rincian Metode Pembayaran - Respons

    Endpoint ini meresponse payment method object:

    Contoh cara mendapatkan Respons Saldo Akun / Rincian Metode Pembayaran

    {
        "id": "pm-123123123-f4d9-421c-9f0b-ab3b2b6bbc39",
        "type": "EWALLET",
        "country": "ID",
        "business_id": "5f27a14a9bf05c73123123123",
        "customer_id": "fc4123123-3c41-4707-b7b2-df9c3376edde",
        "reference_id": "b63798d3-8240-48c3-af12-3b3c62c0981a",
        "reusability": "MULTIPLE_USE",
        "status": "PENDING",
        "actions": [
            {
                "action": "AUTH",
                "url": "https://link-web.xendit.co/auth/lat-bcf19cc8-f097-44fb-839c-6e4aed807d00/confirm",
                "url_type": "WEB",
                "method": "GET"
            }
        ],
        "description": null,
        "created": "2021-08-18T03:52:56.936277373Z",
        "updated": "2021-08-18T03:52:56.936277373Z",
        "metadata": {
            "sku": "IPHONE20"
        },
        "ewallet": {
            "channel_code": "SHOPEEPAY",
            "channel_properties": {
                "failure_return_url": "https://your-redirect-website.com/failure",
                "success_return_url": "https://your-redirect-website.com/success"
            },
            "account": {
                "name": null,
                "account_details": "+62*****3123",
                "balance": 10000,
                "point_balance": 10000
            }
        },
        "direct_bank_transfer": null,
        "direct_debit": null,
        "card": null,
        "over_the_counter": null,
        "qr_code": null,
        "virtual_account": null
    }
    Body Parameter Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk metode pembayaran. Memiliki awalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39
    type
    wajib
    string Jenis metode pembayaran - untuk menggunakan EWALLET
    reusability
    wajib
    string Menjelaskan apakah metode pembayaran dapat digunakan kembali atau tidak untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi.

    gunakan MULTIPLE_USE
    customer_id
    wajib
    string ID customer object yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk menghasilkan Customer ID
    business_id
    wajib
    string Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi
    reference_id
    opsional
    string Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    status
    wajib
    string Status metode pembayaran. Nilai yang diizinkan - PENDING, REQUIRES_ACTION, ACTIVE, INACTIVE, EXPIRED

    REQUIRES_ACTION - Permintaan berhasil memenuhi validasi tetapi memerlukan langkah tambahan untuk mengaktifkan metode pembayaran yang akan digunakan. Merchant perlu memicu validasi OTP atau mengarahkan pelanggan ke halaman otentikasi.
    ACTIVE - Metode pembayaran dapat digunakan untuk permintaan pembayaran.
    INACTIVE - Merchant yang membatalkan tautan pada metode pembayaran akan memicu status ini guna mencegah transaksi lebih lanjut. Status dapat dibatalkan.
    EXPIRED - Otorisasi yang mendasari telah kedaluwarsa, tidak valid, atau telah dibatalkan tautannya. Status tidak dapat dibatalkan.
    country
    wajib
    string 2-huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Juga digunakan sebagai indikator untuk saluran yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH, ID
    actions
    wajib
    object If status=REQUIRES_ACTION, berisi objek yang merinci langkah selanjutnya untuk mengaktifkan metode pembayaran.
    Key Nilai
    method
    wajib
    string metode HTTP untuk memanggil url. Nilai yang diizinkan: GET, POST
    url_type
    wajib
    string Jenis url untuk tindakan tertentu.
    API - URL yang disediakan adalah server API, merchant harus memberikan informasi yang diperlukan ke API
    WEB - Redirect URL dioptimalkan untuk desktop atau tampilan web. Dapat digunakan jika tidak ada URL MOBILE yang disediakan. Merchant harus mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    MOBILE - URL pengalihan yang dioptimalkan untuk perangkat seluler. Penjual perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    DEEPLINK - URL pengalihan ke platform mitra saluran pembayaran. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    action
    wajib
    string AUTH - Picu tindakan ini untuk mengotorisasi linking atau pembayaran.
    RESEND_AUTH - Picu tindakan ini untuk mengirim ulang kode otorisasi ke pelanggan akhir.
    url
    wajib
    string URL yang dihasilkan untuk melakukan tindakan
    ewallet
    wajib
    object Untuk type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet.
    Key Nilai
    channel_code
    wajib
    Pengidentifikasi string untuk mitra saluran pembayaran
    eWallet yang tersedia dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object berisi informasi yang diperlukan untuk melakukan account linking dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URL string tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit.
    account
    wajib
    object Berisi informasi mengenai aku eWallet yang dihubungkan.
    Key Nilai
    account_details
    opsional
    string ID akun eWallet yang tertutup. Biasanya berisi nomor ponsel yang terdaftar ke eWallet. Akan berisi null jika tidak tersedia.
    name
    opsional
    string Nama pemegang akun eWallet. Akan berisi null jika tidak tersedia.
    balance
    opsional
    number Jumlah saldo eWallet saat ini. Akan berisi null jika tidak tersedia.
    point_balance
    opsional
    number Jumlah poin eWallet yang dapat digunakan saat ini. Akan berisi null jika tidak tersedia.
    created
    wajib
    string Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0
    updated
    wajib
    string Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0
    description
    opsional
    object Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    object objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan dari pembuatan request.
    object dapat berisi hingga 50 key, dengan key name hingga 40 karakter dan nilai hingga 500 karakter.

    Dapatkan Saldo Akun / Rincian Metode Pembayaran - Eror

    Lihat kesalahan umum lainnya di sini

    Error Code Keterangan
    INVALID_API_KEY
    401
    Format API key tidak valid
    REQUEST_FORBIDDEN_ERROR
    403
    API key dilarang untuk melakukan permintaan ini
    DATA_NOT_FOUND_ERROR
    404
    payment_method_id yang diberikan tidak didukung atau belum diaktifkan untuk akun ini
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah tersebut

    Tokenisasi - Membatalkan Linking

    Membatalkan tokenisasi account linking yang berhasil.

    Endpoint: Batalkan linking metode pembayaran

    POST https://api.xendit.co/v2/payment_methods/{id}/expire

    Batalkan Linking Metode Pembayaran - Request

    Contoh Request Pemutusan Linking Metode Pembayaran

    curl https://api.xendit.co/v2/payment_methods/pm-EM8sad8as56dasdabk/expire -X POST \
       -u xnd_development_OSuxk743ma423balls+2fT/7GlCAN3jg==:
    Path Parameter Tipe Deskripsi
    id
    wajib
    string Payment method id yang diterima dari langkah account linking. Berawalan pm-

    Batalkan Linking Metode Pembayaran - Respons

    Contoh Response Pemutusan Linking Metode Pembayaran

    {
        "id": "pm-123123123-f4d9-421c-9f0b-ab3b2b6bbc39",
        "type": "EWALLET",
        "country": "ID",
        "business_id": "5f27a14a9bf05c73123123123",
        "customer_id": "fc4123123-3c41-4707-b7b2-df9c3376edde",
        "reference_id": "b63798d3-8240-48c3-af12-3b3c62c0981a",
        "reusability": "MULTIPLE_USE",
        "status": "PENDING",
        "actions": [
            {
                "action": "AUTH",
                "url": "https://link-web.xendit.co/auth/lat-bcf19cc8-f097-44fb-839c-6e4aed807d00/confirm",
                "url_type": "WEB",
                "method": "GET"
            }
        ],
        "description": null,
        "created": "2021-08-18T03:52:56.936277373Z",
        "updated": "2021-08-18T03:52:56.936277373Z",
        "metadata": {
            "sku": "IPHONE20"
        },
        "ewallet": {
            "channel_code": "OVO",
            "channel_properties": {
                "failure_return_url": "https://your-redirect-website.com/failure",
                "success_return_url": "https://your-redirect-website.com/success"
            },
            "account": {
                "name": null,
                "account_details": null,
                "balance": null,
                "point_balance": null
            }
        },
        "direct_bank_transfer": null,
        "direct_debit": null,
        "card": null,
        "over_the_counter": null,
        "qr_code": null,
        "virtual_account": null
    }
    Body Parameter Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk metode pembayaran. Berawalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39
    type
    wajib
    string Jenis metode pembayaran - gunakan EWALLET
    reusability
    wajib
    string Menjelaskan apakah metode pembayaran dapat digunakan kembali untuk pembayaran berikutnya tanpa melalui proses linking yang sama.

    gunakan MULTIPLE_USE untuk eWallet
    customer_id
    wajib
    string ID customer objek yang akan di-linking dengan token akun. Panggil Tokenized - Create customer untuk menghasilkan customer ID
    business_id
    wajib
    string Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi
    reference_id
    opsional
    string Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    status
    wajib
    string Status metode pembayaran. Nilai yang diizinkan - PENDING, REQUIRES_ACTION, ACTIVE, INACTIVE, EXPIRED

    REQUIRES_ACTION - Permintaan lulus validasi tetapi memerlukan langkah tambahan untuk mengaktifkan metode pembayaran yang akan digunakan. Tindakan yang biasa dilakukan merchant adalah memicu validasi OTP atau mengarahkan pelanggan ke halaman otentikasi.
    ACTIVE - Metode pembayaran dapat digunakan untuk permintaan pembayaran.
    INACTIVE - Pedagang yang membatalkan linking pada metode pembayaran akan memicu status ini. Status ini mencegah transaksi lebih lanjut dari metode pembayaran dan dapat dibatalkan.
    EXPIRED - Otorisasi yang mendasari telah kedaluwarsa, tidak valid, atau telah dibatalkan linkingnya. Status ini tidak dapat dibatalkan
    country
    wajib
    string 2 huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Juga digunakan sebagai indikator untuk saluran yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH, ID
    actions
    wajib
    object Jika status=REQUIRES_ACTION, ada rincian kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
    Key Nilai
    method
    wajib
    string metode HTTP untuk memanggil url. Nilai yang diizinkan: GET, POST
    url_type
    wajib
    string Jenis url untuk tindakan tertentu.
    API - URL yang disediakan adalah API sisi server, pedagang harus memberikan informasi wajib ke API
    WEB - Redirect url yang dioptimalkan untuk desktop atau tampilan web. Juga dapat digunakan jika tidak ada url MOBILE yang disediakan. Merchant harus mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    MOBILE - URL pengalihan yang disediakan untuk perangkat seluler. Penjual perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan autentikasi pembayaran.
    DEEPLINK - URL pengalihan yang disediakan menggunakan tautan ke platform mitra saluran. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir ke halaman ini untuk menyelesaikan otentikasi pembayaran
    actions
    wajib
    string AUTH - Picu tindakan ini untuk mengotorisasi linking atau pembayaran.
    RESEND_AUTH - Picu tindakan ini untuk mengirim ulang kode otorisasi ke pelanggan akhir
    url
    wajib
    string URL yang dihasilkan untuk dipukul untuk melakukan tindakan
    ewallet
    wajib
    objek Untuk Type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
    Key Nilai
    channel_code
    wajib
    Pengidentifikasi string untuk mitra saluran pembayaran
    eWallet yang didukung dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object Objek yang berisi informasi yang dibutuhkan untuk melakukan account linking dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit
    account
    wajib
    object Berisi informasi mengenai aku eWallet yang dihubungkan
    Key Nilai
    account_details
    opsional
    string ID akun eWallet yang tertutup. Biasanya berisi nomor ponsel yang terdaftar ke eWallet. Akan berisi null jika tidak tersedia
    name
    opsional
    string Nama pemegang akun eWallet. Akan berisi null jika tidak tersedia
    balance
    opsional
    number Jumlah saldo eWallet saat ini. Akan berisi null jika tidak tersedia
    point_balance
    opsional
    number Jumlah poin eWallet yang dapat digunakan saat ini. Akan berisi null jika tidak tersedia
    created
    wajib
    string Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0
    created
    wajib
    string Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0
    description
    opsional
    object Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    objek Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan pengisian daya.
    Objek dapat berisi hingga 50 key, dengan key name hingga 40 karakter dan nilai hingga 500 karakter

    Membatalkan Linking Metode Pembayaran - Eror

    Lihat kesalahan umum lainnya di sini

    Error Code Keterangan
    INVALID_PAYMENT_METHOD
    400
    Aksi tidak dapat dilakukan dikarenakan status payment method
    INVALID_API_KEY
    401
    Format API key tidak valid
    REQUEST_FORBIDDEN_ERROR
    403
    API key dilarang untuk melakukan permintaan ini
    DATA_NOT_FOUND_ERROR
    404
    payment_method_id tidak ditemukan atau tidak dapat diakses untuk akun ini
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah tersebut
    CHANNEL_UNAVAILABLE
    503
    Saluran pembayaran yang diminta saat ini mengalami masalah yang tidak terduga. Penyedia eWallet akan diberi tahu untuk mengatasi masalah ini

    Tokenisasi - Callback Token Kedaluwarsa

    Callback Metode Pembayaran Kedaluwarsa

    Callback akan dikirim ketika metode pembayaran tertentu telah kedaluwarsa atau telah dibatalkan. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk melakukan linking kembali. Pastikan Anda memiliki URL callback yang terdaftar di Metode Pembayaran di pengaturan Dasbor Anda.

    Nilai OVO DANA LINKAJA SHOPEEPAY MAYA (PAYMAYA) GRABPAY
    Validitas Token
    Tidak Pernah Kedaluwarsa (Xendit secara otomatis memperbaharui token saat kadaluwarsa) 10 Tahun Tidak Pernah Kedaluwarsa 5 Tahun Tidak Pernah Kedaluwarsa 1 Tahun

    Contoh: Callback Metode Pembayaran Kedaluwarsa

    {
      "event": "payment_method.expiry.expired",
      "business_id": "5f27a14a9bf05c73dd040bc8",
      "created": "2020-08-29T09:12:33.001Z",
      "data": {
        "id": "pm-123123123-f4d9-421c-9f0b-ab3b2b6bbc39",
        "type": "EWALLET",
        "country": "ID",
        "business_id": "5f27a14a9bf05c73123123123",
        "customer_id": "fc4123123-3c41-4707-b7b2-df9c3376edde",
        "reference_id": "b63798d3-8240-48c3-af12-3b3c62c0981a",
        "reusability": "MULTIPLE_USE",
        "status": "EXPIRED",
        "actions": [
            {
                "action": "AUTH",
                "url": "https://link-web.xendit.co/auth/lat-bcf19cc8-f097-44fb-839c-6e4aed807d00/confirm",
                "url_type": "WEB",
                "method": "GET"
            }
        ],
        "description": null,
        "created": "2021-08-18T03:52:56.936277373Z",
        "updated": "2021-08-18T03:52:56.936277373Z",
        "metadata": {
            "sku": "IPHONE20"
        },
        "ewallet": {
            "channel_code": "SHOPEEPAY",
            "channel_properties": {
                "failure_return_url": "https://your-redirect-website.com/failure",
                "success_return_url": "https://your-redirect-website.com/success"
            },
            "account": {
                "name": null,
                "account_details": "+62*****3123",
                "balance": 10000,
                "point_balance": 10000
            }
        },
        "direct_bank_transfer": null,
        "direct_debit": null,
        "card": null,
        "over_the_counter": null,
        "qr_code": null,
        "virtual_account": null
      }
    }
    Body Parameter Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu pemberitahuan ke merchant - payment_method.expiry.expired
    business_id
    wajib
    string Business ID merchant yang diberikan oleh Xendit
    created
    wajib
    string Stempel Waktu ISO 8601 untuk pembuatan callback. Zona waktu UTC+0
    data
    opsional
    object Objek metode pembayaran
    Bidang data
    Body Parameter Deskripsi
    id
    wajib
    Pengidentifikasi unik metode pembayaran. Memiliki awalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39
    type
    wajib
    Jenis metode pembayaran - gunakan EWALLET
    reusability
    wajib
    Menjelaskan apakah metode pembayaran dapat digunakan kembali atau tidak untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi.

    gunakan MULTIPLE_USE untuk eWallet
    customer_id
    wajib
    ID objek pelanggan yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk menghasilkan customer ID
    business_id
    wajib
    Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi
    reference_id
    opsional
    Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik
    status
    wajib
    Status metode pembayaran. Nilai yang diizinkan - PENDING, REQUIRES_ACTION, ACTIVE, INACTIVE, EXPIRED

    REQUIRES_ACTION - Permintaan yang memenuhi syarat validasi tetapi memerlukan langkah tambahan untuk mengaktifkan metode pembayaran yang akan digunakan. Tindakan yang biasa dilakukan merchant adalah memicu validasi OTP atau mengarahkan pelanggan Anda ke halaman autentikasi.
    ACTIVE - Metode pembayaran dapat digunakan untuk permintaan pembayaran.
    INACTIVE - Penjual yang membatalkan tautan pada metode pembayaran akan memicu status ini. Status ini mencegah transaksi lebih lanjut dari metode pembayaran dan dapat dibatalkan.
    EXPIRED - Otorisasi yang mendasari telah kedaluwarsa, tidak valid, atau telah dibatalkan tautannya. Status ini tidak dapat dibatalkan
    country
    wajib
    2-huruf ISO 3166-2 kode negara yang menunjukkan negara transaksi. Juga digunakan sebagai indikator untuk saluran yang hadir di beberapa pasar (misalnya ShopeePay). Nilai yang tersedia - PH, ID
    actions
    wajib
    Jika status=REQUIRES_ACTION, ada objek yang merinci kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
    Key Nilai
    method
    wajib
    string metode HTTP untuk memanggil url. Nilai yang diizinkan: GET, POST
    url_type
    wajib
    string Jenis url untuk tindakan tertentu.
    API - URL yang disediakan adalah API sisi server, merchant harus memberikan informasi yang diperlukan ke API
    WEB - Yang disediakan redirect url dioptimalkan untuk desktop atau tampilan web. Ini juga dapat digunakan jika tidak ada url MOBILE yang disediakan. Merchant harus mengarahkan pengguna akhir mereka ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    MOBILE - URL pengalihan yang disediakan dioptimalkan untuk perangkat seluler. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir mereka ke halaman ini untuk menyelesaikan autentikasi pembayaran.
    DEEPLINK - URL pengalihan ke platform mitra saluran. Merchant perlu mendeteksi perangkat seluler dan mengarahkan pengguna akhir mereka ke halaman ini untuk menyelesaikan otentikasi pembayaran.
    action
    wajib
    string AUTH - Picu tindakan ini untuk mengotorisasi penautan atau pembayaran.
    RESEND_AUTH - Picu tindakan ini untuk mengirim ulang kode otorisasi ke pelanggan akhir.
    url
    wajib
    string URL yang dihasilkan untuk dipukul untuk melakukan tindakan
    ewallet
    wajib
    Untuk type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
    Key Nilai
    channel_code
    wajib
    Pengidentifikasi string untuk mitra saluran pembayaran
    eWallet yang didukung dan kode salurannya:
    • DANA
    • OVO
    • LINKAJA
    • SHOPEEPAY
    • GRABPAY
    • PAYMAYA
    channel_properties
    wajib
    object Objek yang berisi informasi yang diperlukan untuk melakukan account linking dengan akun eWallet untuk pembayaran
    Isian wajib OVO, DANA, LINKAJA, SHOPEEPAY (ID & PH), GRABPAY
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    Isian wajib MAYA (PAYMAYA)
    Key Nilai
    success_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi berhasil
    failure_return_url
    wajib
    URLstring tempat pelanggan akhir dialihkan jika otorisasi gagal
    cancel_return_url
    wajib
    string URL tempat pelanggan akhir dialihkan jika otorisasi telah dibatalkan. Pelanggan akhir dapat mencoba kembali pembayaran pada tautan yang sama dalam waktu 15 menit
    account
    wajib
    object Berisi informasi mengenai aku eWallet yang dihubungkan
    Key Nilai
    account_details
    opsional
    string ID akun eWallet yang tertutup. Biasanya berisi nomor ponsel yang terdaftar ke eWallet. Akan berisi null jika tidak tersedia
    name
    opsional
    string Nama pemegang akun eWallet. Akan berisi null jika tidak tersedia
    balance
    opsional
    number Jumlah saldo eWallet saat ini. Akan berisi null jika tidak tersedia
    point_balance
    opsional
    number Jumlah poin eWallet yang dapat digunakan saat ini. Akan berisi null jika tidak tersedia
    created
    wajib
    Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0
    updated
    wajib
    Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0
    description
    opsional
    Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method
    metadata
    opsional
    Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan dari pembuatan objek.
    Objek dapat berisi hingga 50 key, dengan key name hingga 40 karakter dan nilai hingga 500 karakter

    PayLater

    Melalui PayLater, pelanggan Anda dapat membeli barang dan membayarnya melalui cicilan. Pelanggan yang memiliki akun kredit aktif dari salah satu mitra kami dapat membeli barang dari toko Anda melalui pinjaman dengan angsuran fleksibel.

    Dapatkan akses ke seluruh kanal PayLater yang tersedia sekarang dan yang akan datang dengan integrasi sederhana menggunakan Paylater API.

    Untuk mendapatkan detil lengkap setiap API beserta panduan integrasi yang komprehensif, silakan merujuk kepada dokumentasi kami.

    Inisiasi PayLater Plans

    Berikan informasi kepada customer Anda mengenai PayLater plan atau angsuran yang tersedia.

    Endpoint: Inisiasi PayLater Plans

    POST https://api.xendit.co/paylater/plans

    Versi

    Anda sedang melihat versi terbaru API PayLater kami. Pada versi ini, dengan sekali integrasi Anda akan mendapatkan akses ke seluruh penyedia PayLater yang tersedia sekarang beserta seluruh penyedia Paylater yang akan tersedia masa mendatang! Klik di sini untuk melihat versi-versi sebelumnya.

    Versi Changelog
    2021-06-30
    Terbaru
    API baru yang sederhana dan konsisten yang mendukung penyedia PayLater utama di Indonesia dan Filipina

    API Versioning tidak dibutuhkan. Anda dapat mengakses API baru dengan memanggil POST /paylater/plans dan POST /paylater/charges
    2019-02-04
    akan berhenti beroperasi pada 1 Februari 2023
    Cardless credit API yang mendukung Kredivo /cardless-credit

    Parameter Rekues

    Contoh: Inisiasi PayLater Plans - Request

    curl https://api.xendit.co/paylater/plans -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "49d056bd-21e5-4997-85f2-2127544c2196",
        "channel_code": "PH_BILLEASE",
        "currency": "IDR",
        "amount": 30000000,
        "order_items": [{
            "type": "PHYSICAL_PRODUCT",
            "reference_id": "SKU_123-456-789",
            "name": "Dyson Vacuum",
            "net_unit_amount": 10000000,
            "quantity": 3,
            "url": "https://www.zngmyhome.com/dyson_vacuum",
            "category": "Electronics",
            "subcategory": "Appliances"
        }]
    }'
    <?php
      $url = "https://api.xendit.co/paylater/plans";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $data = [
        "customer_id" => "49d056bd-21e5-4997-85f2-2127544c2196",
        "channel_code" => "PH_BILLEASE",
        "currency" => "IDR",
        "amount" => 30000000,
        "order_items" => [
            "type" => "PHYSICAL_PRODUCT",
            "reference_id" => "SKU_123-456-789",
            "name": "Dyson Vacuum",
            "net_unit_amount" => 10000000,
            "quantity" => 3,
            "url" => "https://www.zngmyhome.com/dyson_vacuum",
            "category" => "Electronics",
            "subcategory" => "Appliances"
        ]
        ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { PayLater } = x;
    const payLaterSpecificOptions = {};
    const plp = new PayLater(payLaterSpecificOptions);
    
    const resp = await plp.initiatePayLaterPlans({
      customer_id: '9d056bd-21e5-4997-85f2-2127544c2196',
      channel_code: 'PH_BILLEASE',
      currency: 'IDR',
      amount: 30000000,
      order_items: {
        type: 'PHYSICAL_PRODUCT',
        reference_id: 'SKU_123-456-789',
        name: 'Dyson Vacuum',
        net_unit_amount: 10000000,
        quantity: 3,
        url: 'https://www.zngmyhome.com/dyson_vacuum',
        category: 'Electronics',
        subcategory: 'Appliances'
      }
    });
    console.log(resp);
    from xendit import PayLater
    
    paylater_plans = PayLater.initiate_paylater_plans(
        customer_id="9d056bd-21e5-4997-85f2-2127544c2196",
        channel_code="PH_BILLEASE",
        currency="IDR",
        amount=30000000,
        order_items={
            type="PHYSICAL_PRODUCT",
            reference_id="SKU_123-456-789",
            name="Dyson Vacuum",
            net_unit_amount=10000000,
            quantity=3,
            url="https://www.zngmyhome.com/dyson_vacuum",
            category="Electronics",
            subcategory="Appliances"
        }
    )
    Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    customer_id
    wajib
    string Pengidentifikasi unik untuk customer dari Create Customer API POST /customers

    Parameter yang wajib diatur untuk objek customer
    Key Value
    given_names
    wajib
    string Nama depan atau nama utama milik customer
    surname
    wajib
    string Nama belakang atau nama keluarga customer
    email
    wajib
    string Alamat e-mail customer
    mobile_number
    wajib
    string Nomor telepon genggam customer dalam format E.164
    street_line1
    wajib
    string Alamat customer
    city
    wajib
    string Kabupaten/kota customer
    postal_code
    wajib
    string Kode ZIP atau kode pos customer
    country_code
    wajib
    string Kode negara customer
    channel_code
    wajib
    string Kode channel code untuk penyedia PayLater

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_UANGME, ID_INDODANA, ID_ATOME, PH_ATOME, PH_BILLEASE, PH_CASHALO
    currency
    wajib
    string Kode mata uang ISO 4217 transaksi PayLater

    Mata uang yang didukung: IDR, PHP
    amount
    wajib
    number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items

    Batas transaksi per channel
    Kode Channel Min Maks
    ID_KREDIVO (IDR) 1,000 30,000,000
    ID_AKULAKU (IDR) 1,000 25,000,000
    ID_UANGME (IDR) 20,000 20,000,000
    ID_INDODANA (IDR) 10,000 25,000,000
    ID_ATOME (IDR) 50,000 6,000,000
    PH_BILLEASE (PHP) 50 150,000
    PH_CASHALO (PHP) 1,500 8,000
    PH_ATOME (PHP) 100 70,000
    order_items
    wajib
    array Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater

    Parameter objek
    Key Value
    type
    wajib
    string Tipe item

    DIGITAL_PRODUCT, PHYSICAL_PRODUCT DIGITAL_SERVICE, PHYSICAL_SERVICE,FEE,DISCOUNT (Atome tidak menerima DISCOUNT)
    reference_id
    wajib
    string Pengidentifikasi merchant untuk item tertentu (ie. SKU, kode promosi, dll.)

    Format Special dan alphanumeric
    Max length 255 karakter
    name
    wajib
    string Nama item

    Format Special dan alphanumeric
    Max length 255 karakter
    net_unit_amount
    wajib
    number Jumlah net untuk di-charge per unit, gunakan nominal negatif untuk DISCOUNT (e.g. -1000000)
    quantity
    wajib
    number Jumlah unit item ini pada basket

    Min 1
    url
    wajib
    string URL item

    Wajib HTTPS atau HTTP
    category
    wajib
    string Kategori merchant untuk item

    Format Special dan alphanumeric
    Max length 255 karakter
    subcategory
    opsional
    string Subcategory merchant untuk item

    Format Special dan alphanumeric
    Max length 255 karakter
    description
    opsional
    string Deskripsi item

    Format Special dan alphanumeric
    Max length 255 karakter
    metadata
    opsional
    object Objek tambahan yang dapat digunakan untuk atribut tambahan pada item

    Parameter Respon

    Contoh: Inisiasi PayLater Plans - Respon Sukses

    {
        "id" : "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        "customer_id" : "49d056bd-21e5-4997-85f2-2127544c2196",
        "channel_code" : "PH_BILLEASE",
        "currency" : "IDR",
        "amount" : 218456,
        "order_items": [{
            "type": "PHYSICAL_PRODUCT",
            "reference_id": "SKU_123-456-789",
            "name": "Dyson Vacuum",
            "net_unit_amount": 123456,
            "quantity": 1,
            "url": "https://www.zngmyhome.com/dyson_vacuum",
            "category": "Electronics",
            "subcategory": "Appliances",
            "description": "A very powerful vacuum",
            "metadata": null
        },
        {
            "type" : "PHYSICAL_SERVICE",
            "reference_id" : "SKU_123-456-790",
            "name" : "Home Cleaning Service",
            "net_unit_amount" : 100000,
            "quantity" : 1,
            "url" : "https://www.zngmyhome.com/home_cleaning",
            "category" : "Services",
            "subcategory" : null,
            "description" : "1 hour deep cleaning up to 2 rooms",
            "metadata" : null
        }],
        "options": [{
            "downpayment_amount" : 400,
            "installment_amount" : 600,
            "interest_rate" : 0,
            "total_amount" : 1000,
            "interval" : "MONTH",
            "interval_count" : 1,
            "total_recurrence" : 1,
            "description" : "Buy Now, Pay Later"
        },
        {
            "downpayment_amount" : 400,
            "installment_amount" : 100,
            "interest_rate" : 0.025,
            "total_amount" : 1015,
            "interval" : "MONTH",
            "interval_count" : 1,
            "total_recurrence" : 6,
            "description" : "6 month installment plan"
        }],
        "created": "2020-11-11T16:23:52Z"
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk objek PayLater Plan

    Selalu akan diawali dengan plp_, diikuti dengan UUIDv4
    customer_id string Pengidentifikasi unik untuk customer
    channel_code string Kode channel untuk penyedia PayLater

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_UANGME, ID_INDODANA, ID_ATOME, PH_ATOME, PH_BILLEASE, PH_CASHALO
    currency string Kode mata uang ISO 4217 untuk transaksi PayLater

    Mata uang yang didukung: IDR, PHP
    amount number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items
    order_items array Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater
    options array Payment plan tersedia yang dapat dilihat oleh user untuk membeli produk/jasa Anda. Langsung disediakan oleh penyedia PayLater.
    Notes:PH_CASHALO tidak menyediakan plan, Xendit akan memberikan array kosong.
    Detil opsi PayLater
    Key Value
    downpayment_amount number Jumlah nominal uang muka.
    installment_amount number Jumlah nominal yang harus dibayar pada setiap periode tagihan cicilan.
    interest_rate number Suku bunga yang akan ditagih

    Contoh: 0.2 untuk dua dua puluh persen
    total_amount number Jumlah total cicilan yang akan dibayar oleh customer Anda. Ini merupakan jumlah dari uang muka, uang cicilan, dan biaya lain oleh penyedia PayLater
    interval string Frekuensi penagihan invoice pembayaran berulang

    DAY, WEEK, MONTH
    interval_count number Jumlah interval (yang ditentukan pada properti interval) diantara cicilan.

    Contoh: interval=MONTH dan interval_count=3 customer Anda akan ditagihkan setiap 3 bulan sekali
    total_recurrence number Total berapa kali Anda akan menagih customer Anda dengan interval yang sudah ditentukan
    description string Nama atau deskripsi opsi cicilan sebagaimana yang diberikan oleh penyedia PayLater
    created string Timestamp ISO 8601 untuk pembuatan objek plan
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0

    Kode Error

    Contoh: Inisiasi PayLater Charge Request API - Respon Error

    {
        "error_code": "INVALID_CUSTOMER_ID",
        "message": "Missing or invalid parameter(s) in customer_id: given_names, postcode"
    }
    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    API_VALIDATION_ERROR
    400
    Jumlah Tidak Sesuai dengan Order Amount Does Not Tally with Order Items
    request.body.amount harus sama dengan jumlah net_unit_amount * jumlah request.body.order_items
    API_VALIDATION_ERROR
    400
    Invalid URL
    url URL harus valid
    INVALID_CUSTOMER_ID
    400
    Parameter yang hilang atau tidak valid pada customer_id
    UNSUPPORTED_CURRENCY
    400
    Mata uang pembayaran pada request tidak didukung oleh PayLater partner. Silakan merujuk pada API reference atau docs kami untuk melihat mata uang yang tersedia
    INVALID_API_KEY
    401
    Kunci API tidak memiliki izin untuk layanan API ini
    INVALID_MERCHANT_CREDENTIALS
    401
    Terdapat error dengan kredensial merchant yang disediakan oleh PayLater partner. Silakan hubungi customer support Xendit untuk pemyelesaian
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request
    CHANNEL_NOT_ACTIVATED
    403
    API key tidak diperbolehkan untuk melakukan request
    DATA_NOT_FOUND
    404
    Customer ID tidak valid. Silakan periksa ulang ID atau membuat ID menggunakan Customer API.
    SERVER_ERROR
    500
    Error tidak terduga telah terjadi. Team kami telah diberitahukan untuk melakukan penyelesaian isu
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang di-request mengalami kendala yang tidak terduga. PayLater partner akan diberitahukan untuk penyelesaian isu

    Membuat Charge Paylater

    Membuat Transaksi Paylater / Membuat URL Checkout

    Versi

    Anda sedang melihat versi terbaru dari API PayLater / Cardless Credit kami. Klik di sini untuk melihat versi-versi sebelumnya.

    Endpoint: Create PayLater Charges

    POST https://api.xendit.co/paylater/charges

    Parameter Request

    Contoh: Membuat Payment Request

    curl https://api.xendit.co/paylater/charges -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "plan_id": "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        "reference_id": "order_id_123",
        "checkout_method": "ONE_TIME_PAYMENT",
        "success_redirect_url": "https://merchant.com/order/confirm",
        "failure_redirect_url": "https://merchant.com/order/fail"
    }'
    <?php
      $url = "https://api.xendit.co/paylater/charges";
      $apiKey = "xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:";
      $data = [
        "plan_id" => "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        "reference_id" => "order_id_123",
        "checkout_method" => "ONE_TIME_PAYMENT",
        "success_redirect_url" => "https://merchant.com/order/confirm",
        "failure_redirect_url" => "https://merchant.com/order/fail"
        ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman",
    });
    
    const { PayLater } = x;
    const payLaterSpecificOptions = {};
    const plc = new PayLater(payLaterSpecificOptions);
    
    const resp = await plc.createPayLaterCharge({
      planID: 'plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4',
      referenceID: 'order_id_123',
      checkoutMethod: 'ONE_TIME_PAYMENT',
      successRedirectURL: 'https://merchant.com/order/confirm',
      failureRedirectURL: 'https://merchant.com/order/fail'
    });
    console.log(resp);
    from xendit import PayLater
    
    paylater_charge = PayLater.create_paylater_charge(
        plan_id="plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        reference_id="order_id_123",
        checkout_method="ONE_TIME_PAYMENT",
        success_redirect_url="https://merchant.com/order/confirm",
        failure_redirect_url="https://merchant.com/order/fail"
    )
    Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    plan_id
    wajib
    string ID Installment Plan yang diambil dari API Initiate PayLater Plans
    reference_id
    wajib
    string Reference ID yang disediakan oleh merchant untuk transaksi

    Format Special dan alphanumeric
    Panjang maksimal 255 characters
    checkout_method
    wajib
    string Metode checkout yang didukung: ONE_TIME_PAYMENT
    success_redirect_url
    wajib
    string URL di mana end user akan diarahkan setelah proses otorisasi berhasil

    Wajib HTTPS atau HTTP
    failure_redirect_url
    wajib
    string URL di mana end-customer akan diarahkan jika proses otorisasi gagal dilakukan

    Wajin HTTPS atau HTTP
    payment_method_id
    opsional
    string Payment method ID dari sumber dana end-customer

    Wajib jika checkout_method = TOKENIZED_PAYMENT (belum didukung)
    metadata
    opsional
    object Objek dari informasi tambahan yang dapat digunakan oleh user. User mendefinisikan properti dan value JSON.

    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan value hingga 500 karakter.

    Value ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Parameter Respon

    Contoh Respon Sukses Membuat PayLater Charge

    {
        "id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "customer_id": "49d056bd-21e5-4997-85f2-2127544c2196",
        "plan_id": "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        "business_id": "5f27a14a9bf05c73dd040bc8",
        "reference_id": "order_id_123",
        "checkout_method": "ONE_TIME_PAYMENT",
        "channel_code": "PH_BILLEASE",
        "currency": "PHP",
        "amount": 1234.56,
        "refunded_amount": null,
        "order_items": [{
            "type": "PRODUCT",
            "reference_id": "SKU_123-456-789",
            "name": "Dyson Vacuum",
            "net_unit_amount": 1234.56,
            "quantity": 1,
            "url": "https://www.zngmyhome.com/dyson_vacuum",
            "category": "Electronics",
            "subcategory": "Appliances",
            "description": "A very powerful vacuum",
            "metadata": null
        }],
        "success_redirect_url": "https://merchant.com/order/confirm",
        "failure_redirect_url": "https://merchant.com/order/fail",
        "status": "PENDING",
        "created": "2020-11-11T16:23:52Z",
        "updated": "2020-11-11T16:23:52Z",
        "actions": {
            "desktop_web_checkout_url": "https://webcheckout.this/",
            "mobile_web_checkout_url": "https://webcheckout.this/",
            "mobile_deeplink_checkout_url": "app://deeplinkcheckout.this/"
        },
        "expires_at": "2020-11-12T16:23:52Z",
        "callback_url": "https://webhook.me/gethooked",
        "payment_method_id": null,
        "voided_at": null,
        "refunds": null,
        "metadata": null
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi charge request
    Selalu akan diawali dengan plc_, diikuti dengan UUIDv4
    customer_id string Pengidentifikasi unik untuk customer
    plan_id string Pengidentifikasi unik untuk PayLater plan yang dibuat
    business_id string Business ID merchant
    reference_id string Reference ID yang dibuat oleh merchant untuk transaksi
    channel_code string Channel code untuk penyedia PayLater
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_UANGME, ID_INDODANA, ID_ATOME, PH_ATOME, PH_BILLEASE, PH_CASHALO
    checkout_method string Metode checkout yang didukung: ONE_TIME_PAYMENT
    currency string ISO 4217 Kode mata uang dari transaksi Paylater
    Mata uang yang didukung: IDR, PHP
    amount number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items
    refunded_amount number Total nominal yang telah berhasil di refund kepada end user
    order_items array Himpunan objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater
    status string Status charge
    PENDING, SUCCEEDED, FAILED

    Status of charge request
    Key Value
    PENDING Charge menunggu pembayaran oleh pelanggan Anda
    SUCCEEDED Charge sukses dibayar oleh pelanggan Anda
    FAILED Charge gagal dibayar oleh pelanggan Anda
    success_redirect_url string URL di mana customer akan diarahkan jika transaksi berhasil
    Wajib HTTPS atau HTTP
    failure_redirect_url string URL di mana customer akan diarahkan jika pembayaran gagal
    Wajib HTTPS atau HTTP
    created string Timestamp ISO 8601 untuk pembuatan transaksi
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    actions object Checkout URL milik Partner Paylater di mana end-user akan diarahkan untuk menyelesaikan pembayaran

    Jenis-jenis URL redirections
    Key Value
    desktop_web_checkout_url string URL yang dibuat untuk web checkout yang diakses menggunakan desktop
    mobile_web_checkout_url string URL yang dibuat untuk web checkout yang diakses menggunakan perangkat mobile
    mobile_deeplink_checkout_url string URL yang dibuat untuk deeplink checkout pada perangkat mobile (langsung masuk ke aplikasi milik Paylater Partner untuk konfirmasi pembayaran)
    expires_at string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    callback_url string URL callback default pada dashbor di mana status charge akan diberikan notifikasi
    payment_method_id string Payment method ID dari sumber dana end-customer
    Wajib jika checkout_method = TOKENIZED_PAYMENT (belum dapat dilakukan)
    voided_at string ISO 8601 Timestamp ketika transaksi dilakukan void
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Objek dari informasi tambahan yang dapat digunakan oleh user. User mendefinisikan properti dan value JSON.

    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan value hingga 500 karakter.

    Value hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    refunds array Himpunan refund objek ID (hanya akan menampillkan refund dengan status SUCCEEDED)

    Kode Error

    Contoh: Respon Error API Membuat PayLater Charge Request

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "PayLater partner does not support requested checkout_method."
    }
    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta
    API_VALIDATION_ERROR
    400
    Unsupported Checkout Type
    PayLater Partner tidak dapat menggunakan checkout_method yang diminta
    INVALID_API_KEY
    401
    API key tidak memiliki izin untuk layanan API ini
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request ini
    PAYLATER_PLAN_DATA_NOT_FOUND
    404
    PayLater Plan ID tidak valid. Mohon memeriksa ulang ID atau membuat ID menggunakan API Paylater Plans
    SERVER_ERROR
    500
    Error tidak terduga telah terjadi. Tim kami telah diberitahu untuk melakukan penyelesaian isu
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang diminta mengalami kendala yang tidak terduga. Partner Paylater akan diberitahukan untuk penyelesaian isu

    Payment Status Callback

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada bagian Paylater paid di Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    POST https://your-company-domain.webhook-url

    Versi

    Anda sedang melihat versi terbaru API PayLater / Cardless Credit kami. Klik di sini untuk melihat versi-versi sebelumnya.

    Webhook Payload

    Webhook ini dipicu ketika ada pembayaran PayLater yang SUCCEEDED atau FAILED.

    Contoh: Webhook Payload Pembayaran PayLater

    {
        "event": "paylater.payment",
        "business_id": "5f27a14a9bf05c73dd040bc8",
        "created": "2020-11-11T16:28:52Z",
        "data": {
            "id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
            "customer_id": "49d056bd-21e5-4997-85f2-2127544c2196",
            "plan_id": "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
            "business_id": "5f27a14a9bf05c73dd040bc8",
            "reference_id": "order_id_123",
            "checkout_method": "ONE_TIME_PAYMENT",
            "channel_code": "PH_BILLEASE",
            "currency": "PHP",
            "amount": 1234.56,
            "refunded_amount": null,
            "order_items": [{
                "type": "PRODUCT",
                "reference_id": "SKU_123-456-789",
                "name": "Dyson Vacuum",
                "net_unit_amount": 1234.56,
                "quantity": 1,
                "url": "https://www.zngmyhome.com/dyson_vacuum",
                "category": "Electronics",
                "subcategory": "Appliances",
                "description": "A very powerful vacuum",
                "metadata": null
            }],
            "success_redirect_url": "https://merchant.com/order/confirm",
            "failure_redirect_url": "https://merchant.com/order/fail",
            "status": "SUCCEEDED",
            "created": "2020-11-11T16:23:52Z",
            "updated": "2020-11-11T16:23:52Z",
            "actions": {
                "desktop_web_checkout_url": "https://webcheckout.this/",
                "mobile_web_checkout_url": "https://webcheckout.this/",
                "mobile_deeplink_checkout_url": "app://deeplinkcheckout.this/"
            },
            "expires_at": "2020-11-12T16:23:52Z",
            "callback_url": "https://webhook.me/gethooked",
            "payment_method_id": null,
            "voided_at": null,
            "refunds": null,
            "metadata": null
        }
    }
    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event string Mengidentidikasi event yang memicu notifikasi ke merchant.

    paylater.payment terjadi ketika PayLater partner mengonfirmasi status pembayaran transaksi
    business_id string Business ID merchant
    created string Timestamp ISO 8601 pembuatan event. Menggunakan timezone UTC+0
    data object Objek PayLater charge akan nested pada parameter ini

    Field data
    Parameter Deskripsi
    id string Pengidentifikasi unik untuk transaksi charge request.

    Selalu diawali dengan plc_, diikuti dengan UUIDv4
    customer_id string Pengidentifikasi unik untuk customer
    plan_id string Pengidentifikasi unik untuk PayLater plan yang dibuat
    business_id string Business ID merchant
    reference_id string Reference ID yang diberikan merchant untuk transaksi
    channel_code string Kode channel code untuk penyedia PayLater
    checkout_method string Metode checkout yang didukung: ONE_TIME_PAYMENT
    currency string Kode mata uang ISO 4217 untuk transaksi PayLater
    amount number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items
    refunded_amount number Total nominal yang telah sukses dilakukan refund kepada end user
    order_items array Himpunan objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater
    success_redirect_url string URL di mana customer akan diarahkan jika transaksi berhasil
    failure_redirect_url string URL di mana customer akan diarahkan jika transaksi gagal
    status string Status PayLater charge
    SUCCEEDED, FAILED
    created string Timestamp ISO 8601 untuk pembuatan transaksi
    updated string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    actions object URL checkout milik PayLater Partner di mana customer akan diarahkan untuk menyelesaikan pembayaran
    expires_at string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    callback_url string URL webhook default pada dashboard di mana status charge akan diberikan notifikasi
    payment_method_id string Payment method ID dari sumber dana end-customer

    Dibutuhkan jika checkout_method = TOKENIZED_PAYMENT (belum didukung)
    voided_at string Timestamp ISO 8601 untuk pembatalan transaksi
    metadata object Objek dengan informasi tambahan yang dapat digunakan oleh user.
    refunds array Himpunan objek refund (hanya menampilkan refund dengan status SUCCEEDED).

    Cek PayLater Charge melalui ID

    Cek detil pembayaran Paylater melalui Charge ID

    Endpoint: Cek PayLater Charge melalui ID

    GET https://api.xendit.co/paylater/charges/{id}

    Paramter Request

    Contoh: Cek PayLater Charge Status melalui ID - Request

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/ -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    <?php
    
    use Xendit\Xendit;
    require 'vendor/autoload.php';
    
    Xendit::setApiKey('xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman');
    
    $charge_id = 'plc_8cb12305-9bcf-4441-a087-ee0d446e297b';
    $getPayLaterChargeStatus = \Xendit\PayLater::getPayLaterChargeStatus($charge_id);
    var_dump($getPayLaterChargeStatus);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman",
    });
    
    const { PayLater } = x;
    const paylaterSpecificOptions = {};
    const pl = new PayLater(paylaterSpecificOptions);
    
    const resp = await pl.getPayLaterChargeStatus({
      chargeID: 'plc_8cb12305-9bcf-4441-a087-ee0d446e297b',
    });
    console.log(resp);
    from xendit import PayLater
    
    paylater_charge = PayLater.get_paylater_charge_status(
        charge_id="plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
    )
    Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk charge request transaksi (dikembalikan sebagai id pada PayLater Charge request)

    Parameter Respon

    Contoh: Cek Status PayLater Charge melalui ID - Respon

    {
        "id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "customer_id": "49d056bd-21e5-4997-85f2-2127544c2196",
        "plan_id": "plp_3d88d952-9505-4ed7-84d3-e8639e99e9c4",
        "business_id": "5f27a14a9bf05c73dd040bc8",
        "reference_id": "order_id_123",
        "checkout_method": "ONE_TIME_PAYMENT",
        "channel_code": "PH_BILLEASE",
        "currency": "PHP",
        "amount": 1234.56,
        "refunded_amount": null,
        "order_items": [{
            "type": "PRODUCT",
            "reference_id": "SKU_123-456-789",
            "name": "Dyson Vacuum",
            "net_unit_amount": 1234.56,
            "quantity": 1,
            "url": "https://www.zngmyhome.com/dyson_vacuum",
            "category": "Electronics",
            "subcategory": "Appliances",
            "description": "A very powerful vacuum",
            "metadata": null
        }],
        "success_redirect_url": "https://merchant.com/order/confirm",
        "failure_redirect_url": "https://merchant.com/order/fail",
        "status": "SUCCEEDED",
        "created": "2020-11-11T16:23:52Z",
        "updated": "2020-11-11T16:23:52Z",
        "actions": {
            "desktop_web_checkout_url": "https://webcheckout.this/",
            "mobile_web_checkout_url": "https://webcheckout.this/",
            "mobile_deeplink_checkout_url": "app://deeplinkcheckout.this/"
        },
        "expires_at": "2020-11-12T16:23:52Z",
        "callback_url": "https://webhook.me/gethooked",
        "payment_method_id": null,
        "voided_at": null,
        "refunds": null,
        "metadata": null
    }
    Paramater Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi charge request

    Selalu akan diawali dengan plc_, diikuti dengan UUIDv4
    customer_id string Pengidentifikasi unik untuk customer
    plan_id string Pengidentifikasi unik untuk PayLater plan yand dibuat
    business_id string Business ID merchant
    reference_id string Reference ID yang dibuat oleh merchant untuk transaksi
    checkout_method string Metode checkout method yang didukung: ONE_TIME_PAYMENT
    channel_code string Kode channel code untuk penyedia PayLater

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_UANGME, ID_INDODANA, ID_ATOME, PH_ATOME, PH_BILLEASE, PH_CASHALO
    currency string ISO 4217 Kode mata uang transaksi PayLater

    Mata uang yang didukung: IDR, PHP
    amount number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items
    refunded_amount number Total nominal yang sukses direfund kepada pengguna akhir
    order_items array Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater
    success_redirect_url string URL dimana customer akan diarahkan jika transaksi berhasil
    failure_redirect_url string URL dimana customer akan diarahkan jika pembayaran gagal
    status string Status charge
    PENDING, SUCCEEDED, FAILED
    created string Timestamp ISO 8601 untuk pembuatan transaksi
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    actions object Checkout URL milik Paylater Partner di mana end-user akan diarahkan untuk menyelesaikan pembayaran
    expires_at string Timestamp ISO 8601 untuk pembaharuan objek terbaru
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    callback_url string URL callback default pada dashboard di mana status charge akan diberitahu

    Wajib HTTPS
    payment_method_id string Payment method ID dari sumber dana end-customer

    Wajib jika checkout_method = TOKENIZED_PAYMENT (belum didukung)
    voided_at string Timestamp ISO 8601 untuk pembatalan transaksi
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Objek dari informasi tambahan yang dapat digunakan oleh user. User mendefinisikan properti dan value JSON.

    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan value hingga 500 karakter.

    Value hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    refunds array Himpunan refund objek ID (Hanya akan menampilkan daftar refund dengan status SUCCEEDED)

    Kode Error

    Contoh: Cek PayLater Charge Status melalui ID - Respon Error

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "Charge ID does not match plc_UUID format"
    }
    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Charge ID tidak sesuai dengan format plc_UUID
    INVALID_API_KEY
    401
    API key tidak memiliki izin untuk layanan API ini
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request ini
    DATA_NOT_FOUND
    404
    Sumber charge tidak ditemukan. Mohon memeriksa ulang query Anda
    SERVER_ERROR
    500
    Error tidak terduga telah terjadi. Tim kami telah diberitahu untuk melakukan penyelesaian isu

    Pembatalan Charge PayLater

    Lakukan pembatalan transaksi Paylater dengan Charge ID. Endpoint ini hanya akan berfungsi untuk charge yang dibuat melalui /paylater/charge. Pembatalan transaksi Paylater akan memblokir URL pembayaran dari customer secara langsung. Xendit tidak mengirimkan callback untuk pembatalan charge.

    Endpoint: Cancel Charge Paylater

    POST https://api.xendit.co/paylater/charges/:id/cancel

    Parameter Request

    Contoh: Pembatalan Charge PayLater - Request

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/cancel -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika memiliki akses ke xenPlatform. Silakan buka xenPlatform informasi lebih lanjut.
    Parameter Path Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari sebuah transaksi ( id dari charge request PayLater ).

    Parameter Response

    Contoh: Pembatalan Charge PayLater - Response

    {
        "id": "plc_5test57-8888-45o8-abb1-123456789abcdefg",
        "business_id": "8764829fhgnb74gf63hg74dhg73",
        "reference_id": "paylater-mock-ref-12345678",
        "customer_id": "cust-9fb4af4e-d98c-40bf-bd87-abcde678901112",
        "plan_id": "plp_3d4c8823-0d2a-4c2e-892b-12345abcde1112",
        "currency": "IDR",
        "amount": 1000,
        "channel_code": "ID_KREDIVO",
        "checkout_method": "ONE_TIME_PAYMENT",
        "status": "CANCELLED",
        "actions": {
            "mobile_web_checkout_url": "https://pay.kredivo.com/signIn?tk=1234-1234-1234-1234-12345678",
            "desktop_web_checkout_url": "https://pay.kredivo.com/signIn?tk=1234-1234-1234-1234-12345678"
        },
        "expires_at": "2022-11-25T00:00:57.745Z",
        "success_redirect_url": "https://www.xendit.co/en/",
        "failure_redirect_url": "https://www.google.com/",
        "callback_url": "https://webhook.site/12345678",
        "created": "2022-11-24T00:00:57.747Z",
        "updated": "2022-11-24T00:00:26.441Z",
        "order_items": [
            {
                "type": "DIGITAL_PRODUCT",
                "reference_id": "SKU_123-456-789",
                "name": "Dyson Vacuum",
                "net_unit_amount": 50,
                "quantity": 2,
                "url": "https://www.xendit.co/en/",
                "category": "Electronics",
                "subcategory": null,
                "description": null,
                "metadata": null
            },
            {
                "type": "FEE",
                "reference_id": "PLS_FEE_aabcdef0-e4af-4b86-bf12-a31abcdef282",
                "name": "Fee",
                "net_unit_amount": 900,
                "quantity": 1,
                "subcategory": null,
                "description": null,
                "metadata": {
                    "message": "Xendit generated FEE for amount differences between sum of net unit amount and the amount"
                }
            }
        ],
        "voided_at": null,
        "payment_method_id": null,
        "metadata": {
            "campaign": "0%_installment"
        }
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi refund akan selalu diawali dengan plc_, diikuti dengan UUIDv4.
    business_id string Business ID merchant.
    reference_id string Reference ID dari merchant untuk transaksi.
    customer_id string Identifikasi unik untuk customer.
    plan_id string Indentifikasi unik untuk plan PayLater.
    created string Cap waktu ISO 8601 untuk pembuatan transaksi Format: YYYY-MM-DDTHH:mm:ssZ.
    updated string Cap waktu ISO 8601 untuk pembaruan transaksi Format: YYYY-MM-DDTHH:mm:ssZ.
    amount number Nominal transaksi yang dibatalkan.
    order_items array Rincian barang atau jasa yang ditransaksikan.
    channel_code string Kode channel untuk partner PayLater
    Channels: ID_KREDIVO, ID_AKULAKU, ID_INDODANA, ID_ATOME, PH_ATOME,PH_BILLEASE,PH_CASHALO.
    currency string ISO 4217 Kode mata uang
    Mata Uang: IDR, PHP.
    status enum Status permintaan. Status Tersedia - SUCCEEDED, FAILED, PENDING, CANCELLED. Status akan menjadi CANCELLED jika pembatalan sukses.
    success_redirect_url string URL pengalihan jika transaksi berhasil.
    failure_redirect_url string URL pengalihan jika pembayaran gagal.
    actions object URL transaksi milik partner Paylater untuk end-user menyelesaikan pembayaran.
    expires_at string Cap waktu ISO 8601 untuk pembaharuan terbaru Format: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0.
    callback_url string URL callback default di mana status charge akan diberitahu Wajib HTTPS.
    metadata object Informasi tambahan yang dapat digunakan dalam format JSON. Objek dapat terdiri hingga 50 karakter, dengan masing-masing key hingga 40 karakter dan value hingga 500 karakter. Value hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Kode Eror

    Contoh: Pembatalan Charge PayLater - Response Error

    {
      "error_code": "DATA_NOT_FOUND",
      "message": "Cancel resource was not found. Please check your query again"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada data yang diminta.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan permintaan.
    INELIGIBLE_TRANSACTION
    403
    Permintaan pembatalan tidak bisa diproses karena status transaksi bukan PENDING.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek kembali permintaan Anda.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider eWallet akan diberitahukan untuk penyelesaian isu.

    Refund Paylater Charge

    Lakukan refund untuk pembayaran paylater menggunakan Charge ID. Endpoint ini hanya dapat bekerja untuk charge yang dibuat melalu endpoint /paylater/charges.

    Refund akan mengembalikan kredit limit end-customer pada akun PayLater mereka secara real-time. Xendit akan mengirimkan callback ke Callback URL yang Anda konfigurasi di Xendit Dashboard ketika refund telah berhasil.

    Detail Refund

    Provider PayLater Ketersediaan Refund Batas Waktu Refund
    Kredivo Refund penuh dan sebagian 14 hari
    Indodana Refund penuh dan sebagian 30 hari
    Atome Refund penuh dan sebagian N/A
    Atome akan meneruskan refund selama Merchant menyetujui permintaan end-customer
    Akulaku Refund penuh dan sebagian N/A
    Akulaku akan meneruskan refund selama Merchant menyetujui permintaan end-customer

    Endpoint: Membuat Refund Paylater

    POST https://api.xendit.co/paylater/charges/{id}/refunds

    Parameter Request

    Contoh: Request - Membuat Refund Paylater

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
       -H 'Content-Type: application/json' \
       --data-raw '{
        "amount": "1000",
        "reason": "DEFECTIVE_ITEM"
    }'

    Contoh: Sampel JSON request

    {
        "amount": 1000,
        "reason": "DEFECTIVE_ITEM"
    }
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    id
    Wajib
    string Pengidentifikasi unik untuk transaksi charge request (dikembalikan sebagai id pada request charge paylater)
    Parameter Body Tipe Deskripsi
    amount
    opsional
    number Nominal yang akan di refund kepada customer. Total nominal refund tidak boleh melebihi nominal transaksi asli. Refund hanya akan bisa dilakukan untuk nominal charge yang belum di refund.
    Jika parameter amount tidak ada, sisa nominal yang belum di refund akan diproses.
    reason
    opsional
    enum Salah satu nilai berikut dapat digunakan sebagai alasan refund - DUPLICATE, FRAUDULENT, CHANGE_OF_MIND, CHANGE_PAYMENT_METHOD, UNFULFILLED_ITEM, DEFECTIVE_ITEM, OTHERS

    Parameter Respon

    Contoh: Respon - Membuat Refund Paylater

    {
        "id" : "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
        "charge_id" : "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "channel_code" : "PH_BILLEASE",
        "currency" : "PHP",
        "amount" : 1234.56,
        "reason" : "UNFULFILLED_ITEM",
        "status" : "PENDING",
        "created" : "2021-04-20T16:23:52Z",
        "updated" : null
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi refund
    Akan selalu diawali dengan plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge request
    Akan selalu diawali dengan plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_INDODANA, ID_ATOME, PH_ATOME
    currency string ISO 4217 kode mata uang untuk transaksi PayLater
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp dalam ISO 8601 untuk request refund
    updated number Timestamp dalam ISO 8601 untuk refund objek terbaru

    Kode Error

    Contoh: Respon Error - Membuat Refund Paylater

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    REFUND_NOT_SUPPORTED
    400
    Request refund gagal karena refund tidak tersedia pada penyedia Paylater.
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Request refund gagal karena refudn sebagian tidak tersedia pada penyedia Paylater.
    INSUFFICIENT_BALANCE
    400
    Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled.
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Refund request gagal karena refund dengan nominal penuh telah dilakukan sebelumnya.
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.
    CHANNEL_UNAVAILABLE
    503
    Saluran pembayaran saat ini sedang mengalami kendala tak terduga. Penyedia paylater akan diifnormasikan untuk menyelesaikan isu.

    Get Refund dengan Refund ID

    Dapatkan status refund melalui endpoint /paylater/charges.

    Endpoint: Get PayLater Refund dengan ID

    GET https://api.xendit.co/paylater/charges/{charge_id}/refunds/{refund_id}

    Parameter Request

    Contoh: Request - GET PayLater Refund dengan ID

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds/plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    charge_id
    wajib
    string ID dari Paylater charge
    refund_id
    wajib
    string ID dari Paylater Refund

    Parameter Respon

    Contoh: Respon - GET PayLater Refund by ID

    {
        "id" : "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
        "charge_id" : "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "channel_code" : "PH_BILLEASE",
        "currency" : "PHP",
        "amount" : 1234.56,
        "reason" : "UNFULFILLED_ITEM",
        "status" : "PENDING",
        "created" : "2021-04-20T16:23:52Z",
        "updated" : null
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi
    Akan selalu diawali oleh plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge paylater
    Akan selalu diawali oleh plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater.
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_INDODANA, ID_ATOME, PH_ATOME
    currency string ISO 4217 kode mata uang untuk transaksi PayLater.
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp dalam ISO 8601 untuk request refund
    updated number Timestamp dalam ISO 8601 untuk refund objek terbaru

    Kode Eror

    Contoh: Respon Error - GET PayLater Refund dengan ID

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskeripsi
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera

    Daftar Refund Paylater

    Dapatkan seluruh status refund yang telah dibuat. Endpoint ini hanya berlaku untuk Paylater charge yang dibuat dari endpoint /paylater/charges.

    Endpoint: Daftar Paylater Refunds

    GET https://api.xendit.co/paylater/charges/{id}/refunds/

    Parameter Request

    Contoh: Request - Daftar Refund Paylater

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds?limit=10&status=SUCCEEDED -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk transaksi charge request (dikembalikan sebagai id pada Paylater charge request)
    Parameter Query Tipe Deskripsi
    limit
    opsional
    number Jumlah hasil maksimum dari sekali request
    Default: 10
    Minimum: 1
    Maksimum: 50
    status
    opsional
    enum Status refund yang disediakan. Nilai tersedia - SUCCEEDED, FAILED, PENDING

    Parameter Respon

    Example: Respon - Daftar Refund Paylater

    {
      "data": [
        {
          "id": "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
          "charge_id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
          "channel_code": "PH_BILLEASE",
          "currency": "PHP",
          "amount": 1234.56,
          "reason": "UNFULFILLED_ITEM",
          "status": "SUCCEEDED",
          "created": "2021-04-20T16:23:52Z",
          "updated": "2021-04-20T16:23:52Z"
        },
        {
          "id": "plr_a351fd9a-90da-459a-b479-9b34e8be6009",
          "charge_id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
          "channel_code": "PH_BILLEASE",
          "currency": "PHP",
          "amount": 1000,
          "reason": "UNFULFILLED_ITEM",
          "status": "SUCCEEDED",
          "created": "2021-04-20T16:23:52Z",
          "updated": "2021-04-20T16:23:52Z"
        }
      ],
      "has_more": false
    }
    Parameter Body Tipe Deskripsi
    data array Himpunan data dari objek refund paylater yang terikat pada charge id tertentu
    Parameter objek refund
    Key Nilai
    id string Pengidentifikasi unik dari transaksi refund.
    Akan selalu diawali oleh plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge paylater.
    Akan selalu diawali oleh plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater.
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, ID_INDODANA, ID_ATOME, PH_ATOME
    currency string ISO 4217 kode mata uang untuk transaksi PayLater
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan Refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp UTC+0 dalam ISO 8601 untuk request refund
    updated string Timestamp UTC+0 dalam ISO 8601 untuk objek refund request terbaru
    has_more boolean Mengindikasikan apakah terdapat item lebih untuk di-query berdasarkan filter query dari hasil saat ini. Jika hasil kosong, has_more akan mengembalikan false.

    Kode Eror

    Contoh: Respon Error - Daftar Refund Paylater

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskripsi
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera

    Kode QR

    Kode QR akan memungkinkan anda untuk menerima pembayaran dari saldo aplikasi mobile banking atau saldo eWallet end user dengan langsung. Di Indonesia, merchant kami dapat menerima pembayaran dari semua provider yang terhubung di jaringan QRIS (misalnya OVO, GoPay, DANA, LinkAja, BCA, dan ShopeePay). Lihat daftar lengkapnya di sini.

    Untuk detail lengkap tentang fitur yang disediakan oleh masing-masing mitra QRIS bisa dibaca di Xendit Doc.

    Versi API

    Anda sedang melihat versi terbaru dari QR Codes API kami. Dalam versi API ini, waktu kedaluwarsa untuk QR dinamis dapat disesuaikan melalui parameter expires_at.

    Version Changelog
    2022-07-31
    Versi Terbaru
    API Kode QR v2 mempunyai opsi untuk memilih waktu kedaluwarsa untuk QR dinamis.
    2020-07-01
    Versi lama
    API Kode QR v1 tidak mempunyai opsi untuk memilih waktu kedaluwarsa untuk QR dinamis.

    Objek Kode QR

    Objek kode QR akan dikembalikan sebagai respons dari Buat Kode QR dan Dapatkan Kode QR dengan ID QR.

    Contoh : Objek Kode QR

    {
      "id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
      "reference_id": "order-id-1666420204",
      "business_id": "58cd618ba0464eb64acdb246",
      "type": "DYNAMIC",
      "currency": "IDR",
      "amount": 10000,
      "channel_code": "ID_DANA",
      "status": "ACTIVE",
      "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
      "expires_at": "2022-10-23T09:56:43.60445Z",
      "created": "2022-10-22T06:30:05.86474Z",
      "updated": "2022-10-22T06:30:05.86474Z",
      "basket": null,
      "metadata": null
    }
    Parameter Badan Tipe Deskripsi
    id string Pengidentifikasi unik dari sebuah transaksi. Prefix qr_
    reference_id string ID referensi yang diberikan oleh merchant (255 Karakter)
    business_id string Business ID merchant
    type string DYNAMIC or STATIC
    Catatan: QR Code DYNAMIC mengandung nilai pembayaran ketika dilakukan pemindaian dan dapat dibayarkan satu-kali, transaksi selanjutnya akan dikembalikan
    Catatan: QR code STATIC membutuhkan customer untuk memasukkan nilai pembayaran dan dapat dibayarkan berkali-kali
    currency string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    amount number Jumlah yang ditentukan dalam reques
    Kode QR statis mengharuskan end user untuk selalu memasukkan jumlah yang harus dibayar pada saat di scan
    Catatan: Jumlah Minimal 1 IDR
    Jumlah Maximal 10,000,000 IDR
    channel_code string Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi
    Channel Tersedia: ID_DANA, ID_LINKAJA
    status string ACTIVE atau INACTIVE
    Contoh: Kode QR yang tidak aktif atau kedaluwarsa tidak dapat lagi menerima pembayaran
    qr_string string QR string yang akan ditampilkan kepada customer. Untuk dapat menampilkan QR string dalam bentuk image dapat dilakukan melalui software libraries yang tersedia (e.g Nodejs, PHP, Java)
    expires_at string Timestamp ISO 8601 untuk kedaluwarsa kode QR. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    Contoh: Untuk kode QR dinamis ID_DANA, Jika waktu expires_at tidak di spesifikasi, akan default 48 Jam dari waktu buat QR. Untuk kode QR statis ID_DANA, kode tidak akan kedaluwarsa dan expires_at akan selalu null.
    created string ISO 8601 Timestamp untuk pembuatan Objek QR. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    updated string ISO 8601 Timestamp untuk update QR Objek. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    basket object Himpunan objek yang mendeskripsikan item yang dibeli
    Key Value
    reference_id
    string Pengidentifikasi merchant untuk produk tertentu (255 karakter)
    name
    string Nama produk (255 karakter)
    category
    string Kategori pedagang untuk item - mis. Elektronik (255 karakter)
    currency
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217
    Nilai tersedia: IDR, PHP
    price
    number Harga per unit dalam mata uang keranjang
    quantity
    number Jumlah unit item ini dalam keranjang
    type
    string Tipe produk - PRODUCT or SERVICE
    url
    string URL ke halaman e-commerce item
    description
    string Deskripsi produk (255 karakter)
    sub-category
    string Merchant sub-kategori untuk item - mis. Mobile Phone (255 karakter)
    metadata
    object Objek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter
    metadata object Objek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter

    Buat Kode QR

    Endpoint POST ini dipakai untuk membuat Kode QR dinamis(jumlah tetap) atau statis (jumlah terbuka).

    Contoh : Buat Reques Kode QR

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

    Parameter Reques

    curl https://api.xendit.co/qr_codes -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'api-version: 2022-07-31'
       -H 'Content-Type: application/json' \
       --data-raw '{
        "reference_id": "order-id-1666420204",
        "type": "DYNAMIC",
        "currency": "IDR",
        "amount": 10000,
        "expires_at": "2022-10-23T09:56:43.60445Z"
    }'
    Parameter Header Tipe Deskripsi
    api-version
    wajib
    string Versi API. Gunakan 2022-07-31 untuk versi terbaru v2
    idempotency-key
    opsional
    string Disediakan untuk mencegah permintaan duplikat. Dapat sama dengan UUID apa pun. Kunci idempotensi disimpan pada lapisan permintaan. Kedaluwarsa setelah 24 jam sejak permintaan pertama
    for-user-id
    opsional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform.
    with-split-rule
    opsional
    string ID Split Rule yang ingin Anda aplikasikan ke Kode QR ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    AApabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan.

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    webhook-url
    opsional
    string URL Callback dimana pemberitahuan pembayaran akan dikirim. Defaultnya adalah URL panggilan balik di Dasbor Anda untuk QR code paid
    Parameter Body Tipe Deskripsi
    reference_id
    wajib
    string ID referensi yang diberikan oleh merchant (255 Karakter). Tidak harus unik.
    type
    wajib
    string DYNAMIC or STATIC
    Catatan: QR Code DYNAMIC mengandung nilai pembayaran ketika dilakukan pemindaian dan dapat dibayarkan satu-kali, transaksi selanjutnya akan dikembalikan
    Catatan: QR code STATIC membutuhkan customer untuk memasukkan nilai pembayaran dan dapat dibayarkan berkali-kali
    amount
    diperlukan secara kondisional
    number Jumlah yang ditentukan dalam reques
    Kode QR statis mengharuskan end user untuk selalu memasukkan jumlah yang harus dibayar pada saat di scan
    Catatan: Jumlah Minimal 1 IDR
    Jumlah Maximal 10,000,000 IDR
    channel_code
    opsional
    string Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi
    Channel Tersedia: ID_DANA, ID_LINKAJA
    expires_at
    opsional
    string Timestamp ISO 8601 untuk kedaluwarsa kode QR. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    Contoh: Untuk kode QR dinamis ID_DANA, Jika waktu expires_at tidak di spesifikasi, akan default 48 Jam dari waktu buat QR. Untuk kode QR statis ID_DANA, kode tidak akan kedaluwarsa dan expires_at akan selalu null.
    basket
    opsional
    object Himpunan objek yang mendeskripsikan item yang dibeli
    Key Value
    reference_id
    string Pengidentifikasi merchant untuk produk tertentu (255 karakter)
    name
    string Nama produk (255 karakter)
    category
    string Kategori pedagang untuk item - mis. Elektronik (255 karakter)
    currency
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217
    Nilai tersedia: IDR, PHP
    price
    number Harga per unit dalam mata uang keranjang
    quantity
    number Jumlah unit item ini dalam keranjang
    type
    string Tipe produk - PRODUCT or SERVICE
    url
    string URL ke halaman e-commerce item
    description
    string Deskripsi produk (255 karakter)
    sub-category
    string Merchant sub-kategori untuk item - mis. Mobile Phone (255 karakter)
    metadata
    object Objek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter
    metadata
    opsional
    object Objek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter

    Parameter Respons

    Contoh : Buat Respons Sukses Kode QR (Objek Kode QR)

    {
      "id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
      "reference_id": "order-id-1666420204",
      "business_id": "58cd618ba0464eb64acdb246",
      "type": "DYNAMIC",
      "currency": "IDR",
      "amount": 10000,
      "channel_code": "ID_DANA",
      "status": "ACTIVE",
      "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
      "expires_at": "2022-10-23T09:56:43.60445Z",
      "created": "2022-10-22T06:30:05.86474Z",
      "updated": "2022-10-22T06:30:05.86474Z",
      "basket": null,
      "metadata": null
    }

    Returns QR Code Object with HTTP status code 200 and ACTIVE status.

    Kode Eror

    Contoh : Buat Respons Eror Kode QR

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is invalid input in one of the required request fields"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    UNSUPPORTED_CURRENCY
    400
    Mata uang pembayaran pada request tidak mendukung untuk channel pembayaran ini. Silakan merujuk pada API reference atau docs untuk melihat mata uang yang tersedia
    INVALID_API_KEY
    401
    Format API key tidak valid
    INVALID_MERCHANT_CREDENTIALS
    401
    Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request
    CHANNEL_NOT_ACTIVATED
    403
    Request pembayaran gagal dikarenakan channel pembayaran yang direquest belum diaktifkan di Xendit. Silakan melakukan aktivasi melalui dashboard atau menghubungi customer support Xendit
    CALLBACK_URL_NOT_FOUND
    404
    Request pembayaran gagal dikarenakan tidak ditemukan callback url pada dashboard Xendit atau pada request header. Silakan masukkan callback url pada dashboard Xendit
    DUPLICATE_ERROR
    409
    ID_DANA hanya mengizinkan 1 kode QR statis untuk setiap merchant
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider eWallet akan diberitahukan untuk penyelesaian isu

    Dapatkan Kode QR dengan ID QR

    Endpoint GET ini digunakan untuk mendapatkan detail kode QR dengan ID QR (qr_) yang dikembalikan dalam respons Buat Kode QR.

    Contoh : Dapatkan Kode QR dengan ID QR

    Parameter Reques

    GET https://api.xendit.co/qr_codes/:id
    curl https://api.xendit.co/qr_codes/qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2 -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'api-version: 2022-07-31'
       -H 'Content-Type: application/json' \
    Parameter Header Tipe Deskripsi
    api-version
    wajib
    string Versi API. Gunakan 2022-07-31 untuk versi terbaru v2
    for-user-id
    opsional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform.
    Parameter Path Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk transaksi. ID QR dengan awalan qr_ dikembalikan sebagai respons Buat Kode QR

    Parameter Respons

    Contoh : Get Respons sukses kode QR dengan ID QR (Objek Kode QR)

    {
      "id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
      "reference_id": "order-id-1666420204",
      "business_id": "58cd618ba0464eb64acdb246",
      "type": "DYNAMIC",
      "currency": "IDR",
      "amount": 10000,
      "channel_code": "ID_DANA",
      "status": "ACTIVE",
      "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
      "expires_at": "2022-10-23T09:56:43.60445Z",
      "created": "2022-10-22T06:30:05.86474Z",
      "updated": "2022-10-22T06:30:05.86474Z",
      "basket": null,
      "metadata": null
    }

    Mengembalikan Objek Kode QR dengan kode status 200 untuk identifier yang valid.

    Kode Eror

    Contoh : Get kode QR dengan respons eror QR ID

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is invalid input in one of the required request fields"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    INVALID_API_KEY
    401
    Format API key tidak valid
    DATA_NOT_FOUND
    404
    QR ID yang ditentukan tidak ditemukan. Harap periksa lagi
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu

    Objek Pembayaran QR

    Obyek Pembayaran QR akan dikembalikan dari callback Buat QR Code dan di respons Lis Pembayaran QR dari ID QR. Untuk Lis Pembayaran QR dari ID QR, jika ada lebih dari satu pembayaran untuk satu Kode QR, badan respons akan lis himpunan obyek pembayaran QR.

    Contoh : Obyek Pembayaran QR

    {
      "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
      "business_id": "58cd618ba0464eb64acdb246",
      "currency": "IDR",
      "amount": 10000,
      "status": "SUCCEEDED",
      "created": "2022-10-22T06:30:05.86474Z",
      "qr_id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
      "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
      "reference_id": "order-id-1666420204",
      "type": "DYNAMIC",
      "channel_code": "ID_DANA",
      "expires_at": "2022-10-23T09:56:43.60445Z",
      "basket": null,
      "metadata": null,
      "payment_detail": {
        "receipt_id": "000111666",
        "source": "GOPAY",
        "name": null,
        "account_details": null
      }
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik dari sebuah transaksi. Prefix qrpy_
    business_id string Business ID merchant
    currency string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    amount number Jumlah yang ditentukan dalam reques
    Kode QR statis mengharuskan end user untuk selalu memasukkan jumlah yang harus dibayar pada saat di scan
    Catatan: Jumlah Minimal 1 IDR
    Jumlah Maximal 10,000,000 IDR
    status string Status Pembayaran QR
    Available values: SUCCEEDED
    created string ISO 8601 Timestamp untuk pembuatan Obyek QR. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    qr_id string Pengidentifikasi unik untuk kode QR. Prefix qr_
    qr_string string QR string yang akan ditampilkan kepada customer. Untuk dapat menampilkan QR string dalam bentuk image dapat dilakukan melalui software libraries yang tersedia (e.g Nodejs, PHP, Java)
    reference_id string Reference ID dari merchant (255 characters)
    type string DYNAMIC or STATIC
    Catatan: QR Code DYNAMIC mengandung nilai pembayaran ketika dilakukan pemindaian dan dapat dibayarkan satu-kali, transaksi selanjutnya akan dikembalikan
    Catatan: QR code STATIC membutuhkan customer untuk memasukkan nilai pembayaran dan dapat dibayarkan berkali-kali
    channel_code string Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi
    Channel Tersedia: ID_DANA, ID_LINKAJA
    expires_at string Timestamp ISO 8601 untuk kedaluwarsa kode QR. Timezone UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    Contoh: Untuk kode QR dinamis ID_DANA, Jika waktu expires_at tidak di spesifikasi, akan default 48 Jam dari waktu buat QR. Untuk kode QR statis ID_DANA, kode tidak akan kedaluwarsa dan expires_at akan selalu null. (expires_at akan diterima dan diabaikan)
    basket object Himpunan objek yang mendeskripsikan item yang dibeli
    Key Value
    reference_id
    string Pengidentifikasi merchant untuk produk tertentu (255 karakter)
    name
    string Nama produk (255 karakter)
    category
    string Kategori pedagang untuk item - mis. Elektronik (255 karakter)
    currency
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217
    Nilai tersedia: IDR, PHP
    price
    number Harga per unit dalam mata uang keranjang
    quantity
    number Jumlah unit item ini dalam keranjang
    type
    string Tipe produk - PRODUCT or SERVICE
    url
    string URL ke halaman e-commerce item
    description
    string Deskripsi produk (255 karakter)
    sub-category
    string Merchant sub-kategori untuk item - mis. Mobile Phone (255 karakter)
    metadata
    object Objek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter
    metadata object Obyek informasi tambahan yang dapat digunakan pedagang. Merchant menentukan properti dan nilai JSON
    Merchant dapat menentukan hingga 50 kunci, dengan panjang nama kunci hingga 40 karakter dan panjang nilai hingga 500 karakter
    payment_detail object Obyek mengandung informasi tentang pembayaran yang telah disebarkan di jaringan pembayaran
    Key Value
    receipt_id
    string Request reference number (RRN) yang disebarkan di jaringan QR
    source
    string Sumber dimana saldo end user dikurangi untuk menyelesaikan pembayaran (mis. BCA, OVO, GOPAY)
    name
    string Nama holder akun/end user. Parameter ini akan null jika tidak tersedia
    account_details
    string Identifikasi publik dari akun sumber. Parameter ini akan di sensor. Parameter ini akan null jika tidak tersedia
    Contoh: +62*3123

    Lis Pembayaran QR dengan ID QR

    Endpoint GET ini digunakan untuk menampilkan daftar pembayaran yang terkait dengan kode QR tunggal dengan ID QR (qr_) dari respons Buat Kode QR.

    Example: Lis Pembayaran QR dengan Permintaan ID QR

    GET https://api.xendit.co/qr_codes/:qr_id/payments

    Parameter Reques

    curl https://api.xendit.co/qr_codes/qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2/payments -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform.
    Parameter Path Tipe Deskripsi
    qr_id
    wajib
    string Pengidentifikasi unik untuk transaksi. ID QR dengan awalan qr_ dikembalikan sebagai respons Buat Kode QR
    Parameter Query Tipe Deskripsi
    limit
    opsional
    number Jumlah transaksi yang akan dikembalikan dalam lis respons
    Default: 10
    from
    opsional
    string Timestamp mulai dalam format ISO ISO 8601 untuk created. Stempel waktu harus lebih awal dari parameter to. Zona Waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    to
    opsional
    string Timestamp akhir dalam format ISO ISO 8601 untuk created. Stempel waktu harus setelah parameter to. Zona Waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ

    Parameter Respon

    Contoh : Lis Pembayaran QR dengan Respons Sukses ID QR

    {
      "has_more": false,
      "data": [
        {
          "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
          "business_id": "58cd618ba0464eb64acdb246",
          "currency": "IDR",
          "amount": 10000,
          "status": "SUCCEEDED",
          "created": "2022-10-22T06:30:05.86474Z",
          "qr_id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
          "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
          "reference_id": "order-id-1666420204",
          "type": "DYNAMIC",
          "channel_code": "ID_DANA",
          "expires_at": "2022-10-23T09:56:43.60445Z",
          "basket": null,
          "metadata": null,
          "payment_detail": {
            "receipt_id": "000111666",
            "source": "GOPAY",
            "name": null,
            "account_details": null
          }
        }
      ]
    }
    Parameter Body Tipe Deskripsi
    has_more boolean Menunjukkan apakah ada lebih banyak item yang bisa di lis dari hasil
    data array Mengembalikan array Objek Pembayaran QR saat data ditemukan. Mengembalikan array kosong saat data tidak ditemukan.

    Kode Eror

    Contoh: lis Pembayaran QR dengan Respon eror ID QR

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is invalid input in one of the required request fields"
    }
    Error Code Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    INVALID_API_KEY
    401
    Format API key tidak valid
    DATA_NOT_FOUND
    404
    QR ID yang ditentukan tidak ditemukan. Harap periksa lagi
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu

    Callback Pembayaran QR

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada bagian QR Code paid di Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Contoh : Payload Webhook Pembayaran Sukses

    {
      "event": "qr.payment",
      "api_version": "2022-07-31",
      "business_id": "58cd618ba0464eb64acdb246",
      "created": "2022-10-22T06:30:05.86474Z",
      "data": {
        "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
        "business_id": "58cd618ba0464eb64acdb246",
        "currency": "IDR",
        "amount": 10000,
        "status": "SUCCEEDED",
        "created": "2022-10-22T06:30:05.86474Z",
        "qr_id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "reference_id": "order-id-1666420204",
        "type": "DYNAMIC",
        "channel_code": "ID_DANA",
        "expires_at": "2022-10-23T09:56:43.60445Z",
        "description": "",
        "basket": null,
        "metadata": null,
        "payment_detail": {
          "receipt_id": "000111666",
          "source": "GOPAY",
          "name": null,
          "account_details": null
        }
      }
    }
    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event string Mengidentifikasi event yang trigger notifikasi ke merchant
    Nilai yang tersedia: qr.payment
    api-version string Versi API. Gunakan 2022-07-31 untuk versi terbaru v2
    business_id string ID Bisnis Anda di Xendit
    created string ISO 8601 Timestamp for QR payment creation. Zona waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    data object Mengembalikan Objek QR Pembayaran

    Simulasi Pembayaran QR

    Endpoint POST ini dipakai untuk simulasi pembayaran QR dinamis (jumlah tetap) atau statis (jumlah terbuka) yang terbuat di TEST mode.

    Example: Reques buat Kode QR

    POST https://api.xendit.co/qr_codes/:id/payments/simulate

    Parameter Reques

    curl https://api.xendit.co/qr_codes/qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2/payments/simulate -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'api-version: 2022-07-31'
       -H 'Content-Type: application/json' \
       --data-raw '{
        "amount": 10000
    }'
    Parameter Header Tipe Deskripsi
    api-version
    wajib
    string Versi API. Gunakan 2022-07-31 untuk versi terbaru v2
    for-user-id
    opsional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform.
    Parameter Path Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik untuk transaksi. ID QR dengan awalan qr_ dikembalikan sebagai respons Buat Kode QR
    Parameter Body Tipe Deskripsi
    amount
    diperlukan secara kondisional
    number Jumlah yang ditentukan dalam reques
    Kode QR statis mengharuskan end user untuk selalu memasukkan jumlah yang harus dibayar pada saat di scan
    Catatan: Jumlah Minimal 1 IDR
    Jumlah Maximal 10,000,000 IDR

    Parameter Respons

    Contoh : Simulasi Respons pembayaran QR sukses (Objek Kode QR)

    {
      "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
      "business_id": "58cd618ba0464eb64acdb246",
      "currency": "IDR",
      "amount": 10000,
      "status": "SUCCEEDED",
      "created": "2022-10-22T06:30:05.86474Z",
      "qr_id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
      "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
      "reference_id": "order-id-1666420204",
      "type": "DYNAMIC",
      "channel_code": "ID_DANA",
      "expires_at": "2022-10-23T09:56:43.60445Z",
      "description": "",
      "basket": null,
      "metadata": null,
      "payment_detail": {
        "receipt_id": "000111666",
        "source": "GOPAY",
        "name": null,
        "account_details": null
      }
    }

    Mengembalikan Objek Pembayaran QR dengan kode status HTTP 200

    Payload Callback

    Contoh : Payload Callback Pembayaran Sukses

    {
      "event": "qr.payment",
      "api_version": "2022-07-31",
      "business_id": "58cd618ba0464eb64acdb246",
      "created": "2022-10-22T06:30:05.86474Z",
      "data": {
        "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
        "business_id": "58cd618ba0464eb64acdb246",
        "currency": "IDR",
        "amount": 10000,
        "status": "SUCCEEDED",
        "created": "2022-10-22T06:30:05.86474Z",
        "qr_id": "qr_61cb3576-3a25-4d35-8d15-0e8e3bdba4f2",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "reference_id": "order-id-1666420204",
        "type": "DYNAMIC",
        "channel_code": "ID_DANA",
        "expires_at": "2022-10-23T09:56:43.60445Z",
        "description": "",
        "basket": null,
        "metadata": null,
        "payment_detail": {
          "receipt_id": "000111666",
          "source": "GOPAY",
          "name": null,
          "account_details": null
        }
      }
    }

    Merchant akan mendapatkan satu Callback Pembayaran QR.

    Kode Eror

    Contoh : Simulasi Respons Eror untuk Pembayaran QR

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is invalid input in one of the required request fields"
    }
    Error Code Description
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    INVALID_API_KEY
    401
    Format API key tidak valid
    DATA_NOT_FOUND
    404
    QR ID yang ditentukan tidak ditemukan. Harap periksa lagi
    INACTIVE_QR_CODE
    410
    Kode QR tidak aktif dan tidak dapat menerima pembayaran
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu

    Objek Refund QR

    Objek Refund QR dikembalikan dalam respons dan callback dari Pembayaran Pengembalian Dana QR, Dapatkan Pengembalian Dana QR dengan Refund ID, dan Daftar Pengembalian Dana QR dengan Payment ID QR. Untuk Daftar Pengembalian Dana QR dengan Payment ID QR, jika terdapat lebih dari satu pengembalian dana sebagian untuk sebuah pembayaran QR , isi respons akan berisi array Objek Pengembalian Dana QR.

    Contoh: Object Pengembalian Dana QR

    {
      "id": "qrrf_52b86306-7464-4fe2-8f98-967ca603f90a",
      "qrpy_id": "qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78",
      "status": "PENDING",
      "currency": "IDR",
      "payment_amount": 100000,
      "refund_amount": 50000,
      "channel_code": "ID_DANA",
      "reason": "REQUESTED_BY_CUSTOMER",
      "failure_code": null,
      "created": "2022-07-15T09:56:43.60445Z",
      "updated": "2022-07-15T09:56:43.60445Z",
      "refunded_at": null
    }
    Parameter Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi pengembalian dana QR (awalan qrrf_)
    qrpy_id string Pengidentifikasi unik untuk transaksi pembayaran QR yang asli
    status string Status permintaan pengembalian dana
    Nilai yang diperbolehkan: SUCCEEDED, FAILED, PENDING
    currency string Mata uang yang digunakan untuk transaksi dalam format ISO4217
    Nilai yang diperbolehkan: IDR
    payment_amount number Jumlah asli transaksi pembayaran QR
    refund_amount number Jumlah yang akan dikembalikan
    channel_code string Kode saluran yang menunjukkan mitra kode QR
    Nilai yang diperbolehkan: ID_DANA
    reason string Alasan pengembalian dana
    failure_code string Alasan permintaan pengembalian dana gagal
    created string Stempel waktu permintaan pengembalian dana dalam ISO 8601. Zona waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    updated string Stempel waktu pembaruan objek pengembalian dana terbaru dalam ISO 8601. Zona waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    refunded_at string Stempel waktu penyelesaian pengembalian dana dari mitra kode QR dalam ISO 8601. Zona waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ

    Refund QR Payment

    Endpoint POST ini digunakan untuk melakukan request pengembalian dana penuh atau sebagian dari pembayaran QR. Pengembalian dana berkali-kali untuk satu transaksi dapat dilakukan selama jumlah pengembalian dana keseluruhan tidak melebihi jumlah transaksi asli.

    Jika pengembalian dana penuh diminta dalam waktu 24 jam setelah pembayaran selesai, pembayaran asli akan menjadi VOIDED. Biaya dan PPN asli yang dibebankan akan dikembalikan sepenuhnya.

    Jika terdapat permintaan pengembalian dana dalam jumlah sebagian atau jika pengembalian dana dalam jumlah berapa pun diminta setelah 24 jam penyelesaian pembayaran, pembayaran awal akan menjadi REFUNDED. Biaya dan PPN asli yang dibebankan TIDAK akan dikembalikan sama sekali.

    Aturan dan Batasan


    Nilai QRIS DANA QRIS LINKAJA
    Tersedia Xendit?
    Mendukung pengembalian dana sebagian?
    Pengembalian dana berkai-kali diperbolehkan?
    Validitas
    30 hari sejak pembayaran
    Biaya transaksi dikembalikan?
    ✓ jika pengembalian dana dengan jumlah penuh diminta dalam waktu 24 jam setelah penyelesaian pembayaran

    ✕ jika pengembalian dana sebagian diminta atau jika pengembalian dana dengan jumlah berapapun diminta 24 jam setelah penyelesaian pembayaran

    Penerbit yang Didukung


    Nilai Jumlah Penuh & Dalam 24 Hours of Payment Completion Jumlah Penuh & Setelah 24 Hours of Payment Completion Jumlah Sebagian
    DANA
    ShopeePay
    OVO
    LinkAja
    Mandiri
    Permata
    CIMB
    Jenius / BTPN
    BSI

    Contoh: Permintaan Pengembalian Dana Pembayaran QR Code

    POST https://api.xendit.co/qr_codes/payments/:qrpy_id/refunds

    Parameter Request

    curl https://api.xendit.co/qr_codes/payments/qrpy_8182837te-87st-49ing-8696-1239bd4d759c/refunds -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
       -H 'Content-Type: application/json' \
       --data-raw '{
        "amount": "50000",
        "reason": "REQUESTED_BY_CUSTOMER"
    }'
    Parameter Header Tipe Deskripsi
    idempotency-key
    opsional
    string Disediakan untuk mencegah permintaan duplikat. Dapat sama dengan UUID apa pun. Kunci idempotensi disimpan pada tahap request. Kedaluwarsa setelah 24 jam sejak permintaan pertama
    for-user-id
    opsional
    string User-id sub-akun yang Anda inginkan untuk melakukan transaksi ini

    Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Path Tipe Deskripsi
    qrpy_id
    wajib
    string Pengenal unik untuk transaksi pembayaran QR asli (awalan qrpy_) yang dikembalikan di callback pembayaran QR
    Parameter Body Tipe Deskripsi
    amount
    opsional
    number Jumlah yang akan dikembalikan kepada pelanggan Anda. Jumlah kumulatif yang dikembalikan tidak boleh melebihi jumlah asli yang ditransaksikan

    Jika jumlah tidak ada di badan permintaan, sisa jumlah yang tidak dikembalikan dari transaksi awal akan diproses
    reason
    opsional
    string Alasan pengembalian dana, pilih dari salah satu nilai berikut
    Nilai yang tersedia: DUPLICATE, FRAUDULENT, REQUESTED_BY_CUSTOMER, CANCELLATION, OTHERS

    Parameter Response

    Contoh: Respons Sukses Pengembalian Dana Pembayaran QR Code (QR Refund Object)

    {
      "id": "qrrf_52b86306-7464-4fe2-8f98-967ca603f90a",
      "qrpy_id": "qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78",
      "status": "PENDING",
      "currency": "IDR",
      "payment_amount": 100000,
      "refund_amount": 50000,
      "channel_code": "ID_DANA",
      "reason": "REQUESTED_BY_CUSTOMER",
      "failure_code": null,
      "created": "2022-07-15T09:56:43.60445Z",
      "updated": "2022-07-15T09:56:43.60445Z",
      "refunded_at": null
    }

    Mengembalikan QR Refund Object dengan HTTP status code 200 dan status PENDING.

    Kode Eror

    Contoh: Respons Eror Pengembalian Dana Pembayaran QR Code

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is an error with the format submitted to the server"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Ada kesalahan dengan format yang dikirimkan ke server
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Jumlah pengembalian dana yang diminta tidak dapat melebihi jumlah sisa pembayaran awal
    REFUND_IN_PROGRESS
    400
    Permintaan pengembalian dana penuh secara bersamaan untuk satu transaksi pembayaran QR tidak diperbolehkan. Harap tunggu hingga permintaan pengembalian dana penuh yang tertunda diselesaikan sebelum memulai yang baru
    REFUND_NOT_SUPPORTED
    400
    Fitur pengembalian dana tidak tersedia karena metode tidak disediakan oleh partner QR
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Fitur pengembalian dana sebagian tidak tersedia karena metode ini tidak didukung untuk penerbit QR ini
    INVALID_API_KEY
    401
    Format API key invalid
    REQUEST_FORBIDDEN_ERROR
    403
    API key dilarang untuk melakukan permintaan ini
    INELIGIBLE_TRANSACTION
    403
    Transaksi refund yang diminta tidak dapat diproses karena transaksi dalam status “FAILED”, “PENDING”, atau “VOIDED”
    DATA_NOT_FOUND
    404
    Sumber tidak ditemukan. Harap periksa lagi permintaan Anda
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga. Tim kami telah diberitahu dan akan memecahkan masalah tersebut
    CHANNEL_UNAVAILABLE
    503
    Partner QR saat ini mengalami masalah yang tidak terduga. Partner QR akan diberi tahu untuk menyelesaikan masalah ini

    Callback QR Refund

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada bagian QR Code paid di Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Example: Payload Webhook Refund Sukses

    {
        "event": "qr.refund",
        "api_version": null,
        "business_id": "58cd618ba0464eb64acdb246",
        "created": "2022-10-22T06:30:05.86474Z", 
        "data": {
            "id": "qrrf_52b86306-7464-4fe2-8f98-967ca603f90a",
            "qrpy_id": "qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78",
            "status": "SUCCEEDED",
            "currency": "IDR",
            "payment_amount": 100000,
            "refund_amount": 50000,
            "channel_code": "ID_DANA",
            "reason": "REQUESTED_BY_CUSTOMER",
            "failure_code": null,
            "created": "2022-07-15T09:56:43.60445Z",
            "updated": "2022-07-15T09:56:43.60445Z",
            "refunded_at": "2022-07-15T09:57:43.60445Z"
        }
    }
    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Deskripsi
    event string Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant.
    Nilai yang tersedia: qr.refund
    api_version string Versi API. Contoh: 2020-04-22.
    Default: NULL
    business_id string ID bisnis Anda di Xendit
    created string Timestamp dalam ISO 8601 untuk pembuatan notifikasi callback. Zona waktu UTC+0
    Format: YYYY-MM-DDTHH:mm:ssZ
    data object Return QR Refund Object
    Kode Kegagalan Deskripsi
    INELIGIBLE_TRANSACTION Transaksi telah melewati periode valid untuk melakukan refund atau jumlah request refund telah melampaui jumlah yang diperbolehkan.
    INSUFFICIENT_BALANCE Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled.
    INSUFFICIENT_BALANCE Akun Switcher tidak memiliki cukup saldo untuk melakukan refund. Silakan mencoba kembali setelah memastikan saldo akun switcher cukup.
    REFUND_TEMPORARILY_UNAVAILABLE Refund sementara tidak tesedia dikarenakan limitasi settlement dengan penyedia eWallet. Silakan coba kembali.
    MAXIMUM_USER_BALANCE_EXCEEDED Refund tidak dapat diproses karena penerimaan refund akan mengakibatkan saldo user melebihi maksimum limit.

    Get QR Refund dengan Refund ID

    GET endpoint ini dipakai untuk mendapatkan detail QR refund dengan ID refund (qrrf_) dari respons Refund QR Payment.

    Contoh: Get QR Refund dengan Refund ID Request

    Parameter Request

    GET https://api.xendit.co/qr_codes/payments/:qrpy_id/refunds/:refund_id
    curl https://api.xendit.co/qr_codes/payments/qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78/refunds/qrrf_52b86306-7464-4fe2-8f98-967ca603f90a -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform
    Parameter Path Tipe Deskripsi
    qrpy_id
    required
    string Pengidentifikasi unik untuk transaksi original. (prefix qrpy_) dikembalikan dalam QR payment callback
    refund_id
    required
    string Pengidentifikasi unik untuk transaksi refund. (prefix qrrf_) dikembalikan dalam Refund QR Payment

    Parameter Respon

    Contoh: Get QR Refund dengan Respons Sukses ID Refund (QR Refund Object)

    {
      "id": "qrrf_52b86306-7464-4fe2-8f98-967ca603f90a",
      "qrpy_id": "qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78",
      "status": "SUCCEEDED",
      "currency": "IDR",
      "payment_amount": 100000,
      "refund_amount": 50000,
      "channel_code": "ID_DANA",
      "reason": "REQUESTED_BY_CUSTOMER",
      "failure_code": null,
      "created": "2022-07-15T09:56:43.60445Z",
      "updated": "2022-07-15T09:56:43.60445Z",
      "refunded_at": "2022-07-15T09:57:43.60445Z"
    }

    Dikembalikan QR Refund Object dengan kode status 200 sebagai identifikasi valid.

    Kode Eror

    Contoh: Get QR Refund dengan Respons Eror ID Refund

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is an error with the format submitted to the server"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Ada kesalahan dengan format yang dikirimkan ke server.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.

    Lis Refund QR dengan ID pembayaran QR

    GET endpoint ini dipakai untuk mendapatkan informasi semua refund terkait satu ID pembayaran QR (qrpy_) dari QR payment callback.

    Contoh: Lis Refund QR dengan Reques ID pembayaran QR

    GET https://api.xendit.co/qr_codes/payments/:qrpy_id/refunds

    Parameter Request

    curl https://api.xendit.co/qr_codes/payments/qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78/refunds -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-akun yang anda ingin melakukan transaksi ini.

    Header ini akan dipakai jika anda mempunyai akses xen platform. lihat xenPlatform
    Path Parameter Tipe Deskripsi
    qrpy_id
    wajib
    string Pengidentifikasi unik untuk transaksi original. (prefix qrpy_) dikembalikan dalam QR payment callback
    Query Parameter Tipe Deskripsi
    limit
    opsional
    number Jumlah transaksi yang akan dikembalikan dalam lis respons
    Default: 10
    Min: 1
    Max: 50
    status
    opsional
    string Status refund status untuk diambil.
    Nilai Tersedia: SUCCEEDED, FAILED, PENDING

    Parameter Respon

    Contoh: Lis Refund QR dengan Respons sukses ID pembayaran QR

    {
      "has_more": false,
      "data": [
        {
          "id": "qrrf_52b86306-7464-4fe2-8f98-967ca603f90a",
          "qrpy_id": "qrpy_319f4504-867f-45bc-aec4-8ac64fb6be78",
          "status": "SUCCEEDED",
          "currency": "IDR",
          "payment_amount": 100000,
          "refund_amount": 50000,
          "channel_code": "ID_DANA",
          "reason": "REQUESTED_BY_CUSTOMER",
          "failure_code": null,
          "created": "2022-07-15T09:56:43.60445Z",
          "updated": "2022-07-15T09:56:43.60445Z",
          "refunded_at": "2022-07-15T09:57:43.60445Z"
        }
      ]
    }
    Parameter Body Tipe Deskripsi
    has_more boolean Menunjukkan apakah ada lebih banyak item yang akan query dari hasil saat ini. Jika hasilnya kosong, has_more akan false
    data array Kembalikan lis QR Refund Objects jika data ditemukan. Kembalikan lis kosong jika data tidak ditemukan.

    Kode Eror

    Contoh: Lis Refund QR dengan Respons Eror ID Pembayaran QR

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "There is an error with the format submitted to the server"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    INVALID_API_KEY
    401
    Format API key tidak sah.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request.
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.

    Direct Debit

    Direct Debit memungkinkan merchant untuk menarik pembayaran langsung dari saldo akun bank customer dengan menghubungkan karti debit atau akses akun bank.

    Untuk panduan integrasi, dan daftar channel yang didukung serta tipe penghubungan, Anda dapat melihat dokumentasi.

    Buat Linked Account Token

    Fitur Linked Account Token memungkinkan Anda untuk melakukan otorisasi terhadap akun pembayaran customer. Endpoint ini digunakan untuk melakukan proses otorisasi akun dan akan menghasilkan token yang dapat digunakan untuk melakukan pembayaran menggunakan Direct Debit bila kanal Direct Debit mendukung fitur Linked Account Token

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Initialize Linked Account Tokenization

    POST https://api.xendit.co/linked_account_tokens/auth

    Request Inisiasi Linked Account Tokenization

    Contoh Request Inisiasi Linked Account Tokenization

    curl https://api.xendit.co/linked_account_tokens/auth -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "DC_BRI",
        "properties": {
            "account_mobile_number": "+62818555988",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "account_email": "email@email.com"
        }
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $linkedAccountTokenizationParams = [
        'customer_id' => '4b7b6050-0830-440a-903b-37d527dbbaa9',
        'channel_code' => 'DC_BRI',
        'properties' => [
          'account_mobile_number' => '+62818555988',
          'card_last_four' => '8888',
          'card_expiry' => '06/24',
          'account_email' => 'test.email@xendit.co'
        ],
        'metadata' => [
          'meta' => 'data'
        ]
      ];
    
      $initializeTokenization = \Xendit\DirectDebit::initializeLinkedAccountTokenization(
        $linkedAccountTokenizationParams
      );
      var_dump($initializeTokenization);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.initializeTokenization({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
      channelCode: 'DC_BRI',
      properties: {
        accountMobileNumber: '+62818555988',
        cardLastFour: '1234',
        cardExpiry: '06/24',
        accountEmail: 'email@email.com',
      },
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    properties := map[string]interface{}{
      "account_mobile_number": "+62818555988",
      "card_last_four": "8888",
      "card_expiry": "06/24",
      "account_email": "test.email@xendit.co",
    }
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := linkedaccount.InitializeLinkedAccountTokenizationParams{
      CustomerID:   "791ac956-397a-400f-9fda-4958894e61b5",
      ChannelCode:  xendit.DC_BRI,
      Properties:   properties,
      Metadata:     metadata,
    }
    
    resp, err := linkedaccount.InitializeLinkedAccountTokenization(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("initialized linked account tokenization: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> properties = new HashMap<>();
      properties.put("account_mobile_number", "+62818555988");
      properties.put("card_last_four", "8888");
      properties.put("card_expiry", "06/24");
      properties.put("account_email", "test.email@xendit.co");
    
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("tes", "123");
    
      Map<String, Object> params = new HashMap<>();
      params.put("customer_id", "791ac956-397a-400f-9fda-4958894e61b5");
      params.put("channel_code", "DC_BRI");
      params.put("properties", properties);
      params.put("metadata", metadata);
    
      InitializedLinkedAccount linkedAccount = InitializedLinkedAccount.initializeLinkedAccountTokenization(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    card_linking = DirectDebit.helper_create_card_link(
        account_mobile_number="+62818555988",
        card_last_four="8888",
        card_expiry="06/24",
        account_email="test.email@xendit.co",
    )
    linked_account = DirectDebit.initialize_tokenization(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        channel_code="DC_BRI",
        properties=card_linking,   
    )
    print(linked_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    InitializedLinkedAccountTokenParameter parameter = new InitializedLinkedAccountTokenParameter
    {
        CustomerId = "customer-id",
        ChannelCode = LinkedAccountEnum.ChannelCode.DcBri,
        Properties = new LinkedAccountProperties
        {
            AccountMobileNumber = "+62818555988",
            CardLastFour = "4444",
            CardExpiry = "06/24",
            AccountEmail = "test@email.com",
        },
        Metadata = new Dictionary<string, object>()
        {
            { "example-metadata", "here is the example" },
        },
    };
    
    InitializedLinkedAccountToken initializedLinkedAccountToken = await linkedAccountToken.Initialize(parameter);
    Request Body Parameter Deskripsi
    customer_id
    required
    string ID dari objek customer yang akun tokennya akan dihubungkan. Panggil Customer API untuk membuat Customer ID
    channel_code
    required
    string Identifikasi penyelenggara jasa pembayaran. Kode harus ditulis dengan huruf besar.


    Kode Channel yang tersedia: DC_BRI
    properties
    optional
    object Informasi dalam format JSON yang dibutuhkan untuk melakukan otorisasi akun. Nilai di dalam properties berubah berdasarkan kanal pembayaran:

    Untuk Debit Card (BRI):
    Key Value
    account_mobile_number
    required
    Nomor handphone yang terdaftar pada penyelenggara jasa atau kanal pembayaran. Format: +(country code)(subscriber number)
    card_last_four
    required
    Empat digit terakhir kartu debit
    card_expiry
    optional
    Bulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    account_email
    required
    Alamat email customer yang terdaftar di penyelenggara jasa atau kanal pembayaran
    Untuk Debit Card (BCA OneKlik):
    Key Value
    account_mobile_number
    required
    Nomor handphone pelanggan yang terdaftar pada penyelenggara jasa standar internasional E.164. Format: +(kode negara)(nomor terdaftar)
    success_redirect_url
    required
    URL dimana end user akan diarahkan jika proses otorisasi berhasil. Linked account token ID akan disertakan dalam URL sebagai parameter query.
    failure_redirect_url
    optional
    URL dimana end user akan diarahkan jika proses otorisasi gagal.
    callback_url
    optional
    URL untuk dapat menerima notifikasi pembayaran setelah pembayaran sukses dilakukan oleh customer. Jika tidak ada URL yang disediakan, notifikasi akan dikirim ke setelan tetap yang diinformasikan pada saat proses onboarding.
    device
    optional
    Wajib untuk BCA OneKlik.
    Informasi sidik jari perangkat end-customer. Ini digunakan untuk mendeteksi penipuan.
    Key Value
    id
    required
    Pengidentifikasi perangkat unik untuk end-customer Android atau iOS.

    Jika diakses melalui web, masukkan string WEB.
    ip_address
    required
    Alamat IPv4 atau IPv6 end-customer pada titik permintaan.
    user_agent
    required
    String user-agent end-customer yang diekstraksi dari perangkat.
    ad_id
    optional
    Android Advertising ID (AAID) atau iOS Identifier for Advertisers (IDFA).
    imei
    optional
    International Mobile Equipment Identity (IMEI) perangkat end-customer.
    metadata
    optional
    object Format JSON bebas untuk informasi tambahan yang disediakan pada saat request.

    Response Inisiasi Linked Account Tokenization -

    Contoh Response Sukses Inisiasi Linked Account Tokenization

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "DC_BRI",
        "authorizer_url": null,
        "status": "PENDING",
        "metadata": null
    }
    Parameter Deskripsi
    id string ID unik hasil otorisasi akun dari Xendit
    customer_id string ID Customer Objek
    channel_code string Kode penyelenggara jasa pembayaran
    authorizer_url string Untuk debit card (BRI), parameter ini akan selalu null; lanjut ke langkah "Validate OTP for Linked Account Token".
    status string Status otorisasi akun. Status akan selalu PENDING untuk pada saat inisiasi
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat request.

    Initialize Linked Account Tokenization - Errors

    See other common errors here.

    Initialize Linked Account Tokenization - Errors

    See other common errors here.

    Kode Kesalahan Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang direquest belum tersedia atau belum diaktifkan untuk akun ini.
    CUSTOMER_NOT_FOUND_ERROR
    400
    customer_id yang direquest tidak ada atau tidak terdapat akses.
    INVALID_ACCOUNT_DETAILS
    400
    Value di parameter properties tidak cocok dengan data yang ada di bank
    ACCOUNT_ACCESS_BLOCKED
    400
    Request linking ditolak oleh bank. Kemungkinan terjadi karena akun bank tidak dapat diakses atau belum mengaktivasikan servis ini.
    MAX_ACCOUNT_LINKING
    400
    Gagal menghubungkan akun karena sudah mencapai batas maksimum penghubungan akun yang diperbolehkan oleh Bank. Silahkan hapus penghubungan yang sebelumnya sudah tersedia untuk akun ini
    OTP_DELIVERY_ERROR
    400
    Bank gagal mengirimkan OTP ke pihak customer. Silahkan coba lagi.
    CHANNEL_UNAVAILABLE
    503
    Target channel saat ini tidak tersedia. Hal ini disebabkan channel partner sedang error atau downtime.

    Validasi OTP untuk Linked Account Token

    Penghubungan akun untuk kartu debit akan membutuhkan OTP untuk melanjutkan proses. Setelah proses inisiasi selesai, bank akan mengirimkan OTP ke nomor handphone yang telah terhubung dengan akun bank customer. Endpoint ini akan memvalidasi OTP dengan bank.

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Validasi OTP untuk Linked Account Token

    POST https://api.xendit.co/linked_account_tokens/{linked_account_token_id}/validate_otp

    Request Validasi OTP untuk Linked Account Token

    Contoh Request Validasi OTP untuk Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/validate_otp -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "otp_code":"123456"
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $validateOTPForLinkedAccountParams = [
        'otp_code' => '333000'
      ];
    
      $validateOTPForLinkedAccount = \Xendit\DirectDebit::validateOTPForLinkedAccount(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f',
        $validateOTPForLinkedAccountParams
      );
      var_dump($validateOTPForLinkedAccount);
    
    ?>
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.ValidateOTPForLinkedAccountParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
      OTPCode:              "333000",
    }
    
    resp, err := linkedaccount.ValidateOTPForLinkedAccount(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("validated linked account: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> params = new HashMap<>();
      params.put("otp_code", "333000");
    
      String tokenId = "lat-ba3c5645-f134-432a-b4f4-f8972685aa03";
    
      ValidatedLinkedAccount linkedAccount = ValidatedLinkedAccount.validateOTP(tokenId, params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    linked_account = DirectDebit.validate_token_otp(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
        otp_code="333000",
    )
    print(linked_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string otpCode = "333000";
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    
    ValidatedLinkedAccountToken validatedLinkedAccountToken = await linkedAccountToken.ValidateOtp(otpCode, linkedAccountTokenId);
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Inisiasi Account Authorization. Memiliki prefiks lat-.
    Parameter Request Deskripsi
    otp_code
    required
    string OTP yang diterima oleh customer dari bank partner untuk penghubungan akun

    Validate OTP for Linked Account Token - Response

    Example Validate OTP for Linked Account Token Success Response

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "customer_id": "239c16f4-866d-43e8-9341-7badafbc019f",
        "channel_code": "DC_BRI",
        "status": "SUCCESS"
    }
    Parameter Respon Deskripsi
    id string ID unik dari Xendit untuk otorisasi linked account token ini
    customer_id string ID dari object Customer
    channel_code string Kode identifikasi untuk kanal pembayaran
    status string Status otorisasi, akan selalu SUCCESS jika validasi berhasil. Jika tidak, kesalahan akan terjadi

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disediakan tidak tersedia atau belum diaktifkan untuk akun ini.
    INVALID_OTP_ERROR
    400
    otp_code yang dimasukkan salah.
    EXPIRED_OTP_ERROR
    400
    otp_code yang disediakan telah kedaluwarsa.
    MAX_OTP_ATTEMPTS_ERROR
    400
    Telah mencapai percobaan maksimum verifikasi OTP yang diperbolehkan untuk channel ini
    ACCOUNT_LINKING_ALREADY_COMPLETED
    409
    Request untuk melakukan linked account token duplikat. Ini terjadi karena request yang sama telah diproses sebelumnya dengan status sukses
    ACCOUNT_LINKING_ALREADY_FAILED
    409
    Request untuk melakukan linked account token duplikasi. Ini terjadi karena request yang sama telah diproses sebelumnya dengan status gagal.

    Cek Akses Akun

    Endpoint ini akan mengembalikan akun bank yang dapat diakses oleh linked account token

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Get Accessible Accounts by Linked Account Token

    GET https://api.xendit.co/linked_account_tokens/{linked_account_token_id}/accounts

    Request Mendapatkan Access Account menggunakan Linked Account Token

    Contoh Request Get Accessible Accounts menggunakan Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/accounts -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $retrieveLinkedAccounts = \Xendit\DirectDebit::retrieveAccessibleLinkedAccounts(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f'
      );
      var_dump($retrieveLinkedAccounts);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.retrieveAccountsByTokenID({
      tokenID: 'lat-aa620619-124f-41db-995b-66a52abe036a',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.RetrieveAccessibleLinkedAccountParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
    }
    
    resp, err := linkedaccount.RetrieveAccessibleLinkedAccounts(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved accessible linked accounts: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      AccessibleLinkedAccount[] linkedAccounts = AccessibleLinkedAccount.retrieveAccessibleLinkedAccounts(
          "lat-960e709c-bdd6-4b4a-a361-243186379c45");
      System.out.println(Arrays.toString(linkedAccounts));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    accessible_accounts = DirectDebit.get_accessible_accounts_by_token(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
    )
    print(accessible_accounts)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    AccessibleLinkedAccountToken[] accessibleLinkedAccountTokens = await linkedAccountToken.Get(linkedAccountTokenId);
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Initialize Account Authorization. Memiliki lat- prefix.

    Mendapatkan Respon Akeses Akun dengan Linked Account Token

    Endpoint ini akan mengembalikan himpunan objel dengan properties berikut:

    Contoh Respon Sukses Get Accessible Accounts menggunakan Linked Account Token

    [{
        "id": "la-aa620619-124f-41db-995b-66a52abe036a",
        "channel_code": "DC_BRI",
        "type": "DEBIT_CARD",
        "properties": {
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "currency": "IDR",
            "description": ""
        }
    }]
    Parameter Deskripsi
    id string Pengidentifikasi unik dari akun bank. Memiliki prefix la-.
    channel_code string Pengidentifikasi Kode dari channel
    type string Tipe akun yang telah terhubung

    For BRI: DEBIT_CARD
    For BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties object Objek yang mengandung informasi berhubungan dengan akun. Nilai di dalam properties berubah berdasarkan tipe akun:


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringMasa kadaluarsa bulan dan tahun kartu (dalam MM/YY format)
    currency stringMata uang akunISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    Untuk tipe DEBIT_CARD (BCA OneKlik):
    Key Value
    account_mobile_number stringNomor handphone end-customer yang terdaftar di penyedia jasa
    card_last_four string4 digit terakhir kartu debit
    card_expiry stringKadaluarsa kartu debit (null untuk BCA OneKlik)
    currency stringKode mata uang dengan ISO 4217
    description stringDeskripsi akun (disediakan oleh kanal pembayaran)
    Untuk tipe BANK_REDIRECT (BCA KlikPay):
    Key Value
    channel_code stringKode kanal pembayaran untuk account (BCA_KLIKPAY)

    Error dari Mendapatkan Accessible Accounts by Linked Account Token

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disegunakan tidak tersedia atau belum diaktifkan untuk akun ini.

    Melepaskan Tautan Linked Account Token

    Melepaskan tautan Linked Account Token yang sukses sebelumnya.

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Melepaskan Tautan Linked Account Token

    DELETE https://api.xendit.co/linked_account_tokens/{linked_account_token_id}

    Endpoint: Melepaskan Tautan Linked Account Token - KTB

    DELETE https://api.xendit.co/linked_account_tokens/{linked_account_token_id}?success_redirect_url=https://success.yourcompany.com&failure_redirect_url=https://failure.yourcompany.com

    Permintaan Melepaskan Linked Account Token

    Contoh: Permintaan Melepaskan Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/validate_otp -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $unbindLinkedAccountToken = \Xendit\DirectDebit::unbindLinkedAccountToken(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f'
      );
      var_dump($unbindLinkedAccountToken);
    
    ?>
    let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    let linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
    let url = "https://api.xendit.co/linked_account_tokens/" + linkedAccountTokenId;
    
    var headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
    
    var requestOptions = {
      method: 'DELETE',
      headers: headers,
      redirect: 'follow'
    };
    
    fetch(url, requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.UnbindLinkedAccountTokenParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
    }
    
    resp, err := linkedaccount.UnbindLinkedAccountToken(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("unbinded linked account: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    
      UnbindedLinkedAccount linkedAccount = UnbindedLinkedAccount.unbindLinkedAccountToken ("lat-a08fba1b-100c-445b-b788-aaeaf8215e8f");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    string apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    UnbindedLinkedAccountToken unbindedLinkedAccountToken = await linkedAccountToken.Unbind(linkedAccountTokenId);
    Path Parameter Type Description
    linked_account_token_id
    required
    string Linked account token id diterima dari Inisiasi Linked Account Tokenization. Ini mempunyai prefix lat-
    Query Parameter Type Description
    success_redirect_url string URL dimana pengguna akan dialihkan ke sana jika otorisasi pembatalan tautan berhasil. Ini diperlukan jika metode pembayaran adalah direct debit untuk bank KTB.
    failure_redirect_url string URL dimana pengguna akan dialihkan ke sana jika otorisasi pembatalan tautan gagal. Ini diperlukan jika metode pembayaran adalah direct debit untuk bank KTB.

    Respon Melepaskan Linked Account Token

    Contoh: Respon Melepaskan Linked Account Token

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "is_deleted": true
    }

    Contoh: Respon Melepaskan Linked Account Token - KTB

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "is_deleted": false,
        "authorizer_url": "https://link-web.xendit.co/oauth/lat-aa620619-124f-41db-995b-66a52abe036a/confirm_unlink"
    }
    Parameter Tipe Deskripsi
    id string ID unik yang dihasilkan oleh Xendit untuk linked account token authorization tertentu
    is_deleted boolean Mendeskripsikan apakah tautan linked account token sudah sukses dilepaskan/dihapuskan
    authorizer_url
    optional
    string URL yang dibuat oleh penerbit direct debit yang digunakan untuk mengarahkan pengguna untuk mengotorisasi pemutusan tautan rekening. Hanya ditampilkan untuk token yang ditautkan ke akun bank KTB.

    Error Saat Melepaskan Linked Account Token

    Lihat error lain yang umum disini.

    Kode Kesalahan Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disediakan tidak dapat diakses untuk akun ini.

    Buat Payment Method

    Payment method memungkinkan Anda untuk menarik sumber dana customer dan menggunakannya untuk melakukan pembayaran direct debit atau pembayaran berulang (recurring payment). Saat ini, hanya tersedia linked accounts.

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Membuat Payment Method

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

    Membuat Payment Method

    Contoh Request Membuat Payment Method

    curl https://api.xendit.co/payment_methods -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a"
        }
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $createPaymentMethodParams = [
        'customer_id' => '4b7b6050-0830-440a-903b-37d527dbbaa9',
        'type' => 'DEBIT_CARD',
        'properties' => [
          'id' => 'la-052d3e2d-bc4d-4c98-8072-8d232a552299'
        ],
        'metadata' => [
          'meta' => 'data'
        ]
      ];
    
      $createPaymentMethod = \Xendit\DirectDebit::createPaymentMethod(
        $createPaymentMethodParams
      );
      var_dump($createPaymentMethod);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.createPaymentMethod({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
      type: 'DEBIT_CARD',
      properties: {
        id: 'la-aa620619-124f-41db-995b-66a52abe036a',
      },
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    properties := map[string]interface{}{
      "id": "la-55048b41-a7ab-4799-9f33-6ec5cc078db0",
    }
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := paymentmethod.CreatePaymentMethodParams{
      CustomerID:  "4b7b6050-0830-440a-903b-37d527dbbaa9",
      Type:        xendit.DEBIT_CARD,
      Properties:  properties,
      Metadata:    metadata,
    }
    
    resp, err := paymentmethod.CreatePaymentMethod(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created payment method: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> properties = new HashMap<>();
      properties.put("id", "la-052d3e2d-bc4d-4c98-8072-8d232a552299");
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("halo", "hello");
      metadata.put("tes", "123");
      Map<String, Object> params = new HashMap<>();
      params.put("customer_id", "4b7b6050-0830-440a-903b-37d527dbbaa9");
      params.put("type", "DEBIT_CARD");
      params.put("properties", properties);
      params.put("metadata", metadata);
    
      PaymentMethod paymentMethod = PaymentMethod.createPaymentMethod(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit, DirectDebitPaymentMethodType
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_method = DirectDebit.create_payment_method(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        type=DirectDebitPaymentMethodType.DEBIT_CARD,
        properties={'id': 'la-fac7e744-ab40-4100-a447-cbbb16f29ded'},
    )
    
    print(payment_method)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    PaymentMethodClient paymentMethod = xendit.PaymentMethod;
    
    PaymentMethodParameter parameter = new PaymentMethodParameter
    {
      Type = PaymentMethodEnum.AccountType.DebitCard,
      Properties = new PaymentMethodProperties
      {
        Id = "la-052d3e2d-bc4d-4c98-8072-8d232a552299",
        ChannelCode = PaymentMethodEnum.ChannelCode.DcBri,
        Currency = Currency.IDR,
        CardLastFour = "1234",
        CardExpiry = "06/24",
        Description = "Payment Debit Card",
      },
      CustomerId = "4b7b6050-0830-440a-903b-37d527dbbaa9",
    };
    
    PaymentMethodResponse paymentMethodResponse = await paymentMethod.Create(parameter);
    Parameter Request Deskripsi
    customer_id
    required
    string ID dari customer. Anda dapat membuat Customer dengan menggunakan API Pembuatan Customer
    type
    required
    string Tipe payment method


    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties
    required
    object Informasi tambahan untuk identifikasi metode pembayaran:

    Untuk Debit Card Linking (BRI, BCA OneKlik):
    Key Value
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    Untuk Bank Redirect Linking (BCA KlikPay):
    Key Value
    channel_code
    required
    Kode kanal pembayaran untuk account (BCA_KLIKPAY)
    For BCA KlikPay: BCA_KLIKPAY

    metadata
    optional
    object Format JSON bebas untuk tambahan informasi yang bisa Anda gunakan.

    Parameter Respon

    Example Create Payment Method Success Response

    {    
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "description": null,
        },
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "status": "ACTIVE",
        "created": "2020-03-19T05:34:55+0800",
        "updated": "2020-03-19T05:24:55+0800",
        "metadata": null  
    }
    Parameter Deskripsi
    id string ID untuk identifikasi metode pembayaran yang telah disambungkan ke akun pembayaran. Memiliki prefiks pm-.
    type string Tipe akun yang telah dihubungkan.

    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties object Informasi tambahan terkait dengan metode pembayaran. Nilai di dalam properties dapat berubah sesuai dengan tipe akun:


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu debit
    card_expiry stringBulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    currency stringMata uang yang digunakan akun dalam ISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    For BCA OneKlik:
    Key Value
    channel_code Kode kanal pembayaran untuk akun (BCA_ONEKLIK):
    • BCA OneKlik (ID) - BCA_ONEKLIK
    account_mobile_number stringNomor handphone end-customer yang terdaftar di penyedia jasa
    card_last_four string4 digit terakhir kartu debit
    card_expiry stringKadaluarsa kartu debit (null untuk BCA OneKlik)
    currency stringKode mata uang dengan ISO 4217
    description stringDeskripsi akun (disediakan oleh kanal pembayaran)
    For BCA KlikPay:
    Key Value
    channel_code Kode kanal pembayaran untuk account (BCA_KLIKPAY):
    • BCA KlikPay (ID) - BCA_KLIKPAY
    customer_id string ID dari customer yang metode pembayarannya telah dihubungkan
    status
    required
    string Status dari payment method.
    Status akan ACTIVE sesaat setelah metode pembayaran dibuat.
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object JSON format bebas untuk informasi tambahan yang disediakan dalam request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang disediakan tidak ada
    LIINKED_ACCOUNT_NOT_FOUND_ERROR
    400
    properties and type yang disediakan, kombinasinya dalam request tidak tersedia atau tidak memiliki akses
    CUSTOMER_NOT_FOUND_ERROR
    400
    customer_id yang disediakan di request tidak ada atau tidak memiliki akses
    DUPLICATE_ERROR
    409
    Request ini telah memiliki payment method dengan status ACTIVE

    Buat Direct Debit

    Buat pendebitan untuk menarik dana dari akun customer dengan menggunakan payment method yang aktif

    Endpoint: Create Direct Debit Payment

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

    Membuat Request Pembayaran

    Contoh Membuat Request Pembayaran

    curl https://api.xendit.co/direct_debits -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -H 'Idempotency-key: Test_Idempotent_Key'\
       --data-raw '{
        "reference_id": "customer_test_reference_id",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": 1500,
        "enable_otp": true,
        "callback_url": "https://payment-callback-listener/"
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $createDirectDebitPaymentParams = [
        'reference_id' => 'test-direct-debit-ref',
        'payment_method_id' => 'pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef',
        'currency' => 'IDR',
        'amount' => 15000,
        'callback_url' => 'http://webhook.site/',
        'enable_otp' => true,
        'description' => 'test description',
        'basket' => [
          [
            'reference_id' => 'basket-product-ref-id',
            'name' => 'product name',
            'category' => 'mechanics',
            'market' => 'ID',
            'price' => 50000,
            'quantity' => 5,
            'type' => 'product type',
            'sub_category' => 'product sub category',
            'description' => 'product description',
            'url' => 'https://product.url'
          ]
        ],
        'device' => [
          'id' => 'device_id',
          'ip_address' => '0.0.0.0',
          'ad_id' => 'ad-id',
          'imei' => '123a456b789c'
        ],
        'success_redirect_url' => 'https://success-redirect.url',
        'failure_redirect_url' => 'https://failure-redirect.url',
        'metadata' => [
          'meta' => 'data'
        ],
        'Idempotency-key' => '' . time()
      ];
    
      $createDirectDebitPayment = \Xendit\DirectDebit::createDirectDebitPayment(
        $createDirectDebitPaymentParams
      );
      var_dump($createDirectDebitPayment);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.createDirectDebitPayment({
      idempotencyKey: 'Test_Idempotent_Key',
      referenceID: 'customer_test_reference_id',
      paymentMethodID: 'pm-c30d4800-afe4-4e58-ad5f-cc006d169139',
      currency: 'IDR',
      amount: 10000,
      callbackURL: 'https://payment-callback-listener/',
      enableOTP: true,
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := directdebitpayment.CreateDirectDebitPaymentParams{
      ReferenceID:      "test-direct-debit-ref-0100",
      PaymentMethodID:  "pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef",
      Currency:         "IDR",
      Amount:           15000,
      CallbackURL:      "http://webhook.site/",
      EnableOTP:        true,
      Description:      "test description",
      Basket:           []xendit.DirectDebitBasketItem{
        {
          ReferenceID:  "basket-product-ref-id",
          Name:         "product-name",
          Category:     "mechanics",
          Market:       "ID",
          Price:        50000,
          Quantity:     5,
          Type:         "product type",
          SubCategory:  "product sub category",
          Description:  "product description",
          URL:          "https://product.url",
        },
      },
      Device:           xendit.DirectDebitDevice{
        ID:         "device-id",
        IPAddress:  "0.0.0.0",
        UserAgent:  "user-agent",
        ADID:       "ad-id",
        Imei:       "123a456b789c",
      },
      SuccessRedirectURL: "https://success-redirect.url",
      FailureRedirectURL: "https://failure-redirect.url",
      Metadata:           metadata,
      IdempotencyKey:     time.Now().String(),
    }
    
    resp, err := directdebitpayment.CreateDirectDebitPayment(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitBasketItem basketItem =  DirectDebitBasketItem.builder()
          .referenceId("basket-product-ref-id")
          .name("product-name")
          .category("mechanics")
          .market("ID")
          .price(50000)
          .quantity(5)
          .type("product type")
          .subCategory("product sub category")
          .description("product description")
          .url("https://product.url")
          .build();
      DirectDebitBasketItem[] basketItemArray = new DirectDebitBasketItem[]{basketItem};
    
      DirectDebitDevice device = DirectDebitDevice.builder()
          .id("device-id")
          .ipAddress("0.0.0.0")
          .userAgent("user-agent")
          .adId("ad-id")
          .imei("123a456b789c")
          .build();
    
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("halo", "hello");
      metadata.put("tes", "123");
    
      Map<String, Object> params = new HashMap<>();
      params.put("reference_id", "test-direct-debit-ref-4");
      params.put("payment_method_id", "pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef");
      params.put("currency", "IDR");
      params.put("amount", 15000);
      params.put("callback_url", "http://webhook.site/");
      params.put("enable_otp", true);
      params.put("description", "test description");
      params.put("basket", basketItemArray);
      params.put("success_redirect_url", "https://success-redirect.url");
      params.put("failure_redirect_url", "https://failure-redirect.url");
      params.put("device", device);
      params.put("metadata", metadata);
    
      String idempotencyKey = "idempotency-key-4";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.createDirectDebitPayment(params, idempotencyKey);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.create_payment(
      reference_id="direct-debit-ref-1594718940",
      payment_method_id="pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
      currency="IDR",
      amount="60000",
      callback_url="http://webhook.site/",
      enable_otp=True,
      idempotency_key="idemp_key-1594718940",
    )ß
    
    print(payment)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentParameter directDebitPaymentParameter = new DirectDebitPaymentParameter
    {
      ReferenceId = "reference-id",
      PaymentMethodId = "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
      Currency = Currency.IDR,
      Amount = 10000,
      CallbackUrl = "https://callback-url.com/",
      EnableOtp = true,
      Description = "Example Description",
      SuccessRedirectUrl = "https://success-url.com/",
      FailureRedirectUrl = "https://failure-url.com/",
      Device = new LinkedAccountDevice
      {
        Id = "device-id",
        IpAddress = "255.255.255.255",
        UserAgent = "App",
        Imei = "imei-example",
        AdId = "ad-id",
      },
      Metadata = null,
      Basket = new BasketItem[]
      {
        new BasketItem { Name = "Black shoes", Type = "goods", Price = 2000, Quantity = 1 },
        new BasketItem { Name = "Blue shirt", Type = "apparel", Price = 2000, Quantity = 1 },
      },
    };
    
    string idempotencyKey = "fa9b53a1-f81a-47ff-8fde-b2eec3546b66";
    
    DirectDebitPaymentResponse directDebitPaymentResponse = await directDebitPayment.Create(directDebitPaymentParameter, idempotencyKey);
    Header Deskripsi
    Idempotency-key
    required
    string Disediakan oleh merchant untuk mencegah duplikasi request. Bisa sama dengan reference_id atau GUID.
    Note: Max 100 karakter
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-split-rule
    optional
    string ID Split Rule yang ingin Anda aplikasikan ke pembayaran Direct Debit ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan.

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Request Body Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi yang disediakan merchant untuk transaksi ini
    Note: Max 255 karakter
    payment_method_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik payment method. Anda dapat membuatnya menggunakan Create Payment Method API jika Anda belum membuatnya.
    currency
    required
    string Mata uang dari nominal yang di debit dalam ISO 4217. e.g. "IDR"
    amount
    required
    number Nominal untuk di debit dari akun end-customer
    Note: Maximum nominal yang dapat di charge tanpa OTP adalah 999,999
    callback_url
    required
    string URL dimana notifikasi pembayaran akan dikirimkan setelah transaksi diproses
    Note: Maksimal 255 karakter
    enable_otp
    optional
    boolean Nilai yang diterima: true, false
    Note untuk BCA OneKlik:
    Jika disetel ke true, transaksi akan memerlukan OTP untuk divalidasi terlepas dari objek perangkatnya.
    Jika tidak disediakan, maka akan mengikuti logika validasi objek perangkat yang ditetapkan oleh BCA.
    description
    optional
    string Deskripsi untuk transaksi direct debit
    device
    conditional
    object Diperlukan untuk BCA OneKlik.

    Informasi sidik jari perangkat end-customer. Ini digunakan untuk mendeteksi fraud.
    Key Value
    id
    required
    stringPengidentifikasi perangkat unik untuk end-customer Android atau iOS.

    Jika diakses melalui web, masukkan string “WEB”.
    ip_address
    required
    stringAlamat IPv4 atau IPv6 end-customer pada titik permintaan.
    user_agent
    required
    stringString user-agent end-customer yang diekstraksi dari perangkat.
    ad_id
    optional
    stringAndroid Advertising ID (AAID) atau iOS Identifier for Advertisers (IDFA).
    imei
    optional
    stringInternational Mobile Equipment Identity (IMEI) perangkat end-customer.
    basket
    optional
    array Himpunan objek yang mendeskripsikan item yang dibeli menggunakan direct debit
    Key Nilai
    reference_id required stringPengidentifikasi dari merchant untuk spesifik produk(ie. SKU)
    name required stringNama produk
    market required string2 huruf dalam format ISO 3166-2, kode negara yang mengindikasikan target negara dimana merchant beroperasi
    type required stringTipe produk
    description optional stringDeskripsi produk
    category optional stringKategori item
    sub-category optional stringSub kategori dari item
    price optional stringHarga per unit
    url optional stringURL produk dengan detil produk
    metadata optional stringObjek tambahan yang dapat digunakan untuk atribut tamabahan dari produk
    quantity optional stringJumlah unit dari item dalam keranjang
    success_redirect_url
    conditional
    string Diperlukan untuk BCA OneKlik, BCA KlikPay

    End-customer akan diarahkan ke URL ini pada transaksi yang berhasil.
    Jika OTP tidak diperlukan dan transaksi berhasil, end-customer akan segera dialihkan ke ini.
    failure_redirect_url
    conditional
    string Diperlukan untuk BCA OneKlik, BCA KlikPay

    End-customer akan dialihkan ke URL ini pada transaksi yang gagal atau dibatalkan.
    Jika OTP tidak diperlukan dan transaksi gagal, end-customer akan dialihkan ke ini setelah menampilkan pesan kesalahan.
    metadata
    optional
    object Object of additional information the user may use. User defines the JSON properties and values. You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long

    Respon Membuat Pembayaran

    Contoh Respon Sukses Membuat Pembayaran

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": null,
        "status": "PENDING",
        "basket": null,
        "failure_code": null,
        "is_otp_required": true,
        "otp_mobile_number": "+6287774441111",
        "otp_expiration_timestamp": null,
        "required_action": "VALIDATE_OTP",
        "checkout_url": null,
        "success_redirect_url": null,
        "failure_redirect_url": null, 
        "refunded_amount": null,
        "refunds": null,
        "created": "2020-03-26T05:44:26+0800",
        "updated": null,
        "metadata": null
    }

    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID disediakan oleh merchant
    channel_code string Pengidentifikasi kode untuk channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    required_action string Menjelaskan tindakan yang diperlukan untuk menyelesaikan penautan.

    Jika VALIDATE_ON_REDIRECT, end-customer harus diarahkan ke url_checkout yang disediakan untuk menyelesaikan pembayaran direct debit.

    Jika VALIDATE_OTP, OTP akan dikirimkan ke end-customer dan harus divalidasi melalui endpoint /direct_debits/:id/validate_otp untuk menyelesaikan pembayaran direct debit.

    Jika null, fetch sudah berlangsung.
    checkout_url string Jika required_action adalah VALIDATE_ON_REDIRECT, end customer harus diarahkan ke URL ini untuk menyelesaikan pembayaran.

    Untuk BCA OneKlik, ini akan menjadi page dimana end-customer akan memilih nomor handphone mereka dan memasukkan OTP. URL akan dikirim secara tidak sinkron melalui Payment Initialized Callback.
    success_redirect_url string Hanya untuk BCA OneKlik, BCA KlikPay
    End-customer akan diarahkan ke URL ini untuk transaksi yang berhasil.
    failure_redirect_url string Hanya untuk BCA OneKlik, BCA KlikPay
    End-customer dialihkan ke URL ini untuk transaksi yang gagal atau dibatalkan.

    failure_redirect_url akan memiliki failure-code sebagai bagian dari string kueri. Ini menjelaskan alasan mengapa transaksi gagal. Anda dapat menggunakan ini untuk memperbarui failure_redirect_url page Anda secara dinamis berdasarkan failure-code.
    refunded_amount number Jumlah yang berhasil dikembalikan dari transaksi.
    refunds object Objek yang berisi hal-hal berikut:

    Key Description
    data array Array refund IDs yang PENDING, COMPLETED, dan FAILED
    Hanya maksimal 10 yang akan dikembalikan.
    has_more boolean Nilai akan menjadi true jika jumlah refund ID lebih dari 10. Gunakan List of Refunds API untuk mendapatkan daftar
    url array Buat permintaan GET ke titik akhir ini untuk mendapatkan informasi lebih lanjut tentang refunds
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Membuat Pembayaran

    Contoh Respon Error dalam Membuat Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DUPLICATE_ERROR
    409
    Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali.
    PAYMENT_METHOD_NOT_FOUND_ERROR
    400
    payment_method_id yang disediakan tidak sesuai, tidak ditemukan atau akses tidak tersedia.
    INVALID_PAYMENT_METHOD_ERROR
    400
    Payment method telah expire atau tidak tersedia.
    INSUFFICIENT_BALANCE
    400
    Sumber dana pembayaran tidak memiliki saldo yang cukup untuk menyelesaikan transaksi.
    ACCOUNT_ACCESS_BLOCKED
    400
    Sumber dana pembayaran terblokir dan tidak bisa diakses.
    MAX_AMOUNT_LIMIT_ERROR
    400
    Jumlah transaksi melebihi jumlah yang telah ditetapkan oleh pihak bank.
    PAYMENT_STATUS_FAILED
    400
    Bank partner tidak berhasil memproses transaksi karena batas waktu atau kesalahan tak terduga di pihak bank partner.

    Validasi OTP Direct Debit

    Validasi OTP yang disediakan oleh end customer melalui endpoint ini untuk menyelesakan transaksi jika transaksi tersebut parameter is otp adalah enabled.

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Validate OTP for Direct Debit Payment

    POST https://api.xendit.co/direct_debits/:direct_debit_id/validate_otp/

    Request Validasi OTP Pembayaran

    Contoh Request Validasi Pembayaran

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-test/validate_otp/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       --data-raw '{
        "otp_code": "111222"
        }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $validateOTPForDirectDebitPaymentParams = [
        'otp_code' => '222000'
      ];
    
      $validateOTPForDirectDebitPayment = \Xendit\DirectDebit::validateOTPForDirectDebitPayment(
        'ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c',
        $validateOTPForDirectDebitPaymentParams
      );
      var_dump($validateOTPForDirectDebitPayment);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.validateOTPforPayment({
      directDebitID: 'ddpy-623dca10-5dad-4916-test',
      otpCode: '111222',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.ValidateOTPForDirectDebitPaymentParams{
      DirectDebitID:  "ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c",
      OTPCode:        "222000",
    }
    
    resp, err := directdebitpayment.ValidateOTPForDirectDebitPayment(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("validated direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> params = new HashMap<>();
      params.put("otp_code", "222000");
    
      String directDebitPaymentId = "ddpy-b150da90-2121-44a6-a836-5eebf0d7ab55";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.validateOTP(directDebitPaymentId, params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.validate_payment_otp(
        direct_debit_id="ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
        otp_code="222000",
    )
    
    print(payment)
    XenditConfiguration.ApiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    string otpCode = "123456";
    
    DirectDebitPayment directDebitPayment = await DirectDebitPayment.ValidateOtp(otpCode, "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14");
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit
    Request Body Parameter Deskripsi
    otp_code
    required
    string One-time-password yang diinput oleh customer dan dikirimkan oleh bank

    Response Validasi OTP Pembayaran

    Contoh Response Sukses Get Payment Status by ID

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "+63907XXXX123",
        "otp_expiration_timestamp": "2020-03-26T05:45:06+0800",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "2020-03-26T05:44:46+0800",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentikasi untuk channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Validasi OTP pembayaran

    Contoh Respon Error dalam Validasi OTP Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    direct_debit_id yang disediakan tidak ada atau tidak memiliki akses
    INVALID_OTP_ERROR
    400
    OTP yang disediakan invalid
    EXPIRED_OTP_ERROR
    400
    OTP yang disediakan telah kadaluarsa expired
    MAX_OTP_ATTEMPTS_ERROR
    400
    Payment method telah mencapai maksimum percobaan verifikasi OTP yang diperbolehkan
    INSUFFICIENT_BALANCE
    400
    Sumber dana pembayaran tidak memiliki saldo yang cukup untuk menyelesaikan transaksi
    ACCOUNT_ACCESS_BLOCKED
    400
    Sumber dana pembayaran terblokir dan tidak bisa diakses
    MAX_AMOUNT_LIMIT_ERROR
    400
    Jumlah transaksi melebihi jumlah yang telah ditetapkan oleh pihak bank
    DIRECT_DEBIT_ALREADY_COMPLETED
    409
    Permintaan adalah duplikat dari token akun tertaut yang sudah diproses yang telah berhasil diselesaikan.
    DIRECT_DEBIT_ALREADY_FAILED
    409
    Permintaan adalah duplikat dari token akun tertaut yang sudah diproses yang gagal.

    Cek Payment Method

    Endpoint ini mengembalikan himpunan payment method yang terhubung dengan customer_id yang tersedia

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Get Payment Methods menggunakan Customer ID

    GET https://api.xendit.co/payment_methods?customer_id={customer_id}

    Parameter Request

    Example Get Payment Methods by Customer ID Request

    curl https://api.xendit.co/payment_methods?customer_id=ba830b92-4177-476e-b097-2ad5ae4d3e55 -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getPaymentMethods = \Xendit\DirectDebit::getPaymentMethodsByCustomerID('4b7b6050-0830-440a-903b-37d527dbbaa9');
      var_dump($getPaymentMethods);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getPaymentMethodsByCustomerID({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := paymentmethod.GetPaymentMethodsByCustomerIDParams{
      CustomerID: "4b7b6050-0830-440a-903b-37d527dbbaa9",
    }
    
    resp, err := paymentmethod.CreatePaymentMethod(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved payment method: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      PaymentMethod[] paymentMethods = PaymentMethod.getPaymentMethodsByCustomerId("4b7b6050-0830-440a-903b-37d527dbbaa9");
      System.out.println(Arrays.toString(paymentMethods));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_methods = DirectDebit.get_payment_methods_by_customer_id(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
    )
    
    print(payment_methods)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    PaymentMethodClient paymentMethod = xendit.PaymentMethod;
    
    PaymentMethodResponse[] paymentMethodResponses = await paymentMethod.Get("ed20b5db-df04-41fc-8018-8ea4ac4d1030");
    Query String Parameter Deskripsi
    customer_id
    required
    string ID dari customer objek

    Parameter Respon

    Contoh Respon Sukses Get Payment Methods menggunakan Customer ID

    [{    
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "description": null,
        },
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "status": "ACTIVE",
        "created": "2020-03-19T05:34:55+0800",
        "updated": "2020-03-19T05:24:55+0800",
        "metadata": null  
    }]
    Parameter Deskripsi
    id string ID untuk identifikasi metode pembayaran yang telah disambungkan ke akun pembayaran. Memiliki prefiks pm-
    type
    required
    string Tipe payment method


    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties
    required
    object Informasi tambahan untuk identifikasi metode pembayaran:

    Untuk Debit Card Linking (BRI, BCA OneKlik):
    Key Value
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    Untuk Bank Redirect Linking (BCA KlikPay):
    Key Value
    channel_code
    required
    Kode kanal pembayaran untuk account (BCA_KLIKPAY)
    For BCA KlikPay: BCA_KLIKPAY

    customer_id string ID dari customer objek yang dalam hal ini payment method dihubungkan
    status string Status dari payment method.
    Akan berstatus ACTIVE setelah dibuat
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat melakukan request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Cek Direct Debit Dengan ID

    Mendapatkan detail dari pembayaran direct debit dengan transaksi ID dari Xendit

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Get Payment Status by ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/

    Get Payment Status by ID - Request

    Contoh Request Payment Status by ID

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-test/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getDirectDebitPaymentByID = \Xendit\DirectDebit::getDirectDebitPaymentByID(
        'ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c'
      );
      var_dump($getDirectDebitPaymentByID);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getDirectDebitPaymentStatusByID({
      directDebitID: 'ddpy-623dca10-5dad-4916-test',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.GetDirectDebitPaymentStatusByIDParams{
      ID: "ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c",
    }
    
    resp, err := directdebitpayment.GetDirectDebitPaymentStatusByIDParams(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.getDirectDebitPaymentStatusById("ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    `
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.get_payment_status(
        direct_debit_id="ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
    )
    
    print(payment)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentResponse directDebitPaymentResponse = await directDebitPayment.GetById("ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14");
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit

    Get Payment Status by ID - Response

    Example Get Payment Status by ID Success Response

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "",
        "otp_expiration_timestamp": "",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentikasi dari channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Cek Direct Debit Dengan Reference ID

    Mendapatkan detail dari pembayaran direct debit dengan menggunakan reference ID

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Endpoint: Get Payment Status by Reference ID

    POST https://api.xendit.co/direct_debits?reference_id={reference_id}

    Get Payment Status by Reference ID - Request

    Contoh Request Payment Status by Reference ID

    Query String Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi unik dari merchant untuk spesifik transaksi direct debit ini
    curl https://api.xendit.co/direct_debits?reference_id=test_merchant_reference_id/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getDirectDebitPaymentByReferenceID = \Xendit\DirectDebit::getDirectDebitPaymentByReferenceID(
        'test-direct-debit-ref'
      );
      var_dump($getDirectDebitPaymentByReferenceID);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getDirectDebitPaymentStatusByReferenceID({
      referenceID: 'test_merchant_reference_id',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.GetDirectDebitPaymentStatusByReferenceIDParams{
      ReferenceID: "direct-debit-ref-id",
    }
    
    resp, err := directdebitpayment.GetDirectDebitPaymentStatusByReferenceIDParams(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved direct debit payments: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitPayment[] directDebitPayments = DirectDebitPayment.getDirectDebitPaymentStatusByReferenceId("test-direct-debit-ref-4");
      System.out.println(Arrays.toString(directDebitPayments));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payments = DirectDebit.get_payment_status_by_ref_id(
        reference_id="direct-debit-ref-1594717458",
    )
    
    print(payments)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentResponse[] directDebitPayments = await directDebitPayment.GetById("direct-debit-ref-1594717458");
    Query String Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi unik dari merchant untuk spesifik transaksi direct debit ini

    Get Payment Status by ID - Response

    Contoh Respon Sukses Get Payment Status by ID

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "",
        "otp_expiration_timestamp": "",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentifikasi dari channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Refund Objek

    Refund API memungkinkan Anda untuk sepenuhnya atau sebagian mengembalikan pembayaran direct debit yang berhasil diselesaikan. Refunds dapat dilakukan berkali-kali untuk satu transaksi selama jumlahnya tidak melebihi jumlah transaksi awal.

    Callback akan dikirim ketika refund telah ditentukan berhasil atau gagal.

    Note: Biaya transaksi tidak akan dikembalikan.

    Example Refund a Direct Debit Payment Success Response

    {
        "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
        "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "channel_code": "DC_BRI",
        "currency": "IDR",
        "amount": "1500",
        "status": "PENDING",
        "failure_code": null,
        "reason": "REQUESTED_BY_CUSTOMER",
        "created": "2020-03-26T05:44:26+0800",
        "updated": null,
        "metadata": null
    }
    Parameter Type Description
    id string Pengidentifikasi unik untuk refund yang dihasilkan oleh Xendit.Dimulai dengan ddrfd-
    direct_debit_id string ID transaksi pembayaran asli
    channel_code string Pengidentifikasi kode untuk saluran
    currency string Mata uang refund dalam format ISO4217
    amount string Jumlah yang akan dikembalikan
    status string Refund status. Nilai yang mungkin: PENDING, COMPLETED, FAILED
    failure_code string Berisi error code jika refund gagal. null secara default. Kemungkinan failure codes.
    reason string Alasan mengapa refund dilakukan

    Nilai yang mungkin:
    • FRAUDULENT
    • DUPLICATE
    • REQUESTED_BY_CUSTOMER
    • CANCELLATION
    • OTHER
    created string Timestamp ISO 8601 saat refund request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp in ISO 8601 saat refund request diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object JSON free-format untuk informasi tambahan yang Anda berikan selama permintaan. Default: null.
    Limits:
    • Max 50 keys
    • Max key name length: 40 characters
    • Max value length: 500
    • Max depth: 3

    Mengembalikan Pembayaran Direct Debit - Failure Codes

    Failure Code Description
    REFUND_FAILED
    Bank tidak berhasil memproses refund.
    ACCOUNT_ACCESS_BLOCKED
    Akses ke rekening bank telah diblokir oleh bank. Rekening bank dapat dibekukan, ditutup, atau diblokir.
    ACCOUNT_NOT_FOUND
    Refund gagal karena rekening bank menemukan rekening bank.
    INSUFFICIENT_BALANCE
    Rekening bank sumber tidak memiliki cukup saldo untuk melakukan refund.

    Buat Refund

    API ini membantu Anda untuk melakukan refund transaksi BRI Direct Debit ke customer Anda. Saat ini, refund yang didukung adalah refund penuh atau full refund. Refund sebagian belum didukung oleh API ini.

    API akan menerima informasi direct_debit_id dan opsional parameter reason untuk melakukan refund, yang selanjutnya akan mengirimkan respon refund dengan status PENDING. Status PENDING melambangkan bahwa refund sedang diproses oleh pihak bank atau partner Xendit.

    Webhook atau callback akan dikirimkan ke sistem Anda ketika refund telah berhasil diproses dengan status SUCCEEDED atau FAILED.

    Endpoint: Mengembalikan Pembayaran Direct Debit

    POST https://api.xendit.co/direct_debits/:direct_debit_id/refunds

    Request Parameters

    Example Refund a Direct Debit Payment Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -H 'Idempotency-key: Test_Idempotent_Key'\
       --data-raw '{
        "currency": "IDR",
        "amount": 1500,
        "reason": "REQUESTED_BY_CUSTOMER"
    }'
    <?php
      $url = "https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = $headers = [
        "Content-Type: application/json",
        "Idempotency-key: Test_Idempotent_Key",
        ];
      $data = [
        "currency" => "IDR",
        "amount" => 1500,
        "reason" => "REQUESTED_BY_CUSTOMER",
        ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Tipe Deskripsi
    direct_debit_id
    wajib
    string ID transaksi direct debit yang dihasilkan pada titik transaksi. Prefix: ddpy-.
    Header Parameter Tipe Deskripsi
    Idempotency-key
    wajib
    string Disediakan oleh merchant untuk mencegah permintaan duplikat. Mungkin sama dengan GUID apa pun. Note: Max 100 karakter
    Body Parameter Tipe Deskripsi
    reason
    wajib
    string Alasan mengapa pengembalian dana dilakukan.

    Nilai yang diterima:
    • FRAUDULENT
    • DUPLICATE
    • REQUESTED_BY_CUSTOMER
    • CANCELLATION<
    • OTHER
    amount
    opsional
    number Jumlah yang akan dikembalikan.
    Jika tidak ada yang diberikan, akan otomatis disetel ke jumlah maksimum yang mungkin untuk dikembalikan.
    currency
    opsional
    string Mata uang refund. Harus dalam format ISO 4217.
    Jika tidak ada yang disediakan, akan mengikuti mata uang transaksi direct debit.
    Hanya mendukung IDR.
    metadata
    opsional
    object JSON free-format untuk informasi tambahan yang Anda berikan selama permintaan. Default: null.
    Limits:
    • Max 50 keys
    • Max key name length: 40 characters
    • Max value length: 500
    • Max depth: 3

    Response Parameter

    Mengembalikan Refund Objek dengan status 200

    Eror

    Contoh eror atau pesan kesalahan

    {
        "error_code" : "IDEMPOTENCY_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Kode Eror Deskripsi
    IDEMPOTENCY_ERROR
    409
    Idempotency-key yang disediakan sudah ada tetapi body request yang diberikan tidak sesuai dengan request asli.
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan pembayaran valid yang cocok dengan payment ID yang diberikan.
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Jumlah refund yang Anda masukkan lebih besar dari jumlah yang dapat dikembalikan.
    REFUND_NOT_SUPPORTED
    400
    Permintaan refund gagal karena refund tidak didukung oleh penyedia layanan.
    INELIGIBLE_TRANSACTION
    400
    Permintaan refund gagal karena transaksi awal tidak berhasil diselesaikan atau periode refund telah berlalu.
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Permintaan refund gagal karena refund sebagian tidak didukung oleh penyedia layanan.
    INSUFFICIENT_BALANCE
    400
    Saldo Xendit tidak cukup untuk melakukan refund.

    Get Refund dengan ID

    Anda dapat menggunakan endpoint ini untuk mengambil informasi mengenai permintaan refund tertentu dengan refund ID.

    Endpoint: Dapatkan refund dengan ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/refunds/:refund_id

    Dapatkan refund dengan ID - Request

    Example Get Direct Debit Refund by ID Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds/ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    }'
    <?php
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $refund_id = "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/refunds" . $refund_id;
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Type Description
    direct_debit_id
    required
    string ID transaksi direct debit yang dihasilkan pada titik transaksi. Prefix: ddpy-.
    refund_id
    required
    string Pengidentifikasi unik untuk refund yang dihasilkan oleh Xendit. Dimulai dengan ddrfd-.

    Dapatkan refund dengan ID - Response

    Mengembalikan Refund Objek dengan status 200

    Dapatkan refund dengan ID - Errors

    Example Get Direct Debit Refund by ID Error Response

    {
        "error_code" : "DATA_NOT_FOUND",
        "message" : "We couldn’t find a valid payment matching the payment id given."
    }
    Error Code Deskripsi
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan objek pengembalian dana yang valid yang cocok dengan id yang diberikan.

    List Refund

    Anda dapat menggunakan endpoint ini untuk mengambil semua permintaan pengembalian dana terkait untuk pembayaran debit langsung tertentu.

    Endpoint: List Refunds dengan ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/refunds

    List Refunds dengan ID - Request

    Example List Refunds by Direct Debit ID Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    }'
    <?php
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/refunds";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Type Deskripsi
    direct_debit_id
    required
    string Direct Debit Payment object id. Prefix: ddpy-.

    List Refunds dengan ID - Response

    Example List Refunds by Direct Debit ID Success Response

    [
        {
            "data": [
                {
                    "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
                    "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
                    "channel_code": "DC_BRI",
                    "currency": "IDR",
                    "amount": "1500",
                    "status": "PENDING",
                    "failure_code": null,
                    "reason": "REQUESTED_BY_CUSTOMER",
                    "created": "2020-03-26T05:44:26+0800",
                    "updated": null,
                    "metadata": null
                }
            ],
            "has_more": false,
            "links": null
        }
    ]
    Parameter Type Deskripsi
    data array Array yang berisi Refund objek yang cocok dengan kueri yang disediakan
    has_more boolean Menunjukkan apakah ada lebih banyak item yang akan ditanyakan dengan last_id dari item terakhir dari hasil saat in
    links object Larik yang berisi tautan target untuk mengakses sisa data. Akan menjadi null jika tidak ada data lebih lanjut yang tersedia.

    Parameter Deskripsi
    href string Representasi tautan yang berisi kumpulan data berikutnya
    ref string Jenis relasi tautan menjelaskan bagaimana data saat ini terkait dengan href target.
    Akan selalu next.
    method string Akan selalu "GET".

    List Refunds dengan ID - Errors

    Example List Refunds by Direct Debit ID Error Response

    {
        "error_code" : "DATA_NOT_FOUND",
        "message" : "We couldn’t find a valid payment matching the payment id given."
    }
    Error Code Description
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan pembayaran valid yang cocok dengan id pembayaran yang diberikan.

    Notifikasi Callback

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Linked Account Tokenization Webhook

    Payload

    Linked Account Tokenization Webhook hanya didukung untuk OneKlik BCA, BPI, dan Unionbank. Merchant dapat melewati alur ini jika hanya mengintegrasikan BRI atau BCA KlikPay.

    Example: Linked Account Tokenization Webhook Payload (BCA OneKlik)

    {
        "event": "linked_account_token.successful",
        "timestamp": "2020-03-19T05:34:55+0800",
        "id": "lat-aa620619-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "BCA_ONEKLIK",
        "type": "DEBIT_CARD",
        "accounts": [
            {
                "id": "la-aa620619-124f-41db-995b-66a52abe036a",
                "card_last_four": "1234",
                "card_expiry": "06/24",
                "account_mobile_number": "+62818555988",
                "currency": "IDR",
                "description": null
            }
        ]
    }
    Parameter Deskripsi
    event string "linked_account_token.successful"
    timestamp string ISO 8601 Event timestamp
    id string Pengidentifikasi unik untuk linked account token. Akan memiliki prefix lat-.
    channel_code string Channel code (BCA_ONEKLIK)
    type string DEBIT_CARD
    accounts array Array objek dengan properties yang terhubung dengan akun:

    Key Value
    id string Pengidentifikasi untuk akun tertentu. Akan memiliki prefix la-.
    card_last_four string Empat digit terakhir dari debit card yang ditautkan
    card_expiry string null untuk BCA OneKlik
    account_mobile_number string Nomor handphone tersamarkan yang terdaftar di bank.

    Memungkinkan apabila objek akun memiliki card_last_four yang sama tetapi memiliki nomor handphone yang berbeda.

    Nomor handphone digunakan untuk memungkinkan pengguna akhir memilih nomor handphone yang akan dikirimi OTP untuk mengonfirmasi transaksi.

    currency string Kode mata uang ISO 4217 Currency Code
    description string Deskripsi akun (disediakan oleh penyedia layanan)

    Expiring Payment Method Webhook

    Ini akan dikirim ketika payment method tertentu kadaluarsa. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk menautkan kembali. Fitur ini hanya didukung untuk BPI dan Unionbank.

    Payload

    Example: Payload

    {
        "event": "payment_method.expiry.expiring",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "customer_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "expiration_timestamp": "2021-03-26T05:44:26+0800",
        "business_id": "5f21361959ef2b788cbbe97f"
    }
    Parameter Deskripsi
    event string payment_method.expiry.expiring
    timestamp string ISO 8601 Event timestamp
    id string ID untuk otorisasi tertentu (payment method)
    expiration_timestamp string ISO 8601 Waktu kadaluarsa token
    customer_id string Customer ID dari Xendit
    business_id string Internal Business ID Xendit yang mengidentifikasi merchant

    Expired Payment Method Webhook

    Ini akan dikirim ketika payment method tertentu telah kadaluarsa atau telah dibatalkan. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk menautkan kembali.

    Payload

    Example: Payload

    {
        "event": "payment_method.expiry.expired",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "customer_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "business_id": "5f21361959ef2b788cbbe97f"
    }
    Parameter Deskripsi
    event string payment_method.expiry.expired
    timestamp string ISO 8601 Event timestamp
    id string ID untuk otorisasi tertentu (payment method). Akan memiliki pm- sebagai prefix.
    customer_id string Customer ID dari Xendit
    business_id string Internal Business ID Xendit yang mengidentifikasi merchant

    Webhook Payload Status Pembayaran

    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh: Webhook Payload Status Pembayaran

    {
        "event": "direct_debit.payment",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": null,
        "status": "COMPLETED",
        "failure_code": null,
        "metadata": null
    }
    Parameter Deskripsi
    event string Pengidentifikasi event - "direct_debit.payment"
    timestamp string ISO 8601 timestamp of the event. Timezone is UTC+0
    id string Pengidentifikasi unik dari transaksi. Prefix of lat-.
    reference_id string Reference ID yang disediakan oleh Merchant
    channel_code string Pengidentifikasi kode dari channel
    payment_method_id string Payment Method ID dari sumber dana end user
    currency string Mata uang pembayaran
    amount number Nominal yang akan di debit dari akun bank end user
    description string yang disediakan merchant
    status string Status pembayaran - PENDING, COMPLETED, FAILED
    failure_code string Alasan apabila direct debit mengalami kegagalan
    metadata object Metadata yang disediakan oleh merchant

    Payment Status Webhook - Failure Reasons Status Webhook Pembayaran - Alasan Kegagalan

    Contoh: Status Pembayaran Gagal

    {
        "event": "direct_debit.payment",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": "",
        "status": "FAILED",
        "failure_code": "INSUFFICIENT_BALANCE",
        "metadata": {}
    }
    Failure Code Deskripsi
    MAX_AMOUNT_LIMIT_ERROR
    Limit harian end user telah mencapai maksimum, tidak dapat memproses request pendebitan.
    INSUFFICIENT_BALANCE
    Saldo end user tidak mencukupi, tidak dapat memproses pendebitan.
    CHANNEL_UNAVAILABLE
    Service bank untuk direct debit saat ini tidak tersedia, tidak dapat memproses pendebitan.
    ACCOUNT_ACCESS_BLOCKED
    Akun bank end user telah diblok, silakan hubungi bank untuk penyelesaian.
    MAX_OTP_ATTEMPTS_ERROR
    Transaksi digagalkan karena telah melewati batas maksimum untuk memvalidasi OTP
    INVALID_PAYMENT_METHOD_ERROR
    payment_method_id tidak ditemukan atau telah kadaluarsa
    SERVER_ERROR
    Terjadi kesalahan saat memproses permintaan ke pihak bank.

    Webhook Pembayaran Recurring Payment

    Payload

    {
      "id": "5ebd6test3testdda4ef73",
      "external_id": "testing_123_123",
      "user_id": "5ebtesta0bf912dbtest6",
      "is_high": false,
      "payment_method": "DIRECT_DEBIT",
      "status": "PAID",
      "merchant_name": "Merchant Test Acc",
      "amount": 15000,
      "paid_amount": 15000,
      "paid_at": "2020-05-14T16:03:00.504Z",
      "payer_email": "test@xendit.co",
      "description": null,
      "adjusted_received_amount": 15000,
      "fees_paid_amount": 0,
      "created": "2020-05-14T16:03:00.154Z",
      "updated": "2020-05-14T16:03:02.765Z",
      "recurring_payment_id": "5ebd6bb37d674631dda4ef72",
      "currency": "IDR",
      "payment_channel": "DC_BRI"
    }
    Parameter Tipe Deskripsi
    id string ID invoice yang didapatkan dari Xendit
    user_id string ID bisnis Xendit Anda
    external_id string ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    merchant_name string Nama perusahaan atau situs Anda
    amount number Jumlah tagihan invoice (tanpa pajak, biaya)
    status string PAID the recurring direct debit has successfully been paid or
    EXPIRED pembayaran direct debut untuk transaksi recurring telah gagal
    payer_email string Email pembayar, didapatkan dari permintaan API Anda
    description string Deskripsi invoice, didapatkan dari permintaan API Anda
    fees_paid_amount number Xendit fees that was directly paid from this invoice - thanks for supporting a better world of payments :)
    adjusted_received_amount number umlah netto uang yang masuk ke saldo Anda setelah dipotong biaya.
    recurring_payment_id string ID dari recurring yang dibuat dari invoice ini
    paid_amount number Total Total nilai yang dibayarkan untuk invoice
    updated string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recurring dibuat. Timezone adalah UTC+0
    created string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recuriing di update. Timezone adalah UTC+0
    currency string (ISO 4217) Nilai mata uang dari nominal yang dibuat
    paid_at string (ISO 8601) Waktu dan tanggal customer Anda melakukan pembayaran invoice. Anda akan menerima respon ini ketika invoice telah dibayar.
    payment_method string Metode pembayaran yang digunakan ketika customer melakukan pembayaran invoice. Anda akan menerima response ini ketika invoice dibayar - DIRECT_DEBIT
    payment_channel string Kanal pembayaran yang digunakan ketika customer melakukan pembayaran invoice ice.Anda akan menerima response ini ketika invoice dibayar
    Contoh : DC_BRI

    Webhook Pembayaran Refund

    Example: Direct Debit Refund Webhook

    {
        "event": "“direct_debit.refund",
        "created": "2020-03-26T05:44:26+0800",
        "business_id": "5f21361959ef2b788cbbe97f",
        "data": {
            "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
            "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "amount": "1500",
            "status": "COMPLETED",
            "failure_code": null,
            "reason": "REQUESTED_BY_CUSTOMER",
            "created": "2020-03-26T05:44:26+0800",
            "updated": null,
            "metadata": null
        }
    }


    Parameter Deskripsi
    event string "direct_debit.refund"
    created string ISO 8601 Created timestamp
    busines_id string Internal Business ID Xendit yang mengidentifikasi merchant
    data object Memiliki Refund Objek dengan status COMPLETED atau FAILED

    Virtual Accounts

    Virtual Account adalah rekening bank virtual yang dapat dibuat dan diberikan kepada pelanggan Anda dan bertindak sebagai media untuk menerima pembayaran di mana pelanggan Anda akan membayar melalui Transfer Bank.

    Anda memiliki 2 lingkungan untuk mencoba dan menggunakan API Virtual Account: Mode TEST dan mode LIVE. Untuk mode LIVE, aktifkan Akun Virtual di Dasbor untuk mulai menggunakan Virtual Account pilihan Anda. Baca lebih lanjut [tentang Virtual Account] (https://docs.xendit.co/xenpayments/virtual-account/).

    Ingin Virtual Account Anda dikaitkan dengan transaksi dan bukan pengguna? Gunakan API invoices.

    Buat Virtual Account

    Endpoint: Pembuatan Virtual Accounts (VA)

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

    Parameter Request

    Contoh Permintaan 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
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [ 
        "external_id" => "demo-1475804036622",
        "bank_code" => "BNI",
        "name" => "Rika Sutanto"
      ];
    
      $createVA = \Xendit\VirtualAccounts::create($params);
      var_dump($createVA);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.createFixedVA({
      externalID: 'demo_1475459775872',
      bankCode: 'BNI',
      name: 'Rika Sutanto',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_virtual_account_1475459775872");
      params.put("bank_code", BankCode.BNI.getText());
      params.put("expected_amount", 100000);
      params.put("name", "Rika Sutanto");
    
      //For closed virtual account
      FixedVirtualAccount closedVirtualAccount = FixedVirtualAccount.createClosed(params);
    
      //For open virtual account
      FixedVirtualAccount openVirtualAccount = FixedVirtualAccount.createOpen(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := virtualaccount.CreateFixedVAParams{
      ExternalID: "demo-1475804036622",
      BankCode:   "BNI",
      Name:       "Rika Sutanto",
    }
    
    resp, err := virtualaccount.CreateFixedVA(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.create(
        external_id="demo_1475459775872",
        bank_code="BNI",
        name="Rika Sutanto",
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    CreateVirtualAccountParameter parameter = new CreateVirtualAccountParameter
    {
      ExternalId = "va-1475804036622",
      BankCode = VirtualAccountEnum.BankCode.Bni,
      Name = "John Doe",
      ExpectedAmount = 200000,
    };
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Create(parameter);

    JSON

    {
       "external_id": "demo-1475804036622",
       "bank_code": "BNI",
       "name": "Rika Sutanto"
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-split-rule
    opsional
    string ID Split Rule yang ingin Anda aplikasikan ke Virtual Account ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    external_id
    wajib
    string Sebuah ID pilihan Anda. Seringkali merupakan pengenal unik seperti nomor telepon, email, atau ID transaksi.

    Karakter: Spesial dan alfanumerik
    Karakter minimum: 1 karakter
    Karakter maksimum: 950 karakter
    bank_code
    wajib
    string Kode bank dari rekening virtual yang ingin Anda buat.

    Kode bank yang tersedia untuk Indonesia: BCA, BNI, BRI, BJB, BSI, BNC, CIMB, DBS, MANDIRI, PERMATA, SAHABAT_SAMPOERNA

    Kode bank yang tersedia untuk Vietnam: PV, VIETCAPITAL, WOORI, MSB

    Kode bank yang tersedia untuk Thailand: STANDARD_CHARTERED

    Catatan: Kami merekomendasikan Anda untuk membuat Rekening Virtual BNI untuk transfer antar bank dengan tingkat keberhasilan yang lebih tinggi.
    name
    wajib
    string Nama pengguna/rekening virtual, - ini akan ditampilkan di antarmuka pengguna bank, misalnya layar konfirmasi ATM.

    Karakter Hanya alfabet. Untuk Agregator BCA, alfabet dan angka diperbolehkan.
    Panjang minimum 1 karakter, kecuali BCA panjang minimum adalah 3 karakter

    Catatan:
  • Nama hanya dapat berisi huruf dan spasi dan memiliki batasan panjang tergantung pada bank. Dan juga tidak boleh mengandung nama dari bank/lembaga/pemerintah.
  • Untuk tipe akun individu, nama VA tidak dapat diubah dan akan selalu mengikuti nama bisnis Anda.
  • Awalan akan disertakan dalam respons untuk VA BNI XDT- dan VA CIMB Xendit. Awalan ini adalah kewajiban dari bank.
  • virtual_account_number
    opsional. default: random
    string Anda dapat menetapkan nomor Rekening Virtual tertentu menggunakan parameter ini. Jika Anda tidak mengirimkan salah satu, maka akan dipilih secara acak.

    Pastikan nomor yang Anda tentukan berada dalam rentang Rekening Virtual Anda. Periksa rentang Rekening Virtual Anda di Pengaturan Rekening Virtual. API akan memberikan kesalahan jika Anda menyertakan kode pedagang (4 atau 5 digit pertama dari rentang VA Anda, misalnya 26215 untuk BRI).

    Contoh: Jika rentang Rekening Virtual BRI Anda: 26215 9999000001 - 26215 9999999999, permintaan virtual_account_number: 9999100101 akan diterima karena nilainya berada dalam rentang VA, sementara virtual_account_number: 262159999100101 akan memberikan kesalahan VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE

    Catatan: Rentang VA Anda di mode TEST dan LIVE mungkin berbeda. Saat mulai beroperasi, periksa kembali dan sesuaikan permintaan Anda untuk mengikuti rentang VA yang sesuai
    country
    opsional. default: ID
    string Negara di mana rekening virtual beroperasi.

    Negara yang tersedia: ID, VN, dan TH
    currency
    opsional. default: IDR
    string Mata uang pembayaran yang dapat diterima oleh rekening virtual.

    Mata uang yang tersedia untuk Indonesia: IDR dan USD

    Mata uang yang tersedia untuk Vietnam: VND

    Mata uang yang tersedia untuk Thailand: THB
    is_single_use
    opsional. default: false
    boolean Ada 2 jenis Rekening Virtual:
  • Rekening Virtual sekali pakai (is_single_use: true) hanya dapat dibayar sekali. Nomor VA yang telah digunakan dapat dibuat kembali untuk pelanggan/faktur/transaksi lainnya
  • Rekening Virtual multi-pakai (is_single_use: false) memungkinkan pelanggan Anda untuk membayar ke Rekening Virtual yang sama secara terus-menerus
  • is_closed
    opsional. default: false
    boolean Ada 2 jenis jumlah Rekening Virtual: jumlah terbuka atau tertutup
  • Jumlah terbuka berarti pelanggan Anda dapat membayar sejumlah uang ke Rekening Virtual
  • Jumlah tertutup berarti pelanggan Anda hanya dapat membayar jumlah yang Anda tentukan. Pembayaran akan ditolak jika jumlah pembayaran yang dicoba menyimpang dari jumlah yang Anda tentukan. Tentukan jumlahnya menggunakan parameter expected_amount di bawah ini
  • expected_amount
    opsional
    number Jumlah yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual tertutup.

    Untuk BNI,BJB,BRI,BSI, BNC, MANDIRI, dan SAHABAT_SAMPOERNA:
  • Jumlah minimum: IDR 1
  • Jumlah maksimum: IDR 50.000.000.000

  • Untuk PERMATA:
  • Jumlah minimum: IDR 1
  • Jumlah maksimum: IDR 9.999.999.999

  • Untuk BCA:
  • Jumlah minimum: IDR 10.000
  • Jumlah maksimum: IDR 999.999.999.999

  • Untuk CIMB:
  • Jumlah minimum: IDR 1.000
  • Jumlah maksimum: IDR 50.000.000.000

  • Untuk DBS:
  • Jumlah minimum: USD 1,00
  • Jumlah maksimum: USD 50.000.000.000,00

  • Untuk WOORI dan VIETCAPITAL:
  • Jumlah minimum: VND 10.000
  • Jumlah maksimum: VND 499.999.999
  • min_amount
    opsional
    integer positif Jumlah minimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di atas jumlah minimum dari bank.
    Bank yang tersedia: BCA, BNC, dan CIMB
    max_amount
    opsional
    integer positif Jumlah maksimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di bawah jumlah maksimum dari bank.
    Bank yang tersedia: BCA, BNC, dan CIMB
    suggested_amount
    opsional
    number Jumlah yang disarankan yang ingin Anda tetapkan.
    Bank yang tersedia: BRI dan MANDIRI

    Catatan: Jumlah yang disarankan adalah jumlah yang dapat dilihat sebagai saran, tetapi pengguna masih dapat memasukkan angka apa pun.
    expiration_date
    opsional. default: +31 tahun dari tanggal pembuatan
    string Tanda waktu ISO8601 dari waktu kedaluwarsa Rekening Virtual

    Zona waktu: UTC+0
    description
    opsional
    string Deskripsi untuk Rekening Virtual. Tersedia untuk BRI dan BSI.

    Karakter Spesial dan alfanumerik
    Panjang minimum 1 karakter

    Parameter Respon

    Contoh Respon Pembuatan Virtual Accounts

    {
      "id": "57f6fbf26b9f064272622aa6",
      "external_id": "va-1475804036622",
      "owner_id": "57b4e5181473eeb61c11f9b9",
      "bank_code": "BNI",
      "merchant_code": "8808",
      "account_number": "8808999939380502",
      "name": "Michael Chen",
      "is_single_use": false,
      "is_closed": false,
      "expiration_date": "2051-09-27T17:00:00.000Z",
      "status": "PENDING",
      "currency": "IDR",
      "country": "ID"
    }

    Contoh Respon Pembuatan Virtual Accounts dengan bank code BRI

    {
      "id": "57f6fbf26b9f064272622aa6",
      "external_id": "va-1475804036622",
      "owner_id": "57b4e5181473eeb61c11f9b9",
      "bank_code": "BRI",
      "merchant_code": "26215",
      "account_number": "262159939380502",
      "name": "Michael Chen",
      "is_single_use": true,
      "is_closed": true,
      "expected_amount": 50000,
      "suggested_amount": 50000,
      "expiration_date": "2021-09-27T17:00:00.000Z",
      "description": "Utensils Payment 27 September 2021",
      "status": "PENDING",
      "currency": "IDR",
      "country": "ID"
    }

    Merespon dengan Objek Virtual Account dengan status 200

    Kode Error

    Kode Error 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. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings
    BANK_NOT_SUPPORTED_ERROR
    400
    Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account.
    EXPIRATION_DATE_NOT_SUPPORTED_ERROR
    400
    Tanggal kedaluwarsa untuk 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 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 virtual account.
    DUPLICATE_CALLBACK_VIRTUAL_ACCOUNT_ERROR
    400
    Nomor virtual account yang anda mau buat sudah digunakan
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal minimum IDR 1 untuk BNI, BRI, BJB, PERMATA, MANDIRI, BSI, dan SAHABAT_SAMPOERNA
  • Nominal minimum IDR 10,000 untuk BCA
  • Nominal minimum USD 1.00 untuk DBS
  • MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal maksimum IDR 50,000,000,000 untuk BNI, BRI, BJB, MANDIRI, dan SAHABAT_SAMPOERNA
  • Nominal maksimum IDR 9,999,999,999 untuk PERMATA
  • Nominal maksimum IDR 999,999,999,999 untuk BCA
  • Nominal maksimum USD 50,000,000,000.00 untuk DBS
  • CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED_ERROR
    400
    Nama virtual account tidak boleh mengandung nama bank atau institusi
    MINIMUM_AMOUNT_ERROR_ERROR
    400
    Parameter min_amount harus di atas nominal minimum yang ditentukan oleh bank
    MAXIMUM_AMOUNT_ERROR_ERROR
    400
    Parameter max_amount harus di bawah nominal minimum yang ditentukan oleh bank
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    FEATURE_NOT_SUPPORTED_ERROR
    403
    Fitur minimum dan maksimum pembayaran tidak tersedia untuk bank yang dipilih. Silakan cek Referensi API kami untuk melihat pilihan bank yang didukung.

    Ubah Virtual Account

    Endpoint: Pembaruan Virtual Account (VA)

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

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

    Note: Closed virtual accounts tidak dapat di ubah menjadi open virtual accounts begitu pula sebaliknya.

    Parameter Request

    Contoh Permntaan Pembaruan Fixed Virtual Account

    curl https://api.xendit.co/callback_virtual_accounts/57f6fbf26b9f064272622aa6 -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=100000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = 'VA-id';
      $updateParams = ["suggested_amount" => 6000];
    
      $updateVA = \Xendit\VirtualAccounts::update($id, $updateParams);
      var_dump($updateVA);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.updateFixedVA({
      id: '57f6fbf26b9f064272622aa6',
      expectedAmt: 1000000,
    })
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("is_single_use", true);
    
      FixedVirtualAccount fixedVirtualAccount = FixedVirtualAccount.update("EXAMPLE_ID", params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    expirationDate := time.Now().AddDate(0, 0, 1)
    
    updateFixedVAData := virtualaccount.UpdateFixedVAParams{
      ID:             "5df745b92b50911700f37e86",
      ExpirationDate: &expirationDate,
      ExpectedAmount: 6000,
    }
    
    resp, err := virtualaccount.UpdateFixedVA(&updateFixedVAData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("updated fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.update(
        id="5eec3a3e8dd9ea2fc97d6728",
        is_single_use=True,
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    UpdateVirtualAccountParameter parameter = new UpdateVirtualAccountParameter
    {
      IsSingleUse = true,
      ExpectedAmount = 20000,
    };
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Update(parameter, "57f6fbf26b9f064272622aa6");
    {
        "expiration_date": "2019-11-12T23:46:00.000Z",
        "expected_amount": 6000
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Body Tipe Deskripsi
    is_single_use
    opsional. default: false
    boolean Ketika diatur ke true, status rekening virtual akan tidak aktif setelah dibayar

    expected_amount
    opsional
    number Jumlah yang diharapkan oleh rekening virtual jika is_closed diatur ke true
    min_amount
    opsional
    string Jumlah minimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di atas jumlah minimum dari bank.
    max_amount
    opsional
    string Jumlah maksimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di bawah jumlah maksimum dari bank.
    suggested_amount
    opsional
    number Jumlah yang disarankan yang ingin Anda tetapkan

    expiration_date
    opsional. default: +31 tahun dari tanggal pembuatan
    string Waktu ketika rekening virtual akan kedaluwarsa. Anda dapat mengaturnya menjadi beberapa hari di masa lalu untuk mengakhiri rekening virtual segera

    Zona waktu: UTC
    description
    opsional
    string Deskripsi rekening virtual yang ditampilkan kepada pengguna akhir saat pembayaran.

    Karakter Spesial dan alfanumerik
    Panjang minimum 1 karakter
    external_id
    opsional
    string ID pilihan Anda. Seringkali ini merupakan pengenal unik seperti nomor telepon, email, atau ID transaksi

    Karakter: Spesial dan alfanumerik
    Karakter Minimum: 1 karakter
    Karakter Maksimum: 950 Karakter

    Parameter Respon

    Contoh Respon Pembaruan Virtual Accounts

    {
        "owner_id": "5de8d83cafcf47000f8e76bc",
        "external_id": "demo_virtual_account_1475459775872",
        "bank_code": "BNI",
        "merchant_code": "8808",
        "name": "Rika Sutanto",
        "account_number": "8808999947012640",
        "is_single_use": false,
        "expected_amount": 6000,
        "currency": "IDR",
        "status": "PENDING",
        "expiration_date": "2019-11-12T23:46:00.000Z",
        "is_closed": false,
        "id": "5df745b92b50911700f37e86"
    }

    Merespon dengan Objek Virtual Account dengan status 200

    Kode Error

    Kode Error 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. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings
    BANK_NOT_SUPPORTED_ERROR
    400
    Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account.
    SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
    400
    Nominal yang diharapkan untuk 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 virtual account..
    INACTIVE_VIRTUAL_ACCOUNT_ERROR
    400
    Nomor virtual account yang anda mau perbarui inactive.
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal minimum Rp. 1 untuk BNI, BRI, BJB, PERMATA, MANDIRI, BSI, dan SAHABAT_SAMPOERNA
  • Nominal minimum Rp. 10,000 untuk BCA
  • MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal maksimum Rp. 50,000,000,000 untuk BNI, BRI, BJB, MANDIRI, BSI, dan SAHABAT_SAMPOERNA
  • Nominal maksimum Rp. 9,999,999,999 untuk PERMATA
  • Nominal maksimum Rp. 999,999,999,999 untuk BCA
  • REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Cek Virtual Account

    Endpoint: Mendapatkan Informasi Virtual Account

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

    Contoh Permintaan Mendapatkan Informasi Virtual Account

    curl https://api.xendit.co/callback_virtual_accounts/:id -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '59e03a976fab8b1850fdf347';
      $getVA = \Xendit\VirtualAccounts::retrieve($id);
      var_dump($getVA);
    
    ?>

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

    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.getFixedVA({ id: '59e03a976fab8b1850fdf347' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedVirtualAccount fpa = FixedVirtualAccount.getFixedVA("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := virtualaccount.GetFixedVAParams{
      ID: "59e03a976fab8b1850fdf347",
    }
    
    resp, err := virtualaccount.GetFixedVA(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.get(
        id="5eec3a3e8dd9ea2fc97d6728",
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Get("5eec3a3e8dd9ea2fc97d6728");

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

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

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

    Parameter Respon

    Contoh Respon Mendapatkan Informasi Virtual Account

    {
      "id": "57f6fbf26b9f064272622aa6",
      "external_id": "va-1475804036622",
      "owner_id": "57b4e5181473eeb61c11f9b9",
      "bank_code": "BNI",
      "merchant_code": "8808",
      "account_number": "8808999939380502",
      "name": "Michael Chen",
      "currency": "IDR",
      "country" : "ID",
      "is_single_use": false,
      "is_closed": false,
      "expiration_date": "2051-09-27T17:00:00.000Z",
      "status": "PENDING"
    }

    Merespon dengan Objek Virtual Account dengan status 200

    Kode Error

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

    Objek Virtual Account

    Example of Virtual Account Object

    {
      "id": "57f6fbf26b9f064272622aa6",
      "external_id": "va-1475804036622",
      "owner_id": "57b4e5181473eeb61c11f9b9",
      "bank_code": "BRI",
      "merchant_code": "26215",
      "account_number": "262159939380502",
      "name": "Michael Chen",
      "currency": "IDR",
      "is_single_use": true,
      "is_closed": true,
      "expected_amount": 50000,
      "suggested_amount": 50000,
      "expiration_date": "2021-09-27T17:00:00.000Z",
      "description": "Utensils Payment 27 September 2021",
      "status": "PENDING"
    }
    Parameter Type Description
    id
    required
    string Unique Xendit ID for the Virtual Account. Use this ID for support escalation and reconciliation. Can be used to link VA to Invoice using create Invoices API.
    external_id
    required
    string An ID of your choice which you provided upon request.
    owner_id
    required
    string Your Xendit Business ID.
    bank_code
    required
    string Bank code of the virtual account you want to create.
    merchant_code
    required
    string Prefix for the Virtual Account. For the aggregator model, this is Xendit's merchant code. For the switcher model, this is the merchant code that you received from the bank. Learn more about Virtual Account models here.
    account_number
    required
    string Complete Virtual Account number (including merchant code as prefix). This is what a user will use to pay Virtual Account.
    name
    required
    string Name for the Virtual Account.
    country
    required
    string The country in which the virtual account operates.
    currency
    required
    string The currency of payment in which the virtual account can accept, available for API version 2018-12-21.
    is_single_use
    required
    boolean There are 2 types of Virtual Account:
  • Single-use Virtual Account will be inactive automatically upon successful payment.
  • Multiple-use Virtual Account (is_single_use: false) remain active upon successful payment and can continue to receive payments using the same Virtual Account
  • is_closed
    required
    boolean There are 2 types of Virtual Account amount:
  • Open amount means your customer can pay any amount to the Virtual Account
  • Closed amount means your customer can only pay amount specified by you. Payment will be rejected if attempted payment amount deviates from the amount you specified. Specify the amount using expected_amount parameter below
  • expected_amount
    optional
    number Required amount to be paid by your customer for closed Virtual Account.
    min_amount
    optional
    string Minimum amount to be paid by your customer for open Virtual Account, it should use an amount above the minimum amount from the bank.
    max_amount
    optional
    string Maximum amount to be paid by your customer for open Virtual Account, it should use an amount below the maximum amount from the bank.
    suggested_amount
    optional
    number Suggested amount for the Virtual Account.
    expiration_date
    optional
    string ISO8601 timestamp of Virtual Account expiration time. Timezone UTC+0.
    description
    optional
    string Description of the Virtual Account that will be displayed in payment interface.
    status
    required
    string Status of Virtual Account that defines if it’s PENDING, INACTIVE, or ACTIVE
  • Status is PENDING if Virtual Account creation request has been sent and request is being processed by the bank
  • Status is INACTIVE either the single use Virtual Account has been paid or already expired
  • If status is ACTIVE the Virtual Account is ready to be used by the end user
  • Simulasi Pembayaran

    API Simulasi Pembayaran Rekening Virtual memungkinkan Anda untuk meniru perilaku pelanggan Anda untuk membayar ke Rekening Virtual Anda dalam mode TEST. Ini mirip dengan pelanggan Anda membayar Rekening Virtual Anda menggunakan ATM/internet banking/mobile banking dalam mode LIVE. Sebuah callback akan dikirim ke URL callback Anda setelah pembayaran selesai. Lihat halaman pengujian kami [di sini] (https://docs.xendit.co/xenpayments/virtual-account/testing) untuk panduan lebih lanjut.

    Endpoint: Simulate VA Payment

    POST https://api.xendit.co/callback_virtual_accounts/external_id={external_id}/simulate_payment

    Request Parameters

    Simulation Example

    {
        "amount": 50000
    }
    Header Parameter Type Description
    for-user-id
    optional
    string The sub-account user-id that you want to simulate this transaction for.

    This header is only used if you have access to xenPlatform. See xenPlatform for more information
    Parameter Header Tipe Deskripsi
    external_id
    wajib
    string External ID dari Virtual Account

    Response Parameters

    Simulation Response

    {
        "status": "COMPLETED",
        "message": "Payment for the Fixed VA with external id {{$external_id}} is currently being processed. Please ensure that you have set a callback URL for VA payments via Dashboard Settings and contact us if you do not receive a VA payment callback within the next 5 mins."
    }
    Parameter Header Tipe Deskripsi
    status
    diperlukan
    string Status dari simulasi pembayaran
    message
    diperlukan
    string Informasi tambahan mengenai proses simulasi pembayaran

    Notifikasi Pembayaran

    Endpoint: Notifikasi Pembayaran Virtual Account

    POST https://yourcompany.com/virtual_account_paid_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Data Webhook terkait Pembayaran

    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh Permintaan Notifikasi Pembayaran Virtual Account Payment

    curl --include \
         --request POST \
         --header "Content-Type: application/json" \
         --header "x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --data-binary "{
        id: \"598d91b1191029596846047f\",
        payment_id: \"5f218745736e619164dc8608\",
        callback_virtual_account_id: \"598d5f71bf64853820c49a18\",
        owner_id: \"57b4e5181473eeb61c11f9b9\",
        external_id: \"demo-1502437214715\",
        account_number: \"999939380502\",
        bank_code: \"BNI\",
        amount: 50000,
        transaction_timestamp: \"2021-07-24T05:22:55.115Z\",
        merchant_code: \"8808\",
        currency: \"IDR\",
        sender_name: \"Michael Chen\"
        payment_detail: {
             remark: \"Payment from Michael\" 
        }
    }" \
    'https://api.xendit.co/virtual_account_paid_webhook_url'

    JSON

    {
        "id": "598d91b1191029596846047f",
        "payment_id": "5f218745736e619164dc8608",
        "callback_virtual_account_id": "598d5f71bf64853820c49a18",
        "owner_id": "57b4e5181473eeb61c11f9b9",
        "external_id": "demo-1502437214715",
        "account_number": "999939380502",
        "bank_code": "BNI",
        "transaction_timestamp": "2021-07-24T05:22:55.115Z",
        "amount": 50000,
        "merchant_code": "8808",
        "currency": "IDR",
        "sender_name": "Michael Chen",
        "payment_detail": {
            "remark": "Sent by Michael for my package",
           "reference": "66143641700"
        }
    }
    Body Parameter Type Description
    id
    wajib
    string ID dari pembayaran virtual account
    payment_id
    wajib
    string Dalam sistem internal kami disebut dengan payment ID
    callback_virtual_account_id
    wajib
    string Nilai kolom id didapatkan dari respon saat virtual account berhasil dibuat. Lihat Pembuatan Virtual Accounts
    owner_id
    wajib
    string ID dari merchant
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    wajib
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    wajib
    string Virtual Account merchant code identified via the first 4-5 digits of Virtual Account number
    account_number
    wajib
    string Virtual Account number exclude the prefix (merchant code)
    amount
    wajib
    integer positive Jumlah yang dibayar
    transaction_timestamp
    wajib
    string Tanggal dan waktu pembayaran virtual account
    sender_name
    Optional
    string Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account
    payment_detail
    opsional
    object Additional information from the bank.
    Data fields
    Key Value
    remark
    opsional
    String Catatan atau remark dari pembayar ketika melakukan konfirmasi pembayaran, hanya tersedia untuk bank BSS
    reference
    opsional
    String Nomor referensi dari bank yang dapat digunakan untuk kebutuhan rekonsiliasi, hanya tersedia untuk bank BCA dengan switcher commercial model

    Data Webhook terkait Pembuatan / Pembaruan Virtual Acccount

    Contoh Permintaan Notifikasi untuk Pembuatan Virtual Account / Pembaruan Virtual Acccount

    curl --include \
         --request POST \
         --header "Content-Type: application/json" \
         --header "x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --data-binary "{
        id: \"57fb4e076fa3fa296b7f5a97\",
        owner_id: \"5824128aa6f9f9b648be9d76\",
        external_id: \"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_webhook_url'

    JSON

    {
        "id": "57fb4e076fa3fa296b7f5a97",
        "owner_id": "5824128aa6f9f9b648be9d76",
        "external_id": "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"
    }
    Parameter Body Tipe Description
    owner_id
    wajib
    string ID pengguna anda
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    wajib
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    wajib
    string 5 angka didepan sebelum nomor lengkap virtual account
    name
    wajib
    string Nama virtual account
    account_number
    wajib
    string 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
    opsional
    string Nominal yang disarankan untuk membuat virtual account
    is_closed
    wajib
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    expected_amount
    opsional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    id
    wajib
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_single_use
    wajib
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
    status
    wajib
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • Cek Pembayaran

    Endpoint: Permintaan Mendapatkan Pembayaran Virtual Account

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

    Contoh Permintaan Mendapatkan Pembayaran 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==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $paymentID = '1502450097080';
      $getFVAPayment = \Xendit\VirtualAccounts::getFVAPayment($paymentID);
      var_dump($getFVAPayment);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.getVAPayment({
      paymentID: '598d91b1191029596846047f',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedVirtualAccountPayment payment = FixedVirtualAccount.getPayment("EXAMPLE_PAYMENT_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    payment, err := virtualaccount.GetPayment(&virtualaccount.GetPaymentParams{
      PaymentID: "1502450097080",
    })
    
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved va payment: %+v\n", payment)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account_payment = VirtualAccount.get_payment(
        payment_id="5ef18efca7d10d1b4d61fb52",
    )
    print(virtual_account_payment)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountPaymentClient virtualAccountPayment = xendit.VirtualAccountPayment;
    
    VirtualAccountPaymentResponse virtualAccountPaymentResponse = await virtualAccountPayment.Get("5ef18efca7d10d1b4d61fb52");

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

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Query Tipe Description
    payment_id
    required
    string ID pembayaran yang ingin anda gunakan

    Parameter Respon

    Contoh Respon Pembayaran Mendapatkan Virtual Account

    {
        "id": "598d91b1191029596846047f",
        "payment_id": "5f218745736e619164dc8608",
        "callback_virtual_account_id": "598d5f71bf64853820c49a18",
        "owner_id": "57b4e5181473eeb61c11f9b9",
        "external_id": "demo-1502437214715",
        "bank_code": "BNC",
        "merchant_code": "90100010",
        "account_number": "999939380502",
        "amount": 50000,
        "currency" : "IDR",
        "transaction_timestamp": "2021-07-24T05:22:55.115Z",
        "sender_name": "Michael Chen",
        "payment_detail": {
            "payment_interface": "MOBILE_BANKING",
            "remark": "Sent by Michael for my package",
            "reference": "66143641700",
            "sender_account_number": "12345678912345",
            "sender_channel_code": "BNC",
            "sender_name": "Michael Chen",
            "transfer_method": "INHOUSE"
        }
    }

    Merespon dengan Objek Pembayaran Virtual Account dengan status 200

    Kode Error

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

    Objek Pembayaran Virtual Account

    Example Virtual Account Payment Object

    {
        "id": "598d91b1191029596846047f",
        "payment_id": "5f218745736e619164dc8608",
        "callback_virtual_account_id": "598d5f71bf64853820c49a18",
        "owner_id": "57b4e5181473eeb61c11f9b9",
        "external_id": "demo-1502437214715",
        "account_number": "999939380502",
        "bank_code": "BNC",
        "transaction_timestamp": "2021-07-24T05:22:55.115Z",
        "amount": 50000,
        "merchant_code": "90100010",
        "currency": "IDR",
        "country": "ID",
        "sender_name": "Michael Chen",
        "payment_detail": {
            "payment_interface": "MOBILE_BANKING",
            "remark": "Sent by Michael for my package",
            "reference": "66143641700",
            "sender_account_number": "12345678912345",
            "sender_channel_code": "BNC",
            "sender_name": "Michael Chen",
            "transfer_method": "INHOUSE"
        }
    }
    Body Parameter Type Description
    id
    required
    string ID of the Virtual Account Payment. Use this ID for support escalation and reconciliation.
    payment_id
    required
    string Our internal system’s payment ID.
    callback_virtual_account_id
    required
    string ID of the Virtual Account that was paid.
    external_id
    required
    string External ID of the Virtual Account.
    bank_code
    required
    string Bank code of the Virtual Account.
    merchant_code
    required
    string Virtual Account merchant code identified via the first 4-5 digits of Virtual Account number.
    account_number
    required
    string Virtual Account number exclude the prefix (merchant code).
    currency
    required
    string The currency of payment in which the virtual account can accept, if it's not specified, it will be using IDR by default.
    country
    required
    string The country in which the virtual account operate, if it's not specified, it will be using ID by default.
    amount
    required
    integer positive Amount that was paid to the Virtual Account.
    transaction_timestamp
    required
    string Date time of the Virtual Account transaction.
    sender_name
    optional
    string Name of the end user that paid into the Virtual Account. Available for BNC, DBS, and SAHABAT_SAMPOERNA.
    payment_detail
    optional
    object Additional information from the bank.
    Data fields
    Key Value
    payment_interface
    optional
    String Banking channels or interface such as mobile banking, ATM, etc that being used by the end user to pay the Virtual Account. Available for BNC. The possible values are as follow: API, ATM, DEBIT_CARD, EDC, INTERNET_BANKING, MOBILE_BANKING, and TELLER.
    reference
    optional
    String Reference number from the bank that can be used for reconciliation. Available for BCA and BNC.
    remark
    optional
    String A remark that is inputted by the payer when they are about to make a payment. Available for SAHABAT_SAMPOERNA.
    sender_account_number
    optional
    String Account number of the end user that paid into the Virtual Account. Available for BNC.
    sender_channel_code
    optional
    String Channel code (generally will be a bank code) that being used by the end user to pay the Virtual Account. Available for BNC.
    sender_name
    optional
    String Name of the end user that paid into the Virtual Account. Available for BNC.
    transfer_method
    optional
    String The transfer processing method that being used by the end user to pay the Virtual Account. Available for BNC. The possible values are as follow: BI_FAST, INHOUSE, RTGS, RTOL, and SKN.

    Cek Ketersediaan Bank

    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
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getVABanks = \Xendit\VirtualAccounts::getVABanks();
      var_dump($getVABanks);
    
    ?>
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      AvailableBank[] availableBanks = FixedVirtualAccount.getAvailableBanks();
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    availableBanks, err := virtualaccount.GetAvailableBanks()
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("available va banks: %+v\n", availableBanks)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account_banks = VirtualAccount.get_banks()
    print(virtual_account_banks)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    AvailableBank[] availableBanks = await virtualAccount.GetAvailableBanks();

    Parameter Respon

    Contoh respon untuk mendapatkan virtual account bank yang tersedia untuk Indonesia

    [
        {
            "name": "Bank Central Asia",
            "code": "BCA",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Negara Indonesia",
            "code": "BNI",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Mandiri",
            "code": "MANDIRI",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Permata",
            "code": "PERMATA",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Sahabat Sampoerna",
            "code": "SAHABAT_SAMPOERNA",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Rakyat Indonesia",
            "code": "BRI",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Neo Commerce",
            "code": "BNC",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank CIMB Niaga",
            "code": "CIMB",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Syariah Indonesia",
            "code": "BSI",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "Bank Jabar Banten",
            "code": "BJB",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "The Development Bank of Singapore",
            "code": "DBS",
            "country": "ID",
            "currency": "IDR",
            "is_activated": false
        },
        {
            "name": "The Development Bank of Singapore",
            "code": "DBS",
            "country": "ID",
            "currency": "USD",
            "is_activated": false
        }
    ]

    Contoh respon untuk mendapatkan virtual account bank yang tersedia untuk Vietnam

    [
        {
            "name": "PV Bank",
            "code": "PV",
            "country": "VN",
            "currency": "VND",
            "is_activated": false
        },
        {
            "name": "Vietcapital Bank",
            "code": "VIETCAPITAL",
            "country": "VN",
            "currency": "VND",
            "is_activated": false
        },
        {
            "name": "Woori Bank",
            "code": "WOORI",
            "country": "VN",
            "currency": "VND",
            "is_activated": false
        }
    ]
    Parameter Tipe Deskripsi
    name
    required
    string Nama bank
    code
    required
    string Kode bank, yang berkaitan saat pembuatan virtual account
    country
    required
    string Negara dimana virtual account akan digunakan untuk menerima pembayaran.

    currency
    required
    string Mata uang yang dapat diterima oleh virtual account

    is_activated
    required
    boolean Status aktivasi bank, yang berkaitan saat pembuatan virtual account

    Retail Outlets

    Buat Kode Pembayaran

    Endpoint: Pembuatan Fixed Payment Code (FPC)

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

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

    Parameter Request

    Contoh Permintaan Pembuatan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id=demo_fixed_payment_code_123 \
       -d retail_outlet_name=ALFAMART \
       -d name='Rika Sutanto' \
       -d expected_amount=10000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => '123',
        'retail_outlet_name' => 'ALFAMART',
        'name' => 'Rika Sutanto',
        'expected_amount' => 10000
      ];
    
      $createFPC = \Xendit\Retail::create($params);
      var_dump($createFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.createFixedPaymentCode({
      externalID: 'demo_fixed_payment_code_123',
      retailOutletName: 'ALFAMART',
      name: 'Rika Sutanto',
      expectedAmt: 10000,
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "test");
      params.put("retail_outlet_name", "ALFAMART");
      params.put("name", "Rika Sutanto");
      params.put("expected_amount", 10000);
    
      FixedPaymentCode fpc = RetailOutlet.createFixedPaymentCode(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := retailoutlet.CreateFixedPaymentCodeParams{
      ExternalID:       "123",
      RetailOutletName: xendit.RetailOutletNameAlfamart,
      Name:             "Rika Sutanto",
      ExpectedAmount:   10000,
    }
    
    resp, err := retailoutlet.CreateFixedPaymentCode(&data)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    
    fmt.Printf("created retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.create_fixed_payment_code(
        external_id="demo_fixed_payment_code_123",
        retail_outlet_name="ALFAMART",
        name="Rika Sutanto",
        expected_amount=10000,
    )
    print(retail_outlet)

    JSON

    {
      "external_id": "demo_fixed_payment_code_123",
      "retail_outlet_name": "ALFAMART",
      "name": "Rika Sutanto",
      "expected_amount": 10000
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    with-fee-rule
    opsional
    string ID Fee Rule yang ingin Anda aplikasikan ke pembayaran ini

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Fee Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan Fee ke akun destinasi

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    external_id
    wajib
    string ID pilihan Anda. Seringkali pengenal unik seperti nomor telepon, email atau transaksi ID. Panjang maksimum yang diijinkan adalah 1000 karakter.

    Karakter spesial dan alfanumerik
    Panjang minimal 1 karakter
    retail_outlet_name
    wajib
    string Nama Fixed Payment Code yang ingin Anda buat

    Nama Retail Outlets yang tersedia: ALFAMART dan INDOMARET
    name
    wajib
    string Nama pengguna - data ini dapat digunakan oleh kasir Toko Outlet untuk memvalidasi pengguna akhir

    Karakter Alfanumerik
    Karakter Spesial: # / . " - , ' _ @ ( ) & ] [ :
    Panjang minimal 1 karakter
    Panjang maksimal Untuk Alfamart 40 karakter, untuk Indomaret 45 karakter
    expected_amount
    opsional
    integer positive Jumlah yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • payment_code
    opsional
    string Fixed Payment Code yang ingin Anda tetapkan, contohnya 12345. Jika Anda tidak menetapkan, maka akan dipilih secara acak

    Mohon memastikan ketika anda membuat fixed payment code, anda tidak memasukkan prefix pada bagian ini. Contohnya: prefix merchant anda adalah PSTEST dan ingin membuat fixed payment code PSTEST12345, anda dapat mengisi 12345 pada bagian ini

    Anda bisa melakukan pengecekan pada prefix anda melalui dashboard Retail Outlet details

    standar: string acak
    expiration_date
    opsional
    ISO 8601 Date Waktu yang ditentukan ketika Fixed Payment Code akan kedaluwarsa

    zona waktu: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak payment code dihasilkan
    is_single_use
    opsional
    boolean Jika disetel ke true, Fixed Payment Code tidak akan aktif setelah dibayarkan

    standar: false

    Parameter Respon

    Contoh Respon Pembuatan Fixed Payment Code

    {
       "is_single_use": false,
        "status": "ACTIVE",
        "owner_id": "5c2323c67d6d305ac433ba20",
        "external_id": "123",
        "retail_outlet_name": "ALFAMART",
        "prefix": "TEST",
        "name": "Rika Sutanto",
        "payment_code": "TEST906558",
        "type": "USER",
        "expected_amount": 10000,
        "expiration_date": "2051-11-01T17:00:00.000Z",
        "id": "5f9fb01c4134b42c56b034c1"
    }
    Parameter Tipe Deskripsi
    owner_id
    wajib
    string ID pengguna anda
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    wajib
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    wajib
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    wajib
    string Nama untuk Fixed Payment Code anda
    payment_code
    wajib
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    wajib
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    wajib
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    wajib
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    wajib
    string Kode unik untuk Fixed Payment Code
    status
    wajib
    string Status fixed payment code yang menentukan apakah itu ACTIVE, INACTIVE, atau EXPIRED.
  • Status ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kadaluwarsa.
  • Status INACTIVE jika fixed payment code telah dibayarkan.
  • Status EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau.
  • type
    wajib
    string Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda)

    Kode Error

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

    Ubah Kode Pembayaran

    Endpoint: Pembaruan Fixed Payment Code

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

    Contoh Permintaan Pembaruan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=20000
       -d name='Joe Contini'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '5b61881e6cc2770f00117f73';
      $updateParams = ['expected_amount' => 20000];
    
      $updateFPC = \Xendit\Retail::update($id, $updateParams);
      var_dump($updateFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.updateFixedPaymentCode({
      id: '5b61881e6cc2770f00117f73',
      name: 'Joe Contini',
      expectedAmt: 20000,
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    expirationDate := time.Now().AddDate(0, 0, 1)
    
    updateFixedPaymentCodeData := retailoutlet.UpdateFixedPaymentCodeParams{
      FixedPaymentCodeID: "5b61881e6cc2770f00117f73",
      Name:               "Joe Contini",
      ExpectedAmount:     20000,
      ExpirationDate:     &expirationDate,
    }
    
    resp, err := retailoutlet.UpdateFixedPaymentCode(&updateFixedPaymentCodeData)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    fmt.Printf("updated retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.update_fixed_payment_code(
        fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
        name="Joe Contini",
    )
    print(retail_outlet)

    Parameter Request (Money-in write permission)

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

    Permintaan Pembaruan Fixed Payment Code

    Contoh Permintaan Pembaruan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=20000
       -d name='Joe Contini'
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("name", "Lorem Ipsum");
    
      FixedPaymentCode fpc = RetailOutlet.updateFixedPaymentCode("EXAMPLE_ID", params);
    } catch (XenditException e) {
      e.printStackTrace();
    }

    JSON

    {
      "expected_amount": 20000,
      "name": "Joe Contini"
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    name
    opsional
    string Nama untuk Fixed Payment Code

    Karakter Alfanumerik
    Panjang minimal 1 karakter
    expected_amount
    opsional
    integer positive Nominal yang diharapkan akan dibayar oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • expiration_date
    opsional
    ISO 8601 Date Waktu yang ditentukan untuk tanggal kadaluarsa Fixed Payment Code. Anda dapat menetapkannya sebagai hari di masa lalu agar segera berakhir Fixed Payment Code

    zona waktu: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak payment code dihasilkan

    Parameter Respon

    Contoh Respon Pembaruan Fixed Payment Code

    {
        "is_single_use": false,
        "status": "ACTIVE",
        "owner_id": "5c2323c67d6d305ac433ba20",
        "external_id": "123",
        "retail_outlet_name": "ALFAMART",
        "prefix": "TEST",
        "name": "JOHN DOE",
        "payment_code": "TEST906558",
        "type": "USER",
        "expected_amount": 25000,
        "expiration_date": "2051-11-01T17:00:00.000Z",
        "id": "5f9fb01c4134b42c56b034c1"
    }
    Parameter Tipe Deskripsi
    owner_id
    wajib
    string ID pengguna anda
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    wajib
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    wajib
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    wajib
    string Nama untuk Fixed Payment Code anda
    payment_code
    wajib
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    wajib
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    wajib
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    wajib
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    wajib
    string Kode unik untuk Fixed Payment Code
    status
    wajib
    string Status fixed payment code yang menentukan apakah itu ACTIVE, INACTIVE, atau EXPIRED.
  • Status ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kadaluwarsa.
  • Status INACTIVE jika fixed payment code telah dibayarkan.
  • Status EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau.
  • type
    wajib
    string Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda)

    Kode Error

    Kode Error 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
    RETAIL_OUTLET_NOT_SUPPORTED_ERROR
    400
    Retail Outlet yang digunakan saat ini tidak didukung.
    DUPLICATE_PAYMENT_CODE_ERROR
    400
    Kode pembayaran yang ingin anda buat sudah digunakan.
    EXPIRATION_DATE_INVALID_ERROR
    400
    Tanggal kadaluarsa yang anda inginkan tidak valid dikarenakan lebih awal dari waktu saat ini.
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
    Ekspektasi nominal hanya bisa lebih dari atau sama dengan Rp 10,000.
    MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
    Ekspektasi nominal hanya bisa kurang dari atau sama dengan Rp 5,000,000.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Cek Kode Pembayaran

    Endpoint: Mendapatkan Fixed Payment Code

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

    Contoh Permintaan Mendapatkan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '5b61881e6cc2770f00117f73';
    
      $getFPC = \Xendit\Retail::retrieve($id);
      var_dump($getFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.getFixedPaymentCode({
      id: '5b61881e6cc2770f00117f73',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedPaymentCode fpc = RetailOutlet.getFixedPaymentCode("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getFixedPaymentCodeData := retailoutlet.GetFixedPaymentCodeParams{
      FixedPaymentCodeID: "5b61881e6cc2770f00117f73",
    }
    
    resp, err := retailoutlet.GetFixedPaymentCode(&getFixedPaymentCodeData)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    
    fmt.Printf("retrieved retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.get_fixed_payment_code(
        fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
    )
    print(retail_outlet)

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

    Parameter Request

    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    fixed_payment_code_id
    wajib
    string ID Fixed Payment Code yang akan diambil

    Parameter Respon

    Contoh Respon Mendapatkan Fixed Payment Code

    {
        "is_single_use": false,
        "status": "ACTIVE",
        "owner_id": "5c2323c67d6d305ac433ba20",
        "external_id": "123",
        "retail_outlet_name": "ALFAMART",
        "prefix": "THRZ",
        "name": "JOHN DOE",
        "payment_code": "THRZ906558",
        "type": "USER",
        "expected_amount": 25000,
        "expiration_date": "2051-11-01T17:00:00.000Z",
        "id": "5f9fb01c4134b42c56b034c1"
    }
    Parameter Tipe Deskripsi
    owner_id
    wajib
    string ID pengguna anda
    status
    wajib
    string Status fixed payment code yang menentukan apakah itu ACTIVE, INACTIVE, atau EXPIRED.
  • Status ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kedaluwarsa.
  • Status INACTIVE jika fixed payment code telah dibayarkan.
  • Status EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau.
  • type
    wajib
    string Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda)
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    wajib
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    wajib
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    wajib
    string Nama untuk Fixed Payment Code anda
    payment_code
    wajib
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    wajib
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    wajib
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    wajib
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    wajib
    string Kode unik untuk Fixed Payment Code

    Kode Error

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

    Notifikasi Pembayaran

    Endpoint: Notifikasi Pembayaran Fixed Payment Code

    POST https://yourcompany.com/fixed_payment_code_paid_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Data Webhook

    Parameter Header Tipe Description
    x-callback-token
    wajib
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh Permintaan Notifikasi Pembayaran Fixed Payment Code

    curl --include \
        --request POST \
        --url https://yourcompany.com/fixed_payment_code_paid_webhook_url \
        --header 'content-type: application/json' \
        --header 'x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==' \
        --data '{
      "id": "58a435201b6ce2a355f46070",
      "external_id": "fixed-payment-code-14876410",
      "prefix": "TEST",
      "payment_code": "TEST123",
      "retail_outlet_name": "ALFAMART",
      "name": "John Doe",
      "amount": 123456,
      "status": "SETTLING",
      "transaction_timestamp": "2019-11-08T11:51:28.613Z",
      "payment_id": "1573213888613",
      "fixed_payment_code_payment_id": "5dc556c07a58de7c114f0347",
      "fixed_payment_code_id": "5dc5567bdf120fd64988a79b",
      "owner_id": "5be9b2f03ef77262c2bd49e6"
    }'

    JSON

    {
      "id": "58a435201b6ce2a355f46070",
      "external_id": "fixed-payment-code-14876410",
      "prefix": "TEST",
      "payment_code": "TEST123",
      "retail_outlet_name": "ALFAMART",
      "name": "John Doe",
      "amount": 123456,
      "status": "SETTLING",
      "transaction_timestamp": "2019-11-08T11:51:28.613Z",
      "payment_id": "1573213888613",
      "fixed_payment_code_payment_id": "5dc556c07a58de7c114f0347",
      "fixed_payment_code_id": "5dc5567bdf120fd64988a79b",
      "owner_id": "5be9b2f03ef77262c2bd49e6"
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari sebuah transaksi
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    prefix
    wajib
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    payment_code
    wajib
    string kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau melalui halaman barcode. Lihat Pembayaran Melalui Barcode untuk info selengkapnya
    retail_outlet_name
    wajib
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    name
    wajib
    string Nama untuk Fixed Payment Code
    amount
    wajib
    integer positive Nominal yang telah dibayarkan
    status
    wajib
    string Status pembayaran. Nilai yang mungkin muncul: SETTLING atau COMPLETED
  • SETTLING artinya transaksi tersebut sudah berhasil dan sedang menunggu proses settlement
  • COMPLETED artinya transaksi tersebut sudah berhasil dan proses settlement sudah selesai.
  • transaction_timestamp
    wajib
    ISO 8601 Date Tanggal saat Fixed Payment Code dibayarkan
    payment_id
    wajib
    string ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran
    fixed_payment_code_payment_id
    wajib
    string ID unik untuk pembayaran Fixed Payment Code
    fixed_payment_code_id
    wajib
    string ID unik untuk Fixed Payment Code
    owner_id
    wajib
    string ID pengguna anda

    Cek Daftar Pembayaran Dari ID Fixed Payment Code

    Endpoint: Cek Daftar Pembayaran Dari ID Fixed Payment Code

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

    Anda dapat menggunakan Endpoint ini untuk mengetahui daftar dan status dari setiap pembayaran yang telah diterima oleh sebuah Fixed Payment Code.

    Parameter Request

    Contoh request mendapatkan daftar pembayaran dari ID Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id}/payments -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    To be developed
    To be developed
    To be developed
    To be developed
    To be developed

    Contoh respon mendapatkan daftar pembayaran dari ID kode pembayaran

    {
        "data": [
            {
                "status": "COMPLETED",
                "fixed_payment_code_payment_id": "61c53c4fdc1b825d9a58ff54",
                "fixed_payment_code_id": "61c53c3727c7a679826dd90a",
                "amount": 2500000,
                "name": "JOHN DOE",
                "prefix": "TEST",
                "payment_code": "TEST892185",
                "payment_id": "1640315983260",
                "external_id": "FPC-1640315959",
                "retail_outlet_name": "ALFAMART",
                "transaction_timestamp": "2021-12-24T03:19:43.260Z",
                "id": "61c53c4f6cc577e4038ab099",
                "owner_id": "60ca10b83ffd534ece8aa856"
            }
        ],
        "has_more": true,
        "links": {
            "href": "https://api.xendit.co/fixed_payment_code/61c53c3727c7a679826dd90a/payments?limit=1&after_id=61c53c4f6cc577e4038ab099",
            "rel": "next",
            "method": "GET"
        }
    }
    
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Path Tipe Deskripsi
    fixed_payment_code_id
    wajib
    string ID Fixed Payment Code yang akan diambil.
    Parameter Query Tipe Deskripsi
    limit
    opsional

    standar: 10
    number Batasan jumlah daftar pembayaran yang akan di tampilkan.
    Limit dapat berkisar antara 1 sampai dengan 100.
    after_id
    opsional
    string Id dari data pembayaran terakhir. Id ini dapat digunakan bersamaan dengan links yang ada pada respon untuk menggunakan paginasi.

    Parameter Respon

    Parameter Tipe Deskripsi
    data
    wajib
    array of objects Respon berupa array yang berisi Payment Object. Mengembalikan array kosong apabila tidak ada hasil.
    has_more
    wajib
    bolean Mengindikasikan apakah ada item lain yang dapat di query dengan after_id dari item terakhir.
    Gunakan links untuk menuju hasil terakhir selanjutnya.
    links
    opsional
    object link untuk menuju ke hasil berikutnya apabila ada hasil berikutnya.
    Berikut adalah format dari HATEOAS:
    href: URI dari target link selanjutnya
    rel: Menandakan hubungan antara source dan target. Nilainya adalah next
    method: Menandakan metode dari HTTP, nilainya berisi GET.
    Payment Objek Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari sebuah transaksi
    fixed_payment_code_id
    wajib
    string ID unik untuk Fixed Payment Code yang ada berikan ketika mengirim request
    fixed_payment_code_payment_id
    wajib
    string ID unik untuk pembayaran Fixed Payment Code
    payment_code
    wajib
    string Kode lengkap pembayaran tetap (termasuk prefix).
    retail_outlet_name
    wajib
    string Nama Retail Outlet yang digunakan, misalnya
    ALFAMART atau INDOMARET
    amount
    wajib
    integer positive Nominal yang dibayarkan oleh pengguna akhir
    status
    wajib
    string Status dari pembayaran.
    Status yang tersedia:
  • SETTLING. Status ini apabila transaksi tersebut sudah berhasil dan sedang menunggu proses settlement.
  • COMPLETED. Status ini apabila transaksi tersebut sudah berhasil dan proses settlement sudah selesai.
  • owner_id
    wajib
    string ID pengguna anda
    name
    wajib
    string Nama untuk Fixed Payment Code anda
    prefix
    wajib
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    payment_id
    wajib
    string ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran
    external_id
    wajib
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    transaction_timestamp
    wajib
    ISO 8601 Date Tanggal saat Fixed Payment Code dibayarkan

    Zona waktu: UTC+0

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    DATA_NOT_FOUND
    404
    Fixed Payment Code tidak dapat ditemukan.

    Payouts

    API Payouts ini adalah versi terbaru dari produk API Disbursements yang ada di mana pengguna dapat mengirim uang dalam skala besar ke semua rekening bank & eWallet di Indonesia, Filipina, Thailand, Malaysia, dan Vietnam hanya dengan menggunakan satu endpoint.

    Pengguna API Payout baru dapat menikmati layanan disbursement yang ada dan saluran atau wilayah baru yang tersedia di masa mendatang tanpa perlu melakukan integrasi lagi.

    Payout Objek

    Contoh Payout Objek

    {
        "id": "disb-1475459775872",
        "amount": 100,
        "channel_code": "ID_BCA",
        "currency": "IDR",
        "description": "Lotto Winner #12",
        "reference_id": "lotto-1482928194",
        "status": "ACCEPTED",
        "created": "2022-01-05T05:37:48.108Z",
        "updated": "2022-01-05T05:37:48.108Z",
        "estimated_arrival_time": "2022-01-05T05:52:48.106Z",
        "business_id": "5785e6334d7b410667d355c4",
        "channel_properties": {
            "account_number": "0000000000",
            "account_holder_name": "Michael Chen"
        },
        "receipt_notification": {
        "email_to": [
          "chen@example.co",
          "somebodyexample.co"
        ],
        "email_cc": [
          "somebodyexample.co",
          "somebodyexample.co"
        ],
        "email_bcc": [
          "somebodyexample.co",
          "somebodyexample.co"
        ]
      }
    }
    Parameter Tipe Data Deskripsi
    id
    wajib
    string Pengidentifikasi unik yang dibuat oleh Xendit untuk setiap pembayaran

    Awalan: disb_
    amount
    wajib
    number Jumlah yang akan dikirim ke rekening tujuan. Harus kelipatan dari kenaikan minimum untuk saluran yang dipilih.

    Untuk mata uang IDR, angka harus bilangan bulat
    Untuk mata uang PHP, angka bisa sampai 2 tempat desimal
    Untuk mata uang VND, angka harus bilangan bulat
    Untuk mata uang MYR, angka bisa sampai 2 tempat desimal
    Untuk mata uang THB, angka bisa sampai 2 tempat desimal
    channel_code
    wajib
    string Kode saluran bank tujuan, e-wallet atau saluran OTC yang dipilih.
    currency
    wajib
    string ISO 4217 Currency Code.
    description
    optional
    string Deskripsi untuk dikirim dengan pembayaran. Penerima mungkin melihat ini, misalnya, dalam laporan mutasi bank mereka (jika didukung) atau dalam tanda terima email yang kami kirimkan atas nama Anda.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    reference_id
    wajib
    string Pengidentifikasi pembayaran yang ditentukan klien. Ini adalah ID yang ditetapkan untuk pembayaran di sistem Anda, seperti ID transaksi atau pesanan. Tidak perlu unik.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 255 karakter
    Panjang minimum 1 karakter
    status
    wajib
    string Status pembayaran.

    Status dalam tanggapan akan selalu ACCEPTED; artinya transfer telah dimulai tetapi belum diselesaikan oleh bank atau e-wallet.

    Status akhir akan diberikan dalam panggilan balik.
    created
    wajib
    ISO8601 Stempel waktu saat permintaan pembayaran dibuat (dalam format ISO 8601)

    Timezone UTC+0
    updated
    wajib
    ISO8601 Stempel waktu saat status pembayaran diperbarui (dalam format ISO 8601)

    Timezone UTC+0
    estimated_arrival_time
    optional
    ISO8601 Perkiraan waktu kedatangan dana di rekening tujuan (dalam format ISO 8601)

    Untuk pembayaran OTC: Perkiraan waktu dana akan tersedia untuk pengambilan

    Timezone UTC+0
    failure_code
    wajib
    string Jika Pembayaran gagal, kami akan menyertakan kode kegagalan untuk detail lebih lanjut tentang kegagalan tersebut.
    business_id
    wajib
    string ID Bisnis Xendit Anda
    channel_properties
    wajib
    object Wadah untuk properti yang terkait dengan channel_code yang dipilih

    Untuk channel digital (rekening bank atau e-wallet)
    Individual detail child parameters
    Parameter Deskripsi
    account_holder_name
    wajib

    stringNama pemegang rekening sesuai dengan catatan bank atau e-wallet. Harus sama persis dengan nama akun yang terdaftar.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    account_number
    wajib

    stringNomor rekening tujuan. Nomor ponsel untuk akun e-wallet.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    For Philippines and Indonesia e-wallets, standard format should use prefix 0
    Indonesia 08XXYYYYZZZZ (ie: 081234567890)
    Philippines 0XXXYYYZZZZ (ie: 09171234567)
    account_type
    bersyarat
    enum Tipe akun penerima untuk mata uang dan channel yang mendukung proxy transfers (contoh: Menggunakan nomor telepon sebagai nomor rekening)
    Jika anda tidak menentukan value untuk field ini, maka value default nya adalah BANK_ACCOUNT

    Values
    For channel_code == MY_DUITNOW:
    MOBILE_NO
    NATIONAL_ID
    PASSPORT
    BUSINESS_REGISTRATION
    BANK_ACCOUNT

    For currency == THB:
    MOBILE_NO
    NATIONAL_ID
    BANK_ACCOUNT
    receipt_notification
    optional
    JSON Objek yang berisi alamat email untuk menerima detail pencairan setelah pembayaran berhasil. Maksimal tiga alamat email masing-masing.
    Individual detail child parameters
    Parameter Deskripsi
    email_to
    optional
    Array [string]
    Penerima email langsung

    Panjang maksimum 255 karakter
    email_cc
    optional
    Array [string]
    Penerima email CC-ed

    Panjang maksimum 255 karakter
    email_bcc
    optional
    Array [string]
    Penerima email BCC-ed

    Panjang maksimum 255 karakter
    metadata
    optional
    Object Objek informasi tambahan yang mungkin Anda gunakan.

    Buat Payout

    Endpoint: Buat Payout

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

    Parameter Permintaan

    Contoh Pembuatan Payout

    Pembuatan Payout Permintaan

    curl https://api.xendit.co/v2/payouts -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
    --header 'Idempotency-key: some-unique-ref-for-request'
    --data-raw '{
      "reference_id": "lotto-1482928194",
      "channel_code": "ID_BCA",
      "channel_properties": {
        "account_number": "000000000099",
        "account_holder_name": "Michael Chen"
      },
      "amount": 1000,
      "description": "Lotto Winner #12",
      "currency": "IDR",
      "receipt_notification": {
        "email_to": [
          "chen@example.co",
          "somebody@example.co"
        ],
        "email_cc": [
          "somebody@example.co",
          "somebody@example.co"
        ],
        "email_bcc": [
          "somebody@example.co",
          "somebody@example.co"
        ]
      },
      "metadata": {
         "lotto_outlet": 24
      }
    }'
    Header Parameter Tipe Deskripsi
    Idempotency-key
    wajib
    string Kunci unik untuk mencegah permintaan duplikat. Anda dapat menggunakan reference_id atau enkripsi beberapa pengenal atau GUID apa pun.

    Karakter: Khusus dan alfanumerik
    Panjang minimum 1 karakter
    Panjang maksimum 100 karakter maksimum
    for-user-id
    optional
    string User-id sub-akun yang Anda inginkan untuk melakukan transaksi ini.

    This header is only used if you have access to xenPlatform. See xenPlatform for more information

    Contoh Pembuatan Payout ke Destinasi Bank

    {
        "reference_id": "sample-successful-create-idr-payout",
        "channel_code": "ID_BCA",
        "channel_properties": {
            "account_holder_name": "Test",
            "account_number": "0000000000"
        },
        "amount": 1000,
        "description": "Sample Successful Create IDR Payout",
        "currency": "IDR",
        "receipt_notification" : {
            "email_to": ["somebody@xendit.co"],
            "email_cc": ["somebody@xendit.co"]
        }
    }

    Contoh Pembuatan Payout ke Destinasi eWallet

    {
        "reference_id": "sample-successful-create-php-payout",
        "channel_code": "PH_GCASH",
        "channel_properties": {
            "account_holder_name": "Test",
            "account_number": "0000000000"
        },
        "amount": 1.11,
        "description": "Sample Successful Create PHP Payout",
        "currency": "PHP",
        "receipt_notification" : {
            "email_to": ["somebody@xendit.co"],
            "email_cc": ["somebody@xendit.co"]
        }
    }

    Contoh permohonan pembuatan Payout dengan mata uang THB ke nomor telepon

    {
        "reference_id": "sample-successful-create-thb-payout",
        "channel_code": "TH_BAY",
        "channel_properties": {
            "account_holder_name": "Test",
            "account_number": "6612345678",
            "account_type": "MOBILE_NO"
        },
        "amount": 1.11,
        "description": "Sample Successful Create THB Payout",
        "currency": "THB",
        "receipt_notification" : {
            "email_to": ["somebody@xendit.co"],
            "email_cc": ["somebody@xendit.co"]
        }
    }
    Parameter Tipe Deskripsi
    reference_id
    wajib
    string Pengidentifikasi pembayaran yang ditentukan klien. Ini adalah ID yang ditetapkan untuk pembayaran di sistem Anda, seperti ID transaksi atau pesanan. Tidak perlu unik.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 255 karakter
    Panjang minimal 1 karakter
    channel_code
    wajib
    string Kode saluran bank tujuan, e-wallet atau saluran OTC yang dipilih. Daftar saluran yang didukung saat ini dapat ditemukan disini
    channel_properties
    wajib
    object Kontainer untuk properti yang terkait dengan channel_code yang dipilih

    Input untuk saluran digital (rekening bank atau e-wallet)
    Individual detail child parameters
    Parameter Deskripsi
    account_holder_name
    wajib

    string Nama pemegang rekening sesuai dengan catatan bank atau e-wallet. Harus sama persis dengan nama akun yang terdaftar.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    account_number
    wajib

    stringNomor rekening tujuan. Nomor ponsel untuk akun e-wallet.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    For Philippines and Indonesia e-wallets, standard format should use prefix 0
    Indonesia 08XXYYYYZZZZ (ie: 081234567890)
    Philippines 0XXXYYYZZZZ (ie: 09171234567)
    account_type
    bersyarat
    enum Tipe akun penerima untuk mata uang dan channel yang mendukung proxy transfers (contoh: Menggunakan nomor telepon sebagai nomor rekening)
    Jika anda tidak menentukan value untuk field ini, maka value default nya adalah BANK_ACCOUNT

    Values

    For channel_code == MY_DUITNOW:
    MOBILE_NO
    NATIONAL_ID
    PASSPORT
    BUSINESS_REGISTRATION
    BANK_ACCOUNT

    For currency == THB:
    MOBILE_NO
    NATIONAL_ID
    BANK_ACCOUNT
    amount
    wajib
    number Jumlah yang akan dikirim ke rekening tujuan. Harus kelipatan dari kenaikan minimum untuk saluran yang dipilih.

    Untuk mata uang IDR, angka harus bilangan bulat
    Untuk mata uang PHP, angka bisa sampai 2 tempat desimal
    Untuk mata uang VND, angka harus bilangan bulat
    Untuk mata uang MYR, angka bisa sampai 2 tempat desimal
    Untuk mata uang THB, angka bisa sampai 2 tempat desimal
    description
    optional
    string Deskripsi untuk dikirim dengan pembayaran. Penerima mungkin melihat ini, misalnya, dalam laporan mutasi bank mereka (jika didukung) atau dalam tanda terima email yang kami kirimkan atas nama Anda.

    Karakter Khusus dan alfanumerik
    Panjang maksimum 100 karakter
    Panjang minimal 1 karakter
    currency
    wajib
    string ISO 4217 Currency Code.
    receipt_notification
    optional
    JSON Objek yang berisi alamat email untuk menerima detail pembayaran setelah pembayaran berhasil. Maksimal tiga alamat email masing-masing.
    Individual detail child parameters
    Parameter Deskripsi
    email_to
    optional
    Array[string]
    Penerima email langsung

    Panjang maksimum 255 karakter
    email_cc
    optional
    Array [string]
    Penerima email CC-ed

    Panjang maksimum 255 karakter
    email_bcc
    optional
    Array [string]
    Penerima email BCC-ed

    Panjang maksimum 255 karakter
    metadata
    optional
    object Objek informasi tambahan yang mungkin Anda gunakan

    Response Parameters

    Contoh Response Body

    {
        "id": "disb-1475459775872",
        "amount": 1.11,
        "channel_code": "PH_GCASH",
        "currency": "PHP",
        "description": "Sample Successful Create PHP Payout",
        "reference_id": "sample-successful-create-php-payout",
        "status": "ACCEPTED",
        "created": "2022-01-05T05:37:48.108Z",
        "updated": "2022-01-05T05:37:48.108Z",
        "estimated_arrival_time": "2022-01-05T05:52:48.106Z",
        "business_id": "6018306aa16ad90cb3c43ba7",
        "channel_properties": {
            "account_number": "0000000000",
            "account_holder_name": "Test"
        },
        "receipt_notification": {
            "email_to": [
                "somebody@xendit.co"
            ],
            "email_cc": [
                "somebody@xendit.co"
            ]
        }
    }

    Mengembalikan Payout objek dengan status 200

    Error Codes

    Contoh payout error

    {
        "error_code": "DUPLICATE_ERROR",
        "message": "A payout with this idempotency key already exists. If you meant to execute a different request, please use another idempotency key."
    }
    Kode Error Pesan Error
    DUPLICATE_ERROR
    400
    Pembayaran dengan kunci idempotensi ini sudah ada. Jika Anda bermaksud menjalankan permintaan yang berbeda, harap gunakan kunci idempotensi lain.
    API_VALIDATION_ERROR
    400
    Harus memiliki properti wajib “xxx”
    API_VALIDATION_ERROR
    400
    "amount" harus memiliki 2 tempat desimal atau kurang
    API_VALIDATION_ERROR
    400
    “expires_at” harus setidaknya 2 hari dari sekarang dan perhatikan melebihi 90 hari
    CHANNEL_CODE_NOT_SUPPORTED
    400
    “channel_code” tidak didukung. Lihat daftar kode saluran yang didukung di URL di bawah ini.
    MINIMUM_TRANSFER_LIMIT_ERROR
    400
    “amount” berada di bawah jumlah minimum yang didukung untuk saluran tersebut. Lihat batasan jumlah di URL di bawah ini.
    MAXIMUM_TRANSFER_LIMIT_ERROR
    400
    “amount” melebihi jumlah maksimum yang didukung untuk saluran tersebut. Lihat batasan jumlah di URL di bawah ini.
    AMOUNT_INCREMENT_NOT_SUPPORTED
    400
    “amount” harus kelipatan dari kenaikan minimum yang didukung oleh saluran.
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    REQUEST_FORBIDDEN_ERROR
    403
    Kunci API dilarang untuk melakukan permintaan ini
    SERVER_ERROR
    500
    Sesuatu yang tidak terduga, developer kami telah diberitahu untuk memecahkan masalah ini

    Cek Payout dengan ID

    Endpoint: Mendapatkan Payout dengan ID

    GET https://api.xendit.co/v2/payouts/:id

    Ambil informasi payout tertentu dengan ID pembayarannya. Mengembalikan payout jika id yang valid diberikan. Mengembalikan kesalahan sebaliknya.

    Request Parameters

    Contoh Cek Payout Request

    Cek Payout dengan ID

    curl https://api.xendit.co/v2/payouts/disb-b57fff2d-9699-470b-9978-ac509c5b266c -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    Header Parameter Tipe Deskripsi
    for-user-id
    optional
    string User-id sub-akun yang Anda inginkan untuk melakukan transaksi ini.

    This header is only used if you have access to xenPlatform. See xenPlatform for more information

    Path Parameter Tipe Deskripsi
    id
    Wajib
    string Xendit Payout ID generated by [POST] /payouts/
    Awalan: disb-

    Response Parameters

    Contoh Cek Payout Response

    {
        "id": "disb-1475459775872",
        "amount": 100,
        "channel_code": "ID_BCA",
        "currency": "IDR",
        "description": "Sample Failed Create Payout",
        "estimated_arrival_time": "2022-01-05T06:09:23.667Z",
        "failure_code": "TEMPORARY_TRANSFER_ERROR",
        "reference_id": "sample-failed-create-payout",
        "status": "FAILED",
        "created": "2022-01-05T05:54:23.670Z",
        "updated": "2022-01-05T05:54:35.680Z",
        "business_id": "5785e6334d7b410667d355c4",
        "channel_properties": {
            "account_number": "123456",
            "account_holder_name": "Test"
        }
    }

    Mengembalikan Payout object dengan status 200

    Error Codes

    Kode Error Pesan Error
    REQUEST_FORBIDDEN_ERROR
    403
    Kunci API yang digunakan tidak memiliki izin yang diperlukan untuk melakukan permintaan. Harap tetapkan izin yang tepat untuk kunci tersebut.
    DATA_NOT_FOUND
    404
    Tidak dapat menemukan pembayaran dengan ID yang sesuai. Silakan coba lagi dengan ID yang valid
    INVALID_API_KEY
    401
    Kunci API tidak valid

    Cek Payouts dengan Reference ID

    Endpoint: Mendapatkan Payout dengan Reference ID

    GET https://api.xendit.co/v2/payouts?reference_id=:reference_id

    Ambil semua pembayaran yang cocok dengan ID referensi. Mengembalikan array Payout Object yang cocok jika reference_id yang valid diberikan. Mengembalikan array kosong jika tidak ada pembayaran yang sesuai dengan reference_id.

    Request Parameters

    Contoh Cek Payout Request

    Mendapatkan Payout dengan Reference ID

    curl https://api.xendit.co/v2/payouts?reference_id=lotto-1482928194&limit=10&after_id=disb-cc7cd9c0-1971-4414-9b54-be545948a33d&before_id=disb-69d8e2ba-20f9-41af-bd04-e299237fd7ec -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    Header Parameter Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    This header is only used if you have access to xenPlatform. See xenPlatform for more information

    Query Parameter Tipe Deskripsi
    reference_id
    wajib
    string Reference_id yang anda berikan dalam permintaan Buat Pembayaran
    limit
    optional
    number Batas jumlah objek yang akan dikembalikan

    Standar 10
    Minimal 1
    Maks 100
    after_id
    optional
    UUID ID item sebelumnya
    before_id
    optional
    UUID ID item berikutnya

    Response Parameters

    Contoh Cek Payout Response

    [  
      {
        "id": "disb-1475459775872",
        "amount": 100,
        "channel_code": "ID_BCA",
        "currency": "IDR",
        "description": "Sample Failed Create Payout",
        "estimated_arrival_time": "2022-01-05T06:09:23.667Z",
        "failure_code": "TEMPORARY_TRANSFER_ERROR",
        "reference_id": "sample-failed-create-payout",
        "status": "FAILED",
        "created": "2022-01-05T05:54:23.670Z",
        "updated": "2022-01-05T05:54:35.680Z",
        "business_id": "5785e6334d7b410667d355c4",
        "channel_properties": {
            "account_number": "123456",
            "account_holder_name": "Test"
        }
    },
      {
        "id": "disb-567845975142",
        "amount": 200,
        "channel_code": "ID_BCA",
        "currency": "IDR",
        "description": "Sample Failed Create Payout2",
        "estimated_arrival_time": "2022-01-05T06:14:23.667Z",
        "failure_code": "TEMPORARY_TRANSFER_ERROR",
        "reference_id": "sample-failed-create-payout2",
        "status": "FAILED",
        "created": "2022-01-05T05:58:23.670Z",
        "updated": "2022-01-05T05:58:35.680Z",
        "business_id": "5785e6334d7b410667d355c4",
        "channel_properties": {
            "account_number": "123456",
            "account_holder_name": "Test"
        }
    }
    
    ]

    Mengembalikan array Payout object yang diurutkan berdasarkan waktu yang dibuat dalam urutan menurun dengan kode status HTTP 200. "data" akan menjadi array kosong dan "has_more" sama dengan false ketika tidak ada data yang cocok

    Parameter Tipe Deskripsi
    data
    wajib
    array Array Payout Object yang cocok dengan reference_id. Akan diurutkan berdasarkan waktu yang dibuat dalam urutan menurun.
    has_more
    wajib
    boolean Menunjukkan apakah ada lebih banyak item yang akan ditanyakan dengan after_id dari item terakhir dari hasil saat ini.
    links
    optional
    aray Implementasi HATEOAS pada kolom after_id
    Individual detail child parameters
    Parameter Description
    href
    optional
    string
    Target URI yang harus mengandung target ke Internationalized Resource Identifiers (IRI)
    rel
    optional
    string
    Jenis relasi tautan menjelaskan bagaimana konteks (sumber) saat ini terkait dengan sumber daya target.
    method
    optional
    string
    Atribut metode HTTP untuk IRI target Seperti GET, POST, DELETE, etc

    Kode Error

    Kode Error Pesan Error
    REQUEST_FORBIDDEN_ERROR 403 Kunci API yang digunakan tidak memiliki izin yang diperlukan untuk melakukan permintaan. Harap tetapkan izin yang tepat untuk kunci tersebut.

    Membatalkan Payout

    Endpoint: Membatalkan Payout

    GET https://api.xendit.co/v2/payouts/:id/cancel

    Membatalkan pembayaran dengan segera. Jumlah pembayaran dan biaya akan dikembalikan.


    Catatan: Pembatalan dimungkinkan jika pembayaran belum dikirim melalui mitra kami.

    Pembayaran bank dan e-wallet: Pembatalan hanya diperbolehkan ketika status = ACCEPTED

    Request Parameters

    Contoh Membatalkan Payout Request

    Membatalkan Payout

    curl https://api.xendit.co/v2/payouts/disb-b57fff2d-9699-470b-9978-ac509c5b266c/cancel -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    Header Parameter Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Path Parameter Tipe Deskripsi
    id
    Wajib
    string Xendit Payout ID generated by [POST] /payouts/
    Prefix: disb-

    Response Parameters

    Contok Membatalkan Payout Response

    
    {
        "id": "disb-1475459775872",
        "amount": 250000,
        "channel_code": "PH_CITI",
        "currency": "PHP",
        "description": "rewards",
        "reference_id": "test-rewards-001",
        "status": "CANCELLED",
        "created": "2022-01-16T12:11:22.233Z",
        "updated": "2022-01-16T12:21:31.373Z",
        "estimated_arrival_time": "2022-01-16T12:26:22.155Z",
        "business_id": "5785e6334d7b410667d355c4",
        "channel_properties": {
            "payout_code": "002912362381009082189137",
            "recipient_given_names": "Michael",
            "recipient_surname": "Chen",
            "expires_at": "2022-01-23T12:11:22.156Z"
        }
    }
    
    

    Mengembalikan Payout objek dengan kode status HTTP 200 dan status CANCELLED.

    Kode Error

    Kode Error Pesan Error
    CANCELLATION_NOT_ALLOWED
    400
    Pembayaran tidak dapat dibatalkan karena sudah diproses oleh Xendit.
    DATA_NOT_FOUND
    400
    Tidak dapat menemukan pembayaran dengan ID yang sesuai. Silakan coba lagi dengan ID yang valid

    Payout Webhook

    Endpoint: Payout Webhook

    POST https://yourcompany.com/payout_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Payment Webhook Payload

    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh Success Payout Webhook

    {
       "id":"disb-1b950430-kkk-44f0-q485-641bc450c59c",
       "amount":1.23,
       "status":"SUCCEEDED",
       "created":"2022-01-11T01:39:15.465Z",
       "updated":"2022-01-11T01:39:18.773Z",
       "currency":"PHP",
       "description":"V2 Regional Payout",
       "channel_code":"PH_GCASH",
       "reference_id":"Webhook-Automation-test-49a294eb-d664-423f-9ea5-476d8201c9d8",
       "account_number":"09991231877",
       "idempotency_key":"a029fc31-02ef-4c8b-b21d-af32ceed7321",
       "channel_category":"EWALLET",
       "account_holder_name":"Michael Chen",
       "connector_reference":"SIMULATED_PARTNER_REFERENCE_1665452357445_241",
       "receipt_notification":{
          "email_cc":[
             "mikechen@xendit.co"
          ]
       },
       "estimated_arrival_time":"2022-01-11T01:54:15.464Z"
    }

    Contoh Failed Payout Webhook

    {
       "id":"disb-31ff90a0-d0fe-444c-9653-44d01cbf2a0e",
       "amount":1,
       "status":"FAILED",
       "created":"2022-01-11T01:39:21.074Z",
       "updated":"2022-01-11T01:39:24.139Z",
       "currency":"PHP",
       "description":"V2 Regional Payout",
       "channel_code":"PH_UBP",
       "failure_code":"INVALID_DESTINATION",
       "reference_id":"Webhook-Test-ab2cd787-05ab-4a2f-8a89-f3604384b9ea",
       "account_number":"121212",
       "idempotency_key":"01d6d000-bc20-4630-9e3f-68312ac2272e",
       "channel_category":"BANK",
       "account_holder_name":"Michael Chen",
       "estimated_arrival_time":"2022-01-11T01:54:21.073Z"
    }

    Payouts Gagal/Sukses

    Parameter Tipe Deskripsi
    event
    wajib
    string Jenis peristiwa. Kemungkinan kejadian:
    payout.succeeded - Status pembayaran telah berhasil dan bank mitra telah mengkreditkan dana ke penerima

    payout.failed - Status pembayaran telah gagal dan bank mitra menolak transaksi atau ada masalah saat memproses transaksi.

    payout.reversed - Pembayaran yang awalnya dalam status berhasil menerima pengembalian dana atau pembalikan dana dari bank mitra. Dana telah dikembalikan kembali ke saldo pedagang yang tersedia.
    business_id
    wajib
    string ID bisnis unik Xendit
    created
    wajib
    string ISO8601 Stempel waktu ISO8601 dari waktu pembuatan acara

    Timezone UTC+0
    Format: YYYY-MM-DDThh:mm:ssZ
    data
    wajib
    object Kembalikan Payout Object dengan status tertentu berdasarkan hasil pemrosesan pembayaran dan bidang acara berikut

    Daftar Kesalahan / Eror

    Kode Error Penjelasan Bisa dicoba kembali?
    INSUFFICIENT_BALANCE Saldo pada akun Anda tidak mencukupi untuk melakukan disbursement yang diinginkan. Ya, silakan coba kembali setelah memastikan Anda telah memiliki saldo yang cukup.
    INVALID_DESTINATION Eror ini terjadi ketika bank menginformasikan bahwa akun tidak valid. Hal ini biasanya terjadi ketika akun belum terdaftar atau akun diblokir. Hal ini juga bisa terjadi ketika akun baru dibuat dan data belum terupdate di database nasional. Disbursement biasanya tidak akan sukses apabila dicoba kembali. Namun terdapat beberapa kasus bank mengirimkan kode eror yang salah. Hal ini sepenuhnya merupakan kekeliruan di sistem bank, Anda bsia mencoba kembali setelah memastikan kembali ke bank tujuan atau setelah menerima webhook dari kami.
    REJECTED_BY_CHANNEL Bank tujuan menolak disbursement dengan berbagai alasan. Eror ini merupakan eror umum dan bank biasanya tidak menyediakan alasan spesifik. Sayangnya, kami tidak bisa memprediksi apakah disbursement akan sukses apabila dicoba kembali. Namun And bisa mencoba kembali setidaknya satu jam setelah menerima webhook dari kami.
    TEMPORARY_TRANSFER_ERROR Kami mengalami isu ketika memproses disbursement. Berdasarkan pegalaman, isu ini seharusnya bisa diselesaikan dalam 1-2 jam. Ya, silakan coba kembali dalam 1-2 jam.
    TRANSFER_ERROR Kami menerima eror yang fatal ketika memproses disbursement. Secara normal, hal ini berarti parameter API tertentu pada request Anda tidak valid. Biasanya request disbursement tetap gagal bila dicoba kembali.
    UNKNOWN_BANK_NETWORK_ERROR Bank mengirimkan eror yang belum terdokumentasikan. Hal ini berarti di sisi bank tidak mengetahui dengan pasti isu yang terjadi. Sayangnya, kami tidak dapat memprediksi apakah disbursement akan sukses atau apakah Anda harus mencoba kembali.Anda mungkin. Apabila Anda memutuskan untuk mencoba kembali, mohon untuk mencoba kembali setelah kami mengembalikan response apakah disbursement berhasil atau gagal.

    Cek Ketersediaan Channel

    Endpoint: Cek Ketersediaan Channels

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

    Contoh Cek Ketersediaan Channels Request

    curl https://api.xendit.co/payouts_channels?currency=PHP&channel_category=BANK -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:

    Mengambil daftar semua saluran yang didukung untuk pembayaran

    Request Parameters

    Parameter Tipe Deskripsi
    currency
    optional
    string Filter menurut mata uang
    Values: IDR, PHP
    channel_category
    optional
    string Filter menurut channel_category
    Values: BANK, EWALLET, OTC
    channel_code
    optional
    string Filter menurut channel_code
    ie: ID_BSI, PH_AUB

    Response Parameters

    Cek Ketersediaan Channel (Banks) Response

    [
        {
            "channel_code": "ID_BSI",
            "channel_category": "BANK",
            "currency": "IDR",
            "channel_name": "Bank Syariah Indonesia",
            "amount_limits": {
                "minimum": 10000,
                "maximum": 1999999999999,
                "minimum_increment": 1
            }
        },
        {
            "channel_code": "PH_AUB",
            "channel_category": "BANK",
            "currency": "PHP",
            "channel_name": "Asia United Bank",
            "amount_limits": {
                "minimum": 1,
                "maximum": 100000000,
                "minimum_increment": 1
            }
        }
    ]

    Mengembalikan array objek Saluran Payouts yang diurutkan menurut urutan abjad menurut channel_code dengan kode status HTTP 200. Kembalikan array kosong bila tidak ditemukan.

    Jika parameter kueri ditentukan, mengembalikan daftar objek Saluran Payouts yang difilter yang cocok dengan parameter kueri.

    Parameter Tipe Deskripsi
    channel_name string Nama saluran payouts
    channel_category string Jenis tujuan payout
    Values: BANK, EWALLET, OTC
    channel_code string Kode channel bank tujuan, e-wallet atau channel OTC. Daftar channel yang didukung saat ini dapat ditemukan disini
    currency string Mata uang default saluran pembayaran
    Format Mata Uang: ISO 4217
    amount_limits object Objek yang berisi batasan jumlah yang dikenakan oleh saluran.
    Individual detail child parameters
    minimum
    number Jumlah minimum yang dapat dibayarkan ke saluran ini
    maximum
    number Jumlah maksimum yang dapat dibayarkan ke saluran ini
    minimum_increment
    number Peningkatan jumlah terkecil yang diizinkan oleh saluran

    Disbursement

    Dengan Xendit, anda dapat untuk mengirim dana ke bank manapun diseluruh Indonesia. Saat ini kami mendukung pengiriman dana ke 140+ bank lokal, virtual account dari bank-bank besar (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, dan Bank NOBU) dan eWallet (Contoh: GoPay dan OVO). Lihat semua kode bank disini.

    Disbursement Objek

    Contoh Disbursement Objek

    {
      "id": "57f1ce05bb1a631a65eee662",
      "external_id": "disb-1475459775872",
      "user_id": "5785e6334d7b410667d355c4",
      "bank_code": "BCA",
      "account_holder_name": "MICHAEL CHEN",
      "amount": 90000,
      "disbursement_description": "Reimbursement for shoes",
      "status": "PENDING",
      "email_to": [
            "somebody@email.com"
        ],
        "email_cc": [
            "somebody.else@gmail.com"
        ],
        "email_bcc": [
            "someone@mail.co"
        ]
    }
    Parameter Tipe Deskripsi
    id
    wajib
    string Xendit disbursement ID yang unik. Gunakan ID ini untuk eskalasi ke tim support dan rekonsiliasi
    external_id
    wajib
    string ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order.
    user_id
    wajib
    string Business ID Anda di Xendit
    bank_code
    wajib
    string Kode bank atau e-wallet tujuan. Lihat kode bank
    account_holder_name
    wajib
    string Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
    amount
    wajib
    number Nominal transfer
    disbursement_description
    wajib
    string Deskripsi transfer
    status
    wajib
    string Status disbursement
    - PENDING Proses pengiriman sudah dimulai tetapi belum diselesaikan oleh bank.
    - COMPLETED Bank telah mengkonfirmasi pengiriman dana.
    - FAILED Disbursement gagal. Alasan kegagalan dapat dilihat pada parameter failure code
    failure_code
    opsional
    string 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 eror pada transfer dana
    email_to
    opsional
    array of string Alamat email yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email
    email_cc
    opsional
    array of string Alamat email carbon copy yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email
    email_bcc
    opsional
    array of string Alamat email blind carbon copy yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email

    Buat Disbursement

    Endpoint: Pembuatan Disbursement

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

    Contoh Pembuatan Disbursement

    curl https://api.xendit.co/disbursements -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
      -d external_id=disb-1475459775872 \
      -d amount=90000 \
      -d bank_code=BCA \
      -d account_holder_name='MICHAEL CHEN' \
      -d account_number=1234567890 \
      -d description='Reimbursement for shoes'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => '12345',
        'amount' => 90000,
        'bank_code' => 'BCA',
        'account_holder_name' => 'MICHAEL CHEN',
        'account_number' => '1234567890',
        'description' => 'Disbursement from Example',
        'X-IDEMPOTENCY-KEY' => 'unique-id'
      ];
    
      $createDisbursements = \Xendit\Disbursements::create($params);
      var_dump($createDisbursements);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.create({
      externalID: 'disb-1475459775872',
      amount: 90000,
      bankCode: 'BCA',
      accountHolderName: 'MICHAEL CHEN',
      accountNumber: '1234567890',
      description: 'Reimbursement for shoes',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "disb-1475459775872");
      params.put("bank_code", "BCA");
      params.put("account_holder_name", "MICHAEL CHEN");
      params.put("account_number", "1234567890");
      params.put("description", "Reimbursement for shoes");
      params.put("amount", "90000");
    
      Disbursement disbursement = Disbursement.create(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createData := disbursement.CreateParams{
      IdempotencyKey:    "disbursement" + time.Now().String(),
      ExternalID:        "12345",
      BankCode:          "BCA",
      AccountHolderName: "MICHAEL CHEN",
      AccountNumber:     "1234567890",
      Description:       "Disbursement from Go",
      Amount:            90000,
    }
    
    resp, err := disbursement.Create(&createData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created disbursement: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Disbursement = xendit_instance.Disbursement
    
    disbursement = Disbursement.create(
        external_id="disb-1475459775872",
        bank_code="BCA",
        account_holder_name="MICHAEL CHEN",
        account_number="1234567890",
        description="Reimbursement for shoes",
        amount=90000,
    )
    print(disbursement)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DisbursementClient disbursement = xendit.Disbursement;
    
    DisbursementParameter parameter = new DisbursementParameter
    {
      ExternalId = "disb-1475459775872",
      BankCode = DisbursementChannelCode.Bca,
      AccountHolderName = "MICHAEL CHEN",
      AccountNumber = "1234567890",
      Description = "Reimbursement for shoes",
      Amount = 1000,
    };
    
    DisbursementResponse disbursementResponse = await disbursement.Create(parameter);
    Header Parameter Tipe Deskripsi
    X-IDEMPOTENCY-KEY
    opsional
    string string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.

    Karakter Spesial dan alfanumerik
    Panjang maksimum Tidak ada karakter maksimum
    Panjang minimum 1 karakter
    for-user-id
    opsional
    string string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Contoh Pembuatan Disbursement ke Destinasi Bank

    {
       "external_id": "disb-{{$timestamp}}",
       "amount": 90000,
       "bank_code": "BCA",
       "account_holder_name": "MICHAEL CHEN",
       "account_number": "1234567890",
       "description":"Reimbursement for shoes"
    }

    Contoh Pembuatan Disbursement ke Destinasi eWallet

    {
       "external_id": "disb-{{$timestamp}}",
       "amount": 90000,
       "bank_code": "OVO",
       "account_holder_name": "MICHAEL CHEN",
       "account_number": "081228271026",
       "description":"Reimbursement for shoes"
    }
    Body Parameter Tipe Deskripsi
    external_id
    wajib
    string ID disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement

    Characters Spesial dan alfanumerik
    Panjang maksimum 1000 karakter maksimum
    Panjang minimum 1 karakter
    account_holder_name
    wajib
    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</h5
    account_number
    wajib
    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, Dana, Linkaja, Shopeepay).

    description
    wajib
    string Deskripsi untuk dikirim beserta pengiriman dana

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

    Lihat batasan jumlah maksimum dan minimum untuk setiap bank dan e-wallet di sini.

    Karakter Bilangan bulat numerik, tidak ada desimal
    email_to
    opsional
    array of string Alamat email yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email
    email_cc
    opsional
    array of string Alamat email carbon copy yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email. Hanya diaktifkan bila email_to aktif.
    email_bcc
    opsional
    array of string Alamat email blind carbon copy yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email. Hanya diaktifkan bila email_to aktif.

    Respon Pembuatan Disbursement

    Contoh Respon Pembuatan Disbursement

    {
      "id": "57f1ce05bb1a631a65eee662",
      "external_id": "disb-1475459775872",
      "user_id": "5785e6334d7b410667d355c4",
      "bank_code": "BCA",
      "account_holder_name": "MICHAEL CHEN",
      "amount": 90000,
      "disbursement_description": "Reimbursement for shoes",
      "status": "PENDING",
      "email_to": [
        "somebody@email.com"
      ],
      "email_cc": [
        "somebody.else@gmail.com"
      ],
      "email_bcc": [
        "someone@mail.co"
      ]
    }

    Mengembalikan Disbursement objek dengan status 200

    Kesalahan Dalam Pembuatan Disbursement

    Contoh Pesan Kesalahan

    {
      "error_code": "BANK_CODE_NOT_SUPPORTED",
      "message": "Destination bank code is not supported. See https://docs.xendit.co/xendisburse/channel-codes for all supported channel codes"
    }
    Kode Kesalahan Deskripsi
    API_VALIDATION_ERROR
    400
    Validasi input gagal. Field error merincikan field mana saja yang melanggar validasi
    INVALID_JSON_FORMAT
    400
    Body request tidak dalam format JSON yang valid.
    DISBURSEMENT_DESCRIPTION_NOT_FOUND_ERROR
    400
    Deskripsi disbursement belum di set di Pengaturan Disbursement. Tambahkan deskripsi 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 atau belum didukung. Pelajari semua dukungan bank dan ewallet
    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. Pelajari minimum dan maksimum nominal tiap kanal
    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. Pelajari minimum dan maksimum nominal tiap kanal
    INVALID_DESTINATION
    400
    Nomor rekening tidak dapat diproses. Gunakan nomor rekening lain untuk mencoba kembali.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    SERVER_ERROR
    500
    Koneksi server error. Gunakan Get Disbursement API untuk memeriksa apakah disbursement sudah dibuat. Coba ulang dengan aman dengan menggunakan X-IDEMPOTENCY-KEY header

    Cek Disbursement dengan ID

    Endpoint: Mendapatkan Disbursement dengan ID

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

    Endpoint ini digunakan untuk query pengecekan status transaksi disbursement.

    Contoh Permintaan Mendapatkan Disbursement dengan ID

    curl https://api.xendit.co/disbursements/57c9010f5ef9e7077bcb96b6 -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '57c9010f5ef9e7077bcb96b6';
      $getDisbursements = \Xendit\Disbursements::retrieve($id);
      var_dump($getDisbursements);
    
    ?>
    const x = new require('xendit-node')({
      secretKey:
        'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==',
    });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.getByID({ disbursementID: '587cc7ea77535fb94bb4e8eb' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Disbursement disbursement = Disbursement.getById("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getByIDData := disbursement.GetByIDParams{
      DisbursementID: "57c9010f5ef9e7077bcb96b6",
    }
    
    resp, err := disbursement.GetByID(&getByIDData)
    if err != nil {
      log.Fatal(err.ErrorCode, err.Message, err.GetStatus())
    }
    
    fmt.Printf("retrieved disbursement: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Disbursement = xendit_instance.Disbursement
    
    disbursement = Disbursement.get(
        id="5ef1befeecb16100179e1d05",
    )
    print(disbursement)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DisbursementClient disbursement = xendit.Disbursement;
    
    DisbursementResponse disbursementResponse = await disbursement.GetById("5ef1befeecb16100179e1d05");
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

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

    Respon Cek Disbursement dengan ID

    Respon Cek Disbursement dengan ID

    {
      "id": "57f1ce05bb1a631a65eee662",
      "external_id": "disb-1475459775872",
      "user_id": "5785e6334d7b410667d355c4",
      "bank_code": "BCA",
      "account_holder_name": "MICHAEL CHEN",
      "amount": 90000,
      "disbursement_description": "Reimbursement for shoes",
      "status": "PENDING",
      "email_to": [
            "somebody@email.com"
        ],
        "email_cc": [
            "somebody.else@gmail.com"
        ],
        "email_bcc": [
            "someone@mail.co"
        ]
    }

    Mengembalikan Disbursement objek dengan status 200

    Kesalahan Cek Disbursement dengan ID

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

    Cek Disbursement dengan External ID

    Endpoint: Mendapatkan Disbursement dengan External ID

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

    Endpoint ini digunakan untuk query status disbursement dengan external_id.

    Contoh Permintaan Mendapatkan disbursement dengan External ID

    curl https://api.xendit.co/disbursements?external_id=72655 -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $external_id = 'disbursements-ext-id';
      $getDisbursementsByExt = \Xendit\Disbursements::retrieveExternal($external_id);
      var_dump($getDisbursementsByExt);
    
    ?>
    const x = new require('xendit-node')({
      secretKey:
        'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==',
    });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.getByExtID({ externalID: 'disbursement_12345' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Disbursement[] disbursement = Disbursement.getByExternalId("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getByExternalIDData := disbursement.GetByExternalIDParams{
      ExternalID: "disbursement_12345",
    }
    
    resps, err := disbursement.GetByExternalID(&getByExternalIDData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved disbursements: %+v\n", resps)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Disbursement = xendit_instance.Disbursement
    
    disbursement_list = Disbursement.get_by_ext_id(
        external_id="demo_1475459775872",
    )
    print(disbursement_list)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DisbursementClient disbursement = xendit.Disbursement;
    
    DisbursementResponse[] disbursementResponses = await disbursement.GetByExternalId("demo_1475459775872");
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Query Tipe Deskripsi
    external_id
    wajib
    string Custom ID disbursement yang ditetapkan oleh customer saat pembuatan disbursement
    The external_id harus sama dengan external_id yang digunakan saat pembuatan disbursement

    Respon Permintaan Cek Disbursement dengan External ID

    Respon Permintaan Cek Disbursement

    [
      {
        "id": "57f1ce05bb1a631a65eee662",
        "external_id": "disb-1475459775872",
        "user_id": "5785e6334d7b410667d355c4",
        "bank_code": "BCA",
        "account_holder_name": "MICHAEL CHEN",
        "amount": 90000,
        "disbursement_description": "Refunds for shoes",
        "status": "COMPLETED",
        "email_to": [
          "somebody@email.com"
        ],
        "email_cc": [
          "somebody.else@gmail.com"
        ],
        "email_bcc": [
          "someone@mail.co"
        ]
      },
      {
        "id": "57f12e1afb1a721a65efe715",
        "external_id": "disb-1475459775872",
        "user_id": "5785e6334d7b410667d355c4",
        "bank_code": "BCA",
        "account_holder_name": "MICHAEL CHEN",
        "amount": 90000,
        "disbursement_description": "Refunds for shoes",
        "status": "FAILED",
        "failure_code": "REJECTED_BY_BANK",
        "email_to": [
          "somebody@email.com"
        ],
        "email_cc": [
          "somebody.else@gmail.com"
        ],
        "email_bcc": [
          "someone@mail.co"
        ]
      }
    ]

    Mengembalikan array Disbursement objek dengan status 200

    Kesalahan Mendapatkan Disbursement dengan External ID

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

    Notifikasi Disbursement

    Endpoint: Notifikasi Disbursement

    POST https://yourcompany.com/disbursement_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Struktur Pesan Callback

    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh Notifikasi Disbursement Ketika Berhasil

    {
        "id": "57e214ba82b034c325e84d6e",
        "created": "2021-07-10T08:15:03.404Z",
        "updated": "2021-07-10T08:15:03.404Z",
        "external_id": "disbursement_123124123",
        "user_id": "57c5aa7a36e3b6a709b6e148",
        "amount": 150000,
        "bank_code": "BCA",
        "account_holder_name": "MICHAEL CHEN",
        "disbursement_description": "Refund for shoes",
        "status": "COMPLETED",
        "is_instant": true
    }

    Contoh Notifikasi Disbursement Ketika Gagal

    {
        "id": "57e214ba82b034c325e84d6e",
        "created": "2021-07-10T08:15:03.404Z",
        "updated": "2021-07-10T08:15:03.404Z",
        "external_id": "disbursement_123124123",
        "user_id": "57c5aa7a36e3b6a709b6e148",
        "amount": 150000,
        "bank_code": "BCA",
        "account_holder_name": "MICHAEL CHEN",
        "disbursement_description": "Refund for shoes",
        "status": "FAILED",
        "failure_code": "INVALID_DESTINATION",
        "is_instant": true
    }
    Parameter Tipe Deskripsi
    id
    wajib
    string Xendit disbursement ID yang unik. Gunakan ID ini untuk eskalasi ke tim support dan rekonsiliasi
    created string ISO 8601 waktu pada saat disbursement dibuat. Zona waktu UTC+0
    updated string ISO 8601 waktu pada saat disbursement terakhir kali diupdate. Zona waktu UTC+0
    external_id
    wajib
    string ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order.
    user_id
    wajib
    string Business ID Anda di Xendit
    bank_code
    wajib
    string Kode bank atau e-wallet tujuan. Lihat kode bank
    account_holder_name
    wajib
    string Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
    amount
    wajib
    number Nominal transfer
    disbursement_description
    wajib
    string Deskripsi transfer
    status
    wajib
    string Status disbursement
    - PENDING Proses pengiriman sudah dimulai tetapi belum diselesaikan oleh bank.
    - COMPLETED Bank telah mengkonfirmasi pengiriman dana.
    - FAILED Disbursement gagal. Alasan kegagalan dapat dilihat pada parameter failure code
    failure_code
    opsional
    string 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 eror pada transfer dana
    is_instant
    opsional
    string Mengindikasikan apakah transfer dana dieksekusi secara instan

    Cek Ketersediaan Bank

    Endpoint: Mendapatkan Ketersediaan Bank Disbursement

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

    Contoh Permintaan Mendapatkan Ketersediaan Bank Disbursement

    curl https://api.xendit.co/available_disbursements_banks -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getDisbursementsBanks = \Xendit\Disbursements::getAvailableBanks();
      var_dump($getDisbursementsBanks);
    
    ?>
    const x = new require('xendit-node')({
      secretKey:
        'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==',
    });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.getBanks();
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      AvailableBank[] banks = Disbursement.getAvailableBanks();
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    availableBanks, err := disbursement.GetAvailableBanks()
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("available disbursement banks: %+v\n", availableBanks)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Disbursement = xendit_instance.Disbursement
    
    disbursement_banks = Disbursement.get_available_banks()
    print(disbursement_banks)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DisbursementClient disbursement = xendit.Disbursement;
    
    AvailableBank[] availableBanks = await disbursement.GetAvailableBanks();

    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, Dana, Linkaja, Shopeepay). Jika Anda ingin kami mendukung pembayaran ke tujuan tertentu, silakan hubungi kami di support@xendit.co.

    Mendapatkan Ketersediaan Bank Disbursement

    [
      {
        "name": "Bank Mandiri",
        "code": "MANDIRI",
        "can_disburse": true,
        "can_name_validate": true
      },
      {
        "name": "Bank Rakyat Indonesia (BRI)",
        "code": "BRI",
        "can_disburse": true,
        "can_name_validate": true
      },
      {
        "name": "Bank Central Asia (BCA)",
        "code": "BCA",
        "can_disburse": true,
        "can_name_validate": true
      }
    ]
    Parameter Tipe Deskripsi
    name string Nama lengkap bank atau e-wallet
    code string 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.

    Buat Batch Disbursement

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

    Endpoint: Pembuatan batch disbursement

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

    Contoh Permintaan Pembuatan Batch Disbursement

    curl https://api.xendit.co/batch_disbursements -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
      -H "Content-Type: application/json" \
      -d '{
        "reference": "demo_123",
        "disbursements": [
          {
            "external_id": "demo_123_1",
            "bank_code": "BCA",
            "bank_account_name": "Stanley Nguyen",
            "bank_account_number": "12345678",
            "description": "Reimbursement for pair of shoes (1)",
            "amount": 20000
          }
        ]
      }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $batch_params = [
        'reference' => 'qwerty1234',
        'disbursements' => [
          [
            'amount' => 20000,
            'bank_code' => 'BCA',
            'bank_account_name' => 'Fadlan',
            'bank_account_number' => '1234567890',
            'description' => 'Batch Disbursement',
            'external_id' => 'disbursement-1'
          ],
          [
            'amount' => 10000,
            'bank_code' => 'MANDIRI',
            'bank_account_name' => 'Lutfi',
            'bank_account_number' => '1234567891',
            'description' => 'Batch Disbursement with email notifications',
            'external_id' => 'disbursement-2',
            'email_to' => ['test+to@xendit.co'],
            'email_cc' => ['test+cc@xendit.co'],
            'email_bcc' => ['test+bcc1@xendit.co', 'test+bcc2@xendit.co']
          ]
        ]
      ];
    
      $createBatchDisbursements = \Xendit\Disbursements::createBatch($batch_params);
      var_dump($createBatchDisbursements);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    const resp = await d.createBatch({
      reference: 'demo_123',
      disbursements: [
        {
          externalID: 'demo_123_1',
          bankCode: 'BCA',
          accountHolderName: 'Stanley Nguyen',
          accountNumber: '12345678',
          description: 'Reimbursement for pair of shoes (1)',
          amount: 20000,
        }
      ]
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      String emailTo[] = new String[1];
      emailTo[0] = "test@email.com";
    
      String emailCC[] = new String[1];
      emailCC[0] = "test@email.com";
    
      String emailBcc[] = new String[1];
      emailBcc[0] = "test@email.com";
    
      BatchDisbursementItem items[] = new BatchDisbursementItem[1];
    
      BatchDisbursementItem item =
            BatchDisbursementItem.builder()
                .amount(10000)
                .bankCode("ABC")
                .bankAccountName("Lorem Ipsum")
                .bankAccountNumber("1234567890")
                .description("Lorem ipsum dolor sit amet")
                .externalId("test_id")
                .emailTo(emailTo)
                .emailCC(emailCC)
                .emailBcc(emailBcc)
                .build();
    
      items[0] = item;
    
      BatchDisbursement.create(
        "reference", //reference
        items //BatchDisbursementItem []
      );
    
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    BatchDisbursement = xendit_instance.BatchDisbursement
    
    batch_disbursement_items = []
    batch_disbursement_items.append(
        BatchDisbursement.helper_create_batch_item(
            amount=10000,
            bank_code="BCA",
            bank_account_name="Adyaksa W",
            bank_account_number="12345678",
            description="Sample Batch Disbursement",
            external_id=f"batch-disbursement-item-12345"
        )
    )
    batch_disbursement = BatchDisbursement.create(
        reference="batch_disbursement-1595326225",
        disbursements=batch_disbursement_items,
    )
    print(batch_disbursement)
    Parameter Header Tipe Deskripsi
    X-IDEMPOTENCY-KEY
    opsional
    string Unique key to mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production
    for-user-id
    opsional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Body Tipe Deskripsi
    reference
    wajib
    string ID batch disbursement pada sistem anda yang digunakan untuk merekonsiliasi
    disbursement
    wajib
    Disbursement Item[] List disbursement yang ada didalam batch

    Disbursement Item

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

    Parameter Respon

    Contoh Respon Pembuatan Batch Disbursement

    {
      "created": "2017-03-30T06:12:47.212Z",
      "reference": "qwerty1234",
      "total_uploaded_amount": 30000,
      "total_uploaded_count": 2,
      "status": "UPLOADING",
      "id": "58dca1dffee4228917d37336"
    }
    Parameter Tipe Deskripsi
    created
    wajib
    string Timestamp pembuatan batch disbursement creation dalam format ISO
    reference
    wajib
    string ID batch disbursement dalam sistem Anda yang digunakan untuk rekonsiliasi setelah disbursement selesai
    total_uploaded_count
    wajib
    number Jumlah disbursement count dalam batch
    total_uploaded_amount
    wajib
    number Jumlah disbursement amount dalam batch
    status
    wajib
    string
    UPLOADING Permintaan Batch Disbursement telah diterima dan sedang menunggu detail item untuk dibuat dan diverifikasi
    id
    wajib
    string Unique ID batch disbursement pada sistem kami

    Kode Error

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

    Notifikasi Batch Disbursement

    Endpoint: Notifikasi Batch Disbursement

    POST https://yourcompany.com/disbursement_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

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

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Data Webhook

    Contoh data webhook Batch Disbursements

    {
        "id": "5a64e8217c077f576d926038",
        "created": "2021-01-21T19:21:05.982Z",
        "updated": "2021-01-21T19:21:42.297Z",
        "reference": "Test webhook BD",
        "user_id": "5a64e81d70dd16331f65cd61",
        "total_uploaded_count": 1,
        "total_uploaded_amount": 10000,
        "approved_at": "2021-01-21T19:21:16.853Z",
        "approver_id": "5a64e82070dd16331f65cd6d",
        "status": "COMPLETED",
        "total_disbursed_count": 1,
        "total_disbursed_amount": 10000,
        "total_error_count": 0,
        "total_error_amount": 0,
        "disbursements": [
            {
                "id": "5a64e8227c077f576d926039",
                "created": "2021-01-21T19:21:06.066Z",
                "updated": "2021-01-21T19:21:33.569Z",
                "external_id": "1",
                "amount": 10000,
                "bank_code": "PANIN",
                "bank_account_number": "8888888888",
                "bank_account_name": "Albert Chen Fadlan",
                "description": "Test webhook BD",
                "email_to": "disbursement_test_example@xendit.co",
                "status": "COMPLETED",
                "valid_name": "Albert Chen Fadlan",
                "bank_reference": "123456"
            }
        ]
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Body Parameter Tipe Deskripsi
    id string Unique ID batch disbursement dalam sistem kami
    created string Timestamp pembuatan batch disbursement dalam format ISO
    updated string Timestamp perubahan status batch disbursement terakhir dalam format ISO
    reference string ID batch disbursement dalam sistem Anda, digunakan untuk merekonsiliasi disbursement setelah proses disbursement selesai
    user_id string Xendit Business ID Anda
    total_uploaded_count number Jumlah count seluruh disbursement dalam batch yang di request
    total_uploaded_amount number Jumlah amount seluruh disbursement dalam batch yang Anda request
    approved_at string Timestamp batch disbursement yang di approve dalam format ISO
    approver_id string User ID user yang melakukan approval batch disbursement
    status string COMPLETED Semua disbursement berhasil
    CHECK Sebagian disbursement berhasil dibayarkan
    DELETED Batch disbursement telah terhapus
    FAILED Seluruh disbursement gagal dibayarkan
    total_disbursed_count number Jumlah disbursement count yang berhasil terbayar dalam batch
    total_disbursed_amount number Jumlah disbursement amount yang berhasil terbayar dalam batch
    total_error_count number Jumlah disbursement count dalam sistem yang gagal dibayarkan
    total_error_amount number Jumlah amount disbursement yang gagal terbayar dalam batch
    disbursements array of Disbursement object Rincian setiap disbursement dalam batch, dijelaskan di bawah ini

    Disbursement

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

    Cek Ketersediaan Bank

    Endpoint: Mendapatkan Ketersediaan Bank Disbursement

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

    Contoh Panggilan Mendapatkan Ketersediaan Bank Disbursement

    curl https://api.xendit.co/available_disbursements_banks -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
      require 'vendor/autoload.php';
    
      $options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';
    
      $xenditPHPClient = new XenditClient\XenditPHPClient($options);
    
      $response = $xenditPHPClient->getAvailableDisbursementBanks();
      print_r($response);
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.getBanks();
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      AvailableBank[] banks = BatchDisbursement.getAvailableBanks();
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Disbursement = xendit_instance.Disbursement
    
    disbursement_banks = Disbursement.get_available_banks()
    print(disbursement_banks)

    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.

    Mendapatkan Respon Ketersediaan Bank Disbursement

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

    Payout Links

    Memudahkan pengiriman dana ke pelanggan Anda, menggunakan UI yang kami sediakan ke berbagai channel pembayaran.

    Endpoint: Pembuatan Payout Links

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

    Parameter Request

    Contoh Permintaan Pembuatan Payout Link

    curl https://api.xendit.co/payouts -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
    -d external_id=demo_2392329329 \
    -d amount=23000 \
    -d email=demo@xendit.co
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => 'demo_2392329329',
        'amount' => 23000
      ];
    
      $createPayout = \Xendit\Payouts::create($params);
      var_dump($createPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.createPayout({
      externalID: 'demo_2392329329',
      amount: 23000,
      email: 'demo@xendit.co'
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_2392329329");
      params.put("amount", 23000);
      params.put("email", "demo@xendit.co");
    
      Payout payout = Payout.createPayout(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createData := payout.CreateParams{
      ExternalID: "demo_2392329329",
      Amount:     23000,
      Email: "test@email.com",
    }
    
    resp, err := payout.Create(&createData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.create(
        external_id="payout-1595405117",
        amount=50000,
        email="test@email.co",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID unik yang berfungsi sebagai tanda pengenal sebuah payout link di dalam sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan.

    Min: 10000
    Maksimal: Saldo account anda
    email
    required
    string Alamat email yang ingin Anda kirimkan notifikasi.

    Parameter Respon

    Contoh Respon Pembuatan Payout Link

    {
      "id": "67f1b30c-0262-4955-8777-95aa0478c2fc",
      "external_id": "demo_2392329329",
      "amount": 23000,
      "merchant_name": "First Business",
      "status": "PENDING",
      "expiration_timestamp": "2019-12-12T06:13:21.637Z",
      "created": "2019-12-09T06:13:20.363Z",
      "payout_url": "https://payout.xendit.co/web/67f1b30c-0262-4955-8777-95aa0478c2fc"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout link yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan.

    Min: 10000
    Maksimal: Saldo account anda
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout link telah dibatalkan. Status ini muncul karena payout link telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    EXPIRED Payout link telah kedaluwarsa.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari.

    Timezone: GMT+0
    created
    optional
    ISO8601 Tanggal dan waktu yang tercatat saat payout link dibuat.

    Timezone: GMT+0
    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat menemukannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Nilai yang dimasukkan pada parameter mengalami kesalahan. Pada objek error dijelaskan paramater mana yang mengalami kesalahan. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter.
    INSUFFICIENT_BALANCE
    400
    Saldo di akun Anda tidak cukup untuk membuat payout dengan jumlah yang diinginkan.
    DUPLICATE_PAYOUT_ERROR
    400
    Payout link dengan external_id yang sama telah dibuat sebelumnya.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Endpoint: Mendapatkan Payout Link

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

    Parameter Request

    Contoh Permintaan Mendapatkan Payout Link

    curl https://api.xendit.co/payouts/:id -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '00754a09-ad00-4475-b874-1dd97f83fc24';
    
      $getPayout = \Xendit\Payouts::retrieve($id);
      var_dump($getPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.getPayout({
        id: '67f1b30c-0262-4955-8777-95aa0478c2fc',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Payout payout = Payout.getPayout("my_test_id");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    resp, err := payout.Get(&payout.GetParams{
      ID: "00754a09-ad00-4475-b874-1dd97f83fc24",
    })
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.get(
        id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Path Tipe Deskripsi
    id
    required
    string ID payout link yang ingin didapatkan

    Parameter Respon

    Contoh Respon Mendapatkan Payout Link

    {
      "id": "00754a09-ad00-4475-b874-1dd97f83fc24",
      "external_id": "ext-121313",
      "amount": 20000,
      "merchant_name": "First Business",
      "status": "PENDING",
      "expiration_timestamp": "2019-12-12T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z",
      "payout_url": "https://payout.xendit.co/web/00754a09-ad00-4475-b874-1dd97f83fc24"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout link yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan.

    Min: 10000
    Maksimal: Saldo account anda
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout link telah dibatalkan. Status ini muncul karena payout link telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    EXPIRED Payout link telah kedaluwarsa.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari.

    Timezone: GMT+0
    created
    optional

    ISO8601

    Tanggal dan waktu yang tercatat saat payout link dibuat.

    Timezone: GMT+0

    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat meneumkannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    PAYOUT_NOT_FOUND_ERROR
    404
    Payout link tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Endpoint: Penutupan Payout Link

    POST https://api.xendit.co/payouts/:id/void

    Anda bisa menutup sebuah payout link secara langsung menggunakan endpoint ini.

    Parameter Request

    Contoh Permintaan Penutupan Payout Link

    curl https://api.xendit.co/payouts/:id/void -X POST \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '00754a09-ad00-4475-b874-1dd97f83fc24';
    
      $voidPayout = \Xendit\Payouts::void($id);
      var_dump($voidPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.voidPayout({
        id: '67f1b30c-0262-4955-8777-95aa0478c2fc',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Payout payout = Payout.voidPayout("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    resp, err := payout.Void(&payout.VoidParams{
      ID: "00754a09-ad00-4475-b874-1dd97f83fc24",
    })
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("voided payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.void(
        id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Path Tipe Deskripsi
    id
    required
    string ID of the payout link to retrieve

    Parameter Respon

    Example Void Payout Link Response

    {
      "id": "00754a09-ad00-4475-b874-1dd97f83fc24",
      "external_id": "ext-121312",
      "amount": 20000,
      "merchant_name": "First Business",
      "status": "VOIDED",
      "expiration_timestamp": "2019-12-12T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan.

    Min: 10000
    Maksimal: Saldo account anda
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout link telah dibatalkan. Status ini muncul karena payout link telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    EXPIRED Payout link telah kedaluwarsa.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari.

    Timezone: GMT+0
    created
    optional
    ISO8601 Tanggal dan waktu yang tercatat saat payout link dibuat.

    Timezone: GMT+0
    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat menemukannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    CLAIMED_PAYOUT_ERROR
    400
    Payout sudah diklaim.

    Anda tidak dapat membatalkan payout link ini karena telah diklaim oleh pelanggan Anda.

    PAYOUT_NOT_FOUND_ERROR
    404
    Payout link tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Invoice

    Xendit Hosted Checkout (Xeninvoice) adalah salah satu produk antarmuka kami yang memberikan pengalaman pembayaran yang mudah untuk Anda dan pelanggan Anda.

    Xendit Checkout dapat dibayarkan melalui kartu debit/kredit, bank, outlet ritel, eWallet, dan Direct Debit. Produk ini juga secara otomatis mendeteksi pembayaran secara langsung dengan keterangan indikator status di dasbor Anda

    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.

    Parameter Request (Money-in write permission)

    Contoh Permintaan Pembuatan Invoice

    curl https://api.xendit.co/v2/invoices -H 'Content-Type: application/json' -X POST \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
        -d '{
              "external_id": "payment-link-example",
              "amount": 100000,
              "description": "Invoice Demo #123",
              "invoice_duration":86400,
              "customer": {
                  "given_names": "John",
                  "surname": "Doe",
                  "email": "johndoe@example.com",
                  "mobile_number": "+6287774441111",
                  "addresses": [
                      {
                          "city": "Jakarta Selatan",
                          "country": "Indonesia",
                          "postal_code": "12345",
                          "state": "Daerah Khusus Ibukota Jakarta",
                          "street_line1": "Jalan Makan",
                          "street_line2": "Kecamatan Kebayoran Baru"
                      }
                  ]
              },
              "customer_notification_preference": {
                  "invoice_created": [
                      "whatsapp",
                      "email"
                  ],
                  "invoice_reminder": [
                      "whatsapp",
                      "email"
                  ],
                  "invoice_paid": [
                      "whatsapp",
                      "email"
                  ]
              },
              "success_redirect_url": "https://www.google.com",
              "failure_redirect_url": "https://www.google.com",
              "currency": "IDR",
              "items": [
                  {
                      "name": "Air Conditioner",
                      "quantity": 1,
                      "price": 100000,
                      "category": "Electronic",
                      "url": "https://yourcompany.com/example_item"
                  }
              ],
              "fees": [
                  {
                      "type": "ADMIN",
                      "value": 5000
                  }
              ]
          }'  
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [ 
        'external_id' => 'demo_1475801962607',
        'amount' => 50000,
        'description' => 'Invoice Demo #123',
        'invoice_duration' => 86400,
        'customer' => [
            'given_names' => 'John',
            'surname' => 'Doe',
            'email' => 'johndoe@example.com',
            'mobile_number' => '+6287774441111',
            'addresses' => [
                [
                    'city' => 'Jakarta Selatan',
                    'country' => 'Indonesia',
                    'postal_code' => '12345',
                    'state' => 'Daerah Khusus Ibukota Jakarta',
                    'street_line1' => 'Jalan Makan',
                    'street_line2' => 'Kecamatan Kebayoran Baru'
                ]
            ]
        ],
        'customer_notification_preference' => [
            'invoice_created' => [
                'whatsapp',
                'email'
            ],
            'invoice_reminder' => [
                'whatsapp',
                'email'
            ],
            'invoice_paid' => [
                'whatsapp',
                'email'
            ]
        ],
        'success_redirect_url' => 'https=>//www.google.com',
        'failure_redirect_url' => 'https=>//www.google.com',
        'currency' => 'IDR',
        'items' => [
            [
                'name' => 'Air Conditioner',
                'quantity' => 1,
                'price' => 100000,
                'category' => 'Electronic',
                'url' => 'https=>//yourcompany.com/example_item'
            ]
        ],
        'fees' => [
            [
                'type' => 'ADMIN',
                'value' => 5000
            ]
        ]
      ];
    
      $createInvoice = \Xendit\Invoice::create($params);
      var_dump($createInvoice);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Invoice } = x;
    const invoiceSpecificOptions = {};
    const i = new Invoice(invoiceSpecificOptions);
    
    const resp = await i.createInvoice(
      'external_id': 'payment-link-example',
      'amount': 100000,
      'description': 'Invoice Demo #123',
      'invoice_duration': 86400,
      'customer': {
        'given_names': 'John',
        'surname': 'Doe',
        'email': 'johndoe@example.com',
        'mobile_number': '+6287774441111',
        'addresses': [
          {
            'city': 'Jakarta Selatan',
            'country': 'Indonesia',
            'postal_code': '12345',
            'state': 'Daerah Khusus Ibukota Jakarta',
            'street_line1': 'Jalan Makan',
            'street_line2': 'Kecamatan Kebayoran Baru'
          }
        ]
      },
      'customer_notification_preference': {
        'invoice_created': [
          'whatsapp',
          'email'
        ],
        'invoice_reminder': [
          'whatsapp',
          'email'
        ],
        'invoice_paid': [
          'whatsapp',
          'email'
        ]
      },
      'success_redirect_url': 'https://www.google.com',
      'failure_redirect_url': 'https://www.google.com',
      'currency': 'IDR',
      'items': [
        {
          'name': 'Air Conditioner',
          'quantity': 1,
          'price': 100000,
          'category': 'Electronic',
          'url': 'https://yourcompany.com/example_item'
        }
      ],
      'fees': [
        {
          'type': 'ADMIN',
          'value': 5000
        }
      ]
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      ArrayList<Map<String, Object>> customerAddresses = new ArrayList<Map<String, Object>>();
      Map<String, Object> customerAddress1 = new HashMap<>();
      customerAddress1.put("city", "Jakarta Selatan");
      customerAddress1.put("state", "Daerah Khusus Ibukota Jakarta");
      customerAddress1.put("country", "Indonesia");
      customerAddress1.put("postal_code", "12345");
      customerAddress1.put("street_line1", "Jalan Makan");
      customerAddress1.put("street_line2", "Kecamatan Kebayoran Baru");
      customerAddresses.add(customerAddress1);
    
      Map<String, Object> customerAddress2 = new HashMap<>();
      customerAddress2.put("city", "Jakarta Selatan");
      customerAddress2.put("state", "Daerah Khusus Ibukota Jakarta");
      customerAddress2.put("country", "Indonesia");
      customerAddress2.put("postal_code", "12345");
      customerAddress2.put("street_line1", "Jalan Satu");
      customerAddress2.put("street_line2", "Kecamatan Kebayoran Baru");
    
      Map<String, Object> customerObject = new HashMap<>(); 
      customerObject.put("given_names", "John");
      customerObject.put("surname", "surname");
      customerObject.put("email", "johndoe@example.com");
      customerObject.put("mobile_number", "+6287774441111"); 
      customerObject.put("addresses", customerAddresses);
    
      Map<String, Object> customerNotificationPreference = new HashMap<>();
      customerNotificationPreference.put("invoice_created", notifications);
      customerNotificationPreference.put("invoice_reminder", notifications);
      customerNotificationPreference.put("invoice_paid", notifications);
    
      ArrayList<Map<String, Object>> items = new ArrayList<Map<String, Object>>();
      Map<String, Object> item1 = new HashMap<>();
      item1.put("name": "Air Conditioner");
      item1.put("quantity": 1);
      item1.put("price": 100000);
      item1.put("category": "Electronic");
      item1.put("url": "https://yourcompany.com/example_item");
      items.add(item1);
    
      ArrayList<Map<String, Object>> fees = new ArrayList<Map<String, Object>>();
      Map<String, Object> fee1 = new HashMap<>();
    
      fees.add(fee1);
    
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_1475801962607");
      params.put("amount", 50000);
      params.put("description", "Invoice Demo #123");
      params.put("invoice_duration", 86400);
      params.put("customer", customerObject);
      params.put("customer_notification_preference", customerNotificationPreference);
      params.put("success_redirect_url", "https://www.google.com");
      params.put("failure_redirect_url", "https://www.google.com");
      params.put("currency", "IDR");
      params.put("items", items);
      params.put("fees", fees);
    
      Invoice invoice = Invoice.create(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    customerAddress := xendit.CustomerAddress{
      Country:      "Indonesia",
      StreetLine1:  "Jalan Makan",
      StreetLine2:  "Kecamatan Kebayoran Baru",
      City:         "Jakarta Selatan", 
      State:        "Daerah Khusus Ibukota Jakarta",
      PostalCode:   "12345",
    }
    
    customer := xendit.Customer{
      GivenNames:   "John",
      Surname:   "Doe",
      Email:        "johndoe@example.com",
      MobileNumber: "+6287774441111"
      Addresses:    []xendit.CustomerAddress{customerAddress},
    }
    
    item := xendit.Item{
      Name:          "Air Conditioner",
      Quantity:       1,
      Price:          100000,
      Category:       "Electronic",
      Url:            "https://yourcompany.com/example_item"
    }
    
    items := xendit.Items{
      item:         []xendit.item{item}
    }
    
    fee := xendit.fee{
      Type:         "ADMIN",
      Value:        5000,
    }
    
    fees := xendit.Fees{
      fee:          []xendit.fee{fee}
    }
    
    NotificationType := [3]string{"whatsapp", "email"}
    
    customerNotificationPreference := xendit.CustomerNotificationPreference{
      InvoiceCreated:     NotificationType,
      InvoiceReminder:    NotificationType,
      InvoicePaid:        NotificationType,
    }
    
    data := invoice.CreateParams{
      ExternalID:         "demo_1475801962607",
      Amount:             50000,
      Description:        "Invoice Demo #123",
      InvoiceDuration:    86400,
      Customer:           customer, 
      CustomerNotificationPreference:   customerNotificationPreference, 
      SuccessRedirectUrl: "https://www.google.com",
      FailureRedirectUrl: "https://www.google.com",
      Currency:           "IDR",
      Items:              items,  
      Fees:               fees 
    }
    
    resp, err := invoice.Create(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created invoice: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Invoice = xendit_instance.Invoice
    
    addresses = []
    address = {
        city: "Jakarta Selatan",
        country: "Indonesia",
        postal_code: "12345",
        state: "Daerah Khusus Ibukota Jakarta",
        street_line1: "Jalan Makan",
        street_line2: "Kecamatan Kebayoran Baru"
    }
    addresses.append(address)
    
    customer = {
        given_names: "John",
        surname: "Doe",
        email: "johndoe@example.com",
        mobile_number: "+6287774441111",
        address: addresses
    }
    
    NotificationType = {
      "whatsapp",
      "email"
    }
    
    customerNotificationPreference = {
      invoice_created:  NotificationType
      invoice_reminder: NotificationType
      invoice_paid:     NotificationType
    }
    
    items = []
    item = {
        name: "Phone Case",
        price: 100000,
        quantity: 1
        category: "Electronic",
        url: "https://yourcompany.com/example_item"
    }
    items.append(item)
    
    fees = []
    fee = {
        Type: "ADMIN",
        Value: 5000,
    }
    fees.append(fee)
    
    invoice = Invoice.create(
        external_id="invoice-1593684000",
        amount=20000,
        description="Invoice Demo #123",
        invoice_duration=86400,
        customer = customer,
        customer_notification_preference = customerNotificationPreference,
        SuccessRedirectUrl = "https://www.google.com",
        FailureRedirectUrl = "https://www.google.com"
        Currency = "IDR",  
        items = items,
        fees = fees
    )
    print(invoice)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    InvoiceClient invoice = xendit.Invoice;
    
    Address addresses = new Address
    {
      Country = Country.Indonesia,
      StreetLine1 = "Jalan Makan",
      StreetLine2 = "Kecamatan Kebayoran Baru",
      State = "Daerah Khusus Ibukota Jakarta", 
      City = "Jakarta Selatan",
      Province = "Daerah Khusus Ibukota Jakarta",
      PostalCode = "12345",
    };
    
    CustomerResponse customer = new CustomerResponse
    {
      GivenNames = "John",
      Surname = "Doe",
      Email = "johndoe@example.com",
      MobileNumber = "+6287774441111",
      Addresses = new Address[] { addresses },
    };
    
    NotificationPreference preference = new NotificationPreference
    {
      InvoicePaid = new NotificationType[] { NotificationType.Email, NotificationType.Whatapp }
      InvoiceCreated = new NotificationType[] { NotificationType.Email, NotificationType.Whatapp }
      InvoiceReminder = new NotificationType[] { NotificationType.Email, NotificationType.Whatapp }
      InvoiceExpired = new NotificationType[] { NotificationType.Email, NotificationType.Whatapp }
    };
    
    ItemInvoice item = new ItemInvoice
    {
      Name = "shoes",
      Quantity = 1,
      Price = 100,
      Category = "Electronic",
      Url = "https://yourcompany.com/example_item"
    };
    
    FeeInvoice fee = new FeeInvoice
    {
      Type = "ADMIN",
      Value = 200,
    };
    
    InvoiceParameter parameter = new InvoiceParameter
    {
      ExternalId = "external-id",
      Amount = 1000,
      Description = "Invoice Demo #123",
      InvoiceDuration = 86400, 
      Customer = customer,
      NotificationPreference = preference,
      SuccessRedirectUrl = "https://www.google.com",
      FailureRedirectUrl = "https://www.google.com"
      Currency = Currency.IDR,
      Items = new ItemInvoice[] { item },
      Fees = new FeeInvoice[] { fee },
    };
    
    InvoiceResponse invoiceResponse = await invoice.Create(parameter);
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-split-rule
    optional
    string ID Split Rule yang ingin Anda aplikasikan ke pembayaran Invoice ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan.

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID unik yang berfungsi sebagai tanda pengenal sebuah invoice di dalam sistem Anda.

    Min karakter: 1
    Maksimal karakter: 255 karakter
    amount
    required
    number Jumlah tagihan yang harus dibayar. Jumlah minimal dan maksimal dijelaskan disini.

    Jika mata uang atau yang digunakan adalah IDR dan nominal pembayaran memiliki desimal (seperti IDR 4550.50), nominal tersebut akan dipotong menjadi IDR 4550.
    description
    optional
    string Deskripsi invoice - Anda bisa isi dengan daftar barang yang dibayarkan, atau apapun yang menjelaskan fungsi dari invoice ini

    Min karakter: 1
    Maksimal karakter: tidak terbatas
    customer
    optional
    object Objek yang berisi informasi pengguna Anda. Mohon memasukkan email dan nomor ponsel dari pelanggan Anda apabila Anda ingin mengirim notifikasi email/WhatsApp.
    given_names
    optional
    string Nama depan pengguna
    surname
    optional
    string Nama belakang pengguna
    email
    optional
    string Alamat email pengguna
    mobile_number
    optional
    string Nomor ponsel pengguna, dalam format E164
    addresses
    optional
    array of object Alamat pengguna
    customer_notification_preference
    optional
    object Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini. Jika Anda ingin mengirimkan notifikasi dan peringatan kepada pengguna Anda, mohon isi parameter pada objek ini.

    Notifikasi juga bisa diatur di Invoice Settings (di Dasbor Xendit Anda). Jika Anda tidak mengatur notifikasi melalui API, kami akan merujuk pada konfigurasi di Invoice Settings Anda.
    invoice_created
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda membuat invoice

    Pilihan enum: ["whatsapp", "email" "viber"]

    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    invoice_reminder
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda ingin mengingatkan pengguna untuk membayar invoice ini

    Pilihan enum: ["whatsapp", "email" "viber"]

    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    invoice_paid
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda ingin memberitahu pengguna bahwa pengguna sudah menyelesaikan pembayaran

    Pilihan enum: ["whatsapp", "email" "viber"]

    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    invoice_duration
    optional
    number Durasi waktu yang dimiliki pengguna akhir untuk membayar tagihan sebelum kadaluarsa (dalam detik). Default adalah 24 jam (86.400 detik).

    Min jumlah: 1 detik
    Maksimal jumlah: 31536000 detik (1 tahun)
    success_redirect_url
    optional
    string Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan
    Contoh : https://yourcompany.com/example_item/10/success_page
    Min karakter: 1
    Maksimal karakter: 255 karakter
    failure_redirect_url
    optional
    string Tautan yang diarahkan apabila tagihan telah kedaluwarsa
    Contoh : https://yourcompany.com/example_item/10/failed_checkout

    Min karakter: 1
    Maksimal karakter: 255 karakter
    payment_methods
    optional
    array of strings Tentukan metode pembayaran yang Anda inginkan tampilkan di halaman pembayaran. Kosongkan jika Anda ingin semua metode pembayaran tersedia di halaman pembayaran transaksi ini, atau jika Anda ingin menggunakan konfigurasi yang ada di Pengaturan Xendit Dashboard Anda.

    Nilai untuk Indonesia: [“CREDIT_CARD”, “BCA”, “BNI”, BSI, “BRI”, “MANDIRI”, “PERMATA”, “SAHABAT_SAMPOERNA”, “BNC”, “ALFAMART”, “INDOMARET”, “OVO”, “DANA”, “SHOPEEPAY”, “LINKAJA”, “JENIUSPAY”, “DD_BRI”, “DD_BCA_KLIKPAY”, “KREDIVO”, “AKULAKU”, “UANGME”, “ATOME”, ”QRIS”]

    Nilai untuk Filipina: [“CREDIT_CARD”, “7ELEVEN”, “CEBUANA”, “DD_BPI”, “DD_UBP”, “DD_RCBC”, “DD_BDO_EPAY”, “DP_MLHUILLIER“, “DP_PALAWAN“, “DP_ECPAY_LOAN“, “PAYMAYA”, “GRABPAY”, “GCASH”, “SHOPEEPAY”, “BILLEASE”, “CASHALO”]

    Nilai untuk Thailand: [“CREDIT_CARD”, "PROMPTPAY"]

    Nilai untuk Vietnam: [“CREDIT_CARD”]

    Nilai untuk Malaysia: [“CREDIT_CARD”, "TOUCHNGO", "DD_UOB_FPX", "DD_PUBLIC_FPX", "DD_AFFIN_FPX", "DD_AGRO_FPX", "DD_ALLIANCE_FPX", "DD_AMBANK_FPX", "DD_ISLAM_FPX", "DD_MUAMALAT_FPX", "DD_BOC_FPX", "DD_RAKYAT_FPX", "DD_BSN_FPX", "DD_CIMB_FPX", "DD_HLB_FPX", "DD_HSBC_FPX", "DD_KFH_FPX", "DD_MAYB2U_FPX", "DD_OCBC_FPX", "DD_RHB_FPX", "DD_SCH_FPX"]

    Untuk informasi lebih lanjut setiap metode pembayaran, lihat di: https://docs.xendit.co/xeninvoice/features-and-limitations#features
    currency
    optional
    string Mata uang yang Anda gunakan untuk nominal penagihan invoice Anda
    Isi: IDR, PHP, THB, VND, atau MYR
    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
    mid_label
    optional
    string MID label yang dapat Anda gunakan saat Anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator.
    reminder_time_unit
    optional

    default: days
    string Menunjukkan satuan waktu yang akan dipasangkan dengan reminder_time. Nilai yang dibolehkan adalah days atau hours.
    reminder_time
    optional
    integer positive Menunjukkan waktu notifikasi pengingat yang akan dikirimkan sebelum invoice kedaluwarsa.
    Saat nilai reminder_time_unit adalah days, maka nilai yang diperbolehkan adalah 1, 3, 7, 15, atau 30.
    Sedangkan saat nilai reminder_time_unit adalah hours, maka nilai yang diperbolehkan adalah 1 sampai 23.
    locale
    optional
    string Bahasa default untuk ditampilkan.
    Saat ini mendukung: en atau id

    Anda juga dapat mengonfigurasi bahasa default Anda di Pengaturan Faktur di Dasbor Xendit. Jika Anda tidak mengatur lokal, kami akan merujuk ke konfigurasi di Pengaturan Faktur Anda.
    items
    optional

    *wajib untuk metode pembayaran PayLater
    array Array barang berupa objek JSON yang menunjukkan barang-barang yang dibeli. Panjang maksimum array: 75. Wajib untuk metode pembayaran PayLater.
    Items child parameters
    Bidang Deskripsi
    name
    required
    string Nama dari produk

    Panjang maksimum 256 karakter
    quantity
    required
    number Jumlah dari produk

    Nilai maksimum 100000
    price
    required
    number Harga tiap unit dalam kurs invoice

    category
    optional
    string Kategori barang pada merchant
    Contoh: Fashion, Electronic
    url
    optional
    string Tautan untuk menuju halaman detail barang. Wajib HTTP or HTTPS

    Contoh: https://yourcompany.com/example_item
    fees
    optional
    array Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda. Ini dapat berupa biaya admin, logistik, dan lain-lain. Biaya tambahan ini akan dimasukkan ke total biaya invoice dan akan ditransfer ke saldo Anda saat transaksi berhasil. Maksimum biaya yang bisa ditambahkan: 10.
    Fees child parameters
    Bidang Deskripsi
    type
    required
    string Tentukan jenis biaya yang Anda kenakan kepada pelanggan misalkan: admin, pengiriman, pajak, diskon, dan lain-lain. Kami menyarankan agar Anda membuat jenis biaya yang konsisten dan sederhana
    value
    required
    number Nilai dari fee tersebut. Dapat berupa angka positif atau negatif.
    Xendit merekomendasikan kepada merchant untuk mematuhi peraturan setempat saat menggunakan parameter untuk membebankan biaya transaksi ini. Negara tertentu seperti Indonesia tidak mengizinkan hal tersebut
    should_authenticate_credit_card
    optional
    boolean Beri tahu apakah Anda ingin transaksi checkout ini untuk melewati 3DS (authentikasi kartu kredit). Pastikan bahwa "Optional 3DS" dinyalakan pada Konfigurasi Kartu Kredit anda. Jika Optional 3DS dimatikan, maka semua transaksi yang dibayar dengna kartu akan melewati 3DS, tidak tergantung nilai dari parameter ini.

    Parameter Respon

    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": 220000,
      "payer_email": "wildan@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",
          "transfer_amount": 50000,
          "bank_branch": "Virtual Account",
          "account_holder_name": "LANSUR13",
        }
      ],
      "available_retail_outlets": [
          {
              "retail_outlet_name": "ALFAMART"
          }
      ],
      "available_paylaters": [
        {
            "paylater_type": "AKULAKU"
        }
      ],  
      "available_qr_codes": [
            {
                "qr_code_type": "PROMPTPAY"
            },
      ],
      "should_exclude_credit_card": false,
      "should_send_email": false,
      "created": "2017-06-12T14:00:00.306Z",
      "updated": "2017-06-12T14:00:00.306Z",
      "mid_label": "test-mid",
      "currency": "IDR",
      "fixed_va": true,
      "locale": "en",
      "customer": {
        "addresses": [
            {
               "city": "Jakarta Selatan",
               "country": "Indonesia",
               "postal_code": "12345",
               "state": "Daerah Khusus Ibukota Jakarta",
               "street_line1": "Jalan Makan",
               "street_line2": "Kecamatan Kebayoran Baru"
            }
         ],
         "email": "johndoe@example.com",
         "given_names": "John",
         "mobile_number": "+6287774441111",
         "surname": "Doe"
        },
      "items": [
        {
          "name": "Emba Classic Appardo Two",
          "quantity": 1,
          "price": 200000,
          "category": "Fashion",
          "url": "https://yourcompany.com/example_item"
        }
      ],
      "fees": [
        {
          "type": "ADMIN",
          "value": 20000
        }
      ]
    }
    Parameter Tipe Deskripsi
    id string ID invoice yang didapatkan dari Xendit
    external_id string ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    user_id string ID bisnis Xendit Anda
    status string Status yang menunjukkan apakah invoice ini sudah dibayar
    Nilai yang diperbolehkan: PENDING, PAID, EXPIRED
    PENDING berarti invoice sudah berhasil dibuat tetapi belum dibayarkan
    PAID berarti invoice sudah dibayar
    EXPIRED berarti invoice sudah kedaluwarsa sebelum pengguna bayar
    merchant_name string Nama perusahaan atau situs Anda
    merchant_profile_picture_url string Tautan ke gambar profil perusahaan Anda
    amount number Jumlah tagihan invoice
    payer_email string Email pembayar, didapatkan dari permintaan API Anda
    description string Deskripsi invoice, didapatkan dari permintaan API Anda
    expiry_date string Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
    invoice_url string Tautan untuk mengakses tampilan invoice - pengguna Anda dapat klik tautan ini untuk melihat Checkout UI untuk invoice ini
    customer object Objek yang berisi informasi pengguna Anda. Mohon memasukkan email dan nomor ponsel dari pelanggan Anda apabila Anda ingin mengirim notifikasi email/WhatsApp.
    given_names
    optional
    string Nama depan pengguna
    surname
    optional
    string Nama belakang pengguna
    email
    optional
    string Alamat email pengguna
    mobile_number
    optional
    string Nomor ponsel pengguna, dalam format E164
    addresses
    optional
    array of object Alamat pengguna
    customer_notification_preference object Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini. Jika Anda ingin mengirimkan notifikasi dan peringatan kepada pengguna Anda, mohon isi parameter pada objek ini.

    Notifikasi juga bisa diatur di Invoice Settings (di Dasbor Xendit Anda). Jika Anda tidak mengatur notifikasi melalui API, kami akan merujuk pada konfigurasi di Invoice Settings Anda.
    invoice_created
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda membuat invoice
    Pilihan enum:
    ["whatsapp", "email", "viber"]
    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    invoice_reminder
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda ingin mengingatkan pengguna untuk membayar invoice ini
    Pilihan enum:
    ["whatsapp", "email" "viber"]
    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    invoice_paid
    optional
    array of strings Pilih sarana untuk pengiriman notifikasi ketika Anda ingin memberitahu pengguna bahwa pengguna sudah menyelesaikan pembayaran
    Pilihan enum:
    ["whatsapp", "email" "viber"]
    Jika Anda tidak mengisi parameter ini, maka pengguna ini tidak akan mendapatkan pemberitahuan untuk tipe notifikasi ini
    available_banks object Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
    bank_code BCA / BNI / BSI / BRI / MANDIRI / PERMATA / BNC
    collection_type POOL Tipe nonfixed virtual account
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    available_retail_outlets object Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
    retail_outlet_name Nama outlet ritel
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. Jumlah tagihan yang harus dibayar
    available_ewallets object Metode pembayaran melalui e-wallet berdasarkan konfigurasi
    ewallet_type Nama e-wallet
    OVO, DANA, SHOPEEPAY, LINKAJA, GRABPAY, GCASH, TOUCHNGO
    available_qr_codes object Metode pembayaran melalui QR yang tersedia, berdasarkan konfigurasi
    qr_code_type Nama QR yang tersedia
    QRIS, PROMPTPAY
    reminder_date
    optional
    string ISO8601 Waktu yang ditentukan oleh merchant dalam format ISO untuk mengingatkan pelanggan terkait pembayaran invoice (saat pengguna mengirim reminder_time pada waktu pembuatan invoice).
    Timezone: GMT+0
    fixed_va boolean
    AKAN DI DEPRECATE. Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.
    mid_label string MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    should_exclude_credit_card boolean Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice
    should_send_email boolean Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa
    AKAN DI DEPRECATE. Jika Anda ingin mengirimkan notifikasi email kepada pengguna Anda, mohon mengisi semua parameter yang ada di objek customer_notification_preference.
    created string Waktu ISO yang tercatat saat invoice dibuat (UTC GMT+0)
    updated string Waktu ISO yang tercatat saat invoice diperbarui (UTC GMT+0)
    currency string Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    items
    optional
    array Array barang berupa objek JSON yang menunjukkan barang-barang yang dibeli
    name
    required
    string Nama dari produk
    quantity
    required
    number Jumlah dari produk
    price
    required
    number Harga produk per unit dalam kurs invoice
    category
    optional
    string Kategori barang pada merchant
    Contoh: Fashion, Electronic
    url
    optional
    string Tautan untuk menuju halaman detail barang

    Example: https://yourcompany.com/example_item
    fees
    optional
    array Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
    type
    required
    string Jenis dari fee
    value
    required
    number Nilai dari fee
    should_authenticate_credit_card
    optional
    boolean Beri tahu apakah Anda ingin transaksi checkout ini untuk melewati 3DS (authentikasi kartu kredit). Pastikan bahwa "Optional 3DS" dinyalakan pada Konfigurasi Kartu Kredit anda. Jika Optional 3DS dimatikan, maka semua transaksi yang dibayar dengna kartu akan melewati 3DS, tidak tergantung nilai dari parameter ini.

    Kode Error

    Kode Error 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.
    NO_COLLECTION_METHODS_ERROR
    400
    Akun Anda belum memiliki konfigurasi metode pembayaran (virtual account, kartu kredit, outlet ritel). Silakan kontak customer support kami untuk pengkonfigurasian.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    UNIQUE_ACCOUNT_NUMBER_UNAVAILABLE_ERROR
    404
    Tidak ada virtual account yang tersedia di dalam rentang non-fixed virtual account akun Anda.
    CALLBACK_VIRTUAL_ACCOUNT_NOT_FOUND_ERROR
    404
    ID Fixed virtual account yang dimaksud tidak valid.
    AVAILABLE_PAYMENT_CODE_NOT_FOUND_ERROR
    404
    Tidak ada payment code yang tersedia di dalam rentang outlet ritel akun Anda.
    INVALID_REMINDER_TIME
    400
    Nilai reminder_time tidak sesuai dengan standar yang diizinkan.

    Mendapatkan invoice

    Endpoint: Mendapatkan Invoice

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

    Parameter Request (Money-in read permission)

    Contoh Permintaan Mendapatkan Invoice Menggunakan External ID

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

    Contoh Permintaan Mendapatkan Invoice Menggunakan Invoice ID

    curl https://api.xendit.co/v2/invoices/{invoice_id} -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da4';
      $getInvoice = \Xendit\Invoice::retrieve($id);
      var_dump($getInvoice);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Invoice } = x;
    const invoiceSpecificOptions = {};
    const i = new Invoice(invoiceSpecificOptions);
    
    const resp = await i.getInvoice({
      invoiceID: '587cc7b4863f2b462beb31f6',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Invoice invoice = Invoice.getById("my_external_id");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := invoice.GetParams{
      ID: "579c8d61f23fa4ca35e52da4",
    }
    
    resp, err := invoice.Get(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved invoice: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Invoice = xendit_instance.Invoice
    
    invoice = Invoice.get(
        invoice_id="5efda8a20425db620ec35f43",
    )
    print(invoice)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    InvoiceClient invoice = xendit.Invoice;
    
    InvoiceResponse invoiceResponse = await invoice.GetById("5efda8a20425db620ec35f43");
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Path Tipe Deskripsi
    invoice_id
    required
    string ID invoice yang ingin didapatkan

    Parameter Respon

    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
          }
      ],
      "available_paylaters": [
          {
              "paylater_type": "AKULAKU"
          }
      ],  
      "should_exclude_credit_card": false,
      "should_send_email": false,
      "created": "2017-06-12T14:00:00.306Z",
      "updated": "2017-06-12T14:00:00.306Z",
      "mid_label": "test-mid",
      "currency": "IDR",
      "paid_at": "2017-06-13T11:00:00.306Z",
      "credit_card_charge_id": "579c8d61f23fa4ca35e52eas",
      "payment_method": "BANK_TRANSFER",
      "payment_channel": "BCA",
      "payment_destination": "10002233222294375",
      "success_redirect_url": "www.xendit.co",
      "failure_redirect_url": "www.xendit.co",
      "fixed_va":true,
      "locale": "en"
    }



    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.
    customer Objek yang berisi informasi pengguna Anda.
    given_names Nama depan pengguna
    surname Nama belakang pengguna
    email Alamat email pengguna
    mobile_number Nomor ponsel pengguna, dalam format E164
    addresses Alamat pengguna
    customer_notification_preference Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini.
    invoice_created Pilihan enum:
    ["whatsapp", "email", "viber"]
    invoice_reminder Pilihan enum:
    ["whatsapp", "email", "viber"]
    invoice_paid Pilihan enum:
    ["whatsapp", "email", "viber"]
    expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
    available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
    bank_code BCA / MANDIRI / BNI / BRI / PERMATA / BSI /BNC
    collection_type POOL Tipe nonfixed virtual account
    bank_account_number
    optional
    Akun bank tujuan pembayaran
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
    retail_outlet_name Nama outlet ritel
    payment_code
    optional
    Kode unik identifikasi pembayaran
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. 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

    mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    success_redirect_url Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
    failure_redirect_url Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
    paid_at Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    credit_card_charge_id Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
    payment_method Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET", "EWALLET"]
    payment_channel Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA", "BSI", "BNC", "ALFAMART", "OVO", "CREDIT_CARD"]
    payment_destination Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    fixed_va
    AKAN DI DEPRECATE. Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.
    locale The default language configured to the invoice.
    items
    optional
    Array barang berupa objek JSON yang menunjukkan barang-barang yang dibeli
    name
    required
    string Nama dari produk
    quantity
    required
    number Jumlah dari produk
    price
    required
    number Harga produk per unit dalam kurs invoice
    category
    optional
    string Kategori barang pada merchant
    Contoh: Fashion, Electronic
    url
    optional
    string Tautan untuk menuju halaman detail barang

    Example: https://yourcompany.com/example_item
    fees
    optional
    Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
    type
    required
    string Jenis unik dari fee
    value
    required
    number Jenis unik dari fee
    payment_details
    optional
    Objek yang berisi detil pembayaran. Saat ini hanya mendukung pembayaran QRIS.
    receipt_id
    optional
    string Minta nomor referensi (RRN) yang dibagikan di seluruh jaringan QR. Contoh: “120318237”
    source
    optional
    string Sumber di mana saldo pengguna akhir dipotong untuk menyelesaikan pembayaran. Contoh: “OVO”, “GOPAY”
    should_authenticate_credit_card
    optional
    Beri tahu apakah Anda ingin transaksi checkout ini untuk melewati 3DS (authentikasi kartu kredit). Pastikan bahwa "Optional 3DS" dinyalakan pada Konfigurasi Kartu Kredit anda. Jika Optional 3DS dimatikan, maka semua transaksi yang dibayar dengna kartu akan melewati 3DS, tidak tergantung nilai dari parameter ini.

    Kode Error

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

    Penutupan invoice

    Endpoint: Penutupan Invoice

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

    Anda bisa menutup sebuah invoice secara langsung menggunakan endpoint ini.

    Catatan:

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

    Parameter Request (Money-in write permission)

    Contoh Permintaan Penutupan Invoice

    curl https://api.xendit.co/invoices/{invoice_id}/expire! -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da4';
      $expireInvoice = \Xendit\Invoice::expireInvoice($id);
      var_dump($expireInvoice);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Invoice } = x;
    const invoiceSpecificOptions = {};
    const i = new Invoice(invoiceSpecificOptions);
    
    const resp = await i.expireInvoice({
      invoiceID: '587cc7b4863f2b462beb31f6',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Invoice invoice = Invoice.expire("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := invoice.ExpireParams{
      ID: "579c8d61f23fa4ca35e52da4",
    }
    
    resp, err := invoice.Expire(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("expired invoice: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Invoice = xendit_instance.Invoice
    
    invoice = Invoice.expire(
        invoice_id="5efda8a20425db620ec35f43",
    )
    print(invoice)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    InvoiceClient invoice = xendit.Invoice;
    
    InvoiceResponse invoiceResponse = await invoice.Expire("5efda8a20425db620ec35f43");
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Path Tipe 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.
    customer Objek yang berisi informasi pengguna Anda.
    given_names Nama depan pengguna
    surname Nama belakang pengguna
    email Alamat email pengguna
    mobile_number Nomor ponsel pengguna, dalam format E164
    addresses Alamat pengguna
    customer_notification_preference Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini.
    invoice_created Pilihan enum:
    ["whatsapp", "email", "viber"]
    invoice_reminder Pilihan enum:
    ["whatsapp", "email", "viber"]
    invoice_paid Pilihan enum:
    ["whatsapp", "email", "viber"]
    expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
    available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
    bank_code BCA / MANDIRI / BNI / BRI / PERMATA / BSI / BNC
    collection_type POOL Tipe nonfixed virtual account
    bank_account_number
    optional
    Akun bank tujuan pembayaran
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
    retail_outlet_name Nama outlet ritel
    payment_code
    optional
    Kode unik identifikasi pembayaran
    transfer_amount Akan dibuang atau dihentikan penggunaannya kelak. 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

    items
    optional
    Array barang berupa objek JSON yang menunjukkan barang-barang yang dibeli
    name
    required
    string Nama dari produk
    quantity
    required
    number Jumlah dari produk
    price
    required
    number Harga produk per unit dalam kurs invoice
    category
    optional
    string Kategori barang pada merchant
    Contoh: Fashion, Electronic
    url
    optional
    string Tautan untuk menuju halaman detail barang

    Example: https://yourcompany.com/example_item
    fees
    optional
    Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
    type
    required
    string Jenis unik dari fee
    value
    required
    number Jenis unik dari fee
    should_authenticate_credit_card
    optional
    Beri tahu apakah Anda ingin transaksi checkout ini untuk melewati 3DS (authentikasi kartu kredit). Pastikan bahwa "Optional 3DS" dinyalakan pada Konfigurasi Kartu Kredit anda. Jika Optional 3DS dimatikan, maka semua transaksi yang dibayar dengna kartu akan melewati 3DS, tidak tergantung nilai dari parameter ini.

    Kode Error

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

    Notifikasi Invoice

    Endpoint: Notifikasi Invoice

    POST https://yourcompany.com/invoice_webhook_url

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Data Webhook

    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.

    Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Bank

    {
          "id": "593f4ed1c3d3bb7f39733d83",
          "external_id": "testing-invoice",
          "user_id": "5848fdf860053555135587e7",
          "is_high": false,
          "payment_method": "BANK_TRANSFER",
          "status": "PAID",
          "merchant_name": "Xendit",
          "amount": 2000000,
          "paid_amount": 2000000,
          "bank_code": "MANDIRI",
          "paid_at": "2020-01-14T02:32:50.912Z",
          "payer_email": "test@xendit.co",
          "description": "Invoice webhook test",
          "created": "2020-01-13T02:32:49.827Z",
          "updated": "2020-01-13T02:32:50.912Z",
          "currency": "IDR",
          "payment_channel": "MANDIRI",
          "payment_destination": "8458478548758748"
    }

    Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Outlet Ritel

    {
          "id": "593f4ed1c3d3bb7f39733d83",
          "external_id": "testing-invoice",
          "user_id": "5848fdf860053555135587e7",
          "is_high": false,
          "payment_method": "RETAIL_OUTLET",
          "status": "PAID",
          "merchant_name": "Xendit",
          "amount": 2000000,
          "paid_amount": 2000000,
          "paid_at": "2020-01-14T02:32:50.912Z",
          "payer_email": "test@xendit.co",
          "description": "Invoice webhook test",
          "created": "2020-01-13T02:32:49.827Z",
          "updated": "2020-01-13T02:32:50.912Z",
          "currency": "IDR",
          "payment_channel": "ALFAMART",
          "payment_destination": "TEST815"
    }

    Contoh Webhook Invoice untuk Invoice Kedaluwarsa

    {
      "id": "621887f17d9cdaa199d6e787",
      "user_id": "61d3c21692594a88b0dad56b",
      "external_id": "yumin-invoice-1645774832",
      "is_high": false,
      "status": "EXPIRED",
      "merchant_name": "fintech",
      "amount": 1000,
      "created": "2022-02-25T07:40:33.922Z",
      "updated": "2022-02-25T07:42:43.872Z",
      "description": "Invoice Demo #123",
      "currency": "PHP",
      "success_redirect_url": "https://www.google.com",
      "failure_redirect_url": "https://www.google.com",
    }
    Body Parameter Tipe Deskripsi
    id string ID invoice yang didapatkan dari Xendit
    external_id string ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    user_id string ID bisnis Xendit Anda
    status string Status yang menunjukkan apakah invoice ini sudah dibayar
    PAID invoice sudah dibayar
    EXPIRED invoice sudah kedaluwarsa.
    Webhook untuk invoice yang kedaluwarsa tidak diaktifkan secara default.

    Dalam kasus tertentu ketika pembayaran terjadi setelah invoice kedaluwarsa (disebabkan karena collback bank yang telat untuk pembayaran transaksi), Anda dapat menerima paid webhook dengan mengaktifkannya di Dasbor Xendit.
    merchant_name string Nama perusahaan atau situs Anda
    amount number Jumlah tagihan invoice
    payer_email
    optional
    string Email pembayar, didapatkan dari permintaan API Anda
    description
    optional
    string Deskripsi invoice, didapatkan dari permintaan API Anda
    paid_amount
    optional
    number Jumlah tagihan yang dibayar
    updated string Waktu ISO yang tercatat saat invoice diperbarui (UTC GMT+0)
    created string Waktu ISO yang tercatat saat invoice dibuat (UTC GMT+0)
    currency string Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    paid_at
    optional
    string Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    payment_method
    optional
    string Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Nilai yang diperbolehkan: BANK_TRANSFER, CREDIT_CARD, RETAIL_OUTLET, EWALLET, DIRECT_DEBIT, PAYLATER, QR_CODE
    payment_channel
    optional
    string Channel pembayaran yang digunakan oleh pelanggan untuk membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Nilai yang diperbolehkan untuk transfer bank: BCA, BNI, BSI, BRI, MANDIRI, PERMATA, SAHABAT_SAMPOERNA, BNC
    Nilai yang diperbolehkan untuk kartu kredit/debit: CREDIT_CARD
    Nilai yang diperbolehkan untuk ewallet: DANA, OVO, LINKAJA, JENIUSPAY, SHOPEEPAY, GCASH, GRABPAY, PAYMAYA
    Nilai yang diperbolehkan untuk retail outlet: ALFAMART, INDOMARET, 7ELEVEN, CEBUANA, DP_MLHUILLIER, DP_PALAWAN, DP_ECPAY_LOAN
    Nilai yang diperbolehkan untuk direct debit: DD_BRI, DD_BCA_KLIKPAY, DD_UBP, DD_BPI, DD_RCBC, DD_BDO_EPAY
    Nilai yang diperbolehkan untuk paylater: KREDIVO, AKULAKU, UANGME, ATOME, BILLEASE, CASHALO
    Nilai yang diperbolehkan untuk QR Code: QRIS,PROMPTPAY
    payment_destination string Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    payment_details
    optional
    object Objek yang berisi detil pembayaran. Saat ini hanya mendukung pembayaran QRIS.
    Object parameters
    Key Value
    receipt_id
    optional
    string Minta nomor referensi (RRN) yang dibagikan di seluruh jaringan QR. Contoh: “120318237”
    source
    optional
    number Sumber di mana saldo pengguna akhir dipotong untuk menyelesaikan pembayaran. Contoh: “OVO”, “GOPAY”
    payment_id string Identifier unik pembayaran. Saat ini hanya akan dikembalikan pada respons untuk metode pembayaran eWallets, PayLater, dan QR code. Anda dapat menggunakan nilai objek ini untuk melakukan refund ewallets atau Paylater menggunakan API refund eWallets dan Paylater .
    success_redirect_url string Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
    failure_redirect_url string Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
    credit_card_charge_id
    optional
    string Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
    items
    optional
    array Array barang berupa objek JSON yang menunjukkan barang-barang yang dibeli.
    Items child parameters
    Bidang Deskripsi
    name
    required
    string Nama dari produk
    quantity
    required
    number Jumlah dari produk
    price
    required
    number Harga dari produk tiap unit dalam kurs invoice

    category
    optional
    string Kategori barang pada merchant
    Contoh: Fashion, Electronic
    url
    optional
    string Tautan untuk menuju halaman detail barang

    Contoh: https://yourcompany.com/example_item
    fees
    optional
    array Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda.
    Parameter objek fee
    Bidang Deskripsi
    type
    required
    string Jenis unik dari fee
    value
    required
    number Jumlah biaya dari fee tersebut.
    should_authenticate_credit_card
    optional
    boolean Beri tahu apakah Anda ingin transaksi checkout ini untuk melewati 3DS (authentikasi kartu kredit). Pastikan bahwa "Optional 3DS" dinyalakan pada Konfigurasi Kartu Kredit anda. Jika Optional 3DS dimatikan, maka semua transaksi yang dibayar dengna kartu akan melewati 3DS, tidak tergantung nilai dari parameter ini.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah BANK_TRANSFER
    Nilai yang diperbolehkan: BCA, BNI, BSI, BRI, MANDIRI, PERMATA, SAHABAT_SAMPOERNA, BNC
    ewallet_type
    optional
    string Kode ewallet yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah EWALLET
    Nilai yang diperbolehkan: DANA, OVO, LINKAJA, SHOPEEPAY, GCASH, GRABPAY, PAYMAYA
    on_demand_link
    optional
    string Tautan kepada on demand invoice (tautan pembayaran ganda). Hanya untuk on demand invoices.
    recurring_payment_id
    optional
    string ID dari invoice berulang. Hanya untuk recurring invoices.
    fees_paid_amount
    tersedia jika payment_channel adalah non switching Bank Partner dan semua Retail Outlet
    number Biaya Xendit yang diambil dari pembayaran invoice ini.
    DIHAPUS SEJAK 18 MEI 2022. Apabila Anda ingin melihat informasi ini dapat menuju Dasbor Xendit > Tab Saldo
    adjusted_received_amount
    tersedia jika payment_channel adalah non switching Bank Partner dan semua Retail Outlet
    number Jumlah netto uang yang masuk ke saldo Anda setelah dipotong biaya.
    DIHAPUS SEJAK 18 MEI 2022. Apabila Anda ingin melihat informasi ini dapat menuju Dasbor Xendit > Tab Saldo

    Recurring

    API recurring kami menawarkan kepada pedagang kami kemampuan untuk mengumpulkan pembayaran berlangganan secara fleksibel dan lancar melalui debit otomatis/metode pembayaran yang diinisiasi merchant (pengguna akhir tidak melakukan OTP/PIN setelah penautan/pengikatan akun metode pembayaran di awal). Recurring Xendit memberikan lebih dari penjadwalan pembayaran otomatis; kami fokus untuk memberikan alur pembayaran pelanggan terbaik dan tingkat keberhasilan pembayaran maksimum untuk Anda.

    Kasus Penggunaan yang Didukung

    1. Pembayaran langganan dengan jumlah tetap (misalnya, langganan streaming konten, kontribusi donasi berulang)
    2. Pembayaran langganan berbasis penggunaan/ Tagihan (misalnya tagihan Utilitas, biaya roaming data)

    Metode Pembayaran Autodebit yang Didukung di Indonesia (tunduk pada persetujuan penyedia metode pembayaran)

    1. Kartu Kredit
    2. Mandiri DD
    3. BRI DD
    4. OVO
    5. SHOPEEPAY

    Metode Pembayaran Autodebit yang Didukung di Filipina (tunduk pada persetujuan penyedia metode pembayaran)

    1. Kartu Kredit
    2. SHOPEEPAY
    3. GRABPAY
    4. MAYA
    5. GCASH

    Untuk detail lengkap tentang setiap API serta bantuan tentang integrasi, silakan merujuk ke dokumentasi kami

    Versi API

    Anda sedang melihat versi terbaru dari API berulang kami. Integrasikan sekali untuk mendapatkan akses ke semua fitur pembayaran berulang yang tersedia dan fitur pembayaran berulang yang akan datang di Xendit!

    Versi Changelog
    05-12-2022
    Terbaru
    Endpoint pembayaran berulang baru yang mendukung pembayaran debit otomatis dengan mekanisme percobaan ulang yang dapat dikonfigurasi. Mendukung kartu, eWallet, dan metode pembayaran direct debit
    2022-07-15
    Versi sebelumnya
    Recurring endpoint didukung oleh tautan pembayaran Xendit

    Objek Rencana

    Objek data utama yang akan mengatur alur pembayaran berulang merchant. Objek rencana pembayaran berulang membutuhkan objek pelanggan, objek jadwal (opsional) untuk detail konfigurasi pembayaran berulang untuk pelanggan. Merchant akan mengikat detail pembayaran pengguna akhir ke rencana pembayaran berulang menggunakan objek rencana ini (baik menggunakan payment_method_id dari proses penautan akun atau UI penautan akun pembayaran berulang). Rencana pembayaran berulang juga mengambil parameter lain dari pedagang untuk mengonfigurasi bagaimana seharusnya perilaku rencana pembayaran berulang ketika skenario tertentu terjadi. Objek rencana pembayaran berulang akan menghasilkan beberapa objek siklus pembayaran berulang untuk mengatur setiap pembayaran.

    Lihat konsep pembayaran berulang untuk ikhtisar tentang objek-objek pada pembayaran berulang

    Contoh Objek Rencana

    {
      "id": "repl-239c16f4-866d-43e8-9341-7badafbc019f",
      "reference_id": "test_reference_id",
      "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
      "recurring_action": "PAYMENT",
      "recurring_cycle_count": 0,
      "currency": "IDR",
      "amount": 13579,
      "status": "PENDING",
      "created": "2020-11-20T16:23:52Z",
      "updated": "2020-11-20T16:23:52Z",
      "payment_methods": [
        {
          "payment_method_id": "pm-239c16f4-866d-43e8-9341-7badafbc019f",
          "rank": 1,
          "type": "EWALLET"
        }
      ],
      "schedule_id": "resc-239c16f4-866d-43e8-9341-7badafbc019f",
      "schedule": {
        "reference_id": "test_reference_id",
        "interval": "MONTH",
        "interval_count": 1,
        "created": "2022-02-15T16:23:52Z",
        "updated": "2022-02-15T16:23:52Z",
        "total_recurrence": 12,
        "anchor_date": "2022-02-15T16:23:52Z",
        "retry_interval": "DAY",
        "retry_interval_count": 5,
        "total_retry": 5,
        "failed_attempt_notifications": [
          2,
          4
        ]
      },
      "immediate_action_type": "FULL_AMOUNT",
      "notification_config": {
        "recurring_created": [
          "WHATSAPP",
          "EMAIL"
        ],
        "recurring_succeeded": [
          "WHATSAPP",
          "EMAIL"
        ],
        "recurring_failed": [
          "WHATSAPP",
          "EMAIL"
        ],
        "locale": "en"
      },
      "failed_cycle_action": "STOP",
      "metadata": {
        "meta_metadata": "meta_meta_metadata"
      },
      "description": "Video Game Subscription",
      "items": [
        {
          "type": "DIGITAL_PRODUCT",
          "name": "Cine Mraft",
          "net_unit_amount": 13579,
          "quantity": 1
        }
      ],
      "actions": [
        {
          "action": "AUTH",
          "url": "https://linking-dev.xendit.co/pali_e53e1ca6-3c09-4026-be2e-95ed3d4bb25b",
          "url_type": "WEB",
          "method": "GET"
        }
      ],
      "success_return_url": "https://www.xendit.co/successisthesumoffailures",
      "failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    reference_id
    wajib
    string Pengenal yang disediakan merchant untuk rencana pembayaran berulang
    Min - 1 karakter
    Maks - 64 karakter
    customer_id
    wajib
    string ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx
    recurring_action
    wajib
    enum Jenis tindakan pembayaran berulang yang diminta. Nilai yang didukung - PAYMENT
    recurring_cycle_count
    wajib
    number Jumlah total siklus yang dijalankan oleh rencana pembayaran berulang. Siklus pembayaran langsung juga dihitung sebagai 1 hitungan siklus
    currency
    wajib
    enum Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP
    amount
    wajib
    number Jumlah yang akan dibebankan oleh rencana pembayaran berulang kepada pengguna akhir. Siklus pembayaran berulang akan dihasilkan berdasarkan nilai ini. Jika parameter items digunakan, amount harus setara dengan jumlah net_unit_amount dikalikan dengan quantity dalam objek items
    Min - Rp 1000 (Indonesia) atau PHP 50 (Filipina)
    Maks - Bergantung pada masing-masing penyedia pembayaran
    status
    wajib
    enum Status rencana pembayaran berulang:

    ACTIVE - rencana pembayaran berulang sedang berlangsung
    INACTIVE - rencana pembayaran tidak akan memicu tindakan apa pun / tidak aktif
    PENDING - menunggu rencana pembayaran berulang selesai
    REQUIRES_ACTION - Permintaan lolos validasi tetapi membutuhkan langkah tambahan untuk penyelesaian
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan rencana berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    updated
    wajib
    string Waktu ISO 8601 untuk pembaruan objek rencana pembayaran berulang terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    payment_methods
    opsional
    array objek payment_method_id yang akan dicoba oleh rencana pembayaran berulang untuk melakukan pembayaran (upaya akan dilakukan sesuai dengan peringkat setiap objek dalam larik). Hanya satu pembayaran yang berhasil yang akan dilakukan

    Jika parameter ini tidak diteruskan, URL untuk melakukan penautan akun pembayaran akan dibuat untuk pengguna akhir
    Kunci Nilai
    payment_method_id
    wajib
    string ID untuk payment_method_id dihasilkan oleh Create Payment Method API
    rank
    wajib
    nomor Urutan metode pembayaran mana yang akan dicoba untuk instans siklus pembayaran. Nilai yang tersedia - 1 sampai 5
    type
    wajib
    string Jenis metode pembayaran. Nilai yang tersedia - EWALLET, DIRECT_DEBIT atau CARD
    schedule_id
    wajib bersyarat
    string ID jadwal pembayaran berulang yang dihasilkan Xendit. Diperlukan jika parameter schedule tidak disediakan di API pembuatan rencana pembayaran berulang
    schedule
    wajib bersyarat
    object Objek data yang berisi konfigurasi bagaimana siklus berulang akan dijadwalkan. Diperlukan jika schedule_id tidak disediakan di API pembuatan rencana pembayaran berulang
    Kunci Nilai
    reference_id
    wajib
    string Pengidentifikasi yang disediakan penjual untuk jadwal
    Min - 1 karakter
    Maks - n/a
    id
    wajib
    string ID jadwal pembayaran berulang yang dihasilkan Xendit
    business_id
    wajib
    string ID bisnis yang dihasilkan Xendit sebagai identifikasi bisnis Anda
    interval
    wajib
    enum Jenis interval antara siklus berulang yang berurutan. Nilai yang didukung - DAY, WEEK, MONTH

    WEEK - hari dalam seminggu sesuai anchor_date (mis. anchor_date pada Rabu, siklus berikutnya adalah Rabu)
    MONTH - tanggal bulan di mana anchor_date ditentukan (anchor_date ditentukan pada tanggal 25, siklus berikutnya akan jatuh pada tanggal 25)
    interval_count
    wajib
    number Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, lalu siklus berulang terjadi setiap 3 bulan)
    total_recurrence
    opsional
    number Default = NULL Total berapa kali pengguna akhir akan ditagih. Siklus tagihan langsung tidak dihitung ke total_recurrence. Jika parameter tidak digunakan, paket berulang akan berjalan tanpa batas waktu
    anchor_date
    opsional
    string Default = tanggal pembuatan jadwal (tindakan hari yang sama). Waktu dalam ISO 8601 ("2020-11-20T16:23:52+07:00"). Waktu yang digunakan untuk menentukan kapan rencana pembayaran berulang dimulai. Tanggal, hari dalam seminggu atau tanggal dalam sebulan akan digunakan untuk menginisialisasi siklus berulang (waktu mundur masih berfungsi). Jika zona waktu diberikan, pembayaran berulang akan dijalankan berdasarkan zona waktu, jika tidak, UTC 0 akan digunakan

    Nilai yang didukung - Waktu antara tanggal 1 hingga 28 setiap bulan

    Jika tidak ada anchor_date nilai diteruskan dan tanggal pembuatan jadwal jatuh pada 29/30/31, tanggal jangkar akan ditetapkan secara default ke tanggal 1 bulan depan
    retry_interval
    opsional
    enum Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY
    retry_interval_count
    opsional
    angka Jumlah unit retry_interval antara percobaan ulang berturut-turut (mis. retry_interval = DAY, retry_interval_count = 3, lalu pengulangan siklus berulang 3 hari setelah percobaan yang gagal)
    total_retry
    opsional
    number Berapa kali Anda akan mencoba kembali siklus berulang yang gagal. Jika tidak ada nilai yang diteruskan ke total_retry, ini akan menjadi null secara default dan tidak ada percobaan ulang yang akan dipicu
    Min - 1
    Maks - 10
    failed_attempt_notifications
    opsional
    array Tentukan upaya percobaan ulang mana yang akan gagal memberikan notifikasi kepada pengguna akhir. Jumlah nilai array tidak boleh lebih besar dari angka total_retry. 1 dalam param ini mengacu pada percobaan ulang pertama
    immediate_action_type
    opsional
    enum Jenis tindakan yang dilakukan rencana berulang saat dibuat. Jika tindakan gagal, rencana berulang akan dinonaktifkan dan webhook rencana nonaktif akan dikirimkan. Nilai yang didukung - FULL_AMOUNT - tagihan penuh akan diupayakan setelah pembuatan rencana berulang
    notification_config
    opsional
    Objek Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
    Key Nilai
    recurring_created
    opsional
    array Tentukan melalui saluran mana Anda ingin memberi tahu pelanggan akhir saat Anda membuat rencana pembayaran berulang. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_succeeded
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir Anda saat siklus pembayaran berulang Anda berhasil diselesaikan. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_failed
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir saat siklus pembayaran berulang Anda gagal. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    locale
    opsional
    enum Default - "en". ISO 639-1: kode dua huruf untuk bahasa notifikasi yang dikirim ke pengguna akhir. Nilai yang didukung - en, id
    payment_link_for_failed_attempt
    opsional
    boolean Default = false. Menunjukkan apakah rencana harus menghasilkan tautan pembayaran untuk dikirim ke pelanggan akhir saat upaya siklus pertama gagal. Objek jadwal rencana harus memiliki total_retry minimal 1. notification_config.recurring_failed pada objek rencana menentukan saluran notifikasi pelanggan akhir untuk menerima pemberitahuan dengan URL tautan pembayaran. Anda juga akan menerima URL tautan pembayaran dalam callback recurring.cycle.retrying. Untuk informasi selengkapnya tentang tautan pembayaran, silahkan lihat bagian ini
    failed_cycle_action
    opsional
    enum Standar = RESUME. Konfigurasi keputusan yang harus diambil oleh rencana pembayaran berulang ketika siklus pembayaran berulang gagal. RESUME akan mengabaikan kegagalan dan melanjutkan dengan siklus pembayaran berulang berikutnya. STOP akan menonaktifkan rencana pembayaran berulang dan tidak akan ada siklus pembayaran berulang aktif. Nilai yang didukung - RESUME, STOP
    metadata
    opsional
    objek Objek informasi tambahan yang dapat digunakan pedagang. Pengguna menentukan properti dan nilai JSON. Anda dapat menentukan hingga 50 objek, dengan panjang nama objek hingga 40 karakter dan panjang nilai hingga 500 karakter
    description
    opsional
    string Deskripsi rencana berulang - Anda dapat menggunakan objek ini untuk mencantumkan item apa saja yang dibayar, atau apa pun pilihan Anda yang menjelaskan fungsi dari rencana pembayaran berulang. Nilai objek ini akan ditampilkan kepada pengguna akhir untuk UI penautan akun, email, atau whatsapp notifikasi.
    Min - 1 karakter
    Maks - 1000 karakter
    items
    opsional
    array Susunan objek yang mendeskripsikan produk/jasa
    Key Nilai
    type
    wajib
    string Jenis produk

    DIGITAL_PRODUCT, PHYSICAL_PRODUCT, DIGITAL_SERVICE, PHYSICAL_SERVICE,FEE,DISCOUNT
    name
    wajib
    string Nama item

    Format Khusus dan alfanumerik
    Panjang maks 255 karakter
    net_unit_amount
    wajib
    number Jumlah bersih yang akan dibebankan per unit, harap cantumkan jumlah negatif untuk DISCOUNT (mis. -1000000 )
    quantity
    wajib
    number Jumlah unit ini di keranjang

    Min 1
    url
    opsional
    string URL item

    Harus berupa HTTPS atau HTTP
    category
    opsional
    string Kategori pedagang untuk item

    Format Spesial dan alfanumerik
    Max length 255 karakter
    subcateory
    opsional
    string Subkategori pedagang untuk item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    description
    opsional
    string Deskripsi item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    metadata
    opsional
    objek Objek tambahan yang dapat digunakan untuk atribut item tambahan
    actions
    opsional
    array Susunan objek yang berisi URL bagi pengguna akhir untuk menyelesaikan rencana pembayaran berulang mereka
    Key Nilai
    action
    wajib
    string Menjelaskan tujuan tindakan terkait. AUTH - Lakukan tindakan ini untuk menautkan akun pembayaran
    url_type
    opsional
    string WEB - URL pengalihan yang disediakan dioptimalkan untuk desktop atau antarmuka web
    url
    opsional
    string URL yang dibuat untuk melakukan tindakan
    method
    opsional
    string metode HTTP untuk memanggil url - GET/ POST
    success_return_url
    opsional
    string URL tempat pengguna akhir dialihkan setelah penautan akun berhasil. Harus HTTPS atau HTTP
    failure_return_url
    opsional
    string URL tempat pelanggan akhir dialihkan jika penautan akun gagal. Harus HTTPS atau HTTP

    Objek Jadwal

    Objek data yang digunakan untuk menentukan bagaimana siklus pembayaran berulang seharusnya terjadi. Objek berisi informasi tentang seberapa sering siklus harus terjadi dan interval (hari/ bulan/ tahun) antara setiap siklus. Objek rencana pembayaran berulang membutuhkan objek jadwal untuk membuat setiap siklus berulang.

    Lihat konsep pembayaran berulang untuk ikhtisar tentang objek-objek pada pembayaran berulang

    Contoh Objek Jadwal

    {
      "id" : "resc-239c16f4-866d-43e8-9341-7badafbc019f",
      "reference_id": "test_reference_id",
      "business_id" : "5f27a14a9bf05c73dd040bc8",
      "interval": "MONTH",
      "interval_count": 1,
      "created": "2022-02-15T16:23:52Z",
      "updated": "2022-02-15T16:23:52Z",
      "total_recurrence": 12,
      "anchor_date": "2022-02-15T16:23:52Z",
      "retry_interval": "DAY",
      "retry_interval_count": 5,
      "total_retry": 5,
      "failed_attempt_notifications": [
        2,
        4
      ]
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string ID jadwal berulang yang dibuat oleh Xendit, dengan awalan resc-xxx
    business_id
    wajib
    string ID business yang dibuat oleh Xendit
    reference_id
    wajib
    string Pengidentifikasi yang disediakan penjual untuk jadwal pembayaran berulang
    Min - 1 karakter
    Maks - n/a
    interval
    wajib
    enum Jenis interval antara siklus berulang yang berurutan. Nilai yang didukung - DAY, WEEK, MONTH

    WEEK - hari dalam seminggu anchor_date ditentukan (mis. anchor_date pada Rabu, siklus berikutnya adalah Rabu)
    MONTH - tanggal bulan di mana anchor_date ditentukan (anchor_date ditentukan pada tanggal 25, siklus berikutnya akan dilakukan pada tanggal 25)
    interval_count
    wajib
    angka Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, maka siklus berulang terjadi setiap 3 bulan)
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan jadwal pembayaran berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    updated
    diperlukan
    string Waktu ISO 8601 untuk pembaruan objek jadwal terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    total_recurrence
    opsional
    angka Default = NULL Total berapa kali pengguna akhir akan ditagih. Tagihan langsung tidak dihitung ke total_recurrence. Jika parameter tidak digunakan, rencana pembayaranberulang akan berjalan tanpa batas waktu
    anchor_date
    opsional
    string Default = tanggal pembuatan jadwal (same day action). Waktu dalam ISO 8601 ("2020-11-20T16:23:52+07:00"). Waktu yang digunakan untuk menentukan kapan rencana berulang dimulai. Tanggal, hari dalam seminggu atau tanggal dalam sebulan akan digunakan untuk menginisialisasi siklus berulang (penentuan waktu mundur masih berfungsi). Jika zona waktu diberikan, siklus berulang akan dijalankan berdasarkan zona waktu, jika tidak, UTC 0 akan digunakan

    Nilai yang didukung - Waktu antara tanggal 1 hingga 28 setiap bulan

    Jika tidak ada anchor_date nilai dilewatkan dan tanggal pembuatan jadwal jatuh pada 29/30/31, tanggal siklus akan ditetapkan secara default ke tanggal 1 dibulan berikutnya
    retry_interval
    opsional
    enum Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY
    retry_interval_count
    opsional
    angka Jumlah unit retry_interval di antara percobaan ulang berturut-turut (mis. retry_interval = DAY, retry_interval_count = 3, maka pengulangan siklus berulang 3 hari setelah upaya yang gagal)
    total_retry
    opsional
    angka Berapa kali Anda akan mencoba kembali siklus pembayaran berulang yang gagal. Jika tidak ada nilai yang diteruskan ke total_retry, ini akan menjadi null secara default dan tidak ada percobaan ulang yang akan dipicu
    Min - 1
    Maks - 10
    failed_attempt_notifications
    opsional
    string Tentukan upaya percobaan ulang mana yang apabila gagal, notikasi gagal dikirim kepada pengguna akhir. Jumlah nilai array tidak boleh lebih besar dari angka total_retry atau digandakan. 1 dalam param ini mengacu pada percobaan ulang pertama.

    Objek Siklus

    Siklus berulang mengacu pada satu contoh spesifik dari tindakan rencana pembayaran berulang - misalnya. siklus penagihan bulan tertentu. Objek siklus berulang dihasilkan dari objek rencana pembayaran berulang dimana konfigurasi pembayaran berulang ditentukan. Jika diperlukan perubahan pada siklus penagihan bulan tertentu, objek ini dapat diperbarui tanpa memengaruhi rencana pembayaran berulang yang asli. Objek ini sangat berguna untuk penagihan berbasis penggunaan.

    Lihat konsep pembayaran berulang untuk ikhtisar tentang objek-objek pada pembayaran berulang

    Contoh Obyek Siklus

    {
      "id": "recy-239c16f4-866d-43e8-9341-7badafbc019f",
      "reference_id": "test_reference_id",
      "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
      "recurring_action": "PAYMENT",
      "type": "SCHEDULED",
      "cycle_number": 2,
      "attempt_count": 2,
      "attempt_details": [
        {
          "attempt_number": 1,
          "created": "2020-04-21T16:23:52Z",
          "action_id": "ewc-239c16f4-866d-43e8-9341-7badafbc019f",
          "status": "SUCCEEDED",
          "Failure_code": null,
          "next_retry_timestamp": null
        },
        {
          "attempt_number": 1,
          "created": "2020-04-20T16:23:52Z",
          "action_id": "ewc-239c16f4-866d-43e8-9341-7badafbc019f",
          "status": "FAILTED",
          "failure_code": "INSUFFICIENT_BALANCE",
          "next_retry_timestamp": "2020-04-20T16:23:52Z"
        }
      ],
      "status": "SUCCEEDED",
      "scheduled_timestamp": "2020-12-20T16:23:52Z",
      "created": "2020-11-20T16:23:52Z",
      "updated": "2020-11-20T16:23:52Z",
      "currency": "IDR",
      "amount": 13579
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string ID siklus berulang yang dihasilkan Xendit, dengan awalan recy-xxx
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    reference_id
    wajib
    string Pengidentifikasi yang disediakan pedagang, dihasilkan dari objek rencana pembayaran berulang
    Min - 1 karakter
    Maks - 64 karakter
    customer_id
    wajib
    string ID pelanggan yang dihasilkan Xendit, dihasilkan dari objek rencana pembayaran berulang, dengan awalan cust-xxx
    recurring_action
    wajib
    enum Jenis tindakan berulang yang diminta, dihasilkan dari objek rencana pembayaran berulang. Nilai yang didukung - PAYMENT
    tyoe
    wajib
    enum Jenis siklus berulang - Nilai yang tersedia - SCHEDULED, IMMEDIATE
    cycle_number
    wajib
    number Penomoran yang menentukan urutan objek siklus yang dihasilkan oleh rencana pembayaran berulang (misalnya, dalam rencana penagihan bulanan, cycle_number bulan kedua adalah 2)
    Min - 1
    attempt_count
    wajib
    angka Jumlah tindakan yang telah dicoba untuk objek siklus berulang ini. Nilainya adalah gabungan dari percobaan pertama dan percobaan ulang
    attempt_details
    wajib
    array Informasi detail dari setiap upaya tindakan
    Key Nilai
    attempt_number
    wajib
    number Penomoran yang menentukan urutan upaya siklus. Upaya pertama akan menjadi 1 dan upaya berikutnya bergantung pada coba ulang konfigurasi. Nilai ini dapat digandakan jika beberapa metode pembayaran dikonfigurasi dalam rencana pembayaran berulang
    created
    wajib
    string ISO 8601 Timestamp (mis. "2020-04-20T16:23:52Z") untuk percobaan tindakan. Timezone UTC+0
    action_id
    wajib
    string ID tindakan terkait (mis. ID pembayaran) ID ini dapat digunakan untuk menemukan pembayaran di dasbor Xendit atau melalui GET API status pembayaran.
    status
    wajib
    enum Status tindakan .

    Nilai yang tersedia -
    SUCCEEDED - tindakan berulang yang berhasil diproses dengan mitra
    FAILED - tindakan berulang gagal diproses oleh mitra
    PENDING - tindakan berulang masih menunggu konfirmasi mitra
    failure_code
    opsional
    string Alasan kegagalan tindakan berulang dalam percobaan ini
    next_retry_timestamp
    opsional
    string ISO 8601 Estimasi waktu (mis. "2020-04-20T16:23:52Z") untuk percobaan berikutnya. Zona waktu UTC+0
    status
    wajib
    enum Status siklus berulang.

    Nilai yang tersedia -
    SCHEDULED - siklus menunggu waktu eksekusi
    PENDING - eksekusi tindakan berulang telah dimulai (siklus dikunci untuk pembaruan)
    RETRYING - percobaan ulang yang dikonfigurasi sedang berlangsung
    GAGAL - semua percobaan tindakan, termasuk percobaan ulang telah gagal
    BERHASIL - setidaknya satu percobaan tindakan telah berhasil
    DIBATALKAN - siklus berulang dihentikan oleh tindakan merchant
    schedule_timestamp
    wajib
    string Waktu ISO 8601 (mis. "2020-04-20T00:00:00Z" UTC+0) upaya tindakan mendatang untuk siklus berulang - nilai diperbarui pada setiap percobaan ulang (jika ada). Tindakan akan dijalankan dalam waktu 24 jam dari stempel waktu yang dijadwalkan dengan mempertimbangkan zona waktu.
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan siklus berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    updated
    diperlukan
    string Waktu ISO 8601 untuk pembaruan objek siklus terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    currency
    wajib
    enum Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP
    amount
    wajib
    angka Jumlah yang akan dibebankan oleh rencana pembayaran berulang kepada pengguna akhir. Siklus berulang akan dihasilkan berdasarkan nilai ini. Jika parameter items digunakan, amount harus setara dengan jumlah net_unit_amount dikalikan dengan quantity dalam larik items
    Min - Rp 1.000 (Indonesia) / PHP 50 (Filipina) <br Jumlah maksimum bergantung pada penyedia pembayaran

    Buat Pelanggan

    Buat permintaan POST ke API ini untuk membuat pelanggan untuk dapat digunakan dengan API recurring. Objek pelanggan akan digunakan oleh rencana pembayaran berulang untuk pemberitahuan pengguna akhir mengenai pembaruan aktivitas pada rencana pembayaran berulang mereka.

    Catatan - satu objek pelanggan dapat digunakan untuk beberapa rencana pembayaran berulang.

    Endpoint: Buat Pelanggan

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

    Versi

    Untuk kompatibilitas terbaik, harap gunakan versi 2020-10-31 di Create Customer API

    Parameter Permintaan

    Contoh Buat Pelanggan

    curl https://api.xendit.co/customers -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json'
       --data-raw '{
         "reference_id": "demo_1475801962607",
         "type": "INDIVIDUAL",
         "individual_detail": {
           "given_names": "John",
           "surname": "Doe"
         },
         "email": "customer@website.com",
         "mobile_number": "+628121234567890"
         }'
    <?php
      $url = "https://api.xendit.co/customers";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
      $data = [
        "reference_id" => "demo_1475801962607",
        "type" => "INDIVIDUAL",
        "individual_detail" => [
           "given_names" => "John",
           "surname" => "Doe"
        ],
        "email" => "customer@website.com",
        "mobile_number" => "+628121234567890"
      ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    let url = "https://api.xendit.co/customers";
    
    var headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
    headers.append("Content-Type", "application/json");
    
    var reqBody = JSON.stringify({
      "reference_id": "demo_1475801962607",
      "type": "INDIVIDUAL",
      "individual_detail": {
        "given_names": "John",
        "surname": "Doe"
      },
      "email": "customer@website.com",
      "mobile_number": "+628121234567890"});
    
    var requestOptions = {
      method: 'POST',
      headers: headers,
      body: reqBody,
      redirect: 'follow'
    };
    
    fetch(url, requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    import requests
    import base64
    
    api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
    url = "https://api.xendit.co/customers"
    
    api_key_bytes = api_key.encode('ascii')
    base64_bytes = base64.b64encode(api_key_bytes)
    base64_token = base64_bytes.decode('ascii')
    
    payload = {
      "reference_id": "demo_1475801962607",
      "type": "INDIVIDUAL",
      "individual_detail": {
        "given_names": "John",
        "surname": "Doe"
      },
      "email": "customer@website.com",
      "mobile_number": "+628121234567890"
    }
    auth_token = 'Basic ' + base64_token
    headers = {
      'Authorization': auth_token
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    CustomerClient customer = xendit.Customer;
    
    CustomerParameter individualParameter = new CustomerParameter
    {
      ReferenceId = "demo_11212163",
      Type = CustomerType.Individual,
      IndividualDetail = new IndividualDetail
      {
        GivenNames = "John",
        Gender = CustomerGender.Male,
      },
      IdentityAccount = new IdentityAccount[]
      {
        new IdentityAccount
        {
          Country = Country.Indonesia,
          Type = CustomerIdentityAccountType.BankAccount,
          Properties = new IdentityAccountProperties { AccountNumber = "account_number" }
        }
      },
      KycDocuments = new KycDocument[]
      {
        new KycDocument
        {
          Country = Country.Indonesia,
          Type = CustomerKycDocumentType.IdentityCard,
          SubType = CustomerKycDocumentSubType.NationalId,
        }
      },
    };
    
    CustomerResponse individualCustomerVersion20201031 = await customer.Create(individualParameter);

    Tabel berikut menampilkan parameter yang akan digunakan secara berulang untuk memberi tahu pengguna akhir Anda tentang aktivitas pembayaran berulang. Silakan lihat Create Customer API untuk lihat lengkap Create Customer API.

    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    reference_id
    wajib
    string Pengenal yang disediakan merchant untuk pelanggan.
    Permintaan dengan reference_id duplikat akan menghasilkan error. Sebagai gantinya, Anda harus melakukan PATCH objek pelanggan.

    Panjang maksimum 255 karakter
    Karakter Alfanumerik. Tidak ada karakter khusus yang diperbolehkan.
    type
    wajib
    string Jenis pelanggan.
    Nilai yang didukung: INDIVIDUAL
    individual_detail
    diperlukan dengan syarat
    object Objek JSON yang berisi detail individu. Wajib diisi jika jenisnya adalah INDIVIDUAL
    Parameter detail individu
    given_names
    diperlukan
    string Nama utama atau nama depan pelanggan.

    Karakter Alfanumerik. Karakter khusus tidak diperbolehkan.
    mobile_number
    opsional
    string Nomor ponsel pelanggan dalam format E.164

    Panjang maksimum 50 karakter
    email
    opsional
    string Alamat email pelanggan

    Panjang maksimum 255 karakter

    Parameter Respons

    Respons sukses akan berisi satu Objek Pelanggan

    Kode Error

    Lihat error lainnya di sini.

    Kode Error Keterangan
    DUPLICATE_ERROR
    409
    reference_id yang disediakan telah digunakan sebelumnya. Harap masukkan reference_id yang unik.
    IDEMPOTENCY_ERROR
    409
    Kunci Idempotensi yang diberikan sudah ada tetapi isi permintaan yang diberikan tidak sesuai dengan permintaan asli

    Rencana - Buat Rencana

    API buat rencana pembayaran berulang akan membutuhkan objek pelanggan, objek jadwal (opsional) untuk menyiapkan logika pembayaran berulang untuk pengguna akhir tertentu. Merchant akan mengikat detail pembayaran pengguna akhir ke rencana pembayaran berulang menggunakan API ini (baik menggunakan UI penautan akun rencana pembayaran berulang atau menyediakan payment_method_id dari API buat metode pembayaran). Setelah permintaan divalidasi, webhook akan dikirim untuk memberi tahu sistem Anda apakah rencana telah diaktifkan.

    Lihat panduan integrasi kami untuk informasi lebih lanjut.

    Endpoint: Buat Rencana Pembayaran Berulang

    POST https://api.xendit.co/recurring/plans

    Parameter Request

    Contoh: Request Buat Rencana Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
      "reference_id": "test_reference_id",
      "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
      "recurring_action": "PAYMENT",
      "currency": "IDR",
      "amount": 13579,
      "payment_methods": [{
        "payment_method_id": "pm-asdaso213897821hdas",
        "rank": 1
      }],
      "schedule": {
        "reference_id": "test_reference_id",
        "interval": "MONTH",
        "interval_count": 1,
        "total_recurrence": 12,
        "anchor_date": "2022-02-15T16:23:52Z",
        "retry_interval": "DAY",
        "retry_interval_count": 3,
        "total_retry": 2,
        "failed_attempt_notifications": [1,2]
      },
      "immediate_action_type": "FULL_AMOUNT",
      "notification_config": {
        "recurring_created": ["WHATSAPP","EMAIL"],
        "recurring_succeeded": ["WHATSAPP","EMAIL"],
        "recurring_failed": ["WHATSAPP","EMAIL"],
        "locale": "en"},
      "failed_cycle_action": "STOP",
      "payment_link_for_failed_attempt" : true,
      "metadata": null,
      "description": "Video Game Subscription",
      "items": [
            {
                "type": "DIGITAL_PRODUCT",
                "name": "Cine Mraft",
                "net_unit_amount": 13579,
                "quantity": 1,
                "url": "https://www.xendit.co/",
                "category": "Gaming",
                "subcategory": "Open World"
            }
        ],
      "success_return_url": "https://www.xendit.co/successisthesumoffailures",
      "failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
    }' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-split-rule
    opsional
    string ID Split Rule yang ingin Anda aplikasikan ke rencana pembayaran berulang ini untuk dapat membagi pembayaran dan menyalurkannya ke beberapa Akun lain.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan split_rule_id pada header response API.

    Apabila for-user-id header tidak tersedia, Split Rule akan menggunakan Akun Master sebagai sumber dana untuk mengirimkan pemotongan pembayaran ke akun destinasi yang ditentukan

    Header ini adalah versi terbaru, versi lama dengan header with-fee-rule hanya dapat digunakan sampai tanggal 30 September 2025. Mohon untuk segera migrasi ke versi yang terbaru apabila Anda masih menggunakan header with-fee-rule.

    Header tersebut hanya dapat digunakan apabila Anda memiliki akses ke xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut
    Parameter Body Tipe Deskripsi
    id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    reference_id
    wajib
    string Pengenal yang disediakan merchant untuk rencana pembayaran berulang
    Min - 1 karakter
    Maks - 64 karakter
    customer_id
    wajib
    string ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx. Hanya mendukung objek pelanggan dengan tipe INDIVIDUAL
    recurring_action
    wajib
    enum Jenis tindakan pembayaran berulang yang diminta. Nilai yang didukung - PAYMENT
    recurring_cycle_count
    wajib
    number Jumlah total siklus yang dijalankan oleh rencana pembayaran berulang. Siklus pembayaran langsung juga dihitung sebagai 1 hitungan siklus
    currency
    wajib
    enum Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP
    amount
    wajib
    number Jumlah yang akan dibebankan oleh rencana pembayaran berulang kepada pengguna akhir. Siklus pembayaran berulang akan dihasilkan berdasarkan nilai ini. Jika parameter items digunakan, amount harus setara dengan jumlah net_unit_amount dikalikan dengan quantity dalam objek items
    Min - Rp 1000 (Indonesia) atau PHP 50 (Filipina)
    Maks - Bergantung pada masing-masing penyedia pembayaran
    status
    wajib
    enum Status rencana pembayaran berulang:

    ACTIVE - rencana pembayaran berulang sedang berlangsung
    INACTIVE - rencana pembayaran tidak akan memicu tindakan apa pun / tidak aktif
    PENDING - menunggu rencana pembayaran berulang selesai
    REQUIRES_ACTION - Permintaan lolos validasi tetapi membutuhkan langkah tambahan untuk penyelesaian
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan rencana berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    updated
    wajib
    string Waktu ISO 8601 untuk pembaruan objek rencana pembayaran berulang terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z"
    payment_methods
    opsional
    array objek payment_method_id yang akan dicoba oleh rencana pembayaran berulang untuk melakukan pembayaran (upaya akan dilakukan sesuai dengan peringkat setiap objek dalam larik). Hanya satu pembayaran yang berhasil yang akan dilakukan

    Jika parameter ini tidak diteruskan, URL untuk melakukan penautan akun pembayaran akan dibuat untuk pengguna akhir
    Kunci Nilai
    payment_method_id
    wajib
    string ID untuk payment_method_id dihasilkan oleh Create Payment Method API
    rank
    wajib
    nomor Urutan metode pembayaran mana yang akan dicoba untuk instans siklus pembayaran. Nilai yang tersedia - 1 sampai 5
    type
    wajib
    string Jenis metode pembayaran. Nilai yang tersedia - EWALLET, DIRECT_DEBIT atau CARD
    schedule
    wajib
    object Objek data yang berisi konfigurasi bagaimana siklus berulang akan dijadwalkan.
    Kunci Nilai
    reference_id
    wajib
    string Pengidentifikasi yang disediakan penjual untuk jadwal
    Min - 1 karakter
    Maks - n/a
    interval
    wajib
    enum Jenis interval antara siklus berulang yang berurutan. Nilai yang didukung - DAY, WEEK, MONTH

    WEEK - hari dalam seminggu sesuai anchor_date (mis. anchor_date pada Rabu, siklus berikutnya adalah Rabu)
    MONTH - tanggal bulan di mana anchor_date ditentukan (anchor_date ditentukan pada tanggal 25, siklus berikutnya akan jatuh pada tanggal 25)
    interval_count
    wajib
    number Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, lalu siklus berulang terjadi setiap 3 bulan)
    total_recurrence
    opsional
    number Default = NULL Total berapa kali pengguna akhir akan ditagih. Siklus tagihan langsung tidak dihitung ke total_recurrence. Jika parameter tidak digunakan, paket berulang akan berjalan tanpa batas waktu
    anchor_date
    opsional
    string Default = tanggal pembuatan jadwal (tindakan hari yang sama). Waktu dalam ISO 8601 ("2020-11-20T16:23:52+07:00"). Waktu yang digunakan untuk menentukan kapan rencana pembayaran berulang dimulai. Tanggal, hari dalam seminggu atau tanggal dalam sebulan akan digunakan untuk menginisialisasi siklus berulang (waktu mundur masih berfungsi). Jika zona waktu diberikan, pembayaran berulang akan dijalankan berdasarkan zona waktu, jika tidak, UTC 0 akan digunakan

    Nilai yang didukung - Waktu antara tanggal 1 hingga 28 setiap bulan

    Jika tidak ada anchor_date nilai diteruskan dan tanggal pembuatan jadwal jatuh pada 29/30/31, tanggal jangkar akan ditetapkan secara default ke tanggal 1 bulan depan
    retry_interval
    opsional
    enum Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY
    retry_interval_count
    opsional
    angka Jumlah unit retry_interval antara percobaan ulang berturut-turut (mis. retry_interval = DAY, retry_interval_count = 3, lalu pengulangan siklus berulang 3 hari setelah percobaan yang gagal)
    total_retry
    opsional
    number Berapa kali Anda akan mencoba kembali siklus berulang yang gagal. Jika tidak ada nilai yang diteruskan ke total_retry, ini akan menjadi null secara default dan tidak ada percobaan ulang yang akan dipicu
    Min - 1
    Maks - 10
    failed_attempt_notifications
    opsional
    array Tentukan upaya percobaan ulang mana yang akan gagal memberikan notifikasi kepada pengguna akhir. Jumlah nilai array tidak boleh lebih besar dari angka total_retry. 1 dalam param ini mengacu pada percobaan ulang pertama
    immediate_action_type
    opsional
    enum Jenis tindakan yang dilakukan rencana berulang saat dibuat. Jika tindakan gagal, rencana berulang akan dinonaktifkan dan webhook rencana nonaktif akan dikirimkan. Nilai yang didukung - FULL_AMOUNT - tagihan penuh akan diupayakan setelah pembuatan rencana berulang
    notification_config
    opsional
    Objek Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
    Key Nilai
    recurring_created
    opsional
    array Tentukan melalui saluran mana Anda ingin memberi tahu pelanggan akhir saat Anda membuat rencana pembayaran berulang. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_succeeded
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir Anda saat siklus pembayaran berulang Anda berhasil diselesaikan. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_failed
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir saat siklus pembayaran berulang Anda gagal. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    lokal
    opsional
    enum Default - "en". ISO 639-1: kode dua huruf untuk bahasa notifikasi yang dikirim ke pengguna akhir. Nilai yang didukung - en, id
    payment_link_for_failed_attempt
    opsional
    boolean Default = false. Menunjukkan apakah rencana harus menghasilkan tautan pembayaran untuk dikirim ke pelanggan akhir saat upaya siklus pertama gagal. Objek jadwal rencana harus memiliki total_retry minimal 1. notification_config.recurring_failed pada objek rencana menentukan saluran notifikasi pelanggan akhir untuk menerima pemberitahuan dengan URL tautan pembayaran. Anda juga akan menerima URL tautan pembayaran dalam callback recurring.cycle.retrying. Untuk informasi selengkapnya tentang tautan pembayaran, silahkan lihat bagian ini
    failed_cycle_action
    opsional
    enum Standar = RESUME. Konfigurasi keputusan yang harus diambil oleh rencana pembayaran berulang ketika siklus pembayaran berulang gagal. RESUME akan mengabaikan kegagalan dan melanjutkan dengan siklus pembayaran berulang berikutnya. STOP akan menonaktifkan rencana pembayaran berulang dan tidak akan ada siklus pembayaran berulang aktif. Nilai yang didukung - RESUME, STOP
    metadata
    opsional
    objek Objek informasi tambahan yang dapat digunakan pedagang. Pengguna menentukan properti dan nilai JSON. Anda dapat menentukan hingga 50 objek, dengan panjang nama objek hingga 40 karakter dan panjang nilai hingga 500 karakter
    description
    opsional
    string Deskripsi rencana berulang - Anda dapat menggunakan objek ini untuk mencantumkan item apa saja yang dibayar, atau apa pun pilihan Anda yang menjelaskan fungsi dari rencana pembayaran berulang. Nilai objek ini akan ditampilkan kepada pengguna akhir untuk UI penautan akun, email, atau whatsapp notifikasi.
    Min - 1 karakter
    Maks - 1000 karakter
    items
    opsional
    array Susunan objek yang mendeskripsikan produk/jasa
    Key Nilai
    type
    wajib
    string Jenis produk

    DIGITAL_PRODUCT, PHYSICAL_PRODUCT, DIGITAL_SERVICE, PHYSICAL_SERVICE,FEE,DISCOUNT
    name
    wajib
    string Nama item

    Format Khusus dan alfanumerik
    Panjang maks 255 karakter
    net_unit_amount
    wajib
    number Jumlah bersih yang akan dibebankan per unit, harap cantumkan jumlah negatif untuk DISCOUNT (mis. -1000000 )
    quantity
    wajib
    number Jumlah unit ini di keranjang

    Min 1
    url
    opsional
    string URL item

    Harus berupa HTTPS atau HTTP
    category
    opsional
    string Kategori pedagang untuk item

    Format Spesial dan alfanumerik
    Max length 255 karakter
    subcateory
    opsional
    string Subkategori pedagang untuk item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    description
    opsional
    string Deskripsi item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    metadata
    opsional
    objek Objek tambahan yang dapat digunakan untuk atribut item tambahan
    success_return_url
    opsional
    string URL tempat pengguna akhir dialihkan setelah penautan akun berhasil. Harus HTTPS atau HTTP
    failure_return_url
    opsional
    string URL tempat pelanggan akhir dialihkan jika penautan akun gagal. Harus HTTPS atau HTTP

    Parameter Respons

    Respons sukses akan berisi satu Objek Jadwal. dengan status PENDING. Ini diikuti oleh webhook yang akan memberi tahu sistem Anda jika rencana berhasil diaktifkan.

    Kode Error

    Contoh: Respons Error API Buat Rencana Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu kolom permintaan yang wajib
    API_VALIDATION_ERROR
    400
    schedule harus disertakan dalam isi permintaan agar respons berhasil. Harap periksa badan permintaan Anda
    API_VALIDATION_ERROR
    400
    Untuk membuat logika cycle retry, semua nilai dalam retry_interval, retry_interval_count dan total_retry harus ditentukan. Harap periksa isi permintaan Anda untuk menentukan semua nilai atau hapus parameter yang diisi
    API_VALIDATION_ERROR
    400
    Peringkat untuk metode pembayaran harus berurutan mulai dari 1
    API_VALIDATION_ERROR
    400
    Nilai dalam larik failed_attempt_notifications tidak dapat digandakan atau lebih besar dari nilai total_retry atau nilai larik dihitung lebih besar dari total_retry
    API_VALIDATION_ERROR
    400
    Mata uang pembayaran yang diminta tidak didukung untuk saluran pembayaran ini. Lihat referensi atau dokumen API kami untuk memilih mata uang yang tersedia
    API_VALIDATION_ERROR
    400
    anchor_date tidak menerima tanggal dari 29 hingga 31. Harap periksa request Anda untuk menentukan semua nilai
    API_VALIDATION_ERROR
    400
    Jumlah items.net_unit_amount harus sama dengan jumlah rencana
    INVALID_PAYMENT_METHOD_ID
    400
    payment_method_id yang diberikan memiliki mata uang yang tidak cocok atau tidak "ACTIVE" karena telah kedaluwarsa/diputuskan/tautannya belum selesai. Coba lagi dengan payment_method_id
    yang valid
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    PAYMENT_METHOD_ID_NOT_FOUND
    404
    payment_method_id yang diberikan tidak ditemukan. Coba lagi dengan payment_method_id
    CUSTOMER_NOT_FOUND
    404
    customer_id tidak valid atau tidak ditemukan. Harap coba lagi dengan customer_id
    yang valid
    DATA_NOT_FOUND
    404
    schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    UNSUPPORTED_CONTENT_TYPE
    415
    Jenis konten yang diminta tidak didukung
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah

    Callback - Rencana

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Payload Webhook Aktivasi Rencana

    Webhook aktivasi rencana pembayaran berulang dipicu saat rencana pembayaran berulang telah menyelesaikan semua langkah yang diminta yang ditentukan dalam API buat rencana pembayaran berulang. Ada dua kemungkinan proses yang dapat dilibatkan - 1. pembayaran berulang membantu menyelesaikan tindakan segera (mis. tindakan pembayaran langsung) atau 2. pembayaran berulang menunggu pengguna akhir menyelesaikan penautan akun.

    Detail lengkap webhook dapat ditemukan di sini

    Contoh: Payload Webhook Aktivasi Rencana

    {
      "created": "2022-10-01T12:37:08.251Z",
      "business_id": "62440e322008e87fb29c1fd0",
      "event": "recurring.plan.activated",
      "data": {
        "id": "repl-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "test_reference_id",
        "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "recurring_action": "PAYMENT",
        "recurring_cycle_count": 0,
        "currency": "IDR",
        "amount": 13579,
        "status": "ACTIVE",
        "created": "2020-11-20T16:23:52Z",
        "updated": "2020-11-20T16:23:52Z",
        "payment_methods": [
          {
            "payment_method_id": "pm-239c16f4-866d-43e8-9341-7badafbc019f",
            "rank": 1,
            "type": "EWALLET"
          }
        ],
        "schedule_id": "resc-239c16f4-866d-43e8-9341-7badafbc019f",
        "schedule": {
          "reference_id": "test_reference_id",
          "interval": "MONTH",
          "interval_count": 1,
          "created": "2022-02-15T16:23:52Z",
          "updated": "2022-02-15T16:23:52Z",
          "total_recurrence": 12,
          "anchor_date": "2022-02-15T16:23:52Z",
          "retry_interval": "DAY",
          "retry_interval_count": 5,
          "total_retry": 5,
          "failed_attempt_notifications": [
            2,
            4
          ]
        },
        "immediate_action_type": "FULL_AMOUNT",
        "notification_config": {
          "recurring_created": [
            "WHATSAPP",
            "EMAIL"
          ],
          "recurring_succeeded": [
            "WHATSAPP",
            "EMAIL"
          ],
          "recurring_failed": [
            "WHATSAPP",
            "EMAIL"
          ],
          "locale": "en"
        },
        "failed_cycle_action": "STOP",
        "metadata": {
          "meta_metadata": "meta_meta_metadata"
        },
        "description": "Video Game Subscription",
        "items": [
          {
            "type": "DIGITAL_PRODUCT",
            "name": "Cine Mraft",
            "net_unit_amount": 13579,
            "quantity": 1
          }
        ],
        "actions": [
          {
            "action": "AUTH",
            "url": "https://linking-dev.xendit.co/pali_e53e1ca6-3c09-4026-be2e-95ed3d4bb25b",
            "url_type": "WEB",
            "method": "GET"
          }
        ],
        "success_return_url": "https://www.xendit.co/successisthesumoffailures",
        "failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
      },
      "api_version": "v1"
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Keterangan
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.plan.activated
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0.
    data
    opsional
    object Objek Rencana dengan status ACTIVE
    api_version
    opsional
    string Nilai versi ditetapkan sebagai v1

    Payload Webhook Inaktivasi Rencana

    Webhook inaktivasi rencana dipicu saat rencana pembayaran berulang tidak dapat menyelesaikan langkah yang diminta untuk melakukan tindakan segera, saat siklus gagal, atau saat siklus mencapai perulangan terakhir. Misalnya, saat tindakan pembayaran langsung gagal.

    Contoh: Payload Webhook Inaktivasi Rencana

    {
      "created": "2022-10-01T12:37:08.251Z",
      "business_id": "62440e322008e87fb29c1fd0",
      "event": "recurring.plan.inactivated",
      "data": {
        "id": "repl-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "test_reference_id",
        "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "recurring_action": "PAYMENT",
        "recurring_cycle_count": 0,
        "currency": "IDR",
        "amount": 13579,
        "status": "INACTIVE",
        "created": "2020-11-20T16:23:52Z",
        "updated": "2020-11-20T16:23:52Z",
        "payment_methods": [
          {
            "payment_method_id": "pm-239c16f4-866d-43e8-9341-7badafbc019f",
            "rank": 1
          }
        ],
        "schedule_id": "resc-239c16f4-866d-43e8-9341-7badafbc019f",
        "schedule": {
          "reference_id": "test_reference_id",
          "interval": "MONTH",
          "interval_count": 1,
          "created": "2022-02-15T16:23:52Z",
          "updated": "2022-02-15T16:23:52Z",
          "total_recurrence": 12,
          "anchor_date": "2022-02-15T16:23:52Z",
          "retry_interval": "DAY",
          "retry_interval_count": 5,
          "total_retry": 5,
          "failed_attempt_notifications": [
            2,
            4
          ]
        },
        "immediate_action_type": "FULL_AMOUNT",
        "notification_config": {
          "recurring_created": [
            "WHATSAPP",
            "EMAIL"
          ],
          "recurring_succeeded": [
            "WHATSAPP",
            "EMAIL"
          ],
          "recurring_failed": [
            "WHATSAPP",
            "EMAIL"
          ],
          "locale": "en"
        },
        "failed_cycle_action": "STOP",
        "metadata": {
          "meta_metadata": "meta_meta_metadata"
        },
        "description": "Video Game Subscription",
        "items": [
          {
            "type": "DIGITAL_PRODUCT",
            "name": "Cine Mraft",
            "net_unit_amount": 13579,
            "quantity": 1
          }
        ],
        "actions": [
          {
            "action": "AUTH",
            "url": "https://linking-dev.xendit.co/pali_e53e1ca6-3c09-4026-be2e-95ed3d4bb25b",
            "url_type": "WEB",
            "method": "GET"
          }
        ],
        "success_return_url": "https://www.xendit.co/successisthesumoffailures",
        "failure_return_url": "https://www.xendit.co/failureisthemotherofsuccess"
      },
      "api_version": "v1"
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Keterangan
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.plan.inactivated
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0.
    data
    opsional
    object Objek Rencana dengan status INACTIVE
    api_version
    opsional
    string Nilai versi ditetapkan sebagai v1

    Rencana - Ubah Rencana

    Rencana pembayaran berulang dapat diperbarui melalui API ini untuk mengisi perubahan pada siklus berulang yang baru dibuat. Jika perubahan perlu diterapkan pada siklus berulang yang telah dijadwalkan, sertakan parameter update-scheduled-cycle di header permintaan.

    Endpoint: Ubah Rencana Pembayaran Berulang

    PATCH https://api.xendit.co/recurring/plans/:id

    Parameter Request

    Contoh: Request Ubah Rencana Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f -X PATCH \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --header 'update-scheduled-cycle: TRUE' \
      --data '{
      "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
      "currency": "IDR",
      "amount": 100000,
      "payment_methods": [{
          "payment_method_id": "pm-239c16f4-866d-43e8-9341-7badafbc019f",
          "rank": 1
        }],
      "notification_config": {
        "recurring_created": ["WHATSAPP","EMAIL"],
        "recurring_succeeded": [],
        "recurring_failed": ["WHATSAPP","EMAIL"]
        "locale": "en"},
      "metadata": null
    }' \
    Parameter Path Tipe Keterangan
    id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    Parameter Header Tipe Keterangan
    update-scheduled-cycle
    opsional
    boolean Default = False. Ketika parameter ini disetel ke "True", Xendit akan memperbarui siklus berulang "SCHEDULED" dan siklus berulang yang baru dibuat dengan perubahan parameter yang diminta.
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    customer_id
    wajib
    string ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx
    currency
    wajib
    enum Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP
    amount
    wajib
    number Jumlah yang akan dibebankan oleh rencana pembayaran berulang kepada pengguna akhir. Siklus pembayaran berulang akan dihasilkan berdasarkan nilai ini. Jika parameter items digunakan, amount harus setara dengan jumlah net_unit_amount dikalikan dengan quantity dalam objek items
    Min - Rp 1000 (Indonesia) atau PHP 50 (Filipina)
    Maks - Bergantung pada masing-masing penyedia pembayaran
    payment_methods
    opsional
    array objek payment_method_id yang akan dicoba oleh rencana pembayaran berulang untuk melakukan pembayaran (upaya akan dilakukan sesuai dengan peringkat setiap objek dalam larik). Hanya satu pembayaran yang berhasil yang akan dilakukan

    Jika parameter ini tidak diteruskan, URL untuk melakukan penautan akun pembayaran akan dibuat untuk pengguna akhir
    Kunci Nilai
    payment_method_id
    wajib
    string ID untuk payment_method_id dihasilkan oleh Create Payment Method API
    rank
    wajib
    nomor Urutan metode pembayaran mana yang akan dicoba untuk instans siklus pembayaran. Nilai yang tersedia - 1 sampai 5
    type
    wajib
    string Jenis metode pembayaran. Nilai yang tersedia - EWALLET, DIRECT_DEBIT atau CARD
    notification_config
    opsional
    Objek Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
    Key Nilai
    recurring_created
    opsional
    array Tentukan melalui saluran mana Anda ingin memberi tahu pelanggan akhir saat Anda membuat rencana pembayaran berulang. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_succeeded
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir Anda saat siklus pembayaran berulang Anda berhasil diselesaikan. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    recurring_failed
    opsional
    array Tentukan saluran mana yang ingin Anda beri tahukan kepada pelanggan akhir saat siklus pembayaran berulang Anda gagal. Nilai yang didukung - ["WHATSAPP", "EMAIL"]
    locale
    opsional
    enum Default - "en". ISO 639-1: kode dua huruf untuk bahasa notifikasi yang dikirim ke pengguna akhir. Nilai yang didukung - en, id
    payment_link_for_failed_attempt
    opsional
    boolean Default = false. Menunjukkan apakah rencana harus menghasilkan tautan pembayaran untuk dikirim ke pelanggan akhir saat upaya siklus pertama gagal. Objek jadwal rencana harus memiliki total_retry minimal 1. notification_config.recurring_failed pada objek rencana menentukan saluran notifikasi pelanggan akhir untuk menerima pemberitahuan dengan URL tautan pembayaran. Anda juga akan menerima URL tautan pembayaran dalam callback recurring.cycle.retrying. Untuk informasi selengkapnya tentang tautan pembayaran, silahkan lihat bagian ini
    metadata
    opsional
    objek Objek informasi tambahan yang dapat digunakan pedagang. Pengguna menentukan properti dan nilai JSON. Anda dapat menentukan hingga 50 objek, dengan panjang nama objek hingga 40 karakter dan panjang nilai hingga 500 karakter
    description
    opsional
    string Deskripsi rencana berulang - Anda dapat menggunakan objek ini untuk mencantumkan item apa saja yang dibayar, atau apa pun pilihan Anda yang menjelaskan fungsi dari rencana pembayaran berulang. Nilai objek ini akan ditampilkan kepada pengguna akhir untuk UI penautan akun, email, atau whatsapp notifikasi.
    Min - 1 karakter
    Maks - 1000 karakter
    items
    opsional
    array Susunan objek yang mendeskripsikan produk/jasa
    Key Nilai
    type
    wajib
    string Jenis produk

    DIGITAL_PRODUCT, PHYSICAL_PRODUCT, DIGITAL_SERVICE, PHYSICAL_SERVICE,FEE,DISCOUNT
    name
    wajib
    string Nama item

    Format Khusus dan alfanumerik
    Panjang maks 255 karakter
    net_unit_amount
    wajib
    number Jumlah bersih yang akan dibebankan per unit, harap cantumkan jumlah negatif untuk DISCOUNT (mis. -1000000 )
    quantity
    wajib
    number Jumlah unit ini di keranjang

    Min 1
    url
    opsional
    string URL item

    Harus berupa HTTPS atau HTTP
    category
    opsional
    string Kategori pedagang untuk item

    Format Spesial dan alfanumerik
    Max length 255 karakter
    subcateory
    opsional
    string Subkategori pedagang untuk item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    description
    opsional
    string Deskripsi item

    Format Khusus dan alfanumerik
    Max length 255 karakter
    metadata
    opsional
    objek Objek tambahan yang dapat digunakan untuk atribut item tambahan

    Parameter Respons

    Respons sukses akan berisi satu Objek Rencana.

    Kode Error

    Contoh: Respons Error API Ubah Rencana Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu kolom permintaan yang wajib
    API_VALIDATION_ERROR
    400
    Setiap nilai rank untuk metode pembayaran harus unik. Harap periksa permintaan Anda untuk membatalkan peringkat.
    API_VALIDATION_ERROR
    400
    Nilai dalam larik failed_attempt_notifications tidak dapat digandakan atau lebih besar dari nilai total_retry atau nilai larik dihitung lebih besar dari total_retry
    API_VALIDATION_ERROR
    400
    Mata uang pembayaran yang diminta tidak didukung untuk saluran pembayaran ini. Lihat referensi atau dokumen API kami untuk memilih mata uang yang tersedia
    INVALID_PAYMENT_METHOD_ID
    400
    payment_method_id yang diberikan memiliki mata uang yang tidak cocok atau tidak "ACTIVE" karena telah kedaluwarsa/diputuskan/tautannya belum selesai. Coba lagi dengan payment_method_id
    yang valid
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    PAYMENT_METHOD_ID_NOT_FOUND
    404
    payment_method_id yang diberikan tidak ditemukan. Coba lagi dengan payment_method_id
    yang valid
    CUSTOMER_NOT_FOUND
    404
    customer_id tidak valid atau tidak ditemukan. Coba lagi dengan customer_id
    yang valid
    UNSUPPORTED_CONTENT_TYPE
    415
    Jenis konten yang diminta tidak didukung
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah

    Rencana - Nonaktifkan Rencana

    Rencana pembayaran berulang dapat dibuat tidak aktif melalui API ini. Ini akan menghentikan pembuatan siklus berulang baru dan membatalkan siklus SCHEULED yang ada.

    Endpoint: Nonaktifkan Rencana Pembayaran Berulang

    POST https://api.xendit.co/recurring/plans/:id/deactivate

    Parameter Permintaan

    Contoh: Nonaktifkan Permintaan Rencana Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/deactivate -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    id
    wajib
    string ID paket berulang yang dibuat oleh Xendit, dengan awalan repl-xxx

    Parameter Respons

    Respons sukses akan berisi satu Objek Rencana dengan status INACTIVE.

    Kode Error

    Contoh: Respons Kesalahan API Nonaktifkan Rencana Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }

    Rencana - Cek Rencana

    Ambil informasi tentang rencana pembayaran berulang yang dibuat melalui API ini.

    Endpoint: Dapatkan Rencana Pembayaran Berulang

    GET https://api.xendit.co/recurring/plans/:id/
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.

    Parameter Request

    Contoh: Request Dapatkan Rencana Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f -X GET \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \

    Parameter Respons

    Respons sukses akan berisi satu Objek Rencana.

    Kode Error

    Contoh: Respons Error API Dapatkan Rencana Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Rencana - Dapatkan Daftar Siklus

    Ambil informasi daftar siklus berulang yang dihasilkan dari rencana pembayaran berulang melalui API ini.

    Endpoint: Dapatkan Daftar Siklus untuk Satu Rencana Pembayaran Berulang

    GET https://api.xendit.co/recurring/plans/:id/cycles

    Parameter Request

    Contoh: Request Dapatkan Daftar Siklus untuk Satu Rencana Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/cycles -X GET \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
      "limit": 2,
      "after_id": "recy_239c16f4-866d-43e8-9341-7badafbc019f"
    }' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    Parameter Query Tipe Keterangan
    limit
    opsional
    angka Menunjukkan jumlah maksimum hasil yang akan ditampilkan sekaligus. Parameter ini opsional untuk disediakan oleh merchant dan memiliki nilai default 10 (dapat disesuaikan dengan sumber daya yang kami layani) saat Anda tidak memberikan nilai
    after_id
    opsional
    string ID item sebelumnya

    Parameter Respons

    Contoh: Respons Dapatkan Daftar Siklus untuk Satu Rencana Pembayaran Berulang

    {
      "data": [
        {
          "id": "recy-AO12308u120jda",
          "reference_id": "test_reference_id",
          "customer_id": "cust-uhdquwy18237y213",
          "recurring_action": "PAYMENT",
          "type": "SCHEDULED",
          "cycle_number": 2,
          "attempt_count": 2,
          "attempt_details": [
            {
              "attempt_number": 1,
              "created": "2020-04-20T16:23:52Z",
              "action_id": "ewc-asdaso213897821hdas",
              "status": "SUCCEEDED",
              "failure_code": null,
              "next_retry_timestamp": null
            },
            {
              "attempt_number": 1,
              "created": "2020-04-20T16:23:52Z",
              "action_id": "ewc-asdaso2138978trysecondmethod",
              "status": "FAILTED",
              "failure_code": "INSUFFICIENT_BALANCE",
              "next_retry_timestamp": "2020-04-20T16:23:52Z"
            }
          ],
          "status": "SUCCEEDED",
          "scheduled_timestamp": "2020-12-20T16:23:52Z",
          "created": "2020-11-20T16:23:52Z",
          "updated": "2020-11-20T16:23:52Z",
          "currency": "IDR",
          "amount": 200000,
          "metadata": null
        }
      ],
      "has_more": false
    }
    Parameter Body Tipe Keterangan
    data
    diperlukan
    array Larik Objek Siklus yang diminta berdasarkan parameter query
    has_more
    wajib
    boolean Parameter boolean yang menunjukkan apakah ada lebih banyak objek yang tersedia tetapi difilter berdasarkan batas parameter query

    Kode Error

    Contoh: Respons Error API Dapatkan Daftar Siklus untuk Satu Rencana Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Callback - Siklus

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Ketika pembayaran berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Payload Pembuatan Siklus

    Webhook pembuatan siklus adalah pemberitahuan untuk memberi tahu sistem Anda tentang siklus yang akan datang di masa mendatang. Webhook ini dikirim saat rencana pembayaran berulang telah berhasil diaktifkan atau saat siklus berulang yang akan datang telah melakukan percobaan pertamanya pada tindakan berulang (dari status SCHEDULED menjadi PENDING). Untuk kasus penggunaan umum, disarankan tetapi tidak wajib menangani webhook ini. Untuk langganan berbasis penggunaan, webhook ini harus ditangani.

    Detail lengkap webhook dapat ditemukan di sini

    Contoh: Payload Webhook Siklus

    {
      "created": "2022-10-01T12:37:08.251Z",
      "business_id": "62440e322008e87fb29c1fd0",
      "event": "recurring.cycle.created",
      "data": {
        "id": "recy-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "test_reference_id",
        "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "recurring_action": "PAYMENT",
        "type": "SCHEDULED",
        "cycle_number": 1,
        "attempt_count": 0,
        "attempt_details": [],
        "status": "SCHEDULED",
        "scheduled_timestamp": "2020-12-20T16:23:52Z",
        "created": "2020-11-20T16:23:52Z",
        "updated": "2020-11-20T16:23:52Z",
        "currency": "IDR",
        "amount": 13579
      },
      "api_version": "v1"
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Keterangan
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.created
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0.
    data
    opsional
    object Cycle Object dengan status SCHEDULED
    api_version
    opsional
    string Nilai versi ditetapkan sebagai v1

    Payload Siklus Percobaan Ulang

    Webhook siklus percobaan ulang adalah pemberitahuan untuk memberi tahu sistem Anda bahwa upaya tindakan berulang telah gagal dan siklus berulang akan mencoba melakukan tindakan berulang lagi. Webhook ini hanya akan terpicu jika logika coba lagi dikonfigurasi dalam rencana pembayaran berulang. Untuk kasus penggunaan umum, disarankan tetapi tidak wajib menangani webhook ini.

    Contoh: Payload Siklus Percobaan Ulang

    {
      "created": "2022-10-01T12:37:08.251Z",
      "business_id": "62440e322008e87fb29c1fd0",
      "event": "recurring.cycle.retrying",
      "data": {
        "id": "recy-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "test_reference_id",
        "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "recurring_action": "PAYMENT",
        "type": "SCHEDULED",
        "cycle_number": 1,
        "attempt_count": 1,
        "attempt_details": [
          {
            "attempt_number": 1,
            "created": "2020-04-21T16:23:52Z",
            "action_id": "ewc-239c16f4-866d-43e8-9341-7badafbc019f",
            "status": "FAILED",
            "Failure_code": "INSUFFICIENT_BALANCE",
            "next_retry_timestamp": "2020-04-24T16:23:52Z"
          }],
        "status": "RETRYING",
        "scheduled_timestamp": "2020-12-20T16:23:52Z",
        "created": "2020-11-20T16:23:52Z",
        "updated": "2020-11-20T16:23:52Z",
        "currency": "IDR",
        "amount": 13579
      },
      "api_version": "v1"
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Keterangan
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.retrying
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0.
    data
    opsional
    object Cycle Object dengan status RETRYING
    api_version
    opsional
    string Nilai versi ditetapkan sebagai v1

    Payload Siklus Gagal

    Webhook siklus gagal adalah pemberitahuan untuk memberi tahu sistem Anda bahwa mencoba tindakan pembayaran berulang dan semua percobaan ulang berikutnya telah gagal.

    Contoh: Payload Siklus Gagal

    {
      "created": "2022-10-01T12:37:08.251Z",
      "business_id": "62440e322008e87fb29c1fd0",
      "event": "recurring.cycle.failed",
      "data": {
        "id": "recy-239c16f4-866d-43e8-9341-7badafbc019f",
        "reference_id": "test_reference_id",
        "customer_id": "cust-239c16f4-866d-43e8-9341-7badafbc019f",
        "recurring_action": "PAYMENT",
        "type": "SCHEDULED",
        "cycle_number": 1,
        "attempt_count": 1,
        "attempt_details": [
          {
            "attempt_number": 1,
            "created": "2020-04-21T16:23:52Z",
            "action_id": "ewc-239c16f4-866d-43e8-9341-7badafbc019f",
            "status": "FAILED",
            "Failure_code": "INSUFFICIENT_BALANCE",
            "next_retry_timestamp": null
          }],
        "status": "FAILED",
        "scheduled_timestamp": "2020-12-20T16:23:52Z",
        "created": "2020-11-20T16:23:52Z",
        "updated": "2020-11-20T16:23:52Z",
        "currency": "IDR",
        "amount": 13579
      },
      "api_version": "v1"
    }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Parameter Body Tipe Keterangan
    event
    wajib
    string Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.failed
    business_id
    wajib
    string Business ID dari merchant
    created
    wajib
    string Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0.
    data
    opsional
    object Cycle Object dengan status FAILED
    api_version
    opsional
    string Nilai versi ditetapkan sebagai v1

    Siklus - Ubah Siklus

    Siklus pembayaran berulang dapat diperbarui melalui API ini. Untuk langganan berbasis penggunaan, Anda dapat menggunakan API ini untuk memperbarui jumlah untuk setiap instans penagihan tertentu.

    Endpoint: Ubah Siklus Pembayaran Berulang

    PATCH https://api.xendit.co/recurring/plans/:plan_id/cycles/:id

    Parameter Request

    Contoh: Ubah Siklus Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/cycles/recy-239c16f4-866d-43e8-9341-7badafbc019f -X PATCH \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
      "scheduled_timestamp": "2020-12-20T16:23:52Z",
      "currency": "IDR",
      "amount": 200000
    }' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    id
    wajib
    string ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx
    Parameter Body Tipe Keterangan
    schedule_timestamp
    opsional
    string Waktu ISO 8601 (mis. "2020-04-20T00:00:00Z" UTC+0) untuk upaya tindakan mendatang untuk siklus berulang - nilai diperbarui pada setiap percobaan ulang (jika ada). Tindakan akan dijalankan dalam waktu 24 jam dari waktu yang dijadwalkan dengan mempertimbangkan zona waktu.
    currency
    opsional
    enum Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP
    amount
    opsional
    angka Jumlah yang akan dibebankan oleh rencana pembayaran berulang kepada pengguna akhir. Siklus berulang akan dihasilkan berdasarkan nilai ini. Jika param item digunakan, jumlah harus setara dengan jumlah net_unit_amount dikalikan dengan jumlah dalam array item
    Min IDR - 1000
    Min PHP - 50
    jumlah maksimum tergantung pada penyedia pembayaran

    Parameter Respons

    Respons sukses akan berisi Objek Siklus.

    Kode Error

    Contoh: Respons Error API Ubah Siklus Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    INELIGIBLE_CYCLE_REQUEST
    403
    Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Siklus - Membatalkan Siklus

    Siklus pembayaran berulang dapat dibatalkan melalui API ini. Ini akan membuat siklus pembayaran berulang tidak memproses tindakan apa pun.

    Endpoint: Batalkan Siklus Berulang

    POST https://api.xendit.co/recurring/plans/:plan_id/cycles/:id/cancel

    Parameter Request

    Contoh: Request Batalkan Siklus Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/cycles/recy-239c16f4-866d-43e8-9341-7badafbc019f/cancel -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Deskripsi
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    id
    wajib
    string ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx

    Parameter Respons

    Respon yang berhasil akan berisi satu Objek Siklus dengan status CANCELLED.

    Kode Error

    Contoh: Respons Error API Batalkan Siklus Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    INELIGIBLE_CYCLE_REQUEST
    403
    Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui
    DATA_NOT_FOUND
    404
    plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Siklus - Picu Pembayaran Siklus

    API endpoint untuk Anda picu pembayaran manual pada suatu siklus tertentu. Lihat dokumentasi picu pembayaran untuk informasi lebih lanjut.

    Endpoint: Picu Pembayaran Siklus

    POST https://api.xendit.co/recurring/plans/:id/cycles/:id/force_attempt

    Parameter Request

    Contoh: Request Picu Pembayaran Siklus

    curl https://api.xendit.co/recurring/plans/repl_532as23lew2321id/cycles/recy_5832948hjkeqw12/force_attempt -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    id
    wajib
    string ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx

    Parameter Respons

    Mengembalikan Objek Siklus dengan kode status 200 dan status PENDING

    Contoh: Respons Picu Pembayaran Siklus

    {
      "id": "repl-AO12308u120jda",
      "reference_id": "test_reference_id",
      "customer_id": "cust-uhdquwy18237y213",
      "recurring_action": "PAYMENT",
      "type": "SCHEDULED",
      "cycle_number": 2,
      "attempt_count": 1,
      "attempt_details": [{
          "attempt_number": null,
          "created": "2020-04-20T16:23:52Z",
          "action_id": "ewc-asdaso213897821hdas",
          "status": "SUCCEEDED",
          "failure_code": null,
          "next_retry_timestamp": null
        },
        {
          "attempt_number": 1,
          "created": "2020-04-20T16:23:52Z",
          "action_id": "ewc-asdaso2138978trysecondmethod",
          "status": "FAILTED",
          "failure_code": "INSUFFICIENT_BALANCE",
          "next_retry_timestamp": "2020-04-20T16:23:52Z"
        }],
      "status": "PENDING",
      "scheduled_timestamp": "2020-12-20T16:23:52Z",
      "created": "2020-11-20T16:23:52Z",
      "updated": "2020-11-20T16:23:52Z",
      "currency": "IDR",
      "amount": 200000
    }
    

    Kode Error

    Contoh: Respons Error API Ubah Siklus Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    INELIGIBLE_CYCLE_REQUEST
    403
    Upaya picu yang diminta untuk siklus ini tidak dapat diproses. Hanya siklus dengan status SCHEDULED atau RETRYING yang memenuhi syarat untuk melakukan Picu Pembayaran.
    MAXIMUM_LIMIT_REACHED
    403
    Jumlah maksimum (5) upaya picu telah tercapai
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Siklus - Cek Siklus

    Ambil informasi tentang siklus berulang yang dihasilkan melalui API ini.

    Endpoint: Dapatkan Siklus Pembayaran Berulang

    GET https://api.xendit.co/recurring/plans/:id/cycles/:id

    Parameter Request

    Contoh: Request Dapatkan Siklus Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/cycles/recy-239c16f4-866d-43e8-9341-7badafbc019f -X GET \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    id
    wajib
    string ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx

    Parameter Respons

    Respons sukses akan berisi satu Objek Siklus.

    Kode Error

    Contoh: Respons Error API Cek Siklus Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Siklus - Simulasi Status

    (Hanya berfungsi dalam Mode Uji Coba) Untuk mengaktifkan pengujian untuk siklus berulang berikutnya, API ini membantu Anda mensimulasikan apakah tindakan berulang (mis. pembayaran) berhasil atau tidak. Harap pastikan bahwa Anda menggunakan kunci API developer untuk tujuan ini. Pembayaran Xendit menggunakan nomor tertentu dalam parameter amount untuk mensimulasikan status sukses/gagal. Harap ikuti dokumentasi kami untuk mensimulasikan kesalahan yang Anda perlukan.

    Endpoint: Simulasi Siklus Pembayaran Berulang

    POST https://api.xendit.co/recurring/plans/:plan_id/cycles/:id/simulate

    Parameter Request

    Contoh: Request Simulasi Siklus Pembayaran Berulang

    curl https://api.xendit.co/recurring/plans/repl-239c16f4-866d-43e8-9341-7badafbc019f/cycles/recy-239c16f4-866d-43e8-9341-7badafbc019f -X PATCH \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
      "amount": 200000
    }' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    plan_id
    wajib
    string ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx
    id
    wajib
    string ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx
    Parameter Body Tipe Keterangan
    amount
    wajib
    angka Jumlah yang akan disimulasikan

    Parameter Respons

    Respons sukses akan berisi satu Objek Siklus.

    Kode Error

    Contoh: Respons Error API Simulasi Siklus Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    INELIGIBLE_CYCLE_REQUEST
    403
    Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui
    DATA_NOT_FOUND
    404
    cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    Jadwal - Ubah Jadwal

    Jadwal pembayaran berulang dapat diperbarui melalui API ini untuk mengubah siklus pembayaran berulang yang baru dibuat. Jika perubahan perlu diterapkan pada siklus pembayaran berulang yang telah dijadwalkan, sertakan parameter update-scheduled-cycle di header request.

    Endpoint: Ubah Jadwal Pembayaran Berulang

    PATCH https://api.xendit.co/recurring/schedules/:id

    Parameter Request

    Contoh: Request Ubah Jadwal Pembayaran Berulang

    curl https://api.xendit.co/recurring/schedules/resc-239c16f4-866d-43e8-9341-7badafbc019f -X PATCH \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
        "interval" : "MONTH",
        "interval_count" : 1,
        "total_recurrence" : 12,
        "anchor_date" : "2020-11-20T16:23:52Z",
        "retry_interval" : "DAY",
        "retry_interval_count" : 5,
        "total_retry" : 5,
        "failed_attempt_notifications" : [2,4]
    }' \
    Parameter Path Tipe Keterangan
    id
    wajib
    string ID jadwal pembayaran berulang yang dibuat oleh Xendit, dengan awalan resc-xxx
    Parameter Header Tipe Keterangan
    update-scheduled-cycle
    opsional
    boolean Default = false. Ketika parameter ini disetel ke "True", Xendit akan memperbarui siklus berulang "SCHEDULED" dan siklus berulang yang baru dibuat dengan perubahan parameter yang diminta.
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Keterangan
    interval
    opsional
    enum Jenis interval antara siklus pembayaran berulang yang berurutan. Nilai yang didukung - DAY, WEEK, MONTH

    WEEK - hari dalam seminggu tempat anchor_date ditentukan (mis. anchor_date pada Rabu, siklus berikutnya adalah Rabu)
    MONTH - tanggal bulan di mana anchor_date ditentukan (anchor_date pada tanggal 25, siklus berikutnya akan dilakukan pada tanggal 25)
    interval_count
    opsional
    number Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, maka siklus berulang terjadi setiap 3 bulan)
    total_recurrence
    opsional
    number Default = NULL Total berapa kali pengguna akhir akan ditagih. Instance tagihan langsung tidak dihitung ke total_recurrence. Jika parameter tidak digunakan, rencana pembayaran berulang akan berjalan tanpa batas waktu
    anchor_date
    opsional
    string Default = tanggal pembuatan jadwal (aksi sama di tanggal yang sama). Waktu dalam ISO 8601 ("2020-11-20T16:23:52+07:00"). Waktu yang digunakan untuk menentukan kapan rencana pembayaran berulang dimulai. Tanggal, hari dalam seminggu atau tanggal dalam sebulan akan digunakan untuk menginisialisasi siklus pembayaran berulang (waktu mundur masih berfungsi). Jika zona waktu masuk, pembayaran berulang akan dijalankan berdasarkan zona waktu, jika tidak, UTC 0 akan digunakan.

    Nilai yang didukung - waktu antara tanggal 1 hingga 28 setiap bulan

    Jika tidak ada nilai anchor_date yang diteruskan dan tanggal pembuatan jadwal jatuh pada 29/30/31, tanggal anchor_date akan ditetapkan secara default ke tanggal 1 bulan depan
    retry_interval
    opsional
    enum Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY
    retry_interval_count
    opsional
    number Jumlah unit retry_interval di antara percobaan ulang berturut-turut (mis. retry_interval = DAY, retry_interval_count = 3, lalu pengulangan siklus berulang 3 hari setelah upaya yang gagal)
    total_retry
    opsional
    angka Berapa kali Anda akan mencoba kembali siklus berulang yang gagal. Jika tidak ada nilai yang diteruskan ke total_retry, ini akan menjadi null secara default dan tidak ada percobaan ulang yang akan dipicu
    Min - 1
    Maks - 10
    failed_attempt_notifications
    opsional
    string Tentukan upaya percobaan ulang mana yang apabila gagal maka notifikasi dikirimkan kepada pengguna akhir. Jumlah nilai array tidak boleh lebih besar dari angka total_retry atau digandakan. 1 dalam param ini mengacu pada percobaan ulang pertama.

    Parameter Respons

    Respons sukses akan berisi satu Objek Jadwal.

    Kode Error

    Contoh: Respons Error API Ubah Jadwal Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu kolom permintaan yang wajib
    API_VALIDATION_ERROR
    400
    Setiap nilai rank untuk metode pembayaran harus unik. Harap periksa permintaan Anda untuk membatalkan peringkat.
    API_VALIDATION_ERROR
    400
    Nilai dalam larik failed_attempt_notifications tidak dapat digandakan atau lebih besar dari nilai total_retry atau nilai larik dihitung lebih besar dari total_retry
    API_VALIDATION_ERROR
    400
    anchor_date tidak menerima tanggal dari 29 hingga 31. Harap periksa request Anda untuk menentukan semua nilai
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    DATA_NOT_FOUND
    404
    schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    UNSUPPORTED_CONTENT_TYPE
    415
    Jenis konten yang diminta tidak didukung
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah

    Jadwal - Cek Jadwal

    Ambil informasi tentang jadwal pembayaran berulang yang dibuat melalui API ini.

    Endpoint: Dapatkan Jadwal Pembayaran Berulang

    GET https://api.xendit.co/recurring/schedules/:id

    Parameter Request

    Contoh: Request Cek Jadwal Pembayaran Berulang

    curl https://api.xendit.co/recurring/schedules/resc-239c16f4-866d-43e8-9341-7badafbc019f -X GET \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Path Tipe Keterangan
    id
    wajib
    string ID jadwal pembayaran berulang yang dibuat oleh Xendit, dengan awalan resc-xxx

    Parameter Respons

    Respons sukses akan berisi satu Objek Jadwal.

    Kode Error

    Contoh: Respons Error API Cek Jadwal Pembayaran Berulang

    {
        "error_code": "API_VALIDATION_ERROR",
        "message": "There is an error with the format submitted to the server."
    }
    Kode Error Keterangan
    API_VALIDATION_ERROR
    400
    Ada input yang tidak valid di salah satu objek permintaan yang wajib
    INVALID_API_KEY
    401
    Format kunci API tidak valid
    UNSUPPORTED_CONTENT_TYPE
    403
    Jenis konten yang diminta tidak didukung
    DATA_NOT_FOUND
    404
    schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi.
    SERVER_ERROR
    500
    Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan menyelesaikan masalah

    xenPlatform

    Deskripsi

    xenPlatform adalah solusi untuk penyedia bisnis dengan mitra pihak ketiga. Penyedia bisnis menghadapi tantangan pembayaran yang rumit mulai dari mengintegrasikan partner, memindahkan uang, mengiriman uang, dan tagihan.

    Dengan xenPlatform, Anda bisa menerima pendaftaran, membuat akun untuk mitra bisnis, melakukan transaksi atas nama mitra, membagi pembayaran, mengawasi transaksi, dan menagihkan biaya pada mitra.

    Pendahuluan

    Ketika xenPlatform telah diaktifkan di akun anda, Anda bisa menggunakan Account API untuk membuat sub-account yang dihubungkan dengan master account.

    Setelah itu tambahkan for-user-id pada bagian header API Xendit standar untuk membuat transaksi pada akun tersebut.

    Akun dan transaksinya akan muncul pada tab xenPlatform pada dashboard Xendit Anda.

    Buat Akun

    API Buat Akun memungkinkan Anda untuk membuat Akun bagi Partner yang terhubung dengan Platform Anda. Setelah sebuah Akun terbuat, Anda dapat menerima transaksi atas nama akun tersebut. Selain itu, Anda juga dapat mengarahkan pembayaran untuk/dari Akun via API Transfer atau API Platform fee.

    Terdapat dua jenis Akun yang dapat dibuat: MANAGED, OWNED. Kunjungi dokumentasi kami untuk melihat rekomendasi tipe Akun mana yang cocok dengan model bisnis Anda

    Akun MANAGED memberikan Partner Anda akses penuh ke Akun Xendit yang dimana Platform Anda tetap dapat melakukan transaksi untuk partner tersebut. Partner Anda harus melakukan registrasi terhadap Akun mereka melalui sebuah email undangan yang dikirimkan. Kemudian, Partner Anda dapat login ke Dasbor Xendit tersebut untuk menyelesaikan proses onboarding.

    Akun OWNED adalah akun yang tidak diketahui oleh Partner dan seluruhnya di kontrol oleh Anda sebagai Platform. Anda dapat melakukan transaksi atas nama akun OWNED tersebut setelah akun tersebut berhasil terbuat dan metode pembayaran sudah teraktifkan mengikuti setting pada Platform Anda.

    Simpan nilai id akun yang kami kembalikan untuk membuat transaksi untuk akun tersebut di masa yang akan datang.

    Buat 2 panggilan API untuk menerima pembayaran atas nama Partner Anda:

    1. Buat Akun (langkah ini)
    2. Buat sebuah transaksi pembayaran dan penanganan terkait Callback

    Catatan: Jika terdapat metode pembayaran yang baru saja aktif dan ada perubahan Callback URL pada level akun Platform maka tidak dapat tersync untuk Akun OWNED yang terbuat sebelum adanya perubahan. Kami merekomendasikan Anda untuk mengaktivasi metode pembayaran yang Anda butuhkan terlebih dahulu dan pasang Callback URL pada dasbor Platform sebelum melakukan pembuatan Akun OWNED

    Memakai Set Callback URL API, atau jika perubahan tidak bisa dihindarkan, hubungi kami untuk membantu sync perubahan tersebut.

    Versi

    Anda saat ini sedang melihat versi terbaru dari API Akun kami. API versi ini adalah asynchronous untuk meningkatkan kinerja dan skalabilitas. Kami juga menambahkan izin akses API untuk versi ini. Jika Anda menggunakan API key yang sudah pernah dibuat sebelumnya, silakan edit izin akses API key tersebut di halaman Pengaturan.

    Diwajibkan untuk Anda menunggu Callback account.created sebelum mencoba untuk membuat transaksi. Pasang sebuah Callback URL pada dasbor Anda untuk menerima Callback Account Updated dan mengetahui kapan pembayaran dapat dibuat untuk Akun Anda.

    Endpoint: Buat Akun

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

    Parameter Request

    Example: Buat Akun

    curl --request POST \
      --url https://api.xendit.co/v2/accounts \
      --header 'Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==' \
      --header 'Content-Type: application/json' \
      --data '{"email":"angie@pinkpanther.com","type":"OWNED","public_profile":{"business_name":"Angie lemonade stand"}}'
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => "https://api.xendit.co/v2/accounts",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "{\"email\":\"angie@pinkpanther.com\",\"type\":\"OWNED\",\"public_profile\":{\"business_name\":\"Angie lemonade stand\"}}",
      CURLOPT_HTTPHEADER => [
        "Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==",
        "Content-Type: application/json"
      ],
    ]);
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    import http.client
    
    conn = http.client.HTTPSConnection("api.xendit.co")
    
    payload = "{\"email\":\"angie@pinkpanther.com\",\"type\":\"OWNED\",\"public_profile\":{\"business_name\":\"Angie lemonade stand\"}}"
    
    headers = {
        'Content-Type': "application/json",
        'Authorization': "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og=="
        }
    
    conn.request("POST", "/v2/accounts", payload, headers)
    
    res = conn.getresponse()
    data = res.read()
    
    print(data.decode("utf-8"))
    Parameter Tipe Deskripsi
    email
    required
    string Email penanda untuk akun anda

    Panjang minimum 1 karakter
    Panjang maksimum Tidak ada maksimum karakter
    type
    required
    string Jenis akun yang anda buat

    Nilai yang tersedia: MANAGED, OWNED
    public_profile
    di perlukan untuk OWNED, yang lainnya optional
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    business_name
    di perlukan untuk OWNED, yang lainnya optional

    Panjang minimum 1 karakter
    Panjang maksimum 128 karakter
    string Nama bisnis

    Parameter Respon

    Example: Respon Buat Akun

    {
      "id": "5cafeb170a2b18519b1b8761",
      "created": "2021-01-01T10:00:00Z",
      "updated": "2021-01-01T10:00:00Z",
      "type": "OWNED",
      "email": "angie@pinkpanther.com",
      "public_profile": {
        "business_name": "Angie lemonade stand"
      },
      "status": "LIVE"
    }
    Parameter Tipe Deskripsi
    id
    required
    string id dari akun yang dibuat, gunakan ini di header for-user-id untuk membuat transaksi atas nama Partner Anda.
    created
    required
    string Tanda waktu ketika akun dibuat

    Zona Waktu: GMT+0
    updated
    required
    string Tanda waktu ketika akun diupdate

    Zona Waktu: GMT+0
    type
    required
    string Jenis akun yang dibuat

    Nilai yang tersedia: MANAGED, OWNED
    email
    required
    string Email penanda untuk akun yang dibuat
    public_profile
    required
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    country
    required
    string Negara pendirian untuk bisnis atau negara tempat tinggal untuk individu (berdasarkan ISO 3166-1 Alpha-2)

    Nilai yang tersedia: ID, PH

    Default: Negara pendirian Anda
    status
    required
    string Status pembuatan Akun

    Nilai yang tersedia: INVITED, REGISTERED, AWAITING_DOCS, LIVE

    Pelajari apa saja arti status pada dokumentasi kami

    Cek Akun dengan ID

    Gunakan endpoint Cek Akun dengan ID untuk mendapatkan objek akun yang Anda butuhkan.

    Endpoint: Get Account

    GET https://api.xendit.co/v2/accounts/{id}

    Example: Get Account

    curl --request GET \
      --url https://api.xendit.co/v2/accounts/5cafeb170a2b18519b1b8761 \
      --header 'Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og=='
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => "https://api.xendit.co/v2/accounts/5cafeb170a2b18519b1b8761",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => [
        "Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og=="
      ],
    ]);
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    import http.client
    
    conn = http.client.HTTPSConnection("api.xendit.co")
    
    headers = { 'Authorization': "Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" }
    
    conn.request("GET", "/v2/accounts/5cafeb170a2b18519b1b8761", headers=headers)
    
    res = conn.getresponse()
    data = res.read()
    
    print(data.decode("utf-8"))

    Path Parameters

    Parameter Tipe Deskripsi
    id
    required
    string id dari Akun yang dibuat.

    Response Parameters

    Example: Create Account Response

    {
      "id": "5cafeb170a2b18519b1b8761",
      "created": "2021-01-01T10:00:00Z",
      "updated": "2021-01-01T10:00:00Z",
      "type": "OWNED",
      "email": "angie@pinkpanther.com",
      "public_profile": {
        "business_name": "Angie lemonade stand"
      },
      "status": "LIVE"
    }
    Parameter Tipe Deskripsi
    id
    required
    string id dari akun yang dibuat, gunakan ini di header for-user-id untuk membuat transaksi atas nama Partner Anda.
    created
    required
    string Tanda waktu ketika akun dibuat

    Zona Waktu: GMT+0
    updated
    required
    string Tanda waktu ketika akun diupdate

    Zona Waktu: GMT+0
    type
    required
    string Jenis akun yang dibuat

    Nilai yang tersedia: MANAGED, OWNED
    email
    required
    string Email penanda untuk akun yang dibuat
    public_profile
    required
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    country
    required
    string Negara pendirian untuk bisnis atau negara tempat tinggal untuk individu (berdasarkan ISO 3166-1 Alpha-2)

    Nilai yang tersedia: ID, PH


    Default: Negara pendirian Anda
    status
    required
    string Status pembuatan Akun

    Nilai yang tersedia: INVITED, REGISTERED, AWAITING_DOCS, LIVE, SUSPENDED

    Mendapatkan daftar akun

    Endpoint: List Accounts

    GET https://api.xendit.co/v2/accounts

    Gunakan endpoint ini untuk mendapatkan informasi mengenai seluruh sub akun Anda. Anda juga bisa mendapatkan informasi atas sub akun tertentu dengan menggunakan filter email, tanggal pembuatan sub akun, tipe sub akun, nama sub akun, ataupun status. Hasil akan diurutkan menggunakan paginasi berdasarkan tanggal pembuatan sub akun.

    Request Parameters

    Example List Transactions Request

    curl --location --request GET 'https://api.xendit.co/v2/accounts' -X POST \
    --user xnd_development_ksdjimLskjdwuasndjjwas \
    --header Content-Type: application/json' \
    <?php
    
    $url = "https://api.xendit.co/v2/accounts";
    
    $payload = array();
    
    $headers = array(
      'Content-Type: application/json',
      'Authorization: Basic xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg=='
    );
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    import requests
    
    url = "https://api.xendit.co/v2/accounts"
    
    payload={}
    headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Basic xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg=='
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    url := "https://api.xendit.co/v2/accounts"
    
        payload := strings.NewReader("")
        req, _ := http.NewRequest("GET", url, payload)
    
        req.Header.Add("Content-Type", "application/json")
        req.Header.Add("Authorization", "Basic xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==")
    
        res, _ := http.DefaultClient.Do(req)
    
        defer res.Body.Close()
        body, _ := ioutil.ReadAll(res.Body)
    Query Parameter Type Description
    email
    optional
    array of strings Email penanda untuk akun yang dibuat. Apabila tidak dicantumkan, seluruh Akun akan dikembalikan di respons.

    status
    optional
    array of strings Status pembuatan Akun. Apabila tidak dicantumkan, seluruh tipe status akan dikembalikan di respons.

    Nilai yang tersedia: INVITED, REGISTERED, AWAITING_DOCS, LIVE, SUSPENDED
    public_profile.business_name
    optional
    string Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll) Apabila tidak dicantumkan, seluruh Akun akan dikembalikan di respons.

    type
    optional
    string Jenis akun yang dibuat. Jika tidak dicantumkan di filter, seluruh tipe Akun akan dikembalikan di respons.

    Nilai yang tersedia:
    OWNED,MANAGED.
    created[gte]
    optional
    string (ISO 8601) Batas awal waktu transaksi berdasakan kapan transaksi itu dibuat. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    created[lte]
    optional
    string (ISO 8601) Batas akhir waktu transaksi berdasakan kapan transaksi itu dibuat. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    updated[lte]
    optional
    string (ISO 8601) Batas akhir waktu transaksi berdasakan kapan transaksi itu diperbarui. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    updated[gte]
    optional
    string (ISO 8601) Batas awal waktu transaksi berdasakan kapan transaksi itu diperbarui. Jika tidak ditentukan, transaksi dari semua rentang waktu akan dikembalikan.
    limit
    optional

    default: 10
    number Batas dari jumlah transaksi yang dikembalikan untuk tiap request. Batas berada dalam rentang 1 and 50.
    after_id
    optional
    string Batas id dari transaksi sebelumnya. Gunakan ini bersama links pada respon untuk keperluan paginasi.
    before_id
    optional
    string Batas id dari transaksi setelahnya.

    Response Parameters

    Endpoint ini akan mengembalikan data berupa array of strings sebagai berikut:

    Example List Transactions Response

    {
        "data": [
            {
                "id": "623ace8270bbddf93816b3a1",
                "created": "2022-02-10T07:13:19.602Z",
                "updated": "2022-02-10T07:13:22.193Z",
                "email": "sample_email@sample.com",
                "type": "OWNED",
                "public_profile": {
                    "business_name": "Sample OWNED Business"
                },
                "country": "ID",
                "status": "LIVE"
            },
            {
                "id": "623ace8270bbddf93816b3g1",
                "created": "2022-03-23T07:38:42.166Z",
                "updated": "2022-03-23T07:39:55.440Z",
                "email": "sample_email2@sample.com",
                "type": "MANAGED",
                "public_profile": {
                    "business_name": "Sample MANAGED Business"
                },
                "country": "ID",
                "status": "REGISTERED"
            }
        ],
        "has_more": true,
        "links": [
            {
                "href": "/v2/accounts?after_id=623ace8270bbddf93816b3g1",
                "rel": "next",
                "method": "GET"
            }
        ]
    }
    Parameter Type Description
    id
    required
    string id dari akun yang dibuat, gunakan ini di header for-user-id untuk membuat transaksi atas nama Partner Anda.
    created
    required
    string Tanda waktu ketika akun dibuat

    Zona Waktu: GMT+0
    updated
    required
    string Tanda waktu ketika akun diupdate

    Zona Waktu: GMT+0
    type
    required
    string Jenis akun yang dibuat

    Nilai yang tersedia: MANAGED, OWNED
    email
    required
    string Email penanda untuk akun yang dibuat
    public_profile
    required
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    country
    required
    string Negara pendirian untuk bisnis atau negara tempat tinggal untuk individu (berdasarkan ISO 3166-1 Alpha-2)

    Nilai yang tersedia: ID, PH


    Default: Negara pendirian Anda
    status
    required
    string Status pembuatan Akun

    Nilai yang tersedia: INVITED, REGISTERED, AWAITING_DOCS, LIVE, SUSPENDED

    Error Codes

    See other common errors here.

    Update Akun

    Gunakan endpoint Update Account untuk melakukan perubahan nama dan email bisnis. Saat ini, fitur ini hanya berlaku untuk sub-akun OWNED

    Version

    Anda saat ini sedang melihat versi terbaru dari API Update Akun kami. Kami telah membuat beberapa perubahan pada body request dan respon. Kami juga menambahkan izin akses API untuk versi ini. Jika Anda menggunakan API key yang sudah pernah dibuat sebelumnya, silakan edit izin akses API key tersebut di halaman Pengaturan.

    Endpoint: Update Akun

    PATCH https://api.xendit.co/v2/accounts/{id}

    Example: Update Akun

    curl https://api.xendit.co/v2/accounts/{id} -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -d $'{"email":"angie@pinkpanther.com","public_profile":{"business_name":"Angie\'s lemonade stand"}}'
      <?php
          $url = 'https://api.xendit.co/v2/accounts/{id}';
          $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==';
          $headers = [];
          $headers[] = 'Content-Type: application/json';
          $data = [
              'email' => 'angie@pinkpanther.com',
              'public_profile' => [
                'business_name' => 'Angie\'s lemonade stand'
              ]
          ];
          $curl = curl_init();
          $payload = json_encode($data);
          curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
          curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
          $result = curl_exec($curl);
          echo $result;

    Parameter Path

    Parameter Path Tipe Deskripsi
    id
    required
    string id dari Akun yang dibuat, gunakan ini di header for-user-id untuk membuat transaksi atas nama merchant Anda.

    Parameter Request

    Parameter Request Tipe Deskripsi
    email
    required
    string Email penanda untuk akun anda

    Panjang minimum 1 karakter
    Panjang maksimum Tidak ada maksimum karakter
    public_profile
    di perlukan untuk OWNED, yang lainnya optional
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    business_name
    di perlukan untuk OWNED, yang lainnya optional


    Panjang minimum 1 karakter
    Panjang maksimum 128 karakter
    string Nama bisnis

    Parameter Respon

    Example: Respon Update Akun

    {
      "id": "5cafeb170a2b18519b1b8761",
      "created": "2021-01-01T10:00:00Z",
      "updated": "2021-01-01T10:00:00Z",
      "type": "OWNED",
      "email": "angie@pinkpanther.com",
      "public_profile": {
        "business_name": "Angie lemonade stand"
      },
      "status": "LIVE"
    }
    Parameter Tipe Deskripsi
    id
    required
    string id dari Akun yang dibuat, gunakan ini di header for-user-id untuk membuat transaksi atas nama Partner Anda.
    created
    required
    string Tanda waktu ketika akun dibuat

    Zona Waktu: GMT+0
    updated
    required
    string Tanda waktu ketika akun diupdate

    Zona Waktu: GMT+0
    type
    required
    string Jenis akun yang dibuat

    Nilai yang tersedia: MANAGED, OWNED
    email
    required
    string Email penanda untuk akun yang dibuat
    public_profile
    required
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    country
    required
    string Negara pendirian untuk bisnis atau negara tempat tinggal untuk individu (berdasarkan ISO 3166-1 Alpha-2)

    Nilai yang tersedia: ID, PH

    Default: Negara pendirian Anda
    status
    required
    string Status pembuatan Akun

    Nilai yang tersedia: INVITED, REGISTERED, AWAITING_DOCS, LIVE

    Pelajari apa saja arti status pada dokumentasi kami

    Transfer Objek

    Objek yang terbentuk saat melakukan permintaan Transfer

    Contoh Transfer Objek

    {
        "created": "2020-01-01T08:51:44.484Z",
        "transfer_id": "60b9d810-d9a3-456c-abbf-2786ec7a9651",
        "reference": "transfer001",
        "source_user_id": "54afeb170a2b18519b1b8768",
        "destination_user_id": "5cafeb170a2b1851246b8768",
        "status": "SUCCESSFUL",
        "amount": 10000
    }
    Parameter Tipe Deskripsi
    created
    required
    string Titik waktu dimana Transfer dibuat

    Zona Waktu: GMT+0
    transfer_id
    required
    string Sebuah referensi unik untuk Transfer ini yang dihasilkan oleh sistem Xendit
    reference
    required
    string Sebuah referensi unik untuk Transfer ini yang Anda tentukan ketika permintaan dibuat
    source_user_id
    required
    string Sumber dari transfer. Ini adalah user_id dari master atau sub-account Anda
    destination_user_id
    required
    string Tujuan dari transfer. Ini adalah user_id dari master atau sub-account Anda
    status
    required
    string Status dari Transfer

    Nilai yang tersedia: SUCCESSFUL, PENDING, FAILED
    amount
    required
    number Nominal yang telah di transfer

    Transfers

    Transfer API memungkinkan Anda untuk transfer saldo: i) dari sub-akun ke akun master dan sebaliknya, ii) antar sub-akun. Gunakan ini untuk mengatur, atau membagi pembayaran dari platform Anda dan sub-account dalam lingkungan ekosistem Xendit.

    Kunjungi dashbor Xenplatform anda untuk melihat user_id dari akun dan sub-account Anda.

    Endpoint: Create Transfer

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

    Parameter Request

    Example: Create Transfer

    curl https://api.xendit.co/accounts -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d reference=transfer001 \
       -d amount=10000 \
       -d source_user_id=54afeb170a2b18519b1b8768 \
       -d destination_user_id=5cafeb170a2b1851246b8768 \
      <?php
          $url = 'https://api.xendit.co/transfers';
          $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
          $headers = [];
          $headers[] = 'Content-Type: application/json';
          $data = [
              'reference' => 'transfer001',
              'amount' => 10000,
              'source_user_id' => '54afeb170a2b18519b1b8768',
              'destination_user_id' => '5cafeb170a2b1851246b8768'
          ];
    
          $curl = curl_init();
    
          $payload = json_encode($data);
          curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
          curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_setopt($curl, CURLOPT_POST, true);
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
          $result = curl_exec($curl);
          echo $result;
    from xendit import Xendit
    
    api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
    xendit_instance = Xendit(api_key=api_key)
    XenPlatform = xendit_instance.XenPlatform
    
    xenplatform_transfers = XenPlatform.transfers(
        reference="transfer001",
        amount=10000,
        source_user_id="54afeb170a2b18519b1b8768",
        destination_user_id="5cafeb170a2b1851246b8768",
    )
    print(xenplatform_transfers)
    Parameter Body Tipe Deskripsi
    reference
    required
    string Sebuah referensi unik untuk Transfer ini. Gunakan ini untuk rekonsiliasi transfer antar akun master dan sub-account.
    amount
    required
    number Nominal yang Anda ingin transfer. Mata uang IDR tidak dapat memiliki desimal, sedangkan PHP dapat memiliki 2 desimal
    source_user_id
    required
    string Saldo akun yang Anda ingin jadikan sebagai sumber transfer. Ini bisa berasal dari platform Anda atau sub-account user_id.
    destination_user_id
    required
    string Saldo akun yang Anda ingin jadikan sebagai tujuan transfer. Ini bisa berasal dari platform Anda atau sub-account user_id.

    Parameter Respon

    Example: Transfers Response

    {
        "created": "2020-01-01T08:51:44.484Z",
        "transfer_id": "60b9d810-d9a3-456c-abbf-2786ec7a9651",
        "reference": "transfer001",
        "source_user_id": "54afeb170a2b18519b1b8768",
        "destination_user_id": "5cafeb170a2b1851246b8768",
        "status": "SUCCESSFUL",
        "amount": 10000
    }
    Parameter Tipe Deskripsi
    created
    required
    string Titik waktu dimana Transfer dibuat

    Zona Waktu: GMT+0
    transfer_id
    required
    string Sebuah referensi unik untuk Transfer ini yang dihasilkan oleh sistem Xendit
    reference
    required
    string Sebuah referensi unik untuk Transfer ini yang Anda tentukan ketika permintaan dibuat
    source_user_id
    required
    string Sumber dari transfer. Ini adalah user_id dari master atau sub-account Anda
    destination_user_id
    required
    string Tujuan dari transfer. Ini adalah user_id dari master atau sub-account Anda
    status
    required
    string Status dari Transfer

    Nilai yang tersedia: SUCCESSFUL, PENDING, FAILED
    amount
    required
    string Nominal yang telah di transfer

    Kode Error

    Error Code Description
    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.
    INVALID_SOURCE_OR_DESTINATION_ERROR
    400
    Source atau destination ID akun tidak ditemukan. Mohon gunakan business ID yang valid dan tersedia dalam akun xenPlatform Anda.
    INSUFFICIENT_BALANCE
    400
    Jumlah saldo dari akun Anda tidak mencukupi.
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    API_KEY_ENVIRONMENT_NOT_MATCH
    403
    Gunakan LIVE API key Anda saat melakukan transfers antara akun LIVE, atau gunakan TEST API key Anda saat melakukan transfers antara akun TEST.
    DUPLICATE_REFERENCE
    403
    Referensi parameter harus unik.
    XEN_PLATFORM_SUB_ACCOUNT_NOT_LIVE403 Source atau destination ID akun belum memiliki status live. Mohon gunakan akun live untuk membuat transfers.
    TRANSFER_IN_PROGRESS
    425
    Error terjadi ketika Transfer dengan Requester ID & Reference yang sama masih diproses
    MISMATCH_PAYLOAD_FOR_REFERENCE
    400
    Reference ini telah digunakan di transfer lain. Apabila Anda ingin melakukan retry pada transfer tersebut, mohon gunakan payload yang digunakan pada request awal.
    INVALID_AMOUNT
    400
    Transfer amount harus melebihi 0, Transfer amount dengan kurs IDR harus tidak memiliki desimal, Transfer dengan kurs PHP hanya dapat memiliki 2 poin desimal.

    Cek Transfer dengan Referensi

    Endpoint: Mendapatkan Transfer dengan Referensi

    GET https://api.xendit.co/transfers/reference={reference}

    Endpoint ini digunakan untuk query pengecekan status transaksi transfer.

    Contoh Permintaan Mendapatkan Disbursement dengan ID

    curl https://api.xendit.co/transfers/reference=Monthly_transfers_123 -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    Path Parameter Type Description
    reference
    required
    string referensi dari Transfer yang ingin dicek
    Referensi harus sesuai dengan data referensi yang dimasukkan saat melakukan Transfer.

    Respon Cek Disbursement dengan ID

    Respon Cek Disbursement dengan ID

    {
      "created": "2020-11-30T02:47:53.061Z",
      "transfer_id": "bd1cc56b-ce7f-4ad7-8901-3eaa689e90eb",
      "source_user_id":"5cafeb170a2b18519b1b8768",
      "destination_user_id":"5f8d0c0603ffe06b7d4d9fcf",
      "status": "SUCCESSFUL",
      "amount": 90000,
      "reference": "Monthly_Transfers_1234"
    }

    Mengembalikan Transfer objek dengan status 200

    Kesalahan Cek Transfer dengan referensi

    Kode Kesalahan Deskripsi
    INVALID_API_KEY_ERROR
    401
    API key tidak memiliki izin untuk mengakses endpoint ini, butuh akses xenPlatform.
    DATA_NOT_FOUND
    404
    Transfer tidak ditemukan, referensi yang digunakan tidak valid.

    Buat Split Rule

    Fee Rule Object mendefinisikan bagaimana pembayaran yang diterima untuk sebuah sub-akun di alokasikan oleh xenPlatform. Masukkan fee_rule_id yang tertera pada response yang dikembalikan di endpoint yang didukung - Invoices, Kartu Kredit, Virtual Accounts, eWallets, QR Codes dan Direct Debit - untuk melakukan pemotongan Platform fee atau menyalurkan sebagian pembayaran ke Akun lain ketika pembayaran tersebut telah settle.

    Versi

    Anda saat ini sedang melihat versi terbaru dari API Akun kami. Kami juga menambahkan izin akses API untuk versi ini. Jika Anda menggunakan API key yang sudah pernah dibuat sebelumnya, silakan edit izin akses API key tersebut di halaman Pengaturan.

    Klik disini untuk melihat versi yang lama.

    Endpoint: Buat Split Rule

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

    Example: Create Split Rule

    curl -- request POST \
       --url https://api.xendit.co/split_rules \
       --header 'Authorization: Basic xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:' \
       --header 'Content-Type: application/json' \
       --data-raw '{
        "name": "20210908 Test",
        "description": "Platform fee and Delivery Fee for Marketplace",
        "routes": [{
          "flat_amount": 3000,
          "currency": "IDR"
          "destination_account_id":   "5f8d0c0603ffe06b7d4d9fcf"}], 
        [{
         "percent_amount": "5",
          "currency": "IDR"
          "destination_account_id":   "5cafeb170a2b18519b1b8768"
        }]
    
    }'
    '
    

    Parameter Request

    Parameter Badan Tipe Deskripsi
    name
    required
    string Nama untuk identifikasi split rule. Tidak perlu unik. Biasanya berdasarkan tipe transaksi dan/atau sub-merchant

    Contoh: “standard_platform_fee”, “commission”
    description
    optional
    string Deskripsi untuk identifikasi fee rule

    Contoh: “Biaya yang dipotong sebagai biaya asuransi agen di Jawa”
    routes
    required
    array Array of object yang mendefinisikan bagaimana platform ingin mengalokasikan biaya dan kepada akun yang mana. Setiap object Route setara dengan sekali alokasi biaya dari konsumen akhir ke sebuah akun tujuan

    Catatan: Saat ini, Anda hanya dapat memasukkan satu object Route di parameter Route
    flat_amount
    conditional
    string Nilai nominal yang akan digunakan untuk dipecah ke Akun destinasi melalui Split Rule dalam bentuk flat.

    Tidak perlu diisi jika tidak diperlukan. Wajib diisi jika percent_amount tidak diisi.

    Harus berupa bilangan positif.
    percent_amount
    conditional
    number Nominal split berdasarkan angka persen.

    Tidak perlu diisi jika tidak diperlukan. Wajib diisi jika flat_amount tidak diisi.

    Harus berupa bilangan positif.

    Nominal persen harus antara 0 dan 100

    Nominal persen dibulatkan ke unit moneter terdekat (Contoh: 0.50 IDR akan dibulatkan ke 1 IDR; 0.49 IDR akan dibulatkan ke 0 IDR)
    currency
    required
    string Kode mata uang ISO 4217

    Catatan: Akan mengembalikan sebuah error apabila mata uang tidak cocok dengan mata uang transaksi/akun

    Contoh: IDR;PHP;THB;MYR;VND
    destination_account_id
    required
    string ID akun yang Anda ingin jadikan sebagai tujuan transfer.
    Bisa berupa ID dari platform Anda atau sub-account
    reference_id
    required
    string

    Reference ID adalah identifikasi dari route tersebut. Ini digunakan untuk membedakan apabila terdapat routes yang memiliki destination_account_id yang sama.

    Harus unik dan case sensitif untuk setiap Split Rule.

    Maksimum karakter adalah 255 karakter.

    Parameter Respon

    Example: Respon Fee Rules

    {
        "id": "splitru_d9e069f2-4da7-4562-93b7-ded87023d749",
        "name": "Standard platform fee",
        "description": "Platform fee for all transactions accepted on behalf of vendors",
        "routes": [{
          "flat_amount": 3000,
          "currency": "IDR"
          "destination_account_id":   "5f8d0c0603ffe06b7d4d9fcf"}], 
        [{
         "percent_amount": "5",
          "currency": "IDR"
          "destination_account_id":   "5cafeb170a2b18519b1b8768"
        }],
        "created": "2020-09-01T07:00:00.007Z",
        "updated": "2020-09-01T07:00:00.007Z",
        "metadata": {}
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID unik yang dihasilkan oleh sistem Xendit

    Format: splitru_{{id}}
    Contoh: splitru_NF5p90U3MQ5MXAuH1NF
    name
    required
    string Nama untuk identifikasi split rule. Tidak perlu unik. Biasanya berdasarkan tipe transaksi dan/atau sub-merchant

    Contoh: “standard_platform_fee”, “commission”
    description
    optional
    string Deskripsi untuk identifikasi fee rule

    Contoh: “Biaya yang dipotong sebagai biaya asuransi agen di Jawa”
    routes
    required
    array Array of object yang mendefinisikan bagaimana platform ingin mengalokasikan biaya dan kepada akun yang mana. Setiap object Route setara dengan sekali alokasi biaya dari konsumen akhir ke sebuah akun tujuan

    Catatan: Saat ini, Anda hanya dapat memasukkan satu object Route di parameter Route
    flat_amount
    conditional
    string Nilai nominal yang akan digunakan untuk dipecah ke Akun destinasi melalui Split Rule dalam bentuk flat.

    Tidak perlu diisi jika tidak diperlukan. Wajib diisi jika percent_amount tidak diisi.

    Harus berupa bilangan positif.
    percent_amount
    conditional
    number Nominal split berdasarkan angka persen.

    Tidak perlu diisi jika tidak diperlukan. Wajib diisi jika flat_amount tidak diisi.

    Harus berupa bilangan positif.

    Nominal persen harus antara 0 dan 100

    Nominal persen dibulatkan ke unit moneter terdekat (Contoh: 0.50 IDR akan dibulatkan ke 1 IDR; 0.49 IDR akan dibulatkan ke 0 IDR)
    currency
    required
    string Kode mata uang ISO 4217

    Catatan: Akan mengembalikan sebuah error apabila mata uang tidak cocok dengan mata uang transaksi/akun
    Contoh: IDR;PHP;THB;MYR;VND
    destination_account_id
    required
    string ID akun yang Anda ingin jadikan sebagai tujuan transfer.
    Bisa berupa ID dari platform Anda atau sub-account
    reference_id
    required
    string

    Reference ID adalah identifikasi dari route tersebut. Ini digunakan untuk membedakan apabila terdapat routes yang memiliki destination_account_id yang sama.

    Harus unik dan case sensitif untuk setiap Split Rule.

    Maksimum karakter adalah 255 karakter.
    created
    required
    string Timestamp dalam ISO 8601 ketika Fee Rule Object terbuat

    Format: YYYY-MM-DDTHH:mm:ssZ
    Zona waktu: UTC+0
    updated
    required
    string Timestamp dalam ISO 8601 ketika Fee Rule Object terakhir terupdate

    Format: YYYY-MM-DDTHH:mm:ssZ
    Zona waktu: UTC+0
    metadata
    optional
    object Objek dari pasangan key-value tambahan yang digunakan oleh merchant seperti parameter sistem internal (business ID, keranjang belanja). Pengguna dapat mendefinisikan properti dan nilai JSON.

    Anda dapat menspesifikkan hingga 50 key, dengan panjang nama key sampai dengan 40 karakter dan panjang value sampai dengan 500 karakter
    Jika tidak ingin menggunakan maka dikosongkan NULL

    Kode Error

    Kode Error Deskripsi
    INVALID_FEE_AMOUNT
    400
    Nominal biaya dan/atau dalam bentuk angka negatif atau format yang salah
    API_VALIDATION_ERROR
    400
    Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi
    DESTINATION_ACCOUNT_NOT_FOUND
    400
    Dikembalikan saat destination_account_id pada obyek route tidak memiliki hubungan dengan Business-ID dari pemilik Akun atau invalid.
    DUPLICATE_ERROR
    400
    Dikembalikan saat reference_id tidak unik untuk setiap route

    Mengatur Webhook URLs

    API pengaturan webhook URL memungkin Anda untuk mengatur Webhook URL Sub-akun Anda

    Berikut ini yang dapat digunakan pada parameter :type

    Money-In

    1. invoice: Mengirimkan webhook ketika Invoice telah terbayarkan atau kedaluwarsa.
    2. fva_status: Mengirimkan webhook ketika Virtual Account berhasil dibuat atau diperbaharui. Hanya tersedia untuk Indonesia 🇲🇨
    3. fva_paid: Mengirimkan webhook ketika Virtual Account telah berhasil dibayar oleh pelanggan Anda. Hanya tersedia untuk Indonesia 🇲🇨
    4. ro_fpc_paid: Mengirimkan webhook ketika kode pembayaran Alfamart/Indomaret telah berhasil dibayar oleh pelanggan Anda. Hanya tersedia untuk Indonesia 🇲🇨
    5. regional_ro_paid: Mengirimkan webhook ketika kode pembayaran 7 Eleven, Cebuana, and ECPay di Filipina. Hanya tersedia untuk Indonesia 🇵🇭
    6. ewallet: Tipe eWallet baru dari API /ewallets/charges untuk menerima event charge dan event-event lainnya dari semua kanal eWallets.
    7. payment_method: Xendit mengirimkan notifikasi ke sistem Anda pada saat payment method akan kedaluwarsa atau sudah kedaluwarsa. Payment Method merupakan abstraksi Kartu Debit/Akun Rekening Bank untuk transaksi Direct Debit.
    8. payment_method_v2: Xendit mengirimkan notifikasi ke sistem Anda pada saat payment method V2 akan kedaluwarsa atau sudah diaktifkan/kedaluwarsa. Pelajari lebih lanjut tentang Payment Method V2 disini.
    9. direct_debit: Xendit mengirimkan notifikasi ke sistem Anda pada saat payment method akan kedaluwarsa atau sudah kedaluwarsa. Payment Method merupakan abstraksi Kartu Debit/Akun Rekening Bank untuk transaksi Direct Debit.
    10. qr_code: Xendit mengirimkan notifikasi ke sistem Anda ketika QR terlah berhasil dibayar atau proses refund telah selesai. Parameter ini hanya berlaku untuk API qr_codes versi 2022-07-31.
    11. recurring: Xendit mengirimkan notifikasi ke sistem Anda ketika plan Subscription telah diaktifkan/tidak aktif, cycle telah dibuat/berhasil/gagal/mencoba ulang, atau upaya percobaan manual (force attempt) gagal.
    12. payment_succeeded: Xendit mengirimkan notifikasi ke sistem Anda ketika pembayaran telah sukses dikonfirmasi atau diterima dari channel milik partner (Hanya untuk pembayaran yang dibuat melalui Payment API yang baru). Tersedia untuk semua bisnis
    13. payment_awaiting_capture: Xendit mengirimkan notifikasi ke sistem Anda ketika ada permintaan pembayaran dengan capture_method yang di set ke mode MANUAL dan memerlukan panggilan ke Payment Capture API untuk menyelesaikan pembayaran. Tersedia untuk semua bisnis
    14. payment_pending: Xendit mengirimkan notifikasi ke sistem Anda ketika pembayaran sedang diproses oleh channel partner dan menunggu dari status terminal Hanya untuk pembayaran yang dibuat melalui Payment API yang baru). Tersedia untuk semua bisnis
    15. payment_failed: Xendit mengirimkan notifikasi ke sistem Anda ketika ada pembayaran yang gagal diproses (Hanya untuk pembayaran yang dibuat melalui Payment API yang baru). Tersedia untuk semua bisnis
    16. capture_succeeded: Xendit mengirimkan notifikasi ke sistem Anda ketika ada manual capture melalui Payment Capture API telah berhasil. Tersedia untuk semua bisnis
    17. capture_failed: Xendit mengirimkan notifikasi ke sistem Anda ketika ada manual capture melalui Payment Capture API telah gagal. Tersedia untuk semua bisnis
    18. payment_request_completed: Xendit mengirimkan notifikasi ke sistem Anda ketika pembayaran melalui Direct Debit atau E-Wallet telah berhasil atau gagal. Mohon diperhatikan bahwa hal ini hanya untuk Payment Request API saja. Pastikan bahwa callbacks dari pembayaran lainnya untuk Direct Debit atau E-wallet agar tidak diatur untuk menghindari duplikasi. Hanya tersedia untuk THailand 🇹🇭 dan Malaysia 🇲🇾

    Money-Out

    1. disbursement: Xendit mengirimkan notifikasi ke sistem Anda pada saat Disbursement telah berhasil dieksekusi, dengan status berhasil atau gagal transfer. Hanya tersedia untuk Indonesia 🇲🇨
    2. ph_disbursement: Xendit mengirimkan notifikasi ke sistem Anda pada saat Disbursement telah berhasil dieksekusi, dengan status berhasil atau gagal transfer. Hanya tersedia untuk Filipina 🇵🇭
    3. batch_disbursement: Xendit mengirimkan notifikasi ke sistem Anda pada saat Batch Disbursement telah berhasil dieksekusi. Hanya tersedia untuk Indonesia 🇲🇨
    4. payout: Xendit mengirimkan notifikasi ke sistem Anda pada saat Payout telah berhasil atau gagal diproses. Pelajari lebih lanjut tentang webhook Payouts V2 disini.

    Lain-lain

    1. report: Xendit mengirimkan notifikasi ke sistem anda untuk mengirimkan laporan ke URL yang sudah anda tentukan. Tersedia untuk semua bisnis

    Endpoint: Mengatur Webhook URLs

    POST https://api.xendit.co/callback_urls/:type

    Parameter Request

    Example: Mengatur Webhook URLs

    curl https://api.xendit.co/callback_urls/:type -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d url=https://www.xendit.co/webhook_catcher \
      <?php
          $url = 'https://api.xendit.co/callback_urls';
          $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
          $headers = [];
          $headers[] = 'Content-Type: application/json';
          $data = [
              'url' => 'https://www.xendit.co/webhook_catcher'
          ];
    
          $curl = curl_init();
    
          $payload = json_encode($data);
          curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
          curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_setopt($curl, CURLOPT_POST, true);
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
          $result = curl_exec($curl);
          echo $result;
    from xendit import Xendit, XenPlatformURLType
    
    api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
    xendit_instance = Xendit(api_key=api_key)
    XenPlatform = xendit_instance.XenPlatform
    
    xenplatform_callback_url = XenPlatform.set_callback_url(
        type=XenPlatformURLType.INVOICE,
        url="https://test-url-invoice.com",
    )
    print(xenplatform_callback_url)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string user_id dari sub-akun yang ingin Anda atur Webhook URL nya

    Parameter header ini hanya dapat digunakan apabila anda memiliki akses terhadap fitur xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut

    Parameter Path Tipe Deskripsi
    type
    required
    string Tipe Webhook URL yang ingin Anda atur

    Nilai yang tersedia: invoice, fva_status, fva_paid, ro_fpc_paid, regional_ro_paid, ewallet, payment_method, payment_method_v2, direct_debit, qr_code, recurring, disbursement, ph_disbursement, batch_disbursement, report, payment_succeeded, payment_awaiting_capture, payment_pending, payment_failed, capture_succeeded, capture_failed, payment_request_completed
    Parameter Body Tipe Deskripsi
    url
    required
    string URL dari server Anda yang sudah Anda tentukan untuk menerima webhook dari kami

    Panjang minimum 1 karakter
    Panjang maksimum Tidak ada maksimum karakter

    Parameter Respon

    Example: Respon Pengaturan Webhook URLs

    {
        "status": "SUCCESSFUL",
        "user_id": "5e6b30d967627b957de8c123",
        "url": "https://www.xendit.co/webhook_catcher",
        "environment": "TEST",
        "callback_token": "66a6680348e1c33ed2b9053a8eb9291b9e2230ff4f4d3057c9f4ac26405d2123"
    }
    Parameter Tipe Deskripsi
    status
    required
    string Status dari pengaturan Webhook URL

    Nilai yang tersedia: SUCCESSFUL
    user_id
    required
    string user_id yang Webhook URL nya sudah diatur
    url
    required
    string The Webhook URL that has been set
    environment
    required
    string Lingkungan yang Webhook URL nya sudah diatur

    Nilai yang tersedia: TEST, LIVE
    callback_token
    required
    string Token webhook unik yang melekat pada setiap sub-akun. Gunakan token webhook ini untuk melakukan validasi sebuah webhook dikirimkan server Xendit.

    Kode Error

    Kode Error Deskripsi
    INVALID_URL_FORMAT
    400
    Anda menambahkan format URL yang salah
    CALLBACK_AUTHENTICATION_TOKEN_NOT_FOUND_ERROR
    404
    Tidak ada token verifikasi webhook untuk akun ini, silakan hubungi help@xendit.co
    API_VALIDATION_ERROR
    400
    Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi

    Callback Akun

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui webhook. Anda perlu mempersiapkan URL untuk menerima webhook dan mendaftarkan URL tersebut melalui Setelan Webhook pada Dasbor Xendit.

    Xendit mengirimkan 2 jenis webhook untuk proses pembuatan akun:

    1. Webhook Pembuatan Akun Owned untuk mengirimkan notifikasi ke sistem Anda ketika akun OWNED telah berhasil dibuat
    2. Webhook Pembaruan Akun Managed untuk memberi tahu sistem Anda kapan Akun MANAGED Anda berhasil terdaftar dan pembayaran langsung diaktifkan.

    Ketika pembuatan akun berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Versi

    Anda saat ini sedang melihat versi terbaru dari API Akun kami. Kami telah membuat perubahan pada Webhook yang kami kirimkan Klik disini untuk melihat versi yang lama.

    Versi Changelog
    v2
    Versi terbaru
    Penghapusan Webhook account.registered untuk Akun OWNED
    v1 Versi pertama dari API Akun

    Webhook Pembuatan Akun Owned

    Endpoint: Webhook Pembuatan Akun

    POST https://yourcompany.com/xenplatform_webhook_url

    Webhook account.created digunakan untuk memberikan notifikasi ke sistem Anda ketika akun telah berhasil dibuat. Webhook ini hanya akan dikirimkan pada pembuatan akun OWNED.

    Data Webhook

    Example: Webhook Pembuatan Akun Request

    {
      "event": "account.created",
      "created": "2021-01-01T10:00:00Z",
      "data": {
        "id": "5cafeb170a2b18519b1b8761",
        "created": "2021-01-01T10:00:00Z",
        "updated": "2021-01-01T10:00:00Z",
        "type": "OWNED",
        "email": "test@xendit.co",
        "public_profile": {
          "business_name": "Aaron Warung"
        },
        "country": "ID",
        "status": "LIVE"
      }
    }
    curl --request POST \
      --url https://yourcompany.com/xenplatform_webhook_url \
      --data '{"event":"account.created","business_id":"6abceb170a2b18519b1b1234","created":"2021-01-01T10:00:00Z","data":{"id":"5cafeb170a2b18519b1b8761","created":"2021-01-01T10:00:00Z","updated":"2021-01-01T10:00:00Z","type":"OWNED","email":"aaron@xendit.co","public_profile":{"business_name":"Aaron Warung"},"country":"ID","status":"LIVE"}}'
        <?php
    
        $curl = curl_init();
    
        curl_setopt_array($curl, [
          CURLOPT_URL => "https://yourcompany.com/xenplatform_webhook_url",
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => "{\"event\":\"account.created\",\"business_id\":\"6abceb170a2b18519b1b1234\",\"created\":\"2021-01-01T10:00:00Z\",\"data\":{\"id\":\"5cafeb170a2b18519b1b8761\",\"created\":\"2021-01-01T10:00:00Z\",\"updated\":\"2021-01-01T10:00:00Z\",\"type\":\"OWNED\",\"email\":\"aaron@xendit.co\",\"public_profile\":{\"business_name\":\"Aaron Warung\"},\"country\":\"ID\",\"status\":\"LIVE\"}}",
        ]);
    
        $response = curl_exec($curl);
        $err = curl_error($curl);
    
        curl_close($curl);
    
        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          echo $response;
        }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Body Parameter Tipe Deskripsi
    event
    required
    string Jenis tindakan webhook yang dikirimkan

    Nilai yang tersedia: account.created
    business_id
    required
    string ID dari akun dimana event ini terjadi. Ini adalah ID akun Platform untuk Webhook Akun.
    created
    required
    string Waktu ketika webhook dikirimkan
    Timezone: GMT+0
    data
    required
    object Memiliiki metadada untuk jenis tindakan. Untuk account.created, object Akun.
    id
    required
    string ID dari Akun yang dibuat
    created
    required
    string Tanda waktu ketika akun dibuat
    Zona Waktu: GMT+0
    updated
    required
    string Tanda waktu ketika akun diupdate
    Zona Waktu: GMT+0
    type
    required
    Jenis akun yang dibuat

    Nilai yang tersedia: OWNED
    email
    required
    string Email penanda untuk akun yang dibuat
    public_profile
    required
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    country
    required
    string Negara pendirian untuk bisnis atau negara tempat tinggal untuk individu (berdasarkan ISO 3166-1 Alpha-2)

    Nilai yang tersedia: ID, PH

    Default: Negara pendirian Anda
    status
    required
    Status pembuatan Akun

    Nilai yang tersedia: LIVE

    Webhook Pembaruan Akun Managed

    Endpoint: Webhook Pembaruan Akun

    POST https://yourcompany.com/xenplatform_webhook_url

    Webhook Pembaruan Akun dapat digunakan untuk memberi tahu sistem Anda kapan Akun MANAGED Anda berhasil terdaftar dan pembayaran langsung diaktifkan.

    Anda akan menerima webhook dari Create Account API pada 2 titik ketika proses pembuatan Akun MANAGED:

    1. account.registered - Saat sebuah Akun sudah berhasil teregistrasi via email undangan
    2. account.activated - Saat Anda sudah dapat melakukan transaksi secara real untuk Akun Anda (yaitu activated)

    Callback Suspen Akun

    Endpoint: Webhook Suspen Akun

    POST https://yourcompany.com/xenplatform_webhook_url

    Webhook Suspen Akun dapat digunakan sistem Anda untuk mengetahui bilamana Xendit memutuskan bahwa Akun yang terkoneksi dengan Platform Anda sedang dalam keadaan suspected, suspended atau cleared. Sistem kami secara otomatis mengadakan pengawasan secara berkala untuk meninjau aktivitas dari Akun Partner Anda supaya Platform dapat mengurangi risiko terjadinya kasus penipuan dari akun Partner Anda.

    Status Akun dapat suspected, suspended atau cleared apabila Xendit mencurigai bahwa Akun tersebut melakukan aktivitas transaksi yang melibatkan kecurangan atau penipuan. Kejadian Account Suspension ini hanya akan memengaruhi transaksi yang dilakukan atas nama Akun tersebut. Dengan begitu, Platform Anda tetap dapat memfasilitasi pembayaran untuk Akun lain yang tidak tersuspensi seperti biasa.

    Kejadian yang dapat dikirimkan melalui webhook tersebut meliputi:

    1. account.suspected - Saat Akun disuspek, Xendit akan memberhentikan semua aktivitas uang keluar dari Akun tersebut. Parameter status di akun tersebut akan tetap LIVE karena aktivitas uang masuk akan berjalan seperti biasa.
    2. account.suspended - Saat Akun disuspensi, Xendit akan memberhentikan semua aktivitas uang masuk dan uang keluar dari Akun tersebut. Parameter status di Akun tersebut akan berubah menjadi SUSPENDED.
    3. account.cleared - Saat Akun telah dibebaskan, Xendit akan mengaktifkan kembali seluruh kegiatan uang masuk dan uang keluar untuk dilakukan dari Akun tersebut. Parameter status di akun tersebut akan berubah menjadi LIVE.

    Ketika suspensi akun berhasil diproses, Xendit mengirimkan pesan ke URL menggunakan metode POST secara langsung melalui webhook. Xendit turut melampirkan x-callback-token header yang dapat Anda validasi dengan Token Verifikasi di Setelan Webhook untuk mengecek keaslian pesan tersebut.

    Kami harap sistem Anda dapat merespon webhook dengan status 200 secepatnya. Xendit mengganggap webhook gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik. Ketika pengiriman pesan gagal, maka upaya pengiriman ulang akan dilakukan secara otomatis sampai 24 jam kedepan. Anda juga dapat mengirimkan ulang pesan secara mandiri melalui tab Webhook bila diperlukan. Terakhir, Anda juga dapat menerima email webhook setiap 6 jam untuk mengecek sistem webhook Anda secara berkala.

    Pelajari lebih lanjut mengenai Webhook.

    Data Webhook

    Example Account Suspended Webhook Request

    {
      "created": "2022-01-01T02:33:56.113Z",
      "business_id": "61b1ae8459d12951b1a2d7fd",
      "event": "account.suspended",
      "api_version": null,
      "data": {
        "id": "5fe2b0134b5d62542fe6d7de",
        "email": "john@warungshop.co",
        "public_profile": {
          "business_name": "John warung shop"
        },
        "status": "SUSPENDED",
        "reason": "FRAUD_PROMO_ABUSE"
      }
    }
    curl --request POST \
      --url https://yourcompany.com/xenplatform_webhook_url \
      --data '{ "created": "2022-01-01T02:33:56.113Z", "business_id": "61b1ae8459d12951b1a2d7fd", "event": "account.suspended", "api_version": null, "data": { "id": "5fe2b0134b5d62542fe6d7de", "email": "john@warungshop.co", "public_profile": { "business_name": "John warung shop" }, "status": "SUSPENDED", "reason": "FRAUD_PROMO_ABUSE" } }'
        <?php
    
        $curl = curl_init();
    
        curl_setopt_array($curl, [
          CURLOPT_URL => "https://yourcompany.com/xenplatform_webhook_url",
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => "{\"created\":\"2022-01-01T02:33:56.113Z\",\"business_id\":\"61b1ae8459d12951b1a2d7fd\",\"event\":\"account.suspended\",\"api_version\":"NULL",\"data\":{\"id\":\"5fe2b0134b5d62542fe6d7de\",\"email\":\"john@warungshop.co\",\"public_profile\":{\"business_name\":\"John warung shop\"},\"status\":\"SUSPENDED\",\"reason\":\"FRAUD_PROMO_ABUSE\"}}",
        ]);
    
        $response = curl_exec($curl);
        $err = curl_error($curl);
    
        curl_close($curl);
    
        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          echo $response;
        }
    Header Parameter Tipe Deskripsi
    x-callback-token
    wajib
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    webhook-id
    wajib
    string ID webhook yang dapat Anda gunakan untuk implementasi idempotensi di sistem Anda guna menangani skenario penerimaan webhook yang sama/duplikat di sistem Anda. Ketika Anda menerima nilai webhook-id yang sama pada webhook berikutnya, hindari atau tolak pemrosesan webhook tersebut untuk mencegah pemrosesan berulang.
    Body Parameter Tipe Deskripsi
    event
    wajib
    string Jenis tindakan webhook yang dikirimkan

    Nilai yang tersedia: account.suspected, account.suspended, account.cleared
    created
    wajib
    string Waktu ketika webhook dikirimkan
    Timezone: GMT+0
    business_id
    wajib
    string ID dari akun dimana event ini terjadi. Ini adalah ID akun Platform untuk Webhook Akun.
    data
    wajib
    object Data terakhir dari status akun
    id
    wajib
    string ID dari Akun yang dibuat
    email
    wajib
    string Email penanda untuk akun yang dibuat
    public_profile
    wajib
    object Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
    status
    wajib
    string Status pembuatan Akun
    Nilai yang tersedia: LIVE, SUSPENDED
    reason
    wajib
    string Alasan untuk kejadian tersebut

    Error saat mengelola transaksi untuk Akun lainnya

    Bagian ini berisi kesalahan umum yang mungkin Anda hadapi saat mencoba melakukan transaksi atas nama akun Anda.

    Error Kode

    Error Kode Deskripsi
    XEN_PLATFORM_SUB_ACCOUNT_NOT_LIVE
    404
    Akun tersebut belum live atau sudah diblokir karena kebijakan internal kami. Silakan hubungi help@xendit.co untuk informasi lebih lanjut.

    Skenario Testing

    Bagian ini menngandung skenario testing yang dapat digunakan untuk mengecek keberhasilan integrasi API. Gunakan lampiran berikut untuk mencoba flow-flow yang berbeda untuk memastikan semua skenario telah ditangani dengan baik

    Docs Changelog

    API Reference Changelog

    Mar 20, 2024

    Feb 20, 2024

    Feb 6, 2024

    Feb 3, 2024

    Feb 1, 2024

    Jan 15, 2024

    Dec 18, 2023

    Nov 21, 2023

    Nov 15, 2023

    November 9, 2023

    October 19, 2023

    October 16, 2023

    October 10, 2023

    October 09, 2023

    October 03, 2023

    September 25, 2023

    September 20, 2023

    Agustus 10, 2023

    Juli 26, 2023

    Juli 20, 2023

    Juli 3, 2023

    Juni 22, 2023

    Juni 13, 2023

    Juni 12, 2023

    June 11, 2023

    Juni 8, 2023

    Mei 23, 2023

    Mei 15, 2023

    April 14, 2023

    April 12, 2023

    April 4, 2023

    Maret 29, 2023

    Maret 22, 2023

    Maret 20, 2023

    Maret 7, 2023

    Februari 14, 2023

    Februari 10, 2023

    Februari 8, 2023

    Februari 7, 2023

    Januari 31, 2023

    Januari 12, 2023

    Januari 3, 2023

    Desember 22, 2022

    Desember 13, 2022

    Desember 8, 2022

    December 08, 2022

    November 29, 2022

    November 11, 2022

    November 8, 2022

    November 3, 2022

    October 28, 2022

    October 27, 2022

    Oktober 18, 2022

    Oktober 12, 2022

    Oktober 11, 2022

    September 30, 2022

    September 12, 2022

    September 6, 2022

    Agusttus 23, 2022

    Agustus 22, 2022

    Agustus 15, 2022

    Agustus 9, 2022

    Agustus 5, 2022

    Juli 27, 2022

    Juli 15, 2022

    Juli 14, 2022

    Juni 20, 2022

    Juni 13, 2022

    Juni 2, 2022

    Mei 27, 2022

    Mei 12, 2022

    Mei 11, 2022

    Mei 10, 2022

    Apr 25, 2021

    Apr 21, 2021

    Apr 19, 2022

    Apr 18, 2022

    Apr 05, 2022

    Mar 21, 2022

    Mar 16, 2022

    Mar 11, 2022

    Mar 10, 2022

    Mar 09, 2022

    Feb 28, 2022

    Feb 08, 2022

    Feb 04, 2022

    Feb 03, 2022

    Jan 20, 2022

    Jan 17, 2022

    Jan 14, 2022

    Jan 13, 2022

    Jan 11, 2022

    Jan 05, 2022

    Dec 28, 2021

    Dec 24, 2021

    Dec 22, 2021

    Dec 15, 2021

    Dec 13, 2021

    Dec 10, 2021

    Dec 9, 2021

    Dec 2, 2021

    Nov 18, 2021

    Nov 15, 2021

    Nov 12, 2021

    Nov 1, 2021

    Oct 29, 2021

    Oct 21, 2021

    Oct 19, 2021

    Oct 18, 2021

    Oct 08, 2021

    Oct 07, 2021

    Oct 05, 2021

    Oct 04, 2021

    Sep 30, 2021

    Sep 28, 2021

    Sep 27, 2021

    Sep 21,2021

    Sep 19,2021

    Sep 15,2021

    Sep 10, 2021

    Aug 26, 2021

    Aug 25, 2021

    Aug 19, 2021

    Aug 18, 2021

    Aug 18, 2021

    Aug 5, 2021

    Aug 5, 2021

    Aug 4, 2021

    Jul 29, 2021

    Jul 28, 2021

    Jul 28, 2021

    Jul 27, 2021

    Jul 23, 2021

    Jul 5, 2021

    Jul 21, 2021

    Jul 13, 2021

    Jul 12, 2021

    Jun 28, 2021

    Jun 24, 2021

    Jun 21, 2021

    Jun 3, 2021

    June 2, 2021

    May 28, 2021

    May 12, 2021

    May 5, 2021

    Apr 28, 2021

    Apr 12, 2021

    Apr 08, 2021

    Apr 07, 2021

    Mar 29, 2021

    Mar 26, 2021

    Mar 25, 2021

    Mar 17, 2021

    Mar 12, 2021

    Mar 10, 2021

    Mar 05, 2021

    Mar 04, 2021

    Mar 01, 2021

    Feb 26, 2021

    Feb 22, 2021

    Feb 17, 2021

    Menambahkan kode sampel Python pada API /ewallets/charges

    Feb 15, 2021

    Feb 10, 2021

    Feb 09, 2021

    Feb 05, 2021

    API eWallet baru yang simple dan konsisten yang mendukung top provider eWallet di Indonesia dan Filipina

    Feb 4, 2021

    Feb 1, 2021

    Jan 22, 2021

    Jan 21, 2021

    Jan, 19, 2021

    Jan, 04, 2021

    Dec, 29, 2020

    Dec, 17, 2020

    Dec, 8, 2020

    Nov, 26, 2020

    Nov, 11, 2020

    Nov, 2, 2020

    Oct 22, 2020

    Oct 20, 2020

    Okt 4, 2020

    Agu 04, 2020

    Aug 3, 2020

    Sep 28, 2020

    Sep 17, 2020

    Penambahan Platform Fee sebagai fitur baru untuk xenPlatform

    Sep 14, 2020

    Upaya Pengiriman Callback Terbaru

    Agu 04, 2020

    Sept 9, 2020

    Aug 13, 2020

    Aug 12, 2020

    Agu 11, 2020

    Aug 04, 2020

    Aug 3, 2020

    Jul 31, 2020

    Jul 30, 2020

    Jul 28, 2020

    Jul 27, 2020

    Jul 24, 2020

    Jul 16, 2020

    Jul 07, 2020

    Jul 07, 2020

    Jul 07, 2020

    Jul 01, 2020

    June 30, 2020

    Jun 24, 2020

    Jun 18, 2020

    June 17, 2020

    Jun 11, 2020

    Jun 06, 2020

    May 31, 2020

    May 26, 2020

    May 21, 2020

    May 13, 2020

    May 12, 2020

    May 06, 2020

    April 28, 2020

    April 24, 2020

    April 20, 2020

    April 16, 2020

    April 16, 2020

    April 14, 2020

    March 20,2020

    March 19, 2020

    March 11, 2020

    March 5, 2020

    March 3, 2020

    March 2, 2020

    February 28, 2020

    February 26, 2020

    February 18, 2020

    February 14, 2020

    February 12, 2020

    February 04, 2020

    January 23, 2020

    January 20, 2020

    January 16, 2020

    January 14, 2020

    January 9, 2020

    January 6, 2020

    December 15, 2019

    December 14, 2019

    December 12, 2019

    December 11, 2019

    December 9, 2019

    November 27, 2019

    November 26, 2019

    November 21, 2019

    November 7, 2019

    October 31, 2019

    October 30, 2019

    October 23, 2019