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
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 padausername
dan kosongkanpassword
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:
- Buat API key melalui Dasbor
- Salin API key
- Gunakan Basic Access Authentication atau
BASIC AUTH
sebagai metode otentikasi di server Anda - Format
BASIC AUTH
adalah{{username}}:{{password}}
- Masukkan API key ke dalam
username
dan kosongkanpassword
. Pastikan Anda menyertakan:
di belakang - Enkripsi nilai tersebut dengan Base64
- 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
- Credit / Debit Cards (melalui Payments API)
- E-Wallets (melalui Payments API)
- QR Codes (melalui Payments API)
- Direct Debit (melalui Payments API)
- Transfer Bank / Virtual Accounts (melalui Payments API)
- Retail Outlets (melalui Payments API)
- Invoices
- Payouts
- 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:
- Tokenisasi kartu kredit/debit dengan single-use token
- Tokenisasi kartu kredit/debit dengan multiple-use token
- 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:
- Tokenisasi kartu kredit/debit dengan single-use token
- Tokenisasi kartu kredit/debit dengan multiple-use token
- 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:
- Penambahan resource API yang baru
- Penambahan parameter opsional pada request API
- Penambah properti baru pada respon API
- Perubahan urutan properti pada respon API
- Perubahan panjang karakter atau format dari semua ID objek
- Penambahan kode error yang baru
- Penambahan tipe event webhook yang baru
- Penambahan properti baru pada data webhook
Panduan Migrasi
Panduan berikut dibuat untuk membantu Anda melakukan migrasi dengan aman dari versi sekarang ke versi yang terbaru:
- 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 - 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 - Ulangi langkah nomor 1 dan 2 pada mode Live
- 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 60 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:
- 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.
- 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. - 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.
- 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
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-idoptional |
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:
- Tipe customer (Individual atau Business)
- Deskripsi customer
- Alamat customer
- Akun identitas dan dokumen KYC yang menandakan legitimasi customer
- Metadata lainnya
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_idrequired |
string |
Identifikasi customer dari merchant | ||||||||||||||||||||||||||||||||||||||||||||||||
typerequired |
string |
Tipe customer. Nilai-nilai yang didukung: INDIVIDUAL , BUSINESS |
||||||||||||||||||||||||||||||||||||||||||||||||
individual_detailoptional |
object |
Objek JSON yang memuat informasi individual. Akan kosong apabila type bukan INDIVIDUAL
Parameter detail individu
|
||||||||||||||||||||||||||||||||||||||||||||||||
business_detailoptional |
object |
Objek JSON yang memuat detail bisnis. Akan kosong apabila type bukan BUSINESS
Parameter detail bisnis
|
||||||||||||||||||||||||||||||||||||||||||||||||
mobile_numberoptional |
string |
Nomor telepon customer dalam format E.164
|
||||||||||||||||||||||||||||||||||||||||||||||||
phone_numberoptional |
string |
Nomor kontak tambahan customer dalam format E.164. Bisa juga telepon rumah
|
||||||||||||||||||||||||||||||||||||||||||||||||
emailoptional |
string |
Alamat email customer
|
||||||||||||||||||||||||||||||||||||||||||||||||
addressesoptional |
array |
Array dari alamat objek JSON yang memuat informasi alamat customer.Parameter alamat
|
||||||||||||||||||||||||||||||||||||||||||||||||
identity_accountsrequired |
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
|
||||||||||||||||||||||||||||||||||||||||||||||||
kyc_documentsrequired |
array |
Array dari objek JSON berisi dokumen KYC customer ini. Parameter dokumen kyc
|
||||||||||||||||||||||||||||||||||||||||||||||||
descriptionoptional |
string |
Deskripsi customer dari merchant.
|
||||||||||||||||||||||||||||||||||||||||||||||||
date_of_registrationoptional |
string |
Tanggal dimana akun pembeli sudah dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
domicile_of_registrationoptional |
string |
Negara dimana akun pembeli ini dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
metadataoptional |
object |
Objeck dari informasi tambahan yang diberikan pada saat pembuatan customer | ||||||||||||||||||||||||||||||||||||||||||||||||
createdrequired |
string |
Timestamp pembuatan customer dalam format ISO | ||||||||||||||||||||||||||||||||||||||||||||||||
updatedrequired |
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-KEYoptional |
string |
Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.
|
API-VERSIONoptional |
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-idoptional |
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_idrequired |
string |
Pengidentifikasi customer yang diberikan oleh merchant. Request dengan reference_id duplikat akan mengembalikan error. Anda harus melakukan PATCH request pada resource customer object.
|
||||||||||||||||||||||||||||||||||||||||||||||||
typerequired |
string |
Tipe customer. Nilai-nilai yang didukung: INDIVIDUAL , BUSINESS |
||||||||||||||||||||||||||||||||||||||||||||||||
individual_detailconditionally required |
object |
Object JSON yang memuat informasi individual. Dibutuhkan apabila tipe adalah INDIVIDUAL
Parameter detail individu
|
||||||||||||||||||||||||||||||||||||||||||||||||
business_detailconditionally required |
object |
Object JSON object yang memuat informasi bisnis. Dibutuhkan apabila tipe adalah BUSINESS
Parameter detail bisnis
|
||||||||||||||||||||||||||||||||||||||||||||||||
mobile_numberoptional |
string |
Nomor HP customer dalam format E.164
|
||||||||||||||||||||||||||||||||||||||||||||||||
phone_numberoptional |
string |
Nomor kontak tambahan customer dalam format E.164. Bisa sebagai telepon rumah
|
||||||||||||||||||||||||||||||||||||||||||||||||
hashed_phone_numberoptional |
string |
Hashed phone number
|
||||||||||||||||||||||||||||||||||||||||||||||||
emailoptional |
string |
Alamat email customer
|
||||||||||||||||||||||||||||||||||||||||||||||||
addressesoptional |
array |
Array dari alamat objeck JSON yang memuat informasi alamat customer.Parameter alamat
|
||||||||||||||||||||||||||||||||||||||||||||||||
identity_accountsoptional |
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
|
||||||||||||||||||||||||||||||||||||||||||||||||
kyc_documentsoptional |
array |
Array objek JSON dengan dokumen yang dikumpulkan untuk KYC customer ini. Parameter dokumen kyc
|
||||||||||||||||||||||||||||||||||||||||||||||||
descriptionoptional |
string |
Deskripsi customer yang diberikan merchant.
|
||||||||||||||||||||||||||||||||||||||||||||||||
date_of_registrationoptional |
string |
Tanggal dimana akun pembeli sudah dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
domicile_of_registrationoptional |
string |
Negara dimana akun pembeli ini dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
metadataoptional |
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_ERROR409 |
Permintaan dengan reference_id yang sama telah dibuat sebelumnya. Harap masukkan reference_id yang unik. |
IDEMPOTENCY_ERROR409 |
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-VERSIONoptional |
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-idoptional |
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_FOUND404 |
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_idrequired |
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-VERSIONoptional |
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-idoptional |
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-VERSIONoptional |
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-idoptional |
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_detailoptional |
object |
Objek JSON object yang memuat detil individu. Akan gagal validasi API apabila type bukan INDIVIDUAL
Parameter detail individu
|
||||||||||||||||||||||||||||||||||||||||||||||||
business_detailoptional |
object |
Objek JSON object yang memuat detil bisnis. Akan gagal validasi API apabila type bukan BUSINESS
Parameter detail bisnis
|
||||||||||||||||||||||||||||||||||||||||||||||||
mobile_numberoptional |
string |
Nomor seluler dari customer dalam format E.164
|
||||||||||||||||||||||||||||||||||||||||||||||||
phone_numberoptional |
string |
Nomor kontak customer tambahan dalam format E.164. Bisa sebagai telepon rumah
|
||||||||||||||||||||||||||||||||||||||||||||||||
emailoptional |
string |
Alamat e-mail customer
|
||||||||||||||||||||||||||||||||||||||||||||||||
addressesoptional |
array |
Array dari alamat objek JSON yang memuat berbagai informasi alamat customer.Parameter alamat
|
||||||||||||||||||||||||||||||||||||||||||||||||
identity_accountsoptional |
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
|
||||||||||||||||||||||||||||||||||||||||||||||||
kyc_documentsoptional |
array |
Array objek JSON dengan dokumen yang dikumpulkan untuk KYC customer ini. Parameter dokumen kyc
|
||||||||||||||||||||||||||||||||||||||||||||||||
descriptionoptional |
string |
Deskripsi yang diberikan merchant untuk customer.
|
||||||||||||||||||||||||||||||||||||||||||||||||
date_of_registrationoptional |
string |
Tanggal dimana akun pembeli sudah dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
domicile_of_registrationoptional |
string |
Negara dimana akun pembeli ini dibuat di dalam website merchant
|
||||||||||||||||||||||||||||||||||||||||||||||||
metadataoptional |
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_FOUND404 |
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 |
---|---|---|
purposerequired |
string |
Tujuan dari file yang terupload Nilai-nilai yang didukung: KYC_DOCUMENT , CHARGEBACK_EVIDENCE |
filerequired |
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 |
---|---|---|
idrequired |
string |
ID unik yang di generate oleh Xendit untuk setiap file |
business_idrequired |
string |
ID bisnis yang terdaftar di Xendit |
purposerequired |
string |
Tujuan dari file yang terupload |
createdrequired |
string |
UTC Timestamp pembuatan file dalam format ISO |
updatedrequired |
string |
UTC Timestamp perubahan file terakhir dalam format ISO |
typerequired |
string |
Tipe file |
sizerequired |
integer |
Ukuran file dalam satuan bytes |
urlrequired |
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_TYPE415 |
Format file tidak didukung. Lihat kembali tipe file sebelum mencoba lagi. |
REQUEST_FORBIDDEN403 |
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 |
---|---|---|
idrequired |
string |
ID unik yang di generate oleh Xendit untuk setiap file |
business_idrequired |
string |
ID bisnis yang terdaftar di Xendit |
purposerequired |
string |
Tujuan dari file yang terupload |
createdrequired |
string |
UTC Timestamp pembuatan file dalam format ISO |
updatedrequired |
string |
UTC Timestamp perubahan file terakhir dalam format ISO |
typerequired |
string |
Tipe file |
sizerequired |
integer |
Ukuran file dalam satuan bytes |
urlrequired |
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 |
---|---|---|
idrequired |
string |
ID unik yang di generate oleh Xendit untuk setiap file |
business_idrequired |
string |
ID bisnis yang terdaftar di Xendit |
is_deletedrequired |
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:
| ||||||||
filter required |
object |
Filter yang diterapkan pada laporan.Parameter Filter
|
||||||||
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.
|
||||||||
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-idoptional |
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:
| ||||||||||
filter required |
object |
Filter yang diterapkan pada laporan. Parameter Filter
Kombinasi dari from dan to harus kurang dari 31 hari. |
||||||||||
format optionaldefault:
|
string |
Format dari laporan. Format yang tersedia adalah CSV . |
||||||||||
currency optionaldefault:
|
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: |
Parameter Respon
Mengembalikan Objek Laporan dengan kode status 201
Kode Error
Lihat daftar kode error umum lainnya disini.
Kode Error | Deskripsi |
---|---|
FEATURE_NOT_AVAILABLE400 |
Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini. |
INVALID_DATE_RANGE400 |
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-idoptional |
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_AVAILABLE400 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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:
| ||||||
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:
|
||||||||||||||||||||||||
Line Type | Tipe baris yang tersedia:
|
||||||||||||||||||||||||
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 |
|
||||||||||||||||||||||||
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
|
||||||||||||||
Type | Tipe dari transaksi
|
||||||||||||||
Channel | Kanal untuk mengidentifikasi sumber dari transaksi. Kanal yang tersedia untuk tiap tipe adalah:
|
||||||||||||||
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::
| ||||||||||||||||||||||||||||
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:
| channel_category required |
string |
Kategori kanal dari transaksi untuk mengidentifikasi sumber dari transaksi kanal yang tersedia untuk tiap tipe adalah:
|
|||||||||||||||||||||||||
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 |
| ||||||||||||||||||||||||||||
settlement_status optional |
string |
Status settlement akan muncul untuk transaksi uang masuk. Untuk transaksi uang keluar, nilainya adalah NULL
|
||||||||||||||||||||||||||||
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-idoptional |
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_FOUND404 |
Transaksi dengan id ini tidak ditemukan. |
FEATURE_NOT_AVAILABLE400 |
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-idoptional |
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 optionaldefault:
|
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 optionaldefault:
|
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_AVAILABLE400 |
Selama masa beta, beberapa kustomer dapat menjumpai error ini. Silahkan hubungi customer support kami untuk mengaktifkan fitur ini. |
BI SNAP
API BI SNAP kami dapat membantu Anda untuk melakukan penarikan dan penerimaan pembayaran secara efisien dan sesuai aturan di Indonesia. BI SNAP adalah integrasi yang disarankan untuk merchant Indonesia yang menerima pembayaran dari E-wallet, QRIS, dan metode pembayaran Bank di Indonesia.
Buat Penautan Akun
Endpoint: Request Pembuatan Penautan Akun
POST https://api.xendit.co/snap/v1.0/registration-account-binding
SNAP Penautan Akun
API ini digunakan untuk membuat penautan akun tanpa melakukan pembayaran. Penautan akun akan menghasilkan token yang dapat digunakan hingga pembayaran selanjutnya.
Parameter Request
Contoh: Request Pembuatan Penautan Akun
curl https://api.xendit.co//snap/v1.0/registration-account-binding -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409",
"phoneNo": "+628123123123",
"additionalData": {
"userId": "fc4c060b-3c41-4707-b7b2-df9c3376edde"
},
"additionalInfo": {
"payMethod": "EWALLET",
"payOption": "OVO",
"reusability": "ONE_TIME_USE",
"metadata": {
"sku": "ABCDEFGH"
}
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
partnerReferenceNooptional |
string |
ID transaksi di sistem pengguna layanan | |||||||||||||||||||||||||||||
additionalDataconditionally required |
object |
Informasi spesifik dari masing-masing kanal pembayaran, yang diperlukan agar transaksi dapat diinisiasi Kondisional untuk BRI
|
|||||||||||||||||||||||||||||
merchantIdoptional |
string |
ID yang berasal oleh Xendit untuk bisnis/akun pemilik transaksi. Field ini akan diabaikan oleh Xendit | |||||||||||||||||||||||||||||
phoneNooptional |
string |
Nomor telepon end customer yang terdaftar pada mitra kanal pembayaran. Menggunakan format E.164. Wajib untuk: OVO (ONE_TIME_USE) BRI | |||||||||||||||||||||||||||||
additionalInforequired |
object |
Informasi tambahan yang dibutuhkan untuk melengkapi transaksi Detail objek parameter
|
Parameter Respon
Contoh: Respon Sukses API Dari Request Pembuatan Penautan Akun
{
"responseCode": "2020700",
"responseMessage": "Request In Progress",
"referenceNo": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409",
"additionalInfo": {
"paymentMethod": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"type": "EWALLET",
"reusability": "ONE_TIME_USE",
"customerId": "fc4c060b-3c41-4707-b7b2-df9c3376edde",
"businessId": "5f27a14a9bf05c73dd040bc8",
"status": "PENDING",
"country": "ID",
"ewallet": {
"channelCode": "OVO",
"channelProperties": {
"mobileNumber": "+628123123123"
},
"account": {
"accountDetails": null,
"name": null,
"balance": null,
"pointBalance": null
}
},
"referenceId": "371d8a6e-587c-4789-bea5-fac4319b2409",
"created": "2020-08-29T09:12:33.001Z",
"updated": "2020-08-29T09:12:33.001Z",
"metadata": {
"sku": "ABCDEFGH"
}
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||
referenceNorequired |
string |
ID unik dari payment method. Memiliki prefiks pm-- | ||||||||||||||||||||||||||||||||||||||||||||
partnerReferenceNooptional |
string |
ID yang ditentukan oleh merchant untuk transaksi terkait. | ||||||||||||||||||||||||||||||||||||||||||||
nextActionoptional |
string |
URL ke laman otentikasi. | ||||||||||||||||||||||||||||||||||||||||||||
paramsoptional |
object |
Detail objek parameter
|
||||||||||||||||||||||||||||||||||||||||||||
userInfooptional |
object |
Detail objek parameter
|
||||||||||||||||||||||||||||||||||||||||||||
additionalInforequired |
object |
Detail objek payment method
|
Code Error
Contoh: Respon Error API Untuk Request Penautan Akun
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4000700 | Parsing error generik |
400 | 4000701 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4000702 | Field atau header yang wajib tidak ditemukan |
401 | 4010700 | Authorization error generik |
401 | 4010701 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4010701 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4010715 | Forbidden error generik |
403 | 4010723 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4090700 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4090701 | Sudah ada objek dengan reference yang sama |
Mendapatkan Status Penautan Akun
Endpoint: Mendapatkan Status Penautan Akun
POST https://api.xendit.co/snap/v1.0/registration-account-inquiry
Parameter Request
Contoh: Mendapatkan Status Penautan Akun
curl https://api.xendit.co/snap/v1.0/registration-account-inquiry -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description |
---|---|---|
partnerReferenceNooptional |
string |
ID transaksi di sistem pengguna layanan |
Parameter Respon
Contoh: Respon Sukses Untuk API Mendapatkan Status Penautan Akun
{
"responseCode": "2000800",
"responseMessage": "Successful",
"referenceNo": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409",
"accountCurrency": "IDR",
"additionalInfo": {
"paymentMethod": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"type": "DIRECT_DEBIT",
"reusability": "MULTIPLE_USE",
"customerId": "fc4c060b-3c41-4707-b7b2-df9c3376edde",
"businessId": "5f27a14a9bf05c73dd040bc8",
"status": "REQUIRES_ACTION",
"country": "ID",
"actions": [
{
"action": "AUTH",
"urlType": "API",
"url": "https://api.xendit.co/payment_methods/d0860b92-a72e-41ff-a758-33850a6f8683/auth",
"method": "POST"
}
],
"directDebit": {
"channelCode": "BRI",
"type": "DEBIT_CARD",
"channelProperties": {
"mobileNumber": "+62818555988",
"cardLastFour": "8888",
"cardExpiry": "06/24",
"email": "test.email@xendit.co"
},
"debitCard": {
"mobileNumber": "+62818555988",
"cardLastFour": "8888",
"cardExpiry": "06/24",
"email": "test.email@xendit.co"
},
"bankAccount": null
},
"referenceId": "371d8a6e-587c-4789-bea5-fac4319b2409",
"created": "2020-08-29T09:12:33.001Z",
"updated": "2020-08-29T09:12:33.001Z",
"metadata": {
"sku": "ABCDEFGH"
}
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||
referenceNooptional |
string |
ID unik dari payment method. Memiliki prefiks pm-- | ||||||||||||||||||||||||||||||||||||||||||||
partnerReferenceNooptional |
string |
ID yang ditentukan oleh merchant untuk transaksi terkait. | ||||||||||||||||||||||||||||||||||||||||||||
accountCurrencyrequired |
string |
Harus diset ke 'IDR'. | ||||||||||||||||||||||||||||||||||||||||||||
accountNameoptional |
string |
Nama akun yang terdaftar. | ||||||||||||||||||||||||||||||||||||||||||||
additionalInforequired |
object |
Detail objek Payment Method
|
Code Error
Contoh: Respon Error API Untuk Request Mendapatkan Status Penautan Akun
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4000800 | Parsing error generic |
400 | 4000801 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4000802 | Field atau header yang wajib tidak ditemukan |
401 | 4010800 | Authorization error generik |
401 | 4010801 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4010801 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4010815 | Forbidden error generik |
403 | 4010823 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4090800 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4090801 | Sudah ada objek dengan reference yang sama |
Hapus Tautan Akun
Endpoint: Hapus Tautan Akun
POST https://api.xendit.co/snap/v1.0/registration-account-unbinding
Parameter Request
Contoh: Hapus Tautan Akun
curl https://api.xendit.co/snap/v1.0/registration-account-inquiry -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409"
}' \
Parameter Header | Tipe | Deskripsi |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description |
---|---|---|
partnerReferenceNooptional |
string |
ID transaksi di sistem pengguna layanan |
Parameter Response
Contoh: Respon Sukses API Untuk Hapus Tautan Akun
{
"responseCode": "2000800",
"responseMessage": "Successful",
"referenceNo": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"partnerReferenceNo": "371d8a6e-587c-4789-bea5-fac4319b2409",
"accountCurrency": "IDR",
"additionalInfo": {
"paymentMethod": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"type": "DIRECT_DEBIT",
"reusability": "MULTIPLE_USE",
"customerId": "fc4c060b-3c41-4707-b7b2-df9c3376edde",
"businessId": "5f27a14a9bf05c73dd040bc8",
"status": "INACTIVE",
"country": "ID",
"actions": [
{
"action": "AUTH",
"urlType": "API",
"url": "https://api.xendit.co/payment_methods/d0860b92-a72e-41ff-a758-33850a6f8683/auth",
"method": "POST"
}
],
"directDebit": {
"channelCode": "BRI",
"type": "DEBIT_CARD",
"channelProperties": {
"mobileNumber": "+62818555988",
"cardLastFour": "8888",
"cardExpiry": "06/24",
"email": "test.email@xendit.co"
},
"debitCard": {
"mobileNumber": "+62818555988",
"cardLastFour": "8888",
"cardExpiry": "06/24",
"email": "test.email@xendit.co"
},
"bankAccount": null
},
"referenceId": "371d8a6e-587c-4789-bea5-fac4319b2409",
"created": "2020-08-29T09:12:33.001Z",
"updated": "2020-08-29T09:12:33.001Z",
"metadata": {
"sku": "ABCDEFGH"
}
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||
referenceNooptional |
string |
ID unik dari payment method. Memiliki awalan pm- | ||||||||||||||||||||||||||||||||||||||||||||
partnerReferenceNooptional |
string |
ID untuk transaksi terkait. Disediakan oleh merchant | ||||||||||||||||||||||||||||||||||||||||||||
accountCurrencyrequired |
string |
Harus diset ke 'IDR'. | ||||||||||||||||||||||||||||||||||||||||||||
accountNameoptional |
string |
Nama akun yang terdaftar | ||||||||||||||||||||||||||||||||||||||||||||
additionalInforequired |
object |
Detail dari objek payment method
|
Kode Error
Contoh: Respon Error API Untuk Request Pembatalan Binding
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4000800 | Parsing error generik |
400 | 4000801 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4000802 | Field atau header yang wajib tidak ditemukan |
401 | 4010800 | Authorization error generik |
401 | 4010801 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4010801 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4010815 | Forbidden error generik |
403 | 4010823 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4090800 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4090801 | Sudah ada objek dengan reference yang sama |
Verifikasi OTP Penautan Akun
Endpoint: Verifikasi OTP Penautan Akun
POST https://api.xendit.co/snap/v1.0/otp-verification
Parameter Request
Contoh: Verifikasi OTP Penautan Akun
curl https://api.xendit.co/snap/v1.0/registration-account-inquiry -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"originalReferenceNo": "pm-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"otp": "123456",
"type": "binding"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description |
---|---|---|
originalReferenceNorequired |
string |
ID untuk payment method yang disediakan oleh Xendit |
otprequired |
string |
Kode otorisasi atau OTP yang diinput oleh end customer |
typerequired |
string |
Harus diset sebagai 'binding' |
Parameter Respon
Contoh: Respon Sukses API Untuk Menampilkan Status Penautan Akun
{
"responseCode": "2000400",
"responseMessage": "Successful",
"originalReferenceNo": "pm-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77"
}
Body Parameter | Type | Description |
---|---|---|
responseCoderequired |
string |
Kode respon |
responseMessagerequired |
string |
Deskripsi respon |
originalReferenceNooptional |
string |
ID unik untuk payment method. Prefix bisa bermacam-macam, menyesuaikan dengan payment method yang digunakan |
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran yang sebenarnya. |
customerIdoptional |
string |
ID yang disediakan Xendit untuk end customer. |
Code Error
Contoh: Respon Error API Untuk Request Validasi Penautan Akun
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4000400 | Parsing error generik |
400 | 4000401 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4000402 | Field atau header yang wajib tidak ditemukan |
401 | 4010400 | Authorization error generik |
401 | 4010401 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4010401 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4010415 | Forbidden error generik |
403 | 4010423 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4090400 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4090401 | Sudah ada objek dengan reference yang sama |
VA - Pembuatan
Endpoint: Membuat Virtual Account
POST https://api.xendit.co/snap/v1.0/transfer-va/create-va
SNAP Pembuatan Virtual Account
API ini dapat digunakan untuk membuat Virtual Account baru (Service code: 27)
Parameter Request
Contoh: Request Membuat Virtual Account
curl https://api.xendit.co/snap/v1.0/transfer-va/create-va -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"virtualAccountName": "John Doe",
"trxId": "12349876",
"totalAmount": {
"value": "10000.00",
"currency": "IDR"
},
"freeTexts": [
{
"english": "Please pay for service"
}
],
"expiredDate": "2020-12-31T23:59:59-07:00",
"additionalInfo": {
"channelCode": "MANDIRI",
"reusability": "ONE_TIME_USE"
}
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
partnerServiceIdoptional |
string |
Parameter ini diabaikan oleh Xendit. | ||||||||||
customerNooptional |
string |
Parameter ini diabaikan oleh Xendit. | ||||||||||
virtualAccountNooptional |
string |
Anda dapat menentukan nomor Virtual Account spesifik dalam parameter ini. Jika Anda tidak menentukannya, maka nomor Virtual Account random akan dipilihkan untuk Anda. Mohon pastikan nomor yang Anda tentukan berada dalam range Virtual Account Anda dan bukan bagian dari merchant code sebagai prefiks. | ||||||||||
virtualAccountNamerequired |
string |
Nama lengkap dari pembayar. Akan digunakan kanal pembayaran untuk memverifikasi identitas. Karakter yang diperbolehkan hanya dalam bentuk alfabet. Untuk BCA Aggregator, alfabet and nomor diperbolehkan. Panjang minimum 1 karakter, kecuali BCA dimana panjang minimum adalah 3 karakter. |
||||||||||
trxIdrequired |
string |
ID yang disediakan merchant untuk transaksi terkait. Mohon diingat bahwa parameter ID ini harus bersifat unik untuk setiap Virtual Account. | ||||||||||
totalAmountconditionally required |
object |
Jumlah pembayaran yang diharapkan pada transaksi dalam mata uang yang didukung. Dapat dikosongkan untuk jumlah pembayaran Open Virtual Account. Kondisional untuk jumlah pembayaran Closed Virtual
|
||||||||||
freeTextsoptional |
array of object |
Xendit akan menggabungkan seluruh entri teks pada bagian ini untuk membentuk deskripsi Virtual Account. Objek free text
|
||||||||||
expiredDateoptional |
string |
Tanggal kedaluwarsa untuk Virtual Account dalam format ISO-8601. Contoh: 2023-12-12T23:59:59+07:00. Tanggal kedaluwarsa standar adalah 31 tahun dari pembuatan Virtual Account | ||||||||||
additionalInforequired |
object |
Informasi tambahan untuk menyelesaikan pembayaran Detail objek parameter
|
Parameter Respon
Contoh: Respon Sukses API Untuk Pembuatan Request Virtual Account
{
"responseCode": "2002700",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": "123459",
"customerNo": "99993701870",
"virtualAccountNo": "1234599993701870",
"virtualAccountName": "John Doe",
"trxId": "12349876",
"expiredDate": "2023-12-31T23:59:59.000Z",
"additionalInfo": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"status": "ACTIVE",
"reusability": "MULTIPLE_USE",
"channelCode": "BRI"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
virtualAccountDataoptional |
object |
Hanya untuk respon berhasil
|
Kode Error
Contoh: Respon Error API Untuk Pembuatan Request Virtual Account
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4002700 | Parsing error generik |
400 | 4002701 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4002702 | Field atau header yang wajib tidak ditemukan |
401 | 4012700 | Authorization error generik |
401 | 4012701 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4012701 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4012715 | Forbidden error generik |
403 | 4012723 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4092700 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4092701 | Sudah ada objek dengan reference yang sama |
VA - Mendapatkan Status
Endpoint: Mendapatkan Status Virtual Account
POST https://api.xendit.co/snap/v1.0/transfer-va/inquiry-va
SNAP Menampilkan Status Request VA
API ini dapat digunakan untuk melakukan request untuk mendapatkan status dari Virtual Account yang telah dibuat sebelumnya. (Service code: 30)
Parameter Request
Example: Mendapatkan Status VA
curl https://api.xendit.co/snap/v1.0/transfer-va/inquiry-va -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"trxId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description |
---|---|---|
partnerServiceIdoptional |
string |
Parameter ini diabaikan oleh Xendit. |
customerNooptional |
string |
Parameter ini diabaikan oleh Xendit. |
virtualAccountNooptional |
string |
Parameter ini diabaikan oleh Xendit. |
trxIdrequired |
string |
ID yang disediakan merchant untuk transaksi terkait. Mohon diingat bahwa parameter ID ini harus bersifat unik untuk setiap Virtual Account. |
Parameter Respon
Example: Respon Sukses API Untuk Mendapatkan Status VA
{
"responseCode": "2002700",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": "123459",
"customerNo": "99993701870",
"virtualAccountNo": "1234599993701870",
"virtualAccountName": "John Doe",
"trxId": "12349876",
"expiredDate": "2023-12-31T23:59:59.000Z",
"additionalInfo": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"status": "ACTIVE",
"reusability": "MULTIPLE_USE",
"channelCode": "BRI"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
virtualAccountDataoptional |
object |
Hanya untuk respon berhasil
|
Kode Error
Contoh: Respon Error API Untuk Mendapatkan Status VA
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4003000 | Parsing error generik |
400 | 4003001 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4003002 | Field atau header yang wajib tidak ditemukan |
401 | 4013000 | Authorization error generik |
401 | 4013001 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4013001 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4013015 | Forbidden error generik |
403 | 4013023 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4093000 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4093001 | Sudah ada objek dengan reference yang sama |
VA - Perbarui
Endpoint: Memperbarui Virtual Account
POST https://api.xendit.co/snap/v1.0/transfer-va/update-va
SNAP Memperbarui Virtual Account
API ini dapat digunakan untuk memperbarui Virtual Account yang telah dibuat sebelumnya. Mohon dicatat bahwa Closed Virtual Account tidak dapat diubah/diperbarui menjadi Open Virtual Account, beget juga sebaliknya.(Service code: 28)
Parameter Request
Contoh: Request Memperbarui Virtual Account
curl https://api.xendit.co/snap/v1.0/transfer-va/update-va -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"virtualAccountName": "John Doe",
"totalAmount": {
"value": "10000.00",
"currency": "IDR"
},
"freeTexts": [
{
"english": "Please pay for service"
}
],
"expiredDate": "2020-12-31T23:59:59-07:00"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|
partnerServiceIdoptional |
string |
Parameter ini diabaikan oleh Xendit. | ||||||
customerNooptional |
string |
Parameter ini diabaikan oleh Xendit. | ||||||
virtualAccountNamerequired |
string |
Nama lengkap dari pembayar. Akan digunakan kanal pembayaran untuk memverifikasi identitas. Karakter yang diperbolehkan hanya dalam bentuk alfabet. Untuk BCA Aggregator, alfabet and nomor diperbolehkan. Panjang minimum 1 karakter, kecuali BCA dimana panjang minimum adalah 3 karakter. |
||||||
totalAmountconditionally required |
object |
Jumlah pembayaran yang diharapkan pada transaksi dalam mata uang yang didukung. Dapat dikosongkan untuk jumlah pembayaran Open Virtual Account. Kondisional untuk jumlah pembayaran Closed Virtual Account
|
||||||
freeTextsoptional |
array of object |
Xendit akan menggabungkan seluruh entri teks pada bagian ini untuk membentuk deskripsi Virtual Account. Free text objects
|
||||||
expiredDateoptional |
string |
ISO-8601 Tanggal kedaluwarsa untuk Virtual Account dalam format ISO-8601. Contoh: 2023-12-12T23:59:59+07:00. Tanggal kedaluwarsa standar adalah 31 tahun dari pembuatan Virtual Account | ||||||
additionalInforequired |
object |
Informasi tambahan untuk menyelesaikan pembayaran Object parameters details
|
Parameter Respon
Contoh: Respon Sukses API Untuk Request Memperbarui Virtual Account
{
"responseCode": "2002700",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": "123459",
"customerNo": "99993701870",
"virtualAccountNo": "1234599993701870",
"virtualAccountName": "John Doe",
"trxId": "12349876",
"expiredDate": "2023-12-31T23:59:59.000Z",
"additionalInfo": {
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"status": "ACTIVE",
"reusability": "MULTIPLE_USE",
"channelCode": "BRI"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
virtualAccountDataoptional |
object |
Hanya untuk respon berhasil
|
Kode Error
Contoh: Update Virtual Account Request API Error Response
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4002800 | Parsing error generik |
400 | 4002801 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4002802 | Field atau header yang wajib tidak ditemukan |
401 | 4012800 | Authorization error generik |
401 | 4012801 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4012801 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4012815 | Forbidden error generik |
403 | 4012823 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4092800 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4092801 | Sudah ada objek dengan reference yang sama |
VA - Nonaktifkan
Endpoint: Menonaktifkan Virtual Account
POST https://api.xendit.co/snap/v1.0/transfer-va/delete-va
SNAP Menonaktifkan Virtual Account
API ini dapat digunakan untuk menonaktifkan Virtual Account yang telah dibuat sebelumnya. (Service code: 31)
Parameter Request
Contoh: Request Menonaktifkan Virtual Account
curl https://api.xendit.co/snap/v1.0/transfer-va/delete-va -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"trxId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description |
---|---|---|
partnerServiceIdoptional |
string |
Parameter ini diabaikan oleh Xendit. |
customerNooptional |
string |
Parameter ini diabaikan oleh Xendit. |
virtualAccountNooptional |
string |
Parameter ini diabaikan oleh Xendit. |
trxIdrequired |
string |
ID yang disediakan merchant untuk transaksi terkait. Mohon diingat bahwa parameter ID ini harus bersifat unik untuk setiap Virtual Account. |
Parameter Respon
Example: Respon Sukses API Untuk Menonaktifkan Virtual Account
{
"responseCode": "2003100",
"responseMessage": "Success",
"virtualAccountData": {
"partnerServiceId": "123459",
"customerNo": "99993701870",
"virtualAccountNo": "1234599993701870",
"virtualAccountName": "John doe",
"trxId": "12349876",
"expiredDate": "2020-12-31T23:59:59-07:00",
"additionalInfo": {
"channelCode": "BRI",
"id": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"status": "EXPIRED"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
virtualAccountDataoptional |
object |
Hanya untuk respon berhasil
|
Kode Error
Contoh: Respon Error API Untuk Request Menonaktifkan Virtual Account
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4003100 | Parsing error generik |
400 | 4003101 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4003102 | Field atau header yang wajib tidak ditemukan |
401 | 4013100 | Authorization error generik |
401 | 4013101 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4013101 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4013115 | Forbidden error generik |
403 | 4013123 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4093100 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4093101 | Sudah ada objek dengan reference yang sama |
VA - Callback
Xendit akan memberitahu sistem Anda jika terdapat pembayaran yang berhasil melalui webhook. Anda perlu menyiapkan URL untuk menerima webhook tersebut. Silakan atur URL Anda di Webhook Settings.
Respon yang diharapkan adalah HTTP 200 status. Xendit akan menganggap event webhook gagal jika tidak terdapat respon Dalam 30 detik.
Pelajari lebih lanjut tentang Webhook.
Objek Header Notifikasi
Contoh: Payload Webhook Pembayaran Yang Berhasil
{
"type": "snap_virtual_account.payment",
"payload": {
"partnerServiceId": "38165",
"customerNo": "9999900674",
"virtualAccountNo": "381659999900674",
"virtualAccountName": "John Doe",
"trxId": "trx-1726657919",
"paymentRequestId": "pm-2803bb6c-f1e1-4d38-ad09-da25d5bdcf4a",
"paidAmount": {
"value": "10000.00",
"currency": "IDR"
},
"trxDateTime": "2024-09-18T11:12:19.000Z",
"referenceNo": "95ee9898-e6f6-4dba-aeb3-3198fcdf3cf9",
"freeTexts": [
{
"english": "Please pay for service"
}
],
"additionalInfo": {
"id": "95ee9898-e6f6-4dba-aeb3-3198fcdf3cf9",
"paymentId": "95ee9898-e6f6-4dba-aeb3-3198fcdf3cf9",
"country": "ID",
"status": "SUCCEEDED",
"created": "2024-09-18T11:12:20.631Z",
"updated": "2024-09-18T11:12:20.631Z",
"virtualAccountInfo": {
"id": "pm-2803bb6c-f1e1-4d38-ad09-da25d5bdcf4a",
"reusability": "MULTIPLE_USE",
"channelCode": "BCA",
"trxId": "trx-1726657919"
}
}
},
"headers": {
"x-partner-id": "64e8508e3a4184dd951c2f29",
"x-external-id": "XENDIT",
"channel-id": "XENDIT"
}
}
Header Object Parameter | Type | Description |
---|---|---|
channel-idrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
x-external-idrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
x-partner-idrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
x-signaturerequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
x-timestamprequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Objek Payload Notifikasi
Payload Object Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
partnerServiceIdrequired |
string |
Parameter ini diabaikan oleh Xendit. | ||||||||||||||||||||||||||||||||||||
customerNorequired |
string |
Parameter ini diabaikan oleh Xendit. | ||||||||||||||||||||||||||||||||||||
virtualAccountNorequired |
string |
Anda dapat menentukan nomor Virtual Account spesifik dalam parameter ini. Jika Anda tidak menentukannya, maka nomor Virtual Account random akan dipilihkan untuk Anda. Mohon pastikan nomor yang Anda tentukan berada dalam range Virtual Account Anda dan bukan bagian dari merchant code sebagai prefiks. | ||||||||||||||||||||||||||||||||||||
virtualAccountNamerequired |
string |
Nama lengkap dari pembayar. Akan digunakan kanal pembayaran untuk memverifikasi identitas. Karakter yang diperbolehkan hanya dalam bentuk alfabet. Untuk BCA Aggregator, alfabet and nomor diperbolehkan. Panjang minimum 1 karakter, kecuali BCA dimana panjang minimum adalah 3 karakter. |
||||||||||||||||||||||||||||||||||||
trxIdrequired |
string |
ID yang disediakan merchant untuk transaksi terkait. Mohon diingat bahwa parameter ID ini harus bersifat unik untuk setiap Virtual Account. | ||||||||||||||||||||||||||||||||||||
paidAmountrequired |
object |
Jumlah aktual yang dibayarkan Kondisional untuk jumlah Closed Virtual
|
||||||||||||||||||||||||||||||||||||
trxDateTimerequired |
string |
Timestamp dalam format ISO 8601 saat PaymentRequest dibuat. Contoh: 2020-08-29T09:12:33.001Z | ||||||||||||||||||||||||||||||||||||
referenceNorequired |
string |
ID pembayaran yang dapat digunakan untuk rekonsiliasi | ||||||||||||||||||||||||||||||||||||
freeTextsoptional |
array of object |
Xendit akan menggabungkan seluruh entri teks pada bagian ini untuk membentuk deskripsi Virtual Account. Objek free text
|
||||||||||||||||||||||||||||||||||||
additionalInforequired |
object |
Informasi tambahan untuk menyelesaikan pembayaran Detail parameter
|
Key | Value | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
paymentIdrequired |
string ID pembayaran internal dalam sistem Xendit |
||||||||||
countryoptional |
string Kode negara dalam format ISO 3166-2 yang terdiri dari 2 hurt, menjelaskan negara dimana transaksi dilakukan. |
||||||||||
statusrequired |
string Status dari pembayaran. Value yang tersedia: SUCCEEDED , FAILED
|
||||||||||
createdoptional |
string Timestamp dalam format ISO 8601 saat PaymentRequest dibuat. |
||||||||||
updatedoptional |
string Timestamp dalam format ISO 8601 saat PaymentRequest terakhir kali diperbarui. Example: 2020-08-29T09:12:33.001Z |
||||||||||
senderNameoptional |
string Nama dari end user yang membayar Virtual Account. Parameter ini hanya didukung oleh BSS VA |
||||||||||
paymentDetailoptional |
Informasi tambahan dari bank. Detail parameter
|
Key | Value |
---|---|
remarkoptional |
string Pesan yang diinput oleh pembayar saat akan melakukan pembayaran, hanya didukung oleh BSS. |
referenceoptional |
string Nomor referensi dari bank yang dapay digunakan untuk rekonsiliasi, hanya didukung oleh BCA dengan model komersial switcher. |
optional
object
Kolom bebas dalam format JSON untuk informasi tambahan lainnya. required
Detail parameter object
Key | Value |
---|---|
idrequired |
string ID Virtual Account. |
reusabilityrequired |
string Tipe Virtual Account. Value yang tersedia: ONE_TIME_USE , MULTIPLE_USE
|
channelCodeoptional |
string ID untuk partner kanal pembayaran. Value yang tersedia: BCA , BSI , BJB , CIMB SAHABAT_SAMPOERNA , ARTAJASA , BRI , BNI , MANDIRI , PERMATA
|
trxIdrequired |
string ID transaksi Virtual Account. |
QR - Pembuatan
Endpoint: Membuat QR
POST https://api.xendit.co/snap/v1.0/qr/qr-mpm-generate
SNAP Kode QR
API ini dapat digunakan untuk membuat kode QR. (Service code: 47)
Parameter Request
Contoh: Request Pembuatan QR
curl https://api.xendit.co/snap/v1.0/qr/qr-mpm-generate -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"partnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf7",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"reusability": "ONE_TIME_USE"
}
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
partnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual | ||||||||||
amountconditionally required |
object |
Jumlah pembayaran dari transaksi. Dibutuhkan untuk ONE_TIME_USE QR dan akan diabaikan untuk MULTIPLE_USE QR. Kondisional untuk
|
Key | Value |
---|---|
valuerequired |
string Untuk IDR, format harus memiliki 2 angka desimal. Contoh: IDR 10.000, - akan ditulis sebagai 10000.00 |
currencyrequired |
string Kode dengan format ISO 4217 yang terdiri dari 3 huruf, dari mata uang yang digunakan pada transaksi. Hanya dapat menggunakan IDR. |
required
object
Detail parameter objek
Key | Value |
---|---|
reusabilityrequired |
string Menjelaskan apakah kode QR dapat digunakan untuk sekali pembayaran atau dapat juga digunakan untuk pembayaran berulang. Value yang tersedia: ONE_TIME_USE , MULTIPLE_USE
|
paymentMethodReferenceIdoptional |
string ID yang disediakan merchant untuk payment method. Jika tidak disediakan, Xendit akan membuatkannya secara otomatis. |
metadataoptional |
string Tanggal dimana kode QR akan kedaluwarsa. Format: ISO-8601. |
metadataoptional |
object Kolom bebas dalam format JSON untuk informasi tambahan lainnya. |
Parameter Respon
Contoh: Respon Sukses API Untuk Request Pembuatan Kode QR
{
"responseCode": "2004700",
"responseMessage": "Successful",
"referenceNo": "2020102900000000000002",
"partnerReferenceNo": "f5e6bb35-2c51-4880-9f19-883856031c30",
"qrContent": "random-qr-string",
"additionalInfo": {
"paymentMethodId": "pm-8c5edad9-32f6-40fa-a24e-0c4e6874c943",
"paymentMethodReferenceId": "620b9df4-fe69-4bfd-b9d4-5cba6861dc7d",
"paymentMethodStatus": "PENDING",
"reusability": "ONE_TIME_USE",
"created": "2023-01-05T13:15:45.265367951Z",
"updated": "2023-01-05T13:15:45.265367951Z"
}
}
Body Parameter | Type | Description | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||
referenceNorequired |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||||||
partnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual. | ||||||||||||||||||
qrContentrequired |
string |
QR string yang diberikan untuk ditampilkan kepada end user. | ||||||||||||||||||
additionalInforequired |
object |
Informasi tambahan untuk menyelesaikan transaksi Detail objek parameter
|
Kode Error
Contoh: Respon Error API Untuk Request Pembuatan Kode QR
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4004700 | Parsing error generik |
400 | 4004701 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4004702 | Field atau header yang wajib tidak ditemukan |
401 | 4014700 | Authorization error generik |
401 | 4014701 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4014701 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4014715 | Forbidden error generik |
403 | 4014723 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4094700 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4094701 | Sudah ada objek dengan reference yang sama |
QR - Mendapatkan Status Pembayaran
Endpoint: Request Mendapatkan Status Pembayaran QR
POST https://api.xendit.co/snap/v1.0/qr/qr-mpm-query
SNAP Kode QR
API ini dapat digunakan untuk melakukan request untuk mendapatkan status pembayaran dari QR Payment Request. (Service code: 51)
Parameter Request
Contoh: Request Mendapatkan Status Pembayaran QR Code
curl https://api.xendit.co/snap/v1.0/qr/qr-mpm-query -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"serviceCode": "47",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
Body Parameter | Type | Description |
---|---|---|
originalPartnerReferenceNooptional |
string |
ID orisinil pada sistem layanan konsumer. Antara originalReferenceNo atau originalPartnerReferenceNo wajib ada pada request. |
originalReferenceNooptional |
string |
ID yang disediakan Xendit untuk payment request. Antara parameter ini atau referenceNo wajib disediakan. originalPartnerReferenceNo wajib ada pada request. |
serviceCoderequired |
string |
Harus diset sebagai '47' |
Parameter Respon
Contoh: Respon Sukses API Mendapatkan Status Pembayaran QR
{
"responseCode": "2005100",
"responseMessage": "Successful",
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77",
"serviceCode": "47",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"paymentMethodId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"paymentMethodReferenceId": "2020102900000000000001",
"reusability": "ONE_TIME_USE",
"paymentMethodStatus": "INACTIVE",
"created": "2020-08-29T09:12:33.001Z",
"updated": "2020-08-29T09:12:33.001Z",
"metadata": {
"sku": "ABCDEFGH"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||
originalReferenceNooptional |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||||||||
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual. | ||||||||||||||||||||
serviceCoderequired |
string |
Diset sebagai '47' | ||||||||||||||||||||
latestTransactionStatusrequired |
string |
Status transaksi terakhir. Value yang tersedia: 00 , 03 , 04 , 06 |
||||||||||||||||||||
transactionStatusDescoptional |
string |
Deskripsi status transaksi | ||||||||||||||||||||
amountconditionally required |
object |
Jumlah pembayaran dari transaksi Informasi objek
|
||||||||||||||||||||
additionalInforequired |
object |
Informasi tambahan untuk menyelesaikan transaksi Detail parameter objek
|
Kode Error
Contoh: Respon Error API Untuk Mendapatkan Status Pembayaran QR
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4005100 | Parsing error generik |
400 | 4005101 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4005102 | Field atau header yang wajib tidak ditemukan |
401 | 4015100 | Authorization error generik |
401 | 4015101 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4015101 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4015115 | Forbidden error generik |
403 | 4015123 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4095100 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4095101 | Sudah ada objek dengan reference yang sama |
QR - Callback
Xendit akan memberitahu sistem Anda jika terdapat pembayaran yang berhasil melalui webhook. Anda perlu menyiapkan URL untuk menerima webhook tersebut. Silakan atur URL Anda di Webhook Settings.
Respon yang diharapkan adalah HTTP 200 status. Xendit akan menganggap event webhook gagal jika tidak terdapat respon Dalam 30 detik.
Pelajari lebih lanjut tentang Webhook.
Objek Header Notifikasi
Example: Success Payment Webhook Payload
{
"type": "snap_qr.payment",
"payload": {
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"id": "qrpy-av8faa22-145e5-4766e-bdee-867c46f32cc4",
"paymentMethodId": "pm-0fec5f39-de53-42f0-8443-6bc037138e32",
"paymentMethodReferenceId": "331b2b98-2adf-43b5-8c3f-9b0d76026c9d",
"created": "2023-03-07T12:05:02.894821985Z",
"updated": "2023-03-07T12:05:02.894821985Z"
},
"headers": {
"x-partner-id": "64e8508e3a4184dd951c2f29",
"x-external-id": "XENDIT",
"channel-id": "XENDIT"
}
}
Header Object Parameter | Type | Description |
---|---|---|
channel-idrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
x-external-idrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
x-partner-idrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
x-signaturerequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
x-timestamprequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Objek Payload Notifikasi
Payload Object Parameter | Type | Description | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
originalReferenceNorequired |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. | ||||||||||||||
latestTransactionStatusrequired |
string |
Status terakhir dari transaksi. Value yang tersedia: 00 , 06 |
||||||||||||||
transactionStatusDescrequired |
string |
Deskripsi dari status transaksi | ||||||||||||||
amountrequired |
object |
Actual paid amount Informasi objek
|
||||||||||||||
additionalInforequired |
object |
Informasi tambahan mengenai pembayaran QR Detail parameter
|
Key | Value |
---|---|
idrequired |
string ID unik untuk pembayaran. |
paymentMethodIdrequired |
string ID unik untuk payment method. |
paymentMethodReferenceIdrequired |
string ID yang disediakan merchant untuk payment method. Jika tidak disediakan, Xendit akan membuatkannya secara otomatis. |
createdoptional |
string Timestamp dalam format ISO 8601 saat PaymentRequest dibuat. |
updatedoptional |
string TTimestamp dalam format ISO 8601 saat PaymentRequest terakhir kali diperbarui. Contoh: 2020-08-29T09:12:33.001Z |
metadataoptional |
object Kolom bebas dalam format JSON untuk informasi tambahan lainnya. |
Direct Debit - Buat Pembayaran
Endpoint: Membuat Pembayaran Direct Debit
POST https://api.xendit.co/snap/v1.0/debit/payment-host-to-host
SNAP Pembayaran Direct Debit
API ini dapat digunakan untuk menginisiasi pembayaran satu kali (one time payment) atau payment request dari akun yang sudah ditautkan sebelumnya (payment method harus sudah tersedia). Berdasarkan dari kode respon, action tambahan mungkin diperlukan, contoh: mengalihkan end user atau melakukan verifikasi pembayaran menggunakan OTP. API ini dapat digunakan untuk semua kanal pembayaran E-Wallet dan Direct Debit.(Service code: 54)
Parameter Request
Contoh: Request Buat Pembayaran Direct Debit
curl https://api.xendit.co/snap/v1.0/debit/payment-host-to-host -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"partnerReferenceNo": "2020102900000000000001",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"customerId": "fc4c060b-3c41-4707-b7b2-df9c3376edde",
"paymentMethodId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"channelProperties": {
"redeemPoints": "REDEEM_ALL"
},
"metadata": {
"sku": "ABCDEFGH"
}
}
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
WITH-SPLIT-RULEoptional |
string |
ID Split Rule yang akan Anda gunakan pada transaksi ini. Header ini hanya digunakan jika Anda adalah pengguna xenPlatform. Mohon diingat: Jika Anda menggunakan parameter ini, kami akan mengembalikan split_rule_id pada header dari respon API. Jika tidak terdapat header for-user-id, Split Rule akan tetap diberlakukan dari akun platform ke sub-account tujuan. |
Body Parameter | Type | Description | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
partnerReferenceNorequired |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual. | ||||||||||||||||||||||||||
amountconditionally required |
object |
Jumlah dari transaksi. Wajib untuk ONE_TIME_USE QR dan akan diabaikan untuk MULTIPLE_USE QR. Kondisional untuk
|
Key | Value |
---|---|
valuerequired |
string Untuk IDR, format harus memiliki 2 angka desimal. Contoh: IDR 10.000, - akan ditulis sebagai 10000.00 |
currencyrequired |
string Kode dengan format ISO 4217 yang terdiri dari 3 huruf, dari mata uang yang digunakan pada transaksi. Hanya dapat menggunakan IDR. |
optional
array
urlParam
dengan type PAY_RETURN dibutuhkan untuk for: OVO (MULTIPLE_USE), DANA, SHOPEEPAY.urlParam
dengan type FAILURE_RETURN dibutuhkan untuk for: OVO (MULTIPLE_USE), DANA (MULTIPLE_USE), SHOPEEPAY (MULTIPLE_USE) Informasi objek untuk masing-masing array item
Key | Value |
---|---|
urlrequired |
string URL dimana end customer akan diarahkan jika otorisasi berhasil (untuk skenario type PAY_RETURN), tidak berhasil (untuk skenario type FAILURE_RETURN) atau dibatalkan (untuk skenario CANCEL_RETURN) |
typerequired |
string Tipe URL. Value yang diperbolehkan: PAY_RETURN , FAILURE_RETURN , CANCEL_RETURN
|
isDeeplinkoptional |
boolean Menjelaskan apabila URL merupakan format deeplink. Xendit tidak mendukung URL deeplink untuk URL yang disediakan oleh merchant, maka field ini akan diabaikan. |
conditionally required
array
Informasi objek untuk masing-masing array item
Key | Value | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
payMethodrequired |
string Tipe dari payment method. Value yang tersedia: EWALLET , DIRECT_DEBIT |
||||||||||||||||||
payOptionrequired |
string ID/pengenal untuk partner kanal pembayaran. Value yang tersedia untuk payMethod EWALLET: OVO , DANA , LINKAJA , JENIUSPAY , ASTRAPAY , SHOPEEPAY . Value yang tersedia untuk payMethod DIRECT_DEBIT: BRI |
||||||||||||||||||
additionalInfoconditionally required |
object Dibutuhkan untuk OVO one time payment, BRI , JENIUSPAY
Informasi objek
|
optional
object
Detail objek parameter
Key | Value | ||||||
---|---|---|---|---|---|---|---|
customerIdrequired |
string ID yang disediakan oleh Xendit untuk end customer. Dibutuhkan untuk beberapa kanal pembayaran seperti Multiple-use e-wallet dan direct debit. |
||||||
paymentMethodIdoptional |
string ID dari PaymentMethod yang telah disimpan sebelumnya untuk digunakan pada transaksi ini. Wajib jika payOptionDetails tidak ditentukan. |
||||||
channelPropertiesoptional |
object Parameter tambahan untuk masing-masing kanal pembayaran Detail objek parameter
|
||||||
descriptionoptional |
string Kolom bebas untuk informasi tambahan lainnya yang berkaitan dengan payment request. |
||||||
metadataoptional |
object Kolom bebas dengan format JSON untuk informasi tambahan lainnya. |
Parameter Respon
Contoh: Respon Sukses API Membuat Pembayaran Direct Debit
{
"responseCode": "2005400",
"responseMessage": "Successful",
"referenceNo": "ewc_6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"partnerReferenceNo": "2020102900000000000001",
"webRedirectUrl": "https://link-web.xendit.co/oauth/lat-4ec01c8d-0326-4a35-bc11-b64c85f7408e/confirm",
"additionalInfo": {
"paymentMethodId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"actions": [
{
"action": "AUTH",
"method": "GET",
"url": "https://link-web.xendit.co/oauth/lat-4ec01c8d-0326-4a35-bc11-b64c85f7408e/confirm",
"urlType": "WEB"
}
],
"metadata": {
"sku": "ABCDEFGH"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||
referenceNooptional |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||||||||||
partnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual | ||||||||||||||||||||||
approvalCodeoptional |
string |
Jika status transaksi adalah FAILED, parameter ini menjelaskan alasan kegagalan. Tidak akan muncul jika status transaksi tidak gagal. | ||||||||||||||||||||||
appRedirectUrloptional |
string |
URL pengalihan yang disediakan menggunakan deep linking untuk mengarahkan ke platform partner. | ||||||||||||||||||||||
webRedirectUrloptional |
string |
Url pengalihan yang disediakan dioptimalkan untuk desktop atau tampilan web. | ||||||||||||||||||||||
additionalInfooptional |
object |
Informasi tambahan mengenai transaksi Detail objek parameter
|
Code Error
Contoh: Respon Error API Pembuatan Pembayaran Direct Debit
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4005400 | Parsing error generik |
400 | 4005401 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4005402 | Field atau header yang wajib tidak ditemukan |
401 | 4015400 | Authorization error generik |
401 | 4015401 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4015401 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4015415 | Forbidden error generik |
403 | 4015423 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4095400 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4095401 | Sudah ada objek dengan reference yang sama |
Direct Debit - Mendapatkan Status Pembayaran
Endpoint: Request Mendapatkan Status Pembayaran Direct Debit
POST https://api.xendit.co/snap/v1.0/debit/status
SNAP Menampilkan Pembayaran Direct Debit
API ini dapat digunakan untuk mendapatkan status dari Payment request spesifik. (Service code: 55)
Parameter Request
Contoh: Request Mendapatkan Status Pembayaran Direct Debit
curl https://api.xendit.co/snap/v1.0/debit/status -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77",
"serviceCode": "54"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
FOR-USER-IDoptional |
string |
user-id dari sub-account yang akan Anda buatkan transaksi. Header ini hanya digunakan jika Anda memiliki akses ke xenPlatform. |
Body Parameter | Type | Description |
---|---|---|
originalPartnerReferenceNooptional |
string |
ID transaksi orisinil dari sistem layanan konsumer. Antara parameter ini atau originalReferenceNo wajib diisi |
originalReferenceNooptional |
string |
ID yang disediakan oleh Xendit untuk payment request. Antara parameter ini atau originalPartnerReferenceNo wajib diisi |
serviceCoderequired |
string |
Harus diset menjadi ‘54’ |
Parameter Respon
Contoh: Respon Sukses API Mendapatkan Status Pembayaran Direct Debit
{
"responseCode": "2005500",
"responseMessage": "Successful",
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77",
"serviceCode": "54",
"latestTransactionStatus": "03",
"transactionStatusDesc": "REQUIRES_ACTION",
"transAmount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"customerId": "fc4c060b-3c41-4707-b7b2-df9c3376edde",
"paymentMethodId": "pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"paymentMethodReferenceId": "2020102900000000000001",
"actions": [
{
"action": "RESEND_AUTH",
"method": "POST",
"url": "https://merchant-url/resent-otp",
"urlType": "DEEPLINK"
}
],
"channelProperties": {},
"metadata": {
"sku": "ABCDEFGH"
}
}
}
Body Parameter | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||||||||||||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||||||||||||||||||||||||||||
originalReferenceNooptional |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||||||||||||||||||||||||||||||||
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual | ||||||||||||||||||||||||||||||||||||||||||||
serviceCoderequired |
string |
Set menjadi '54' | ||||||||||||||||||||||||||||||||||||||||||||
latestTransactionStatusrequired |
string |
Status transaksi terakhir. Value yang tersedia: 00 , 01 , 02 , 03 , 04 , 05 , 06 , 07 |
||||||||||||||||||||||||||||||||||||||||||||
transactionStatusDescoptional |
string |
Deskripsi status transaksi | ||||||||||||||||||||||||||||||||||||||||||||
transAmountconditionally required |
object |
Amount of the transaction Informasi objek
|
||||||||||||||||||||||||||||||||||||||||||||
additionalInfooptional |
object |
Informasi tambahan mengenai transaksi Detail objek parameter
|
Code Error
Contoh: Respon Error API Mandapatkan Status Pembayaran Direct Debit
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4005500 | Parsing error generik |
400 | 4005501 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4005502 | Field atau header yang wajib tidak ditemukan |
401 | 4015500 | Authorization error generik |
401 | 4015501 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4015501 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4015515 | Forbidden error generik |
403 | 4015523 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4095500 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4095501 | Sudah ada objek dengan reference yang sama |
Direct Debit - Pengembalian Dana
Endpoint: Request Pengembalian Dana Pembayaran Direct Debit
POST https://api.xendit.co/snap/v1.0/debit/refund
SNAP Pengembalian Dana Pembayaran Direct Debit
API ini dapat digunakan untuk pengembalian dana pembayaran (Service code: 58)
Parameter Request
Contoh: Request Pengembalian Dana Direct Debit
curl https://api.xendit.co/snap/v1.0/debit/refund -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77",
"partnerRefundNo": "5eea215e-e116-439a-a087-76fc906501e1",
"reason": "FRAUDULENT",
"refundAmount": {
"value": "100000.00",
"currency": "IDR"
}
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|
originalPartnerReferenceNooptional |
string |
ID transaksi orisinil dari sistem layanan konsumer. Antara parameter ini atau originalReferenceNo wajib diisi | ||||||
originalReferenceNooptional |
string |
Xendit ID yang disediakan oleh Xendit untuk payment request. Antara parameter ini atau originalPartnerReferenceNo wajib diisi | ||||||
partnerRefundNooptional |
string |
ID yang disediakan oleh merchant untuk request pengembalian dana. Jika merchant tidak menyediakan, maka akan dibuat secara otomatis. | ||||||
refundAmountconditionally required |
object |
Jika refundAmount tidak disediakan, request pengembalian dana akan menginput jumlah terbesar yang memungkinkan untuk dikembalikan dari transaksi terkait. Kondisional untuk
|
Key | Value |
---|---|
valuerequired |
string Untuk IDR, format harus memiliki 2 angka desimal. Contoh: IDR 10.000, - akan ditulis sebagai 10000.00 |
currencyrequired |
string Kode dengan format ISO 4217 yang terdiri dari 3 huruf, dari mata uang yang digunakan pada transaksi. Hanya dapat menggunakan IDR. |
optional
string
FRAUDULENT
, DUPLICATE
, REQUESTED_BY_CUSTOMER
, CANCELLATION
, OTHERS
optional
object
Detail objek parameter
Key | Value |
---|---|
metadataoptional |
object Kolom bebas dengan format JSON untuk informasi tambahan lainnya. |
Parameter Respon
Contoh: Respon Sukses API Untuk Request Menampilkan Direct Debit
{
"responseCode": "2005800",
"responseMessage": "Successful",
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"refundNo": "rfd-b0abb4fe-4b98-4c07-92d4-3f33fc79aefc",
"partnerRefundNo": "5eea215e-e116-439a-a087-76fc906501e1",
"refundAmount": {
"value": "100000.00",
"currency": "IDR"
},
"additionalInfo": {
"channelCode": "SHOPEEPAY",
"status": "SUCCESS",
"reason": "FRAUDULENT"
}
}
Body Parameter | Type | Description | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
responseCoderequired |
string |
Kode respon | ||||||||||||||||||
responseMessagerequired |
string |
Deskripsi respon | ||||||||||||||||||
originalReferenceNooptional |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. | ||||||||||||||||||
refundNooptional |
string |
ID yang disediakan Xendit untuk request pengembalian dana | ||||||||||||||||||
partnerRefundNooptional |
string |
ID yang disediakan oleh merchant untuk request pengembalian dana. Jika merchant tidak menyediakan, maka akan dibuat secara otomatis. | ||||||||||||||||||
refundAmountconditionally required |
object |
Jika refundAmount tidak disediakan, request pengembalian dana akan menginput jumlah terbesar yang memungkinkan untuk dikembalikan dari transaksi terkait. Kondisional untuk
|
Key | Value |
---|---|
valuerequired |
string Untuk IDR, format harus memiliki 2 angka desimal. Contoh: IDR 10.000, - akan ditulis sebagai 10000.00 |
currencyrequired |
string Kode dengan format ISO 4217 yang terdiri dari 3 huruf, dari mata uang yang digunakan pada transaksi. Hanya dapat menggunakan IDR. |
required
object
Detail objek parameter
Key | Value |
---|---|
channelCoderequired |
string ID untuk partner kanal pembayaran |
statusrequired |
string Status dari pengembalian dana. Value yang tersedia: SUCCESS , FAILED , PENDING
|
reasonrequired |
string Alasan mengapa request pengembalian dana dilakukan. Value yang tersedia: FRAUDULENT , DUPLICATE , REQUESTED_BY_CUSTOMER
|
failureCodeoptional |
string status transaksi adalah gagal, parameter ini menjelaskan alasan kegagalan.. |
refundFeeAmountoptional |
string Biaya tambahan untuk memproses pengembalian dana. Hanya diisi jika berlaku. |
createdoptional |
string Timestamp dalam format ISO 8601 saat payment request dibuat |
updated optional |
string Timestamp dalam format ISO 8601 saat payment request terakhir kali diperbarui |
metadataoptional |
object Kolom bebas dalam format JSON untuk informasi tambahan lainnya. |
Kode Error
Contoh: Respon Error API Untuk Pengembalian Dana Direct Debit
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4005800 | Parsing error generik |
400 | 4005801 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4005802 | Field atau header yang wajib tidak ditemukan |
401 | 4015800 | Authorization error generik |
401 | 4015801 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4015801 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4015815 | Forbidden error generik |
403 | 4015823 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4095800 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4095801 | Sudah ada objek dengan reference yang sama |
Direct Debit - Verifikasi OTP
Endpoint: Request Verifikasi OTP Pembayaran Direct Debit
POST https://api.xendit.co/snap/v1.0/otp-verification
SNAP Verifikasi OTP
API ini dapat digunakan untuk melakukan verifikasi OTP jika dibutuhkan pada proses pembayaran.(Service code: 04)
Parameter Request
Contoh: Request Verifikasi OTP Direct Debit
curl https://api.xendit.co/snap/v1.0/otp-verification -X POST \
--user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
--header 'CHANNEL-ID: 123123' \
--header 'Content-Type: application/json' \
--header 'X-EXTERNAL-ID: 123123' \
--header 'X-PARTNER-ID: 123123' \
--header 'X-SIGNATURE: fc4c060b3c414707b7b2df9c3376edde' \
--header 'X-TIMESTAMP: 2020-08-29T09:12:33.001Z' \
--data '{
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"otp": "123456",
"type": "payment"
}' \
Header Parameter | Type | Description |
---|---|---|
CHANNEL-IDrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
X-EXTERNAL-IDrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
X-PARTNER-IDrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
X-SIGNATURErequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
X-TIMESTAMPrequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Body Parameter | Type | Description |
---|---|---|
originalReferenceNooptional |
string |
Xendit D yang disediakan oleh Xendit untuk payment request. Antara parameter ini atau originalPartnerReferenceNo wajib diisi |
otpoptional |
string |
Kode otorisasi atau OTP yang diinput oleh end customer |
typeoptional |
string |
Harus diset sebagai 'payment'. Value yang tersedia: payment |
Parameter Respon
Contoh: Respon Sukses API Untuk Request Menampilkan Direct Debit
{
"responseCode": "2000400",
"responseMessage": "Successful",
"originalReferenceNo": "pr-bc9faa22-23e5-486e-bfee-869c46d32cc3",
"originalPartnerReferenceNo": "0f38e017-007f-4134-9e5d-86657ec0cf77"
}
Body Parameter | Type | Description |
---|---|---|
responseCoderequired |
string |
Kode respon |
responseMessagerequired |
string |
Deskripsi respon |
originalReferenceNooptional |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan. |
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait. Akan diteruskan ke transaksi pembayaran aktual |
customerIdoptional |
string |
ID yang disediakan Xendit untuk end customer |
Kode Error
Contoh: Respon Error Untuk API Verifikasi OTP
{
"responseCode": "4000000",
"responseMessage": "Bad Request"
}
HTTP error | Response Code | Response Message |
---|---|---|
400 | 4000400 | Parsing error generik |
400 | 4000401 | Format field yang tidak sesuai (contoh: format string digunakan saat seharusnya menggunakan format number, atau penggunaan enum value yang tidak sesuai, dll.) |
400 | 4000402 | Field atau header yang wajib tidak ditemukan |
401 | 4010400 | Authorization error generik |
401 | 4010401 | Authorization bearer token yang disediakan tidak sesuai |
403 | 4010401 | Merchant tidak diperbolehkan untuk melakukan request ini |
403 | 4010415 | Forbidden error generik |
403 | 4010423 | Jumlah pada parameter amount yang ditetapkan lebih besar atau lebih kecil dari yang didukung oleh kanal pembayaran |
409 | 4090400 | X-EXTERNAL-ID token yang sama telah digunakan dalam 24 jam terakhir |
409 | 4090401 | Sudah ada objek dengan reference yang sama |
Direct Debit - Callback
Xendit akan memberitahu sistem Anda jika terdapat pembayaran yang berhasil melalui webhook. Anda perlu menyiapkan URL untuk menerima webhook tersebut. Silakan atur URL Anda di Webhook Settings.
Respon yang diharapkan adalah HTTP 200 status. Xendit akan menganggap event webhook gagal jika tidak terdapat respon Dalam 30 detik.
Pelajari lebih lanjut tentang Webhook.
Objek Header Notifikasi
Contoh: Payload Webhook Pembayaran Yang Berhasil
{
"type": "snap.direct_debit.succeeded",
"payload": {
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"createdTime": "2020-08-29T09:12:33.001Z",
"additionalInfo": {
"id": "ddpy-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"updated": "2020-08-29T09:12:33.001Z",
"paymentMethodId": "pm-5f964f11-3a74-4df2-bdc4-0778b3e836d4",
"paymentMethodReferenceId": "c2a6c16f-84b9-4f21-8db3-dc0ddcbbfec7"
},
"originalReferenceNo": "ddpy-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39",
"transactionStatusDesc": "Success",
"latestTransactionStatus": "00",
"originalPartnerReferenceNo": "c2a6c16f-84b9-4f21-8db3-dc0ddcbbfec7"
},
"headers": {
"x-partner-id": "64e8508e3a4184dd951c2f29",
"x-external-id": "XENDIT",
"channel-id": "XENDIT"
}
}
Header Object Parameter | Type | Description |
---|---|---|
channel-idrequired |
string |
Identifikasi perangkat API service yang diakses oleh pengguna. Jika tidak tersedia, silakan set sebagai ‘unknown’. |
Content-Typerequired |
string |
Harus diset ke application/json |
x-external-idrequired |
string |
Juga diketahui sebagai idempotency key. Disediakan untuk menghindari request yang terduplikasi. Bisa dianggap sama dengan UUID manapun. Idempotency keys akan disimpan pada request layer; dan akan kedaluwarsa setelah 24 jam setelah request pertama. Contoh: f4d53a90-86aa-46f4-8738-169a4912eff0 |
x-partner-idrequired |
string |
Client ID Xendit Anda. Contoh: 7049bc78-0600-43b8-a6be-25225bf9344c |
x-signaturerequired |
string |
Signature yang tidak dapat disangkal untuk request. Pelajari artikel ini untuk informasi lebih lanjut. |
x-timestamprequired |
string |
Timestamp untuk X-SIGNATURE. Format yang digunakan adalah yyyy-MM-ddTHH:mm:ssTZD. |
Objek Payload Notifikasi
Payload Object Parameter | Type | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
originalReferenceNorequired |
string |
ID unik untuk payment request. Prefiks menyesuaikan dengan payment method yang digunakan | ||||||||||||||||||||||||
originalPartnerReferenceNooptional |
string |
ID yang disediakan merchant untuk transaksi terkait | ||||||||||||||||||||||||
latestTransactionStatusrequired |
string |
Status transaksi terbaru dari pembayaran tersebut. Value yang diperbolehkan: 00 , 06 |
||||||||||||||||||||||||
transactionStatusDescrequired |
string |
Deskripsi dari status transaksi | ||||||||||||||||||||||||
createdTimerequired |
string |
Timestamp dalam format ISO 8601 saat PaymentRequest dibuat. Contoh: 2024-08-29T09:12:33.001Z | ||||||||||||||||||||||||
amountrequired |
object |
Jumlah aktual yang dibayar Informasi objek
|
||||||||||||||||||||||||
additionalInforequired |
object |
Informasi tambahan tentang pembayaran.
|
Key | Value | ||||||
---|---|---|---|---|---|---|---|
idrequired |
string ID unik utuk pembayaran. |
||||||
paymentMethodIdrequired |
string ID unit untuk payment method. |
||||||
paymentMethodReferenceIdrequired |
string ID yang disediakan oleh merchant untuk payment method terkait. Jika merchant tidak menyediakannya, Xendit akan mengisinya secara otomatis. |
||||||
createdoptional |
string Timestamp dalam format ISO 8601 saat PaymentRequest dibuat. |
||||||
updatedoptional |
string Timestamp dalam format ISO 8601 saat PaymentRequest terakhir kali diperbarui. Example: 2020-08-29T09:12:33.001Z |
||||||
descriptionoptional |
string deskripsi dari payment request. |
||||||
failureCodeoptional |
string Jika status dari transaksi adalah gagal, parameter ini akan menjelaskan alasan dari kegagalan. |
||||||
channelPropertiesoptional |
object Informasi tambahan mengenai kanal pembayaran.
|
Key | Value |
---|---|
successReturnUrlrequired |
string URL dimana end customer akan diarahkan jika otorisasi berhasil. |
failureReturnUrlrequired |
string URL dimana end customer akan diarahkan jika otorisasi gagal. |
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": "2029",
"card_holder_first_name": "John",
"card_holder_last_name": "Doe",
"card_holder_email": "johndoe@gmai.com",
"card_holder_phone_number": "628212223242526"
},
"external_id":"TEST1234",
"card_cvn": "123",
"is_multiple_use": false,
"should_authenticate": true,
"currency": "IDR"
}
Contoh objek tokenData untuk melakukan proses retokenize
{
"amount": "10000",
"credit_card_token_id": "58e2096018b815f555c8a524",
"card_cvn": "123",
"is_multiple_use": false,
"should_authenticate": true,
"external_id": "TEST1234"
}
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.
Retokenize
Saat melakukan otorisasi/charge kartu kredit, mengirimkan CVV dapat membantu meningkatkan tingkat keberhasilan suatu transaksi. Sesuai dengan kebijakan PCIDSS di mana CVV tidak boleh diproses dari server ke server (kecuali Anda adalah perusahaan yang bersertifikat PCIDSS), fitur retokenisasi dapat membantu Anda mengumpulkan CVV dari pelanggan Anda (dari sisi client atau frontend), kemudian mengirimkannya ke Xendit, sehingga CVV akan diteruskan ke prosesor saat permintaan otorisasi dilakukan.
Parameter Request (Money-in write permission)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-idoptional |
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
|
|||||||||||||||||||||||||||||||||||||||||
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:
|
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
|
|||||||||||||||||||||||||||||||||||||||||
customeroptional |
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
| |
||||||||||||||||||||||||||||||||||||||||
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 |
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",
"network_response": {
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
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. | ||||||||||
statusrequired |
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
|
||||||||||
network_responseoptional |
object |
Kode-kode error ini diberikan sebagai data dan wawasan tambahan. Silahkan cek dokumentasi penolakan kartu kami untuk informasi yang lebih detail tentang ini. network_response details child parameters
|
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 |
Status ini berarti customer berusaha melakukan otentikasi menggunakan 3DS tetapi tidak berhasil melengkapi proses otentikasi |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
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_FORMAT400 |
Isi dari request bukan format JSON yang benar. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter. |
ACCOUNT_NUMBER400 |
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_NOT400 |
Merek kartu tidak didukung. Sarankan pengguna untuk menggunakan Visa/Mastercard. |
AUTHENTICATION400 |
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_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
VERIFICATION408 |
Jaringan kartu kredit mengalami timed out ketika berusaha melakukan tokenisasi. |
TEMPORARY503 |
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-idoptional |
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_TOKEN404 |
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",
"external_id": "TEST1234",
"card_data": {
"card_holder_first_name": "John",
"card_holder_last_name": "Doe",
"card_holder_email": "johndoe@gmai.com",
"card_holder_phone_number": "628212223242526"
},
"mid_label": "MPGS_TIDNEX_3DS"
}
Contoh Respon Otentikasi
{
"id": "58e2097218b815f555c8a526",
"external_id": "TEST1234",
"status": "VERIFIED",
"network_response": {
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
Parameter Request (Money-in write permission)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-idoptional |
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 |
Body Parameter | Type | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
amount optional |
string |
Jumlah yang akan diautentikasi dan diproses saat pembayaran (charge). Hanya diperlukan untuk token penggunaan tunggal dengan otentikasi yang dibundel. | ||||||||||
card_data optional |
object |
Informasi tambahan terkait dengan data kartuparameter tambahan untuk data kartu
|
||||||||||
external_id optional |
string |
Referensi yang Anda gunakan untuk melakukan permintaan otentikasi. | ||||||||||
token_id optional |
string |
ID dari token yang sudah dibuat pada sistem Xendit | ||||||||||
currency optional |
string |
Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO. Xendit secara default mendukung pemrosesan mata uang sebagai berikut: IDR untuk Indonesia PHP dan USD untuk Filipina MYR untuk Malaysia THB untuk Thailand VND untuk Vietnam Mata uang lain dapat diproses sesuai dengan konfigurasi MID Anda. 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 |
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. |
network_response optional |
string |
Kode-kode error ini diberikan sebagai data dan wawasan tambahan. Silahkan cek dokumentasi penolakan kartu kami untuk informasi yang lebih detail tentang ini. |
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",
"network_response": {
"card_network_response_code": "65",
"card_network_descriptor": "Exceeds withdrawal count limit",
"network_transaction_id": "123456",
"merchant_advice_code": "28",
"merchant_advice_descriptor": "Retry after 6 days",
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
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-idoptional |
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: .
|
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_REVERSED400 |
Charge telah dilakukan pengembalian, maka dari itu pengembalian otorisasi tidak dapat dilakukan |
CHARGE_ALREADY_CAPTURED400 |
Charge telah dilaukan capture , maka dari itu pengembalian otorisasi tidak dapat dilakukan |
CHARGE_FAILED400 |
Charge gagal, maka dari itu pengembalian otorisasi tidak dapat dilakukan |
REQUEST_FORBIDDEN403 |
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_CHARGE404 |
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-idoptional |
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-ruleopsional |
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 optionaldefault:
|
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
|
|||||||||||||||||||||||||||||
metadataoptional |
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
|
|||||||||||||||||||||||||||||
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.
|
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"
},
"network_response": {
"card_network_response_code": "65",
"card_network_descriptor": "Exceeds withdrawal count limit",
"network_transaction_id": "123456",
"merchant_advice_code": "28",
"merchant_advice_descriptor": "Retry after 6 days",
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
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 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
createdrequired |
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
|
||||||||||||||||
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
|
||||||||||||||||
network_responseoptional |
object |
Kode-kode error ini diberikan sebagai data dan wawasan tambahan. Silahkan cek dokumentasi penolakan kartu kami untuk informasi yang lebih detail tentang ini. network_response details child parameters
|
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_ALREADY400 |
ID Token Sekali Pakai sudah pernah digunakan ketika melakukan Charge. Mohon untuk menggunakan ID Token yang berbeda untuk melakukan Charge. |
AUTHENTICATION400 |
ID otentikasi sudah pernah digunakan ketika melakukan charge. Mohon untuk menggunakan ID otentikasi yang berbeda untuk melakukan Charge |
INVALID_TOKEN_ID400 |
Format ID token tidak valid. Mohon dapat mencoba mengulangi request dengan memperbaiki input parameter. |
INVALID_CVN400 |
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_ID400 |
ID Otentikasi wajib diisi. Mohon untuk menambahkan ID otentikasi ke dalam request. |
AMOUNT_GREATER_THAN400 |
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_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
TOKEN_NOT404 |
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_NOT404 |
Token yang telah diotentikasi dengan otentikasi ID tersebut tidak ditemukan. Mohon cek kembali apakah ID otentikasi tersebut sudah terdaftar. |
MID_NOT404 |
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: |
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: |
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: |
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:
- Berperan sebagai lapisan keamanan tambahan untuk otorisasi transaksi yang datang dari pemilik kartu sebenarnya
- Meningkatkan kepercayaan bank untuk menerima transaksi karena dapat mengindikasikan transaksi tersebut dibuat oleh pemilik kartu sebenarnya
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.
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",
"network_response": {
"card_network_response_code": "65",
"card_network_descriptor": "Exceeds withdrawal count limit",
"network_transaction_id": "123456",
"merchant_advice_code": "28",
"merchant_advice_descriptor": "Retry after 6 days",
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
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-idoptional |
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_THAN400 |
Nominal capture melebihi nominal yang terotorisasi. |
INVALID_CHARGE400 |
Status charge tidak terotorisasi. Mohon untuk otorisasi transaksi dan lakukan capture kembali |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
CREDIT_CARD_CHARGE404 |
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-KEYoptional |
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-idoptional |
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: . |
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_AMOUNT400 |
Nominal refund melebihi total charge |
DUPLICATE_REFUND400 |
external_id sudah pernah digunakan |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
CREDIT_CARD_CHARGE404 |
credit_card_charge_id tidak ditemukan |
REFUND_TEMPORARILY_UNAVAILABLE 400 |
Fitur refund tidak tersedia. Mohon coba kembali beberapa saat lagi. |
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",
"network_response": {
"card_network_response_code": "65",
"card_network_descriptor": "Exceeds withdrawal count limit",
"network_transaction_id": "123456",
"merchant_advice_code": "28",
"merchant_advice_descriptor": "Retry after 6 days",
"three_ds_trans_status": "Y",
"three_ds_flow": "CHALLENGE"
}
}
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-idoptional |
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_CHARGE404 |
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:
- Pembayaran menggunakan cicilan
- Pembayaran menggunakan promo
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.
|
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_idrequired |
string ID dari bisnis Anda yang terdapat di dalam sistem Xendit. |
||||||||||||||||||||
binrequired |
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. |
||||||||||||||||||||
promotions optional |
array Array berisikan detil dari daftar promo yang tersedia rincian parameter promosi
|
||||||||||||||||||||
installments optional |
object Menjelaskan tentang opsi cicilan yang tersedia. parameter tambahan untuk cicilan
|
||||||||||||||||||||
reward optional |
object Jika fitur rewards tersedia pada kartu, objek ini akan dikembalikan di dalam respons. parameter rinci dari reward
|
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.
|
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 .
|
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.
|
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.
|
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 .
|
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.
|
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.
|
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_ERROR403 |
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_USE409 |
Referensi sudah digunakan pada promo lain. Mohon gunakan nama atau referensi yang lain. |
PROMO_CODE_IN_USE409 |
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 .
|
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.
|
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.
|
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-idopsional |
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-ruleopsional |
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_idwajib |
string |
Reference ID yang disediakan oleh merchant (255 karakter) | ||||||||||||||||||||||||||||||||||||||||
currencywajib |
string |
Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR , PHP |
||||||||||||||||||||||||||||||||||||||||
amountwajib |
number |
Nominal yang harus dibayarkan Minimal - 1,000 IDR untuk ID_JENIUSPAY dan 100 IDR atau 1 PHP untuk eWallet lainnyaMaksimal - berdasarkan saldo maksimal eWallet |
||||||||||||||||||||||||||||||||||||||||
checkout_methodwajib |
string |
Metode checkout yang menentukan alur pembayaran untuk memproses transaksiONE_TIME_PAYMENT digunakan untuk checkout sekali pakaiTOKENIZED_PAYMENT dapat digunakan untuk pembayaran berulang |
||||||||||||||||||||||||||||||||||||||||
channel_codewajib jika checkout_method =
|
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_propertieswajib ketika
|
object |
Menunjukkan informasi yang dibutuhkan untuk memulai transaksi OVO - one time payment parameter wajib
JENIUS PAY parameter wajib
OVO - tokenized payment parameter wajib
DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
SHOPEEPAY - parameter wajib tokenized payment
GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
MAYA (PAYMAYA) parameter wajib
|
||||||||||||||||||||||||||||||||||||||||
payment_method_idwajib jika checkout_method =
|
string |
ID dari payment method. Payment method digunakan untuk melakukan tokenisasi pembayaran untuk menandai eWallet end user sebagai metode pembayaran | ||||||||||||||||||||||||||||||||||||||||
customer_idopsional |
string |
ID dari customer object dimana payment method akan dihubungkan. Gunakan Create Customer API untuk melakukan request Customer | ||||||||||||||||||||||||||||||||||||||||
basketopsional |
array |
Himpunan objek yang mendeskripsikan item yang dibeli Detail parameter objek
|
||||||||||||||||||||||||||||||||||||||||
metadataopsional |
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
business_idwajib |
string |
Business ID dari merchant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
reference_idwajib |
string |
Reference ID yang dibuat oleh merchant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
statuswajib |
string |
Status request charge
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
currencywajib |
string |
Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR , PHP |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
charge_amountwajib |
number |
Nominal charge yang direquest dari merchant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
capture_amountopsional |
number |
Nominal capture yang direquest oleh merrchant. Saat ini, capture_amount akan selalu sama dengan charge_amount |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
refunded_amountopsional |
number |
Total nominal refund dari merchant kepada end user | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
checkout_methodwajib |
string |
Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksiONE_TIME_PAYMENT digunakan untuk checkout sekali pakai |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
channel_codewajib |
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_propertieswajib |
object |
Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi OVO - one time payment parameter wajib
JENIUS PAY parameter wajib
OVO - tokenized payment parameter wajib
DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
SHOPEEPAY - parameter wajib tokenized payment
GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
Parameter wajib MAYA (PAYMAYA)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
actionsopsional |
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
Channel wajib pengalihan informasi lebih lanjut
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_redirect_requiredwajib |
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_urlwajib |
string |
Callback URL dimana notifikasi pembayaran akan dikirimkan | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedwajib |
string |
ISO 8601 Timestamp untuk update object charge. Timezone UTC+0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
void_statusopsional |
string |
Status request void. Nilai tersedia: PENDING , FAILED , SUCCEEDED |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
voided_atopsional |
string |
ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
capture_nowwajib |
string |
Default: true . Parameter tidak digunakan saat ini |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
customer_idopsional |
string |
ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
payment_method_idopsional |
string |
ID metode pembayaran dari Xendit sebagai representasi metode pembayaran pelanggan Anda. Hanya dapat digunakan untuk kanal yang mendukung pembayaran tokenisasi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
failure_codeopsional |
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
basketopsional |
array |
Himpunan objek yang mendeskripsikan item yang dibeli Detail objek parameter
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadataopsional |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
UNSUPPORTED_CURRENCY400 |
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_ID400 |
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_KEY401 |
Format API key tidak valid |
INVALID_MERCHANT_CREDENTIALS401 |
Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request |
CHANNEL_NOT_ACTIVATED403 |
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_FOUND404 |
Request pembayaran gagal dikarenakan tidak ditemukan callback url pada dashboard Xendit atau pada request header. Silakan masukkan callback url pada dashboard Xendit |
UNSUPPORTED_CONTENT_TYPE403 |
Tidak mendukung tipe konten yang di request |
CHARGE_LIMIT_EXCEEDED429 |
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_ERROR500 |
Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu |
CHANNEL_UNAVAILABLE503 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
eventwajib |
string |
Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.capture terjadi ketika provider eWallet mengkonfirmasi status transaksi pembayaran |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
business_idwajib |
string |
Business ID dari merchant | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dataopsional |
object |
Objek charge eWallet akan dikumpulkan pada parameter ini. Silakan lihat bagian ini untuk informasi lengkapnya Data fields
|
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-idopsional |
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 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4 | ||||||||||||||||||||||||||||||||||||||||
business_idwajib |
string |
Business ID dari merchant | ||||||||||||||||||||||||||||||||||||||||
reference_idwajib |
string |
Reference ID yang dibuat oleh merchant Catatan: Harus unik per request pembayaran. |
||||||||||||||||||||||||||||||||||||||||
statuswajib |
string |
Status request charge
|
||||||||||||||||||||||||||||||||||||||||
currencywajib |
string |
Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR , PHP |
||||||||||||||||||||||||||||||||||||||||
charge_amountwajib |
number |
Nominal charge yang direquest dari merchant | ||||||||||||||||||||||||||||||||||||||||
capture_amountopsional |
number |
Nominal capture yang direquest oleh merchant. Saat ini, capture_amount akan selalu sama dengan charge_amount |
||||||||||||||||||||||||||||||||||||||||
refunded_amountopsional |
number |
Total nominal refund dari merchant kepada end user | ||||||||||||||||||||||||||||||||||||||||
checkout_methodwajib |
string |
Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksiONE_TIME_PAYMENT digunakan untuk checkout sekali pakai |
||||||||||||||||||||||||||||||||||||||||
channel_codewajib |
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_propertiesopsional |
object |
Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi OVO - one time payment parameter wajib
JENIUS PAY parameter wajib
OVO - tokenized payment parameter wajib
DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
SHOPEEPAY - parameter wajib tokenized payment
GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
Parameter wajib MAYA (PAYMAYA)
|
||||||||||||||||||||||||||||||||||||||||
actionsopsional |
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
|
||||||||||||||||||||||||||||||||||||||||
is_redirect_requiredwajib |
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_urlwajib |
string |
Callback URL dimana notifikasi pembayaran akan dikirimkan | ||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||
updatedwajib |
string |
ISO 8601 Timestamp untuk update object charge. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||
void_statusopsional |
string |
Status request void. Nilai tersedia: PENDING , FAILED , SUCCEEDED |
||||||||||||||||||||||||||||||||||||||||
voided_atopsional |
string |
ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||
capture_nowwajib |
string |
Default: true . Parameter tidak digunakan saat ini |
||||||||||||||||||||||||||||||||||||||||
customer_idopsional |
string |
ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi | ||||||||||||||||||||||||||||||||||||||||
payment_method_idopsional |
string |
ID dari metode pembayaran . Hanya dapat digunakan untuk channel yang mendukung tokenisasi pembayaran | ||||||||||||||||||||||||||||||||||||||||
failure_codeopsional |
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 | ||||||||||||||||||||||||||||||||||||||||
basketopsional |
array |
Himpunan objek yang mendeskripsikan item yang dibeli Detail objek parameter
|
||||||||||||||||||||||||||||||||||||||||
metadataopsional |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
INVALID_API_KEY401 |
Format API key tidak valid |
INVALID_MERCHANT_CREDENTIALS401 |
Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian |
DATA_NOT_FOUND404 |
Spesifik Charge ID tidak ditemukan. Silakan cek query Anda lagi |
SERVER_ERROR500 |
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 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik untuk request charge transaksi. Akan selalu berawalan 'ewc_', diikuti dengan UUIDv4 | ||||||||||||||||||||||||||||||||||||||||
business_idwajib |
string |
Business ID dari merchant | ||||||||||||||||||||||||||||||||||||||||
reference_idwajib |
string |
Reference ID yang disediakan oleh merchant Note: Harus unik per request pembayaran. |
||||||||||||||||||||||||||||||||||||||||
statuswajib |
string |
Status request charge
|
||||||||||||||||||||||||||||||||||||||||
currencywajib |
string |
string Mata uang yang digunakan pada transaksi dalam format ISO4217 Nilai yang didukung: IDR , PHP |
||||||||||||||||||||||||||||||||||||||||
charge_amountwajib |
number |
Nominal charge yang direquest | ||||||||||||||||||||||||||||||||||||||||
capture_amountopsional |
number |
Nominal capture yang direquest oleh merrchant. Saat ini, capture_amount akan selalu sama dengan charge_amount |
||||||||||||||||||||||||||||||||||||||||
refunded_amountopsional |
number |
Total nominal refund dari merchant kepada end user | ||||||||||||||||||||||||||||||||||||||||
checkout_methodwajib |
string |
Checkout method menentukan flow pembayaran yang digunakan untuk memproses transaksiONE_TIME_PAYMENT digunakan untuk checkout sekali waktuTOKENIZED_PAYMENT dapat digunakan untuk pembayaran berulang |
||||||||||||||||||||||||||||||||||||||||
channel_codewajib |
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_propertiesopsional |
object |
Informasi spesifik yang diwajibkan untuk tersedia dari spesifik channel yang digunakan. OVO - one time payment parameter wajib
JENIUS PAY parameter wajib
OVO - tokenized payment parameter wajib
DANA, LINKAJA - one time payment, SHOPEEPAY (ID & PH) - one time payment, SAKUKU parameter wajib
SHOPEEPAY - parameter wajib tokenized payment
GCASH, GRABPAY, ASTRAPAY, LINKAJA - tokenized payment parameter wajib
Parameter Wajib MAYA (PAYMAYA)
|
||||||||||||||||||||||||||||||||||||||||
actionsopsional |
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
|
||||||||||||||||||||||||||||||||||||||||
is_redirect_requiredwajib |
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_urlwajib |
string |
Callback URL dimana notifikasi pembayaran akan dikirimkan | ||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||
updatedwajib |
string |
ISO 8601 Timestamp untuk update object charge. Timezone UTC+0 | ||||||||||||||||||||||||||||||||||||||||
void_statusopsional |
string |
Status dari void request. Nilai seharusnya PENDING |
||||||||||||||||||||||||||||||||||||||||
voided_atopsional |
string |
Timestamp dengan ISO 8601 ketika transaksi divoid | ||||||||||||||||||||||||||||||||||||||||
capture_nowwajib |
string |
Default: true . Parameter tidak digunakan saat ini |
||||||||||||||||||||||||||||||||||||||||
customer_idopsional |
string |
ID dari customer object yang dibuat dengan Xendit. ID akan dihubungkan dengan transaksi | ||||||||||||||||||||||||||||||||||||||||
payment_method_idopsional |
string |
ID dari payment method . Hanya digunakan untuk channel yang mendukung tokenisasi pembayaran | ||||||||||||||||||||||||||||||||||||||||
failure_codeopsional |
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 | ||||||||||||||||||||||||||||||||||||||||
basketopsional |
array |
Himpunan objek yang mendeskripsikan item yang dibeli Detail objek parameter
|
||||||||||||||||||||||||||||||||||||||||
metadataopsional |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter. |
VOID_NOT_SUPPORTED400 |
Fitur void tidak tersedia pada eWallet provider. |
VOID_TEMPORARILY_UNAVAILABLE400 |
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_KEY401 |
Format API key tidak valid. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request. |
INELIGIBLE_TRANSACTION403 |
Pembayaran telah melewati periode valid void (setelah 23:50:00 UTC+07:00/UTC+08:00) untuk request atau status charge bukan SUCCEEDED . |
INELIGIBLE_MERCHANT403 |
Merchant memiliki pengaturan settlement yang tidak berhak untuk melakukan void transaksi. Silakan contact Xendit customer support untuk resolusinya. |
DATA_NOT_FOUND404 |
Sumber tidak ditemukan. Silakan check kembali query Anda. |
SERVER_ERROR500 |
Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu. |
CHANNEL_UNAVAILABLE503 |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.void terjadi ketika provider eWallet mengkonfirmasi status request void |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Timestamp dalam ISO 8601 untuk pembuatan notifikasi callback. Timezone UTC+0 |
dataopsional |
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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
MAXIMUM_REFUND_AMOUNT_REACHED400 |
Request refund gagal karena refund dengan nominal penuh telah mencapai maksimum limit. |
MAXIMUM_REFUND_TRANSACTION_REACHED400 |
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_SUPPORTED400 |
Request refund sebagian gagal karena refund sebagian tidak tersedia pada penyedia eWallet. |
REFUND_TEMPORARILY_UNAVAILABLE400 |
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_UNAVAILABLE400 |
Refund sebagian tidak tersedia untuk Maya (PayMaya) pada hari transaksi. Silakan coba lagi setelah 23:59:59. |
REFUND_NOT_SUPPORTED400 |
Request refund gagal karena refund tidak tersedia pada penyedia eWallet. |
REFUND_IN_PROGRESS400 |
Refund request secara bersamaan untuk charge eWallet yang sama tidak diperbolehkan. Silakan melakukan refund request kembali setelah request sebelumnya selesai. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request. |
INELIGIBLE_TRANSACTION403 |
Pembayaran telah melewati masa berlaku refund atau status transaksi “FAILED”, “PENDING”, atau “VOIDED”. |
INSUFFICIENT_BALANCE403 |
Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled. |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera. |
CHANNEL_UNAVAILABLE503 |
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-tokenrequired |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idrequired |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.refund terjadi ketika provider eWallet mengkonfirmasi status request refund |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Timestamp dalam ISO 8601 untuk pembuatan notifikasi webhook. Timezone UTC+0 |
dataopsional |
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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request. |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
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
|
||||||||||||||||||||||||
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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request. |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
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 FilipinaAnda 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.
customer_id
yang dibuat akan digunakan dalam panggilan API berikutnya untuk mengidentifikasi pengguna yang melakukan account linking- Paramater yang hendak diisi bergantung pada persyaratan penyedia pembayaran (contoh: OVO mewajibkan untuk mengisi parameter nama dan nomor telepon)
- Dalam kasus seperti ini, Anda disarankan untuk membuat UI agar pengguna Anda dapat memasukkan informasi ini dengan mandiri
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_ERROR409 |
Permintaan dengan reference_id yang sama telah dibuat sebelumnya. Harap masukkan reference_id yang unik |
IDEMPOTENCY_ERROR409 |
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
|
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 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengenal unik untuk metode pembayaran. Memiliki awalan pm-. Example: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39 | ||||||||||||||||||||||||||||||||
typewajib |
string |
Jenis metode pembayaran - gunakan EWALLET |
||||||||||||||||||||||||||||||||
reusabilitywajib |
string |
Menjelaskan apakah metode pembayaran dapat digunakan kembali untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi. gunakan MULTIPLE_USE |
||||||||||||||||||||||||||||||||
customer_idwajib |
string |
ID dari customer object yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk mendapatkan Customer ID | ||||||||||||||||||||||||||||||||
business_idwajib |
string |
Pengenal yang diberikan Xendit untuk bisnis yang memiliki transaksi | ||||||||||||||||||||||||||||||||
reference_idopsional |
string |
Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik | ||||||||||||||||||||||||||||||||
statuswajib |
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 |
||||||||||||||||||||||||||||||||
countrywajib |
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 |
||||||||||||||||||||||||||||||||
actionswajib |
object |
Jika status=REQUIRES_ACTION , berisi objek yang merinci kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
|
||||||||||||||||||||||||||||||||
ewalletwajib |
object |
Untuk type='EWALLET', ini berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
|
||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
updatedwajib |
string |
Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
descriptionopsional |
object |
Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method | ||||||||||||||||||||||||||||||||
metadataopsional |
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_ERROR400 |
Ada masukan yang tidak valid di salah satu bidang permintaan yang diperlukan |
INVALID_API_KEY401 |
Format API key tidak valid |
CHANNEL_NOT_ACTIVATED403 |
Permintaan pembayaran gagal karena saluran pembayaran khusus ini belum diaktifkan melalui Xendit. Silakan aktifkan melalui dasbor Xendit atau Customer Success kami |
REQUEST_FORBIDDEN_ERROR403 |
API key dilarang untuk melakukan permintaan ini |
DUPLICATE_ERROR409 |
Kode Xendit yang mengindikasikan eror berikut: Ada catatan yang sudah ada dengan rincian yang diberikan |
SERVER_ERROR500 |
Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah tersebut |
CHANNEL_UNAVAILABLE503 |
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu pemberitahuan ke merchant - payment_method.activated |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
business_idwajib |
string |
Identifikasi bisnis merchant yang diberikan oleh Xendit | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 pembuatan notifikasi callback. Zona waktu UTC+0. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dataopsional |
object |
Objek metode pembayaran Bidang data
|
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 |
---|---|---|
idwajib |
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 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik untuk metode pembayaran. Memiliki awalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39 | ||||||||||||||||||||||||||||||||
typewajib |
string |
Jenis metode pembayaran - untuk menggunakan EWALLET |
||||||||||||||||||||||||||||||||
reusabilitywajib |
string |
Menjelaskan apakah metode pembayaran dapat digunakan kembali atau tidak untuk pembayaran berikutnya tanpa melalui proses penautan yang sama lagi. gunakan MULTIPLE_USE |
||||||||||||||||||||||||||||||||
customer_idwajib |
string |
ID customer object yang akan ditautkan dengan token akun. Panggil Tokenized - Create Customer untuk menghasilkan Customer ID | ||||||||||||||||||||||||||||||||
business_idwajib |
string |
Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi | ||||||||||||||||||||||||||||||||
reference_idopsional |
string |
Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik | ||||||||||||||||||||||||||||||||
statuswajib |
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. |
||||||||||||||||||||||||||||||||
countrywajib |
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 |
||||||||||||||||||||||||||||||||
actionswajib |
object |
If status=REQUIRES_ACTION , berisi objek yang merinci langkah selanjutnya untuk mengaktifkan metode pembayaran.
|
||||||||||||||||||||||||||||||||
ewalletwajib |
object |
Untuk type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet.
|
||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
updatedwajib |
string |
Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
descriptionopsional |
object |
Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method | ||||||||||||||||||||||||||||||||
metadataopsional |
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_KEY401 |
Format API key tidak valid |
REQUEST_FORBIDDEN_ERROR403 |
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_ERROR500 |
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 |
---|---|---|
idwajib |
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 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik untuk metode pembayaran. Berawalan pm-. Contoh: pm-6d1c8be4-f4d9-421c-9f0b-ab3b2b6bbc39 | ||||||||||||||||||||||||||||||||
typewajib |
string |
Jenis metode pembayaran - gunakan EWALLET |
||||||||||||||||||||||||||||||||
reusabilitywajib |
string |
Menjelaskan apakah metode pembayaran dapat digunakan kembali untuk pembayaran berikutnya tanpa melalui proses linking yang sama. gunakan MULTIPLE_USE untuk eWallet |
||||||||||||||||||||||||||||||||
customer_idwajib |
string |
ID customer objek yang akan di-linking dengan token akun. Panggil Tokenized - Create customer untuk menghasilkan customer ID | ||||||||||||||||||||||||||||||||
business_idwajib |
string |
Pengenal yang dibuat oleh Xendit untuk bisnis yang memiliki transaksi | ||||||||||||||||||||||||||||||||
reference_idopsional |
string |
Merchant dapat mengisi bagian ini sebagai identifikasi untuk payment method. Apabila tidak diisi, maka Xendit akan mengisinya dengan reference_id yang unik | ||||||||||||||||||||||||||||||||
statuswajib |
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 |
||||||||||||||||||||||||||||||||
countrywajib |
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 |
||||||||||||||||||||||||||||||||
actionswajib |
object |
Jika status=REQUIRES_ACTION , ada rincian kemungkinan langkah selanjutnya untuk mengaktifkan metode pembayaran
|
||||||||||||||||||||||||||||||||
ewalletwajib |
objek |
Untuk Type='EWALLET', berisi informasi yang diperlukan untuk menjelaskan metode pembayaran ewallet
|
||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 untuk pembuatan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 untuk pembaruan objek. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||
descriptionopsional |
object |
Deskripsi yang dapat diisi oleh Merchant sebagai tambahan informasi mengenai payment method | ||||||||||||||||||||||||||||||||
metadataopsional |
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_KEY401 |
Format API key tidak valid |
REQUEST_FORBIDDEN_ERROR403 |
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_ERROR500 |
Terjadi kesalahan tak terduga, tim kami telah diberi tahu dan akan memecahkan masalah tersebut |
CHANNEL_UNAVAILABLE503 |
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_idwajib |
string |
Business ID merchant yang diberikan oleh Xendit | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdwajib |
string |
Stempel Waktu ISO 8601 untuk pembuatan callback. Zona waktu UTC+0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dataopsional |
object |
Objek metode pembayaran Bidang data
|
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
|
||||||||||||||||||||||||
channel_code wajib |
string
|
Kode channel code untuk penyedia PayLater Channel yang didukung: ID_KREDIVO , ID_AKULAKU , ID_INDODANA , ID_ATOME , PH_ATOME , PH_BILLEASE , PH_CASHALO
|
||||||||||||||||||||||||
currency wajib |
string
|
Kode mata uang ISO 4217 transaksi PayLaterMata 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
|
||||||||||||||||||||||||
order_items wajib |
array
|
Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLaterParameter objek
|
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_INDODANA , ID_ATOME , PH_ATOME , PH_BILLEASE , PH_CASHALO |
||||||||||||||||||
currency | string |
Kode mata uang ISO 4217 untuk transaksi PayLaterMata 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
|
||||||||||||||||||
created | string |
Timestamp ISO 8601 untuk pembuatan objek planFormat: 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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
API_VALIDATION_ERROR400 |
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_ERROR400 |
Invalid URL url URL harus valid |
INVALID_CUSTOMER_ID400 |
Parameter yang hilang atau tidak valid pada customer_id |
UNSUPPORTED_CURRENCY400 |
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_KEY401 |
Kunci API tidak memiliki izin untuk layanan API ini |
INVALID_MERCHANT_CREDENTIALS401 |
Terdapat error dengan kredensial merchant yang disediakan oleh PayLater partner. Silakan hubungi customer support Xendit untuk pemyelesaian |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request |
CHANNEL_NOT_ACTIVATED403 |
API key tidak diperbolehkan untuk melakukan request |
DATA_NOT_FOUND404 |
Customer ID tidak valid. Silakan periksa ulang ID atau membuat ID menggunakan Customer API. |
SERVER_ERROR500 |
Error tidak terduga telah terjadi. Team kami telah diberitahukan untuk melakukan penyelesaian isu |
CHANNEL_UNAVAILABLE503 |
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 transaksiFormat Special dan alphanumericPanjang 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_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 chargePENDING , SUCCEEDED , FAILED Status of charge request
|
||||||||
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 transaksiFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
||||||||
updated | string |
Timestamp ISO 8601 untuk pembaharuan objek terbaruFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
||||||||
actions | object |
Checkout URL milik Partner Paylater di mana end-user akan diarahkan untuk menyelesaikan pembayaranJenis-jenis URL redirections
|
||||||||
expires_at | string |
Timestamp ISO 8601 untuk pembaharuan objek terbaruFormat: 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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta |
API_VALIDATION_ERROR400 |
Unsupported Checkout Type PayLater Partner tidak dapat menggunakan checkout_method yang diminta |
INVALID_API_KEY401 |
API key tidak memiliki izin untuk layanan API ini |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request ini |
PAYLATER_PLAN_DATA_NOT_FOUND404 |
PayLater Plan ID tidak valid. Mohon memeriksa ulang ID atau membuat ID menggunakan API Paylater Plans |
SERVER_ERROR500 |
Error tidak terduga telah terjadi. Tim kami telah diberitahu untuk melakukan penyelesaian isu |
CHANNEL_UNAVAILABLE503 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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
|
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_INDODANA , ID_ATOME , PH_ATOME , PH_BILLEASE , PH_CASHALO |
currency | string |
ISO 4217 Kode mata uang transaksi PayLaterMata 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 chargePENDING , SUCCEEDED , FAILED |
created | string |
Timestamp ISO 8601 untuk pembuatan transaksiFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
updated | string |
Timestamp ISO 8601 untuk pembaharuan objek terbaruFormat: 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 terbaruFormat: 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 transaksiFormat: 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_ERROR400 |
Charge ID tidak sesuai dengan format plc_UUID |
INVALID_API_KEY401 |
API key tidak memiliki izin untuk layanan API ini |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request ini |
DATA_NOT_FOUND404 |
Sumber charge tidak ditemukan. Mohon memeriksa ulang query Anda |
SERVER_ERROR500 |
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_ERROR400 |
Terdapat input yang tidak valid pada data yang diminta. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan permintaan. |
INELIGIBLE_TRANSACTION403 |
Permintaan pembatalan tidak bisa diproses karena status transaksi bukan PENDING . |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek kembali permintaan Anda. |
SERVER_ERROR500 |
Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera. |
CHANNEL_UNAVAILABLE503 |
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 |
Billease | Refund penuh | N/A Billease 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 PayLaterMata 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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
REFUND_NOT_SUPPORTED400 |
Request refund gagal karena refund tidak tersedia pada penyedia Paylater. |
PARTIAL_REFUND_NOT_SUPPORTED400 |
Request refund gagal karena refudn sebagian tidak tersedia pada penyedia Paylater. |
INSUFFICIENT_BALANCE400 |
Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled. |
MAXIMUM_REFUND_AMOUNT_REACHED400 |
Refund request gagal karena refund dengan nominal penuh telah dilakukan sebelumnya. |
INVALID_API_KEY401 |
Format API key tidak sah |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera. |
CHANNEL_UNAVAILABLE503 |
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_KEY401 |
Format API key tidak sah |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi |
SERVER_ERROR500 |
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
|
||||||||||||||||||||
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_KEY401 |
Format API key tidak sah |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi |
SERVER_ERROR500 |
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
|
||||||||||||||||||||||||
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-versionwajib |
string |
Versi API. Gunakan 2022-07-31 untuk versi terbaru v2 |
idempotency-keyopsional |
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-idopsional |
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-ruleopsional |
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-urlopsional |
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_idwajib |
string |
ID referensi yang diberikan oleh merchant (255 Karakter). Tidak harus unik. | ||||||||||||||||||||||||
typewajib |
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 |
||||||||||||||||||||||||
amountdiperlukan 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_codeopsional |
string |
Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi Channel Tersedia: ID_DANA , ID_LINKAJA |
||||||||||||||||||||||||
expires_atopsional |
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 . |
||||||||||||||||||||||||
basketopsional |
object |
Himpunan objek yang mendeskripsikan item yang dibeli
|
||||||||||||||||||||||||
metadataopsional |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
UNSUPPORTED_CURRENCY400 |
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_KEY401 |
Format API key tidak valid |
INVALID_MERCHANT_CREDENTIALS401 |
Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperbolehkan untuk melakukan request |
CHANNEL_NOT_ACTIVATED403 |
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_FOUND404 |
Request pembayaran gagal dikarenakan tidak ditemukan callback url pada dashboard Xendit atau pada request header. Silakan masukkan callback url pada dashboard Xendit |
DUPLICATE_ERROR409 |
ID_DANA hanya mengizinkan 1 kode QR statis untuk setiap merchant |
SERVER_ERROR500 |
Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu |
CHANNEL_UNAVAILABLE503 |
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-versionwajib |
string |
Versi API. Gunakan 2022-07-31 untuk versi terbaru v2 |
for-user-idopsional |
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 |
---|---|---|
idwajib |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
INVALID_API_KEY401 |
Format API key tidak valid |
DATA_NOT_FOUND404 |
QR ID yang ditentukan tidak ditemukan. Harap periksa lagi |
SERVER_ERROR500 |
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
|
||||||||||||||||||||||||
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
|
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-idopsional |
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_idwajib |
string |
Pengidentifikasi unik untuk transaksi. ID QR dengan awalan qr_ dikembalikan sebagai respons Buat Kode QR |
Parameter Query | Tipe | Deskripsi |
---|---|---|
limitopsional |
number |
Jumlah transaksi yang akan dikembalikan dalam lis respons Default: 10 |
fromopsional |
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 |
toopsional |
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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
INVALID_API_KEY401 |
Format API key tidak valid |
DATA_NOT_FOUND404 |
QR ID yang ditentukan tidak ditemukan. Harap periksa lagi |
SERVER_ERROR500 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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-versionwajib |
string |
Versi API. Gunakan 2022-07-31 untuk versi terbaru v2 |
for-user-idopsional |
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 |
---|---|---|
idwajib |
string |
Pengidentifikasi unik untuk transaksi. ID QR dengan awalan qr_ dikembalikan sebagai respons Buat Kode QR |
Parameter Body | Tipe | Deskripsi |
---|---|---|
amountdiperlukan 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_ERROR400 |
Terdapat invalid input pada salah satu parameter |
INVALID_API_KEY401 |
Format API key tidak valid |
DATA_NOT_FOUND404 |
QR ID yang ditentukan tidak ditemukan. Harap periksa lagi |
INACTIVE_QR_CODE410 |
Kode QR tidak aktif dan tidak dapat menerima pembayaran |
SERVER_ERROR500 |
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.
- API Pengembalian Dana ini hanya akan berfungsi untuk pembayaran QR yang berhasil.
- API Pengembalian Dana ini akan mengembalikan status
PENDING
dalam respons API setelah eksekusi. Webhook/callback akan dikirim ke URL sistem Anda ketika pengembalian dana telah berhasil diproses.
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-keyopsional |
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-idopsional |
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_idwajib |
string |
Pengenal unik untuk transaksi pembayaran QR asli (awalan qrpy_ ) yang dikembalikan di callback pembayaran QR |
Parameter Body | Tipe | Deskripsi |
---|---|---|
amountopsional |
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 |
reasonopsional |
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_ERROR400 |
Ada kesalahan dengan format yang dikirimkan ke server |
MAXIMUM_REFUND_AMOUNT_REACHED400 |
Jumlah pengembalian dana yang diminta tidak dapat melebihi jumlah sisa pembayaran awal |
REFUND_IN_PROGRESS400 |
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_SUPPORTED400 |
Fitur pengembalian dana tidak tersedia karena metode tidak disediakan oleh partner QR |
PARTIAL_REFUND_NOT_SUPPORTED400 |
Fitur pengembalian dana sebagian tidak tersedia karena metode ini tidak didukung untuk penerbit QR ini |
INVALID_API_KEY401 |
Format API key invalid |
REQUEST_FORBIDDEN_ERROR403 |
API key dilarang untuk melakukan permintaan ini |
INELIGIBLE_TRANSACTION403 |
Transaksi refund yang diminta tidak dapat diproses karena transaksi dalam status “FAILED”, “PENDING”, atau “VOIDED” |
DATA_NOT_FOUND404 |
Sumber tidak ditemukan. Harap periksa lagi permintaan Anda |
SERVER_ERROR500 |
Terjadi kesalahan tak terduga. Tim kami telah diberitahu dan akan memecahkan masalah tersebut |
CHANNEL_UNAVAILABLE503 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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-idoptional |
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_idrequired |
string |
Pengidentifikasi unik untuk transaksi original. (prefix qrpy_ ) dikembalikan dalam QR payment callback |
refund_idrequired |
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_ERROR400 |
Ada kesalahan dengan format yang dikirimkan ke server. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request. |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
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-idopsional |
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_idwajib |
string |
Pengidentifikasi unik untuk transaksi original. (prefix qrpy_ ) dikembalikan dalam QR payment callback |
Query Parameter | Tipe | Deskripsi |
---|---|---|
limitopsional |
number |
Jumlah transaksi yang akan dikembalikan dalam lis respons Default: 10 Min: 1 Max: 50 |
statusopsional |
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_ERROR400 |
Terdapat input yang tidak valid pada salah satu field yang diminta. |
INVALID_API_KEY401 |
Format API key tidak sah. |
REQUEST_FORBIDDEN_ERROR403 |
API key tidak diperkenankan untuk melakukan request. |
DATA_NOT_FOUND404 |
Sumber data tidak ditemukan. Silakan cek query Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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):
|
||||||||||||||||||||||||||||||||||
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-idoptional |
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-idoptional |
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 terhubungFor 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):
DEBIT_CARD (BCA OneKlik):
BANK_REDIRECT (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-idoptional |
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-idoptional |
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):
|
||||||||
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):
|
||||||||||||||||||||||||||||
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 dibuatFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
||||||||||||||||||||||||||||
updated |
string
ISO 8601 timestamp ketika informasi payment method diupdateFormat: 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, falseNote 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.
|
||||||||||||||||||||||||
basket optional |
array Himpunan objek yang mendeskripsikan item yang dibeli menggunakan direct debit
|
||||||||||||||||||||||||
success_redirect_url conditional |
string Diperlukan untuk BCA OneKlik, BCA KlikPayEnd-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 KlikPayEnd-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 KlikPayEnd-customer akan diarahkan ke URL ini untuk transaksi yang berhasil. |
||||||||
failure_redirect_url |
string Hanya untuk BCA OneKlik, BCA KlikPayEnd-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:
|
||||||||
created |
string Timestamp dalam ISO 8601 ketika request dibuatFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
||||||||
updated |
string Timestamp dalam ISO 8601 ketika informasi transaksi di updateFormat: 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_ERROR409 |
Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali. |
PAYMENT_METHOD_NOT_FOUND_ERROR400 |
payment_method_id yang disediakan tidak sesuai, tidak ditemukan atau akses tidak tersedia. |
INVALID_PAYMENT_METHOD_ERROR400 |
Payment method telah expire atau tidak tersedia. |
INSUFFICIENT_BALANCE400 |
Sumber dana pembayaran tidak memiliki saldo yang cukup untuk menyelesaikan transaksi. |
ACCOUNT_ACCESS_BLOCKED400 |
Sumber dana pembayaran terblokir dan tidak bisa diakses. |
MAX_AMOUNT_LIMIT_ERROR400 |
Jumlah transaksi melebihi jumlah yang telah ditetapkan oleh pihak bank. |
PAYMENT_STATUS_FAILED400 |
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-idoptional |
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 dibuatFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
updated |
string Timestamp dalam ISO 8601 ketika informasi transaksi di updateFormat: 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-idoptional |
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):
|
||||||||
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 dibuatFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
||||||||
updated |
string
ISO 8601 timestamp ketika informasi payment method diupdateFormat: 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-idoptional |
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 dibuatFormat: YYYY-MM-DDTHH:mm:ssZ Timezone: UTC+0 |
updated |
string Timestamp dalam ISO 8601 ketika informasi transaksi di updateFormat: 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-idoptional |
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:
|
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:
|
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_idwajib |
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:
|
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:
|
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_ERROR409 |
Idempotency-key yang disediakan sudah ada tetapi body request yang diberikan tidak sesuai dengan request asli. |
DATA_NOT_FOUND404 |
Kami tidak dapat menemukan pembayaran valid yang cocok dengan payment ID yang diberikan. |
MAXIMUM_REFUND_AMOUNT_REACHED400 |
Jumlah refund yang Anda masukkan lebih besar dari jumlah yang dapat dikembalikan. |
REFUND_NOT_SUPPORTED400 |
Permintaan refund gagal karena refund tidak didukung oleh penyedia layanan. |
INELIGIBLE_TRANSACTION400 |
Permintaan refund gagal karena transaksi awal tidak berhasil diselesaikan atau periode refund telah berlalu. |
PARTIAL_REFUND_NOT_SUPPORTED400 |
Permintaan refund gagal karena refund sebagian tidak didukung oleh penyedia layanan. |
INSUFFICIENT_BALANCE400 |
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_idrequired |
string |
ID transaksi direct debit yang dihasilkan pada titik transaksi. Prefix: ddpy- . |
refund_idrequired |
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_FOUND404 |
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_idrequired |
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.
|
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_FOUND404 |
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:
|
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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"
}
Contoh Permintaan VA VPB Tertutup, Sekali Pakai dengan alternative display type QR_STRING
{
"external_id": "va-1329804723",
"bank_code": "VPB",
"name": "Michael Chen",
"country": "VN",
"currency": "VND",
"is_single_use": true,
"is_closed": true,
"expected_amount": 10000,
"alternative_display_types": [
"QR_STRING"
]
}
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-idoptional |
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-ruleopsional |
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_idwajib |
string | Sebuah ID pilihan Anda. Seringkali merupakan pengenal unik seperti nomor telepon, email, atau ID transaksi.Karakter: Spesial dan alfanumerik
|
bank_codewajib |
string | Kode bank dari rekening virtual yang ingin Anda buat.Kode bank yang tersedia untuk Indonesia: |
namewajib |
string | Nama pengguna/rekening virtual, - ini akan ditampilkan di antarmuka pengguna bank, misalnya layar konfirmasi ATM.Karakter Hanya alfabet. Untuk Agregator Catatan: |
virtual_account_numberopsional. 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 |
countryopsional. default:
|
string | Negara di mana rekening virtual beroperasi.Negara yang tersedia:
|
currencyopsional. default:
|
string | Mata uang pembayaran yang dapat diterima oleh rekening virtual.Mata uang yang tersedia untuk Indonesia: |
is_single_useopsional. default: false |
boolean | Ada 2 jenis Rekening Virtual: |
is_closedopsional. default: false |
boolean | Ada 2 jenis jumlah Rekening Virtual: jumlah terbuka atau tertutup |
expected_amountopsional |
number | Jumlah yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual tertutup. Untuk BNI ,BJB ,BRI ,BSI , BNC , MANDIRI , dan SAHABAT_SAMPOERNA : Untuk PERMATA : Untuk BCA : Untuk CIMB : Untuk DBS : Untuk WOORI dan VIETCAPITAL : |
min_amountopsional |
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:
|
max_amountopsional |
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:
|
suggested_amountopsional |
number | Jumlah yang disarankan yang ingin Anda tetapkan. Bank yang tersedia: |
expiration_dateopsional. default: +31 tahun dari tanggal pembuatan |
string | Tanda waktu ISO8601 dari waktu kedaluwarsa Rekening VirtualZona waktu: UTC+0 |
descriptionopsional |
string | Deskripsi untuk Rekening Virtual. Tersedia untuk BRI dan BSI .Karakter Spesial dan alfanumerik |
alternative_display_typesopsional |
array string | Tampilan alternatif untuk Virtual Account. Catatan: Field ini hanya berlaku untuk virtual account Vietnam Nilai diperbolehkan: |
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"
}
Contoh Respon Pembuatan Virtual Account VPB sekali pakai, jumlah tertutup, dengan alternative display type QR_STRING
{ "id": "fc1a1fbc-1876-4dc6-b2d1-564f756312f5", "owner_id": "62ea3c344b29b4f5d58f634c", "external_id": "va-234982374", "account_number": "0024600000028492", "bank_code": "VPB", "merchant_code": "0024", "name": "Michael Chen", "is_closed": true, "expected_amount": 10000, "expiration_date": "2055-04-24T10:14:05.651Z", "is_single_use": true, "status": "PENDING", "currency": "VND", "country": "VN", "alternative_displays": [ { "type": "QR_STRING", "data": "00020101021238600010A00000072701300006970432011600246000000284920208QRIBFTTA53037045802VN5405100006304EDF0" } ] }
Merespon dengan Objek Virtual Account dengan status 200
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error. |
INVALID_JSON_FORMAT400 |
Bukan format JSON yang valid. |
VIRTUAL_ACCOUNT400 |
Nomor virtual account yang anda mau tidak tersedia. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings |
BANK_NOT_SUPPORTED400 |
Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account . |
EXPIRATION_DATE400 |
Tanggal kedaluwarsa untuk virtual account saat ini tidak tersedia. |
EXPIRATION_DATE400 |
Bukan tanggal kedaluwarsa yang valid karena lebih awal dari waktu saat ini. |
SUGGESTED_AMOUNT400 |
Nominal yang diharapkan untuk virtual saat ini tidak dapat digunakan. |
EXPECTED_AMOUNT400 |
Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi *true* . |
CLOSED_VA_NOT400 |
Nilai is_closeduntuk pilihan ini tidak tersedia untuk virtual account. |
DUPLICATE_CALLBACK400 |
Nomor virtual account yang anda mau buat sudah digunakan |
MINIMUM_EXPECTED400 |
|
MAXIMUM_EXPECTED400 |
|
CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED400 |
Nama virtual account tidak boleh mengandung nama bank atau institusi |
MINIMUM_AMOUNT_ERROR400 |
Parameter min_amount harus di atas nominal minimum yang ditentukan oleh bank |
MAXIMUM_AMOUNT_ERROR400 |
Parameter max_amount harus di bawah nominal minimum yang ditentukan oleh bank |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
FEATURE_NOT_SUPPORTED403 |
Fitur minimum dan maksimum pembayaran tidak tersedia untuk bank yang dipilih. Silakan cek Referensi API kami untuk melihat pilihan bank yang didukung. |
CHANNEL_UNAVAILABLE503 |
Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider Virtual Account akan diberitahukan untuk penyelesaian isu. |
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-idoptional |
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_useopsional. default: false |
boolean | Ketika diatur ke true, status rekening virtual akan tidak aktif setelah dibayar |
expected_amountopsional |
number | Jumlah yang diharapkan oleh rekening virtual jika is_closed diatur ke true |
min_amountopsional |
string | Jumlah minimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di atas jumlah minimum dari bank. |
max_amountopsional |
string | Jumlah maksimum yang harus dibayar oleh pelanggan Anda untuk Rekening Virtual terbuka, harus menggunakan jumlah di bawah jumlah maksimum dari bank. |
suggested_amountopsional |
number | Jumlah yang disarankan yang ingin Anda tetapkan |
expiration_dateopsional. 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 segeraZona waktu: UTC |
descriptionopsional |
string | Deskripsi rekening virtual yang ditampilkan kepada pengguna akhir saat pembayaran.Karakter Spesial dan alfanumerik |
external_idopsional |
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_ERROR400 |
Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error. |
INVALID_JSON_FORMAT400 |
Bukan format JSON yang valid. |
VIRTUAL_ACCOUNT400 |
Nomor virtual account yang anda mau tidak tersedia. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings |
BANK_NOT_SUPPORTED400 |
Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account . |
SUGGESTED_AMOUNT400 |
Nominal yang diharapkan untuk virtual saat ini tidak dapat digunakan |
EXPECTED_AMOUNT400 |
Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi *true* . |
CLOSED_VA_NOT400 |
Nilai is_closeduntuk pilihan ini tidak tersedia untuk virtual account.. |
INACTIVE_VIRTUAL_ACCOUNT_ERROR400 |
Nomor virtual account yang anda mau perbarui inactive. |
MINIMUM_EXPECTED400 |
|
MAXIMUM_EXPECTED400 |
|
REQUEST_FORBIDDEN403 |
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-idoptional |
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_FORBIDDEN403 |
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_ERROR404 |
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",
"alternative_displays": [
{
"type": "QR_STRING",
"data": "00020101021238600010A00000072701300006970432011600246000000284920208QRIBFTTA53037045802VN5405100006304EDF0"
}
]
}
Parameter | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|
idrequired |
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_idrequired |
string |
An ID of your choice which you provided upon request. | ||||||
owner_idrequired |
string |
Your Xendit Business ID. | ||||||
bank_coderequired |
string |
Bank code of the virtual account you want to create. | ||||||
merchant_coderequired |
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_numberrequired |
string |
Complete Virtual Account number (including merchant code as prefix). This is what a user will use to pay Virtual Account. | ||||||
namerequired |
string |
Name for the Virtual Account. | ||||||
countryrequired |
string |
The country in which the virtual account operates. | ||||||
currencyrequired |
string |
The currency of payment in which the virtual account can accept, available for API version 2018-12-21 . |
||||||
is_single_userequired |
boolean |
There are 2 types of Virtual Account: is_single_use : false ) remain active upon successful payment and can continue to receive payments using the same Virtual Account |
||||||
is_closedrequired |
boolean |
There are 2 types of Virtual Account amount: expected_amount parameter below |
||||||
expected_amountoptional |
number |
Required amount to be paid by your customer for closed Virtual Account. | ||||||
min_amountoptional |
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_amountoptional |
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_amountoptional |
number |
Suggested amount for the Virtual Account. | ||||||
expiration_date optional |
string |
ISO8601 timestamp of Virtual Account expiration time. Timezone UTC+0. | ||||||
descriptionoptional |
string |
Description of the Virtual Account that will be displayed in payment interface. | ||||||
statusrequired |
string |
Status of Virtual Account that defines if it’s PENDING , INACTIVE , or ACTIVE
PENDING if Virtual Account creation request has been sent and request is being processed by the bank INACTIVE either the single use Virtual Account has been paid or already expired ACTIVE the Virtual Account is ready to be used by the end user |
||||||
alternative_displaysoptional |
object |
Alternative Display for the virtual account. Note: This field is only applicable to Vietnam virtual accounts.Data fields
|
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-idoptional |
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_idwajib |
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 |
---|---|---|
statusdiperlukan |
string | Status dari simulasi pembayaran |
messagediperlukan |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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 | ||||||
---|---|---|---|---|---|---|---|---|
idwajib |
string |
ID dari pembayaran virtual account | ||||||
payment_idwajib |
string |
Dalam sistem internal kami disebut dengan payment ID | ||||||
callback_virtual_account_idwajib |
string |
Nilai kolom id didapatkan dari respon saat virtual account berhasil dibuat. Lihat Pembuatan Virtual Accounts |
||||||
owner_idwajib |
string |
ID dari merchant | ||||||
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan | ||||||
bank_codewajib |
string |
Kode bank yang bersangkutan, misal, BNI. | ||||||
merchant_codewajib |
string |
Virtual Account merchant code identified via the first 4-5 digits of Virtual Account number | ||||||
account_numberwajib |
string |
Virtual Account number exclude the prefix (merchant code) | ||||||
amountwajib |
integer positive |
Jumlah yang dibayar | ||||||
transaction_timestampwajib |
string |
Tanggal dan waktu pembayaran virtual account | ||||||
sender_nameOptional |
string |
Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account | ||||||
payment_detailopsional |
object |
Additional information from the bank. Data fields
|
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_idwajib |
string |
ID pengguna anda |
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
bank_codewajib |
string |
Kode bank yang bersangkutan, misal, BNI. |
merchant_codewajib |
string |
5 angka didepan sebelum nomor lengkap virtual account |
namewajib |
string |
Nama virtual account |
account_numberwajib |
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_amountopsional |
string |
Nominal yang disarankan untuk membuat virtual account |
is_closedwajib |
boolean |
Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak. |
expected_amountopsional |
string |
Nominal yang diharapkan saat is_closed diubah menjadi true |
idwajib |
string |
ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account. |
is_single_usewajib |
boolean |
Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar. |
statuswajib |
string |
Status virtual account yang menentukan apakah itu PENDING , ACTIVE atau *INACTIVE* . PENDING jika pembuatan virtual account sedang di proses oleh bank. INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired. 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-idoptional |
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_idrequired |
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_FORBIDDEN403 |
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_ERROR404 |
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 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired |
string |
ID of the Virtual Account Payment. Use this ID for support escalation and reconciliation. | ||||||||||||||||
payment_idrequired |
string |
Our internal system’s payment ID. | ||||||||||||||||
callback_virtual_account_idrequired |
string |
ID of the Virtual Account that was paid. | ||||||||||||||||
external_idrequired |
string |
External ID of the Virtual Account. | ||||||||||||||||
bank_coderequired |
string |
Bank code of the Virtual Account. | ||||||||||||||||
merchant_coderequired |
string |
Virtual Account merchant code identified via the first 4-5 digits of Virtual Account number. | ||||||||||||||||
account_numberrequired |
string |
Virtual Account number exclude the prefix (merchant code). | ||||||||||||||||
currencyrequired |
string |
The currency of payment in which the virtual account can accept, if it's not specified, it will be using IDR by default. | ||||||||||||||||
countryrequired |
string |
The country in which the virtual account operate, if it's not specified, it will be using ID by default. | ||||||||||||||||
amountrequired |
integer positive |
Amount that was paid to the Virtual Account. | ||||||||||||||||
transaction_timestamprequired |
string |
Date time of the Virtual Account transaction. | ||||||||||||||||
sender_nameoptional |
string |
Name of the end user that paid into the Virtual Account. Available for BNC , DBS , and SAHABAT_SAMPOERNA . |
||||||||||||||||
payment_detailoptional |
object |
Additional information from the bank. Data fields
|
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 |
---|---|---|
namerequired |
string |
Nama bank |
coderequired |
string |
Kode bank, yang berkaitan saat pembuatan virtual account |
countryrequired |
string |
Negara dimana virtual account akan digunakan untuk menerima pembayaran. |
currencyrequired |
string |
Mata uang yang dapat diterima oleh virtual account |
is_activatedrequired |
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-idopsional |
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-ruleopsional |
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_idwajib |
string |
ID pilihan Anda. Seringkali pengenal unik seperti nomor telepon, email atau transaksi ID. Panjang maksimum yang diijinkan adalah 1000 karakter.
|
retail_outlet_namewajib |
string |
Nama Fixed Payment Code yang ingin Anda buat
|
namewajib |
string |
Nama pengguna - data ini dapat digunakan oleh kasir Toko Outlet untuk memvalidasi pengguna akhir
|
expected_amountopsional |
integer positive |
Jumlah yang diharapkan akan dibayarkan oleh pengguna akhir |
payment_codeopsional |
string |
Fixed Payment Code yang ingin Anda tetapkan, contohnya 12345 . Jika Anda tidak menetapkan, maka akan dipilih secara acakMohon 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 iniAnda bisa melakukan pengecekan pada prefix anda melalui dashboard Retail Outlet details standar:
|
expiration_dateopsional |
ISO 8601 Date |
Waktu yang ditentukan ketika Fixed Payment Code akan kedaluwarsazona waktu:
|
is_single_useopsional |
boolean |
Jika disetel ke true , Fixed Payment Code tidak akan aktif setelah dibayarkanstandar:
|
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_idwajib |
string |
ID pengguna anda |
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namewajib |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixwajib |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namewajib |
string |
Nama untuk Fixed Payment Code anda |
payment_codewajib |
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_codeLIVE : https://retail-outlet-barcode.xendit.co/alfamart/:payment_code |
expected_amountwajib |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_usewajib |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_datewajib |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idwajib |
string |
Kode unik untuk Fixed Payment Code |
statuswajib |
string |
Status fixed payment code yang menentukan apakah itu ACTIVE , INACTIVE , atau EXPIRED . ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kadaluwarsa.INACTIVE jika fixed payment code telah dibayarkan.EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau. |
typewajib |
string |
Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda) |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi. |
INVALID_JSON_FORMAT400 |
Permintaan tidak sesuai dengan format JSON yang valid |
PAYMENT_CODE400 |
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_NOT400 |
Retail Outlet yang digunakan saat ini tidak didukung. |
DUPLICATE_PAYMENT400 |
Kode pembayaran yang ingin anda buat sudah digunakan. |
EXPIRATION_DATE400 |
Tanggal kadaluarsa yang anda inginkan tidak valid dikarenakan lebih awal dari waktu saat ini. |
MINIMUM_EXPECTED400 |
Ekspektasi nominal hanya bisa lebih dari atau sama dengan Rp 10,000. |
MAXIMUM_EXPECTED400 |
Ekspektasi nominal hanya bisa kurang dari atau sama dengan Rp 5,000,000. |
REQUEST_FORBIDDEN403 |
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-idopsional |
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 |
---|---|---|
nameopsional |
string |
Nama untuk Fixed Payment Code
|
expected_amountopsional |
integer positive |
Nominal yang diharapkan akan dibayar oleh pengguna akhir |
expiration_dateopsional |
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 Codezona waktu:
|
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_idwajib |
string |
ID pengguna anda |
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namewajib |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixwajib |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namewajib |
string |
Nama untuk Fixed Payment Code anda |
payment_codewajib |
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_codeLIVE : https://retail-outlet-barcode.xendit.co/alfamart/:payment_code |
expected_amountwajib |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_usewajib |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_datewajib |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idwajib |
string |
Kode unik untuk Fixed Payment Code |
statuswajib |
string |
Status fixed payment code yang menentukan apakah itu ACTIVE , INACTIVE , atau EXPIRED . ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kadaluwarsa.INACTIVE jika fixed payment code telah dibayarkan.EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau. |
typewajib |
string |
Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda) |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi. |
INVALID_JSON_FORMAT400 |
Permintaan tidak sesuai dengan format JSON yang valid |
RETAIL_OUTLET_NOT400 |
Retail Outlet yang digunakan saat ini tidak didukung. |
DUPLICATE_PAYMENT400 |
Kode pembayaran yang ingin anda buat sudah digunakan. |
EXPIRATION_DATE400 |
Tanggal kadaluarsa yang anda inginkan tidak valid dikarenakan lebih awal dari waktu saat ini. |
MINIMUM_EXPECTED400 |
Ekspektasi nominal hanya bisa lebih dari atau sama dengan Rp 10,000. |
MAXIMUM_EXPECTED400 |
Ekspektasi nominal hanya bisa kurang dari atau sama dengan Rp 5,000,000. |
REQUEST_FORBIDDEN403 |
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-idopsional |
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_idwajib |
string |
ID pengguna anda |
statuswajib |
string |
Status fixed payment code yang menentukan apakah itu ACTIVE , INACTIVE , atau EXPIRED . ACTIVE jika fixed payment code belum dibayarkan atau belum melewati masa kedaluwarsa.INACTIVE jika fixed payment code telah dibayarkan.EXPIRED jika fixed payment code memiliki masa kadaluwarsa dan waktu tersebut diperbaharui (melalui update) menjadi waktu di masa lampau. |
typewajib |
string |
Untuk menandakan bahwa ini adalah fixed payment code yang dibuat oleh user (Anda) |
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namewajib |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixwajib |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namewajib |
string |
Nama untuk Fixed Payment Code anda |
payment_codewajib |
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_codeLIVE : https://retail-outlet-barcode.xendit.co/alfamart/:payment_code |
expected_amountwajib |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_usewajib |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_datewajib |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idwajib |
string |
Kode unik untuk Fixed Payment Code |
Kode Error
Kode Error | Deskripsi |
---|---|
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
FIXED_PAYMENT_CODE404 |
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-tokenwajib |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
webhook-idwajib |
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 |
---|---|---|
idwajib |
string |
Pengidentifikasi unik dari sebuah transaksi |
external_idwajib |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
prefixwajib |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
payment_codewajib |
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_namewajib |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
namewajib |
string |
Nama untuk Fixed Payment Code |
amountwajib |
integer positive |
Nominal yang telah dibayarkan |
statuswajib |
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_timestampwajib |
ISO 8601 Date |
Tanggal saat Fixed Payment Code dibayarkan |
payment_idwajib |
string |
ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran |
fixed_payment_codewajib |
string |
ID unik untuk pembayaran Fixed Payment Code |
fixed_payment_code_idwajib |
string |
ID unik untuk Fixed Payment Code |
owner_idwajib |
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-idopsional |
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 opsionalstandar:
|
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 . |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Input gagal divalidasi. Kesalahan field berisi rincian tentang fields yang melanggar validasi. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
DATA_NOT_FOUND404 |
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": "Disbursement #12",
"reference_id": "disb-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 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
Pengidentifikasi unik yang dibuat oleh Xendit untuk setiap pembayaran Awalan: disb_ |
||||||||
amountwajib |
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 desimalUntuk mata uang VND , angka harus bilangan bulatUntuk mata uang MYR , angka bisa sampai 2 tempat desimalUntuk mata uang THB , angka bisa sampai 2 tempat desimal |
||||||||
channel_codewajib |
string |
Kode saluran bank tujuan, e-wallet atau saluran OTC yang dipilih. | ||||||||
currencywajib |
string |
ISO 4217 Currency Code. | ||||||||
descriptionoptional |
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 alfanumerikPanjang maksimum 100 karakterPanjang minimal 1 karakter |
||||||||
reference_idwajib |
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 alfanumerikPanjang maksimum 255 karakter Panjang minimum 1 karakter |
||||||||
statuswajib |
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. |
||||||||
createdwajib |
ISO8601 |
Stempel waktu saat permintaan pembayaran dibuat (dalam format ISO 8601) Timezone UTC+0 |
||||||||
updatedwajib |
ISO8601 |
Stempel waktu saat status pembayaran diperbarui (dalam format ISO 8601) Timezone UTC+0 |
||||||||
estimated_arrival_timeoptional |
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_codewajib |
string |
Jika Pembayaran gagal, kami akan menyertakan kode kegagalan untuk detail lebih lanjut tentang kegagalan tersebut. | ||||||||
business_idwajib |
string |
ID Bisnis Xendit Anda | ||||||||
channel_propertieswajib |
object |
Wadah untuk properti yang terkait dengan channel_code yang dipilih Untuk channel digital (rekening bank atau e-wallet) Individual detail child parameters
|
||||||||
receipt_notificationoptional |
JSON |
Objek yang berisi alamat email untuk menerima detail pencairan setelah pembayaran berhasil. Maksimal tiga alamat email masing-masing.
|
||||||||
metadataoptional |
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": "disb-1482928194",
"channel_code": "ID_BCA",
"channel_properties": {
"account_number": "000000000099",
"account_holder_name": "Michael Chen"
},
"amount": 1000,
"description": "Disbursement #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": {
"disb": 24
}
}'
Header Parameter | Tipe | Deskripsi |
---|---|---|
Idempotency-keywajib |
string |
Kunci unik untuk mencegah permintaan duplikat. Anda dapat menggunakan reference_id atau enkripsi beberapa pengenal atau GUID apa pun.
|
for-user-idoptional |
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_idwajib |
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 alfanumerikPanjang maksimum 255 karakter Panjang minimal 1 karakter |
||||||||
channel_codewajib |
string |
Kode saluran bank tujuan, e-wallet atau saluran OTC yang dipilih. Daftar saluran yang didukung saat ini dapat ditemukan disini | ||||||||
channel_propertieswajib |
object |
Kontainer untuk properti yang terkait dengan channel_code yang dipilih Input untuk saluran digital (rekening bank atau e-wallet) Individual detail child parameters
|
||||||||
amountwajib |
number |
Jumlah yang akan dikirim ke rekening tujuan. Harus kelipatan dari kenaikan minimum untuk saluran yang dipilih. Untuk mata uang IDR , angka harus bilangan bulatUntuk mata uang PHP , angka bisa sampai 2 tempat desimalUntuk mata uang VND , angka harus bilangan bulatUntuk mata uang MYR , angka bisa sampai 2 tempat desimalUntuk mata uang THB , angka bisa sampai 2 tempat desimal |
||||||||
descriptionoptional |
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 alfanumerikPanjang maksimum 100 karakterPanjang minimal 1 karakter |
||||||||
currencywajib |
string |
ISO 4217 Currency Code. | ||||||||
receipt_notificationoptional |
JSON |
Objek yang berisi alamat email untuk menerima detail pembayaran setelah pembayaran berhasil. Maksimal tiga alamat email masing-masing.
|
||||||||
metadataoptional |
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-idoptional |
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 |
---|---|---|
idWajib |
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=disb-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-idoptional |
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 dikembalikanStandar 10Minimal 1Maks 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. | ||||||||
linksoptional |
aray |
Implementasi HATEOAS pada kolom after_id
|
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-idoptional |
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 |
---|---|---|
idWajib |
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_ALLOWED400 |
Pembayaran tidak dapat dibatalkan karena sudah diproses oleh Xendit. |
DATA_NOT_FOUND400 |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Jenis peristiwa. Kemungkinan kejadian: payout.succeeded - Status pembayaran telah berhasil dan bank mitra telah mengkreditkan dana ke penerimapayout.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_idwajib |
string |
ID bisnis unik Xendit |
createdwajib |
string |
ISO8601 Stempel waktu ISO8601 dari waktu pembuatan acara Timezone UTC+0 Format: YYYY-MM-DDThh:mm:ssZ |
datawajib |
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
|
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 |
---|---|---|
idwajib |
string |
Xendit disbursement ID yang unik. Gunakan ID ini untuk eskalasi ke tim support dan rekonsiliasi |
external_idwajib |
string |
ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order. |
user_idwajib |
string |
Business ID Anda di Xendit |
bank_codewajib |
string |
Kode bank atau e-wallet tujuan. Lihat kode bank |
account_holder_namewajib |
string |
Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support. |
amountwajib |
number |
Nominal transfer |
disbursement_descriptionwajib |
string |
Deskripsi transfer |
statuswajib |
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 diinginkanUNKNOWN_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 jamINVALID_DESTINATION Bank telah melaporkan bahwa rekening tujuan tidak terdaftar atau diblokir. Jika tidak yakin tentang ini, silakan coba lagi atau hubungi bank tujuan langsungSWITCHING_NETWORK_ERROR Setidaknya salah satu jaringan switching sedang mengalami masalah. Coba lagi pencairan dalam 1-3 jamREJECTED_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 jamUntuk informasi lebih detail mengenai berbagai error code diatas, silakan lihat eror pada transfer dana |
email_toopsional |
array of string |
Alamat email yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email |
email_ccopsional |
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_bccopsional |
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-KEYopsional |
string |
string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.
|
for-user-idopsional |
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_idwajib |
string |
ID disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement
|
account_holder_namewajib |
string |
Nama pemegang rekening sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
|
account_numberwajib |
string |
Nomor rekening bank tujuan. Jika menggunakan e-wallet, nomor telfon yang terdaftar dengan akun e-wallet.
|
descriptionwajib |
string |
Deskripsi untuk dikirim beserta pengiriman dana
|
amountwajib |
number |
Jumlah untuk di disburseLihat batasan jumlah maksimum dan minimum untuk setiap bank dan e-wallet di sini.
|
email_toopsional |
array of string |
Alamat email yang dapat didaftarkan untuk menerima notifikasi disbursement via email ketika disbursements telah berhasil diproses. Maksimal 3 email |
email_ccopsional |
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_bccopsional |
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_ERROR400 |
Validasi input gagal. Field error merincikan field mana saja yang melanggar validasi |
INVALID_JSON_FORMAT400 |
Body request tidak dalam format JSON yang valid. |
DISBURSEMENT400 |
Deskripsi disbursement belum di set di Pengaturan Disbursement. Tambahkan deskripsi sebelum mencoba kembali. |
DIRECT_DISBURSEMENT400 |
Saldo tidak cukup untuk disburse. Tambahkan saldo sebelum mencoba kembali. |
DUPLICATE_TRANSACTION400 |
Kunci Idempotency sudah pernah digunakan sebelumnya. Tambahkan kunci Idempotency dan tambahkan kembali. |
BANK_CODE_NOT400 |
Kode bank tujuan tidak atau belum didukung. Pelajari semua dukungan bank dan ewallet |
RECIPIENT400 |
Untuk transfer ke BCA, input account_number harus 10 digit. Cek ulang panjang nomor rekening sebelum mencoba kembali. |
RECIPIENT400 |
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 |
MAXIMUM400 |
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 |
INVALID400 |
Nomor rekening tidak dapat diproses. Gunakan nomor rekening lain untuk mencoba kembali. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
SERVER_ERROR500 |
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-idoptional |
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_idrequired |
string |
ID disbursement yang akan diambilDisbursement_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_FORMAT400 |
The request body tidak dalam JSON Format yang valid. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
DIRECT_DISBURSEMENT404 |
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-idopsional |
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_idwajib |
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_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
DIRECT_DISBURSEMENT404 |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
idwajib |
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_idwajib |
string |
ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order. |
user_idwajib |
string |
Business ID Anda di Xendit |
bank_codewajib |
string |
Kode bank atau e-wallet tujuan. Lihat kode bank |
account_holder_namewajib |
string |
Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support. |
amountwajib |
number |
Nominal transfer |
disbursement_descriptionwajib |
string |
Deskripsi transfer |
statuswajib |
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 diinginkanUNKNOWN_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 jamINVALID_DESTINATION Bank telah melaporkan bahwa rekening tujuan tidak terdaftar atau diblokir. Jika tidak yakin tentang ini, silakan coba lagi atau hubungi bank tujuan langsungSWITCHING_NETWORK_ERROR Setidaknya salah satu jaringan switching sedang mengalami masalah. Coba lagi pencairan dalam 1-3 jamREJECTED_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 jamUntuk informasi lebih detail mengenai berbagai error code diatas, silakan lihat eror pada transfer dana |
is_instantopsional |
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-KEYopsional |
string |
Unique key to mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production |
for-user-idopsional |
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 |
---|---|---|
referencewajib |
string |
ID batch disbursement pada sistem anda yang digunakan untuk merekonsiliasi |
disbursementwajib |
Disbursement Item[] |
List disbursement yang ada didalam batch |
Disbursement Item
Parameter | Tipe | Deskripsi |
---|---|---|
amountwajib |
number |
Nominal uang yang akan di transfer |
bank_codewajib |
string |
Kode bank penerima |
bank_account_namewajib |
string |
Nama pemilik rekening bank penerima |
bank_account_numberwajib |
string |
Nomor rekening bank penerima |
descriptionwajib |
string |
Catatan untuk disertai dalam transfer |
external_idopsional |
string |
ID disbursement pada sistem Anda |
email_toopsional |
string[] |
Alamat email yang menerima pemberitahuan disbursement setelah disbursement selesai |
email_ccopsional |
string[] |
Alamat email yang menerima carbon copy email pemberitahuan disbursement setelah disbursement selesai |
email_bccopsional |
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 |
---|---|---|
createdwajib |
string |
Timestamp pembuatan batch disbursement creation dalam format ISO |
referencewajib |
string |
ID batch disbursement dalam sistem Anda yang digunakan untuk rekonsiliasi setelah disbursement selesai |
total_uploaded_countwajib |
number |
Jumlah disbursement count dalam batch |
total_uploaded_amountwajib |
number |
Jumlah disbursement amount dalam batch |
statuswajib |
string |
UPLOADING Permintaan Batch Disbursement telah diterima dan sedang menunggu detail item untuk dibuat dan diverifikasi |
idwajib |
string |
Unique ID batch disbursement pada sistem kami |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Validasi input gagal. Field errors dalam response akan merincikan fields yang melanggar validasi. |
INVALID_JSON_FORMAT400 |
Badan request tidak dalam format JSON yang valid. |
DUPLICATE_TRANSACTION400 |
Request gagal karena idempotency key sudah pernah digunakan sebelumnya. |
INVALID_API_KEY401 |
API key yang digunakan salah. |
BATCH_DISBURSEMENT400 |
Request gagal karena pencairan mengandung lebih dari 1000 item. |
REQUEST_FORBIDDEN403 |
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:
- Approve batch disbursement
- Konfirmasi nama yang tidak match, apabila diharuskan
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 berhasilCHECK 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.
Pembuatan Payout Link
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-idoptional |
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:
|
amount required |
integer positive |
Jumlah tagihan yang akan dibayarkan. Min:
|
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 |
---|---|---|
idrequired |
string |
ID payout link yang didapatkan dari Xendit. |
external_idrequired |
string |
ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda. Maksimal:
|
amountrequired |
integer positive |
Jumlah tagihan yang akan dibayarkan. Min:
|
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED 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_timestampoptional |
ISO8601 |
Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari. Timezone:
|
createdoptional |
ISO8601 |
Tanggal dan waktu yang tercatat saat payout link dibuat. Timezone:
|
payout_urloptional |
string |
Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda. |
emailoptional |
string |
Email yang ingin Anda kirim notifikasi. |
bank_codeoptional |
string |
Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini |
account_holder_nameoptional |
string |
Nama pemegang akun. |
account_numberoptional |
string |
Akun bank tujuan pembayaran. |
disbursement_idoptional |
string |
ID dari disbursement. Anda dapat menemukannya di sini |
failure_reasonoptional |
string |
Jika statusnya adalah FAILED , ini akan menjelaskan kegagalan tersebut. |
claimed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah diklaim. Timezone:
|
completed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah selesai. Timezone:
|
failed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah gagal. Timezone:
|
payment_idoptional |
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_BALANCE400 |
Saldo di akun Anda tidak cukup untuk membuat payout dengan jumlah yang diinginkan. |
DUPLICATE_PAYOUT_ERROR400 |
Payout link dengan external_id yang sama telah dibuat sebelumnya. |
UNAUTHORIZED_MERCHANT_ERROR403 |
Merchant ini tidak diizinkan untuk melakukan permintaan tersebut. |
Mendapatkan Payout Link
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-idoptional |
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 |
---|---|---|
idrequired |
string |
ID payout link yang didapatkan dari Xendit. |
external_idrequired |
string |
ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda. Maksimal:
|
amountrequired |
integer positive |
Jumlah tagihan yang akan dibayarkan. Min:
|
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED 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_timestampoptional |
ISO8601 |
Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari. Timezone:
|
createdoptional |
|
Tanggal dan waktu yang tercatat saat payout link dibuat. Timezone:
|
payout_urloptional |
string |
Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda. |
emailoptional |
string |
Email yang ingin Anda kirim notifikasi. |
bank_codeoptional |
string |
Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini |
account_holder_nameoptional |
string |
Nama pemegang akun. |
account_numberoptional |
string |
Akun bank tujuan pembayaran. |
disbursement_idoptional |
string |
ID dari disbursement. Anda dapat meneumkannya di sini |
failure_reasonoptional |
string |
Jika statusnya adalah FAILED , ini akan menjelaskan kegagalan tersebut. |
claimed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah diklaim.Timezone:
|
completed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah selesai.Timezone:
|
failed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah gagal.Timezone:
|
payment_idoptional |
string |
ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran. |
Kode Error
Kode Error | Deskripsi |
---|---|
PAYOUT_NOT_FOUND_ERROR404 |
Payout link tidak ditemukan di dalam sistem. |
UNAUTHORIZED_MERCHANT_ERROR403 |
Merchant ini tidak diizinkan untuk melakukan permintaan tersebut. |
Penutupan Payout Link
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-idoptional |
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 |
---|---|---|
idrequired |
string |
ID payout yang didapatkan dari Xendit. |
external_idrequired |
string |
ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.Maksimal:
|
amountrequired |
integer positive |
Jumlah tagihan yang akan dibayarkan. Min:
|
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout link telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED 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_timestampoptional |
ISO8601 |
Tanggal dan waktu payout link kedaluwarsa dalam standar ISO dengan default 3 hari.Timezone:
|
createdoptional |
ISO8601 |
Tanggal dan waktu yang tercatat saat payout link dibuat.Timezone:
|
payout_urloptional |
string |
Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda. |
emailoptional |
string |
Email yang ingin Anda kirim notifikasi. |
bank_codeoptional |
string |
Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini |
account_holder_nameoptional |
string |
Nama pemegang akun. |
account_numberoptional |
string |
Akun bank tujuan pembayaran. |
disbursement_idoptional |
string |
ID dari disbursement. Anda dapat menemukannya di sini |
failure_reasonoptional |
string |
Jika statusnya adalah FAILED , ini akan menjelaskan kegagalan tersebut. |
claimed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah diklaim.Timezone:
|
completed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah selesai.Timezone:
|
failed_timestampoptional |
ISO8601 |
Tanggal dan waktu yang mencatat saat payout telah gagal.Timezone:
|
payment_idoptional |
string |
ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran. |
Kode Error
Kode Error | Deskripsi |
---|---|
CLAIMED_PAYOUT_ERROR400 |
Payout sudah diklaim. Anda tidak dapat membatalkan payout link ini karena telah diklaim oleh pelanggan Anda. |
PAYOUT_NOT_FOUND_ERROR404 |
Payout link tidak ditemukan di dalam sistem. |
UNAUTHORIZED_MERCHANT_ERROR403 |
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": 510000,
"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",
"viber"
],
"invoice_reminder": [
"whatsapp",
"email",
"viber"
],
"invoice_paid": [
"whatsapp",
"email",
"viber"
]
},
"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
}
],
"payment_methods": ["CREDIT_CARD"],
"channel_properties": {
"cards": {
"allowed_bins": [
"400000",
"52000000"
],
"installment_configuration": {
"allow_installment": true,
"allow_full_payment": false,
"allowed_terms": [
{
"issuer": "BCA",
"terms": [3,6,12]
},
{
"issuer": "BNI",
"terms": [3,6]
},
{
"issuer": "MANDIRI",
"terms": [6]
}
]
}
}
},
"metadata": {
"store": "Jakarta"
}
}'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'external_id' => 'demo_1475801962607',
'amount' => 510000,
'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',
'viber'
],
'invoice_reminder' => [
'whatsapp',
'email',
'viber'
],
'invoice_paid' => [
'whatsapp',
'email',
'viber'
]
],
'success_redirect_url' => 'https=>//www.google.com',
'failure_redirect_url' => 'https=>//www.google.com',
'currency' => 'IDR',
'items' => [
[
'name' => 'Air Conditioner',
'quantity' => 1,
'price' => 510000,
'category' => 'Electronic',
'url' => 'https=>//yourcompany.com/example_item'
]
],
'fees' => [
[
'type' => 'ADMIN',
'value' => 5000
]
],
'payment_methods' => ['CREDIT_CARD'],
'channel_properties' => [
'cards' => [
'allowed_bins' => [
'400000',
'52000000'
],
'installment_configuration' => [
'allow_installment' => true,
'allow_full_payment' => false,
'allowed_terms' => [
[
'issuer' => 'BCA'
'terms' => [3,6,12]
],
[
'issuer' => 'BNI'
'terms' => [3,6]
],
[
'issuer' => 'MANDIRI'
'terms' => [6]
]
]
]
]
],
'metadata' => [
'store_branch' => 'Jakarta'
]
];
$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': 510000,
'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',
'viber'
],
'invoice_reminder': [
'whatsapp',
'email',
'viber'
],
'invoice_paid': [
'whatsapp',
'email',
'viber'
]
},
'success_redirect_url': 'https://www.google.com',
'failure_redirect_url': 'https://www.google.com',
'currency': 'IDR',
'items': [
{
'name': 'Air Conditioner',
'quantity': 1,
'price': 510000,
'category': 'Electronic',
'url': 'https://yourcompany.com/example_item'
}
],
'fees': [
{
'type': 'ADMIN',
'value': 5000
}
],
'payment_methods': ['CREDIT_CARD'],
'channel_properties': {
'cards': {
'allowed_bins': [
'400000',
'52000000'
],
'installment_configuration': {
'allow_installment': true,
'allow_full_payment': false,
'allowed_terms': [
{
'issuer': 'BCA',
'terms': [3,6,12]
},
{
'issuer': 'BNI',
'terms': [3,6]
},
{
'issuer': 'MANDIRI',
'terms': [6]
}
]
}
}
}
);
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", "Doe");
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": 510000);
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: 510000,
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",
"viber"
}
customerNotificationPreference = {
invoice_created: NotificationType
invoice_reminder: NotificationType
invoice_paid: NotificationType
}
items = []
item = {
name: "Phone Case",
price: 510000,
quantity: 1
category: "Electronic",
url: "https://yourcompany.com/example_item"
}
items.append(item)
fees = []
fee = {
Type: "ADMIN",
Value: 5000,
}
fees.append(fee)
allowedTerms = []
allowedTerm = {
issuer: 'BNI',
terms: [3,6,12]
}
allowedTerms.append(allowedTerm)
installmentConfiguration = {
allow_installment: true,
allow_full_payment: false,
allowed_terms: allowedTerms
}
cardChannelProperties = {
allowed_bins: ['400000', '520000'],
installment_configuration: installmentConfiguration
}
paymentMethods = ["CREDIT_CARD"]
channelProperties = {
card: cardChannelProperties
}
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,
payment_methods = paymentMethods,
channel_properties = channelProperties
)
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 = "Doen",
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 }
};
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-idoptional |
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-ruleoptional |
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 |
Body Parameter | Tipe | Deskripsi | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
external_idrequired |
string |
ID unik yang berfungsi sebagai tanda pengenal sebuah invoice di dalam sistem Anda. Minimum karakter: 1 Maksimum karakter: 255 karakter |
||||||||||||||||||||||||
amount required |
number |
Jumlah tagihan yang harus dibayar. Jumlah minimal dan maksimal dijelaskan disini. Parameter amount harus sudah termasuk dengan biaya transaksi (fee). Jika terjadi perbedaan diantara jumlah transaksi dan harga barang dengan nominal yang diinput pada paramter fees, Xendit akan menggunakan nominal yang tertera pada parameter ini untuk membuat invoice. Jika mata uang atau yang digunakan adalah IDR dan nominal pembayaran memiliki desimal (seperti IDR 4550.50), nominal tersebut akan dipotong menjadi IDR 4550. |
||||||||||||||||||||||||
descriptionoptional |
string |
Deskripsi invoice - Anda bisa isi dengan daftar barang yang dibayarkan, atau apapun yang menjelaskan fungsi dari invoice ini Minimum karakter: 1 Maksimum karakter: Tidak terbatas |
||||||||||||||||||||||||
customeroptional |
object |
Objek yang berisi informasi pengguna Anda. Mohon memasukkan email dan nomor ponsel dari pelanggan Anda apabila Anda ingin mengirim notifikasi email/WhatsApp. customer child parameter
|
||||||||||||||||||||||||
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. customer_notification_preference child parameters
|
||||||||||||||||||||||||
invoice_duration optional |
number |
Durasi waktu yang dimiliki pengguna akhir untuk membayar tagihan sebelum kadaluarsa (dalam detik). Default adalah 24 jam (86.400 detik). Minimum 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 . Minimum 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 . Minimum 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", "ATOME", "QRIS"]
Nilai untuk Philippines: ["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", "BDO_ONLINE_BANKING", "BPI_ONLINE_BANKING", "UNIONBANK_ONILNE_BANKING", "BOC_ONLINE_BANKING", "CHINABANK_ONLINE_BANKING", "INSTAPAY_ONLINE_BANKING", "LANDBANK_ONLINE_BANKING", "MAYBANK_ONLINE_BANKING", "METROBANK_ONLINE_BANKING", "PNB_ONLINE_BANKING", "PSBANK_ONLINE_BANKING", "PESONET_ONLINE_BANKING", "RCBC_ONLINE_BANKING", "ROBINSONS_BANK_ONLINE_BANKING", "SECURITY_BANK_ONLINE_BANKING", "QRPH"]
Nilai untuk Thailand: ["CREDIT_CARD", "PROMPTPAY", "LINEPAY", "WECHATPAY", "TRUEMONEY", "SHOPEEPAY", "DD_SCB_MB", "DD_BBL_MB", "DD_KTB_MB", "DD_BAY_MB", "DD_KBANK_MB"]
Nilai untuk Vietnam: ["CREDIT_CARD", "APPOTA", "ZALOPAY", "VNPTWALLET", "VIETTELPAY", "SHOPEEPAY", "WOORI", "VIETCAPITAL", "VPB", "BIDV"]
Nilai untuk Malaysia: ["CREDIT_CARD", "TOUCHNGO", "WECHATPAY", "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", "DD_AFFIN_FPX_BUSINESS", "DD_AGRO_FPX_BUSINESS", "DD_ALLIANCE_FPX_BUSINESS", "DD_AMBANK_FPX_BUSINESS", "DD_ISLAM_FPX_BUSINESS", "DD_MUAMALAT_FPX_BUSINESS", "DD_BNP_FPX_BUSINESS", "DD_CIMB_FPX_BUSINESS", "DD_CITIBANK_FPX_BUSINESS", "DD_DEUTSCHE_FPX_BUSINESS", "DD_HLB_FPX_BUSINESS", "DD_HSBC_FPX_BUSINESS", "DD_RAKYAT_FPX_BUSINESS", "DD_KFH_FPX_BUSINESS", "DD_MAYB2E_FPX_BUSINESS", "DD_OCBC_FPX_BUSINESS", "DD_PUBLIC_FPX_BUSINESS", "DD_RHB_FPX_BUSINESS", "DD_SCH_FPX_BUSINESS", "DD_UOB_FPX_BUSINESS"]
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 Nilai yang diterima : IDR , PHP , THB , VND , 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 optionaldefault:
|
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 standar 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
|
||||||||||||||||||||||||
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
|
||||||||||||||||||||||||
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. | ||||||||||||||||||||||||
channel_properties optional |
object |
Menentukan konfigurasi dari setiap metode pembayaran atau kanal pembayaran yang akan digunakan untuk pembuatan tautan pembayaran (invoice) Cards channel child parameters
|
||||||||||||||||||||||||
metadataopsional |
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 Pembuatan Invoice
{
"id": "65fc7522ff846905c2fc1c8d",
"external_id": "payment-link-example",
"user_id": "65e95b2b3e4690f17fab20ad",
"status": "PENDING",
"merchant_name": "Honey Badger Business",
"merchant_profile_picture_url": "https://du8nwjtfkinx.cloudfront.net/xendit.png",
"amount": 510000,
"description": "Checkout Demo #123",
"expiry_date": "2024-03-22T17:57:54.578Z",
"invoice_url": "https://checkout-staging.xendit.co/v2/65fc7522ff846905c2fc1c8d",
"available_banks": [
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BNI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "PERMATA",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BCA",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "SAHABAT_SAMPOERNA",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "CIMB",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BSI",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BJB",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
},
{
"bank_code": "BNC",
"collection_type": "POOL",
"transfer_amount": 510000,
"bank_branch": "Virtual Account",
"account_holder_name": "CARDS AUTOMATION TEST",
"identity_amount": 0
}
],
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART"
},
{
"retail_outlet_name": "INDOMARET"
}
],
"available_ewallets": [
{
"ewallet_type": "SHOPEEPAY"
},
{
"ewallet_type": "ASTRAPAY"
},
{
"ewallet_type": "JENIUSPAY"
},
{
"ewallet_type": "DANA"
},
{
"ewallet_type": "LINKAJA"
},
{
"ewallet_type": "OVO"
},
{
"ewallet_type": "NEXCASH"
}
],
"available_qr_codes": [
{
"qr_code_type": "QRIS"
}
],
"available_direct_debits": [
{
"direct_debit_type": "DD_BRI"
},
{
"direct_debit_type": "DD_MANDIRI"
}
],
"available_paylaters": [
{
"paylater_type": "KREDIVO"
},
{
"paylater_type": "AKULAKU"
},
{
"paylater_type": "ATOME"
}
],
"should_exclude_credit_card": false,
"should_send_email": false,
"success_redirect_url": "https://www.google.com",
"failure_redirect_url": "https://www.google.com",
"created": "2024-03-21T17:57:55.128Z",
"updated": "2024-03-21T17:57:55.128Z",
"currency": "IDR",
"items": [
{
"name": "Air Conditioner",
"quantity": 1,
"price": 510000,
"category": "Electronic",
"url": "https://yourcompany.com/example_item"
}
],
"fees": [
{
"type": "ADMIN",
"value": 5000
}
],
"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",
"viber"
],
"invoice_reminder": [
"whatsapp",
"email",
"viber"
],
"invoice_paid": [
"whatsapp",
"email",
"viber"
]
},
"channel_properties": {
"cards": {
"allowed_bins": [
"400000",
"52000000"
],
"installment_configuration": {
"allow_installment": true,
"allow_full_payment": false,
"allowed_terms": [
{
"issuer": "BRI",
"terms": [
3,
6,
12
]
},
{
"issuer": "BNI",
"terms": [
3,
6
]
}
]
}
}
}
}
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.
|
||||||||||||||||||||||||
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.
|
||||||||||||||||||||||||
available_banks | object |
Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
|
||||||||||||||||||||||||
available_retail_outlets | object |
Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
|
||||||||||||||||||||||||
available_ewallets | object |
Metode pembayaran melalui e-wallet berdasarkan konfigurasi
|
||||||||||||||||||||||||
available_qr_codes | object |
Metode pembayaran melalui QR yang tersedia, berdasarkan konfigurasi
|
||||||||||||||||||||||||
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:
|
||||||||||||||||||||||||
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
|
||||||||||||||||||||||||
fees optional |
array |
Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
|
||||||||||||||||||||||||
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. | ||||||||||||||||||||||||
channel_properties optional |
object |
Menentukan konfigurasi dari setiap metode pembayaran atau kanal pembayaran yang akan digunakan untuk pembuatan tautan pembayaran (invoice) Cards channel child parameters
|
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Masukan tidak lolos validasi. Pesan kesalahan mengandung detail masukan yang tidak lolos validasi. |
INVALID_JSON_FORMAT400 |
Request body bukan format JSON yang valid. |
NO_COLLECTION400 |
Akun Anda belum memiliki konfigurasi metode pembayaran (virtual account, kartu kredit, outlet ritel). Silakan kontak customer support kami untuk pengkonfigurasian. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
UNIQUE_ACCOUNT404 |
Tidak ada virtual account yang tersedia di dalam rentang non-fixed virtual account akun Anda. |
CALLBACK_VIRTUAL404 |
ID Fixed virtual account yang dimaksud tidak valid. |
AVAILABLE_PAYMENT404 |
Tidak ada payment code yang tersedia di dalam rentang outlet ritel akun Anda. |
INVALID_REMINDER_TIME400 |
Nilai reminder_time tidak sesuai dengan standar yang diizinkan. |
AVAILABLE_PAYMENT404 |
Tidak ada payment code yang tersedia di dalam rentang outlet ritel akun Anda. |
INVALID_REMINDER_TIME400 |
Nilai reminder_time tidak sesuai dengan standar yang diizinkan. |
INSTALLMENT_CONFIGURATION_NOT_AVAILABLE400 |
Tidak ada fitur cicilan yang tersedia untuk bank ini pada bisnis Anda. Mohon dapat menghubungi CS Xendit untuk melakukan aktivasi |
INSTALLMENT_NOT_ENABLED400 |
Opsi cicilan tidak tersedia untuk bisnis Anda. Mohon dapat menghubungi CS Xendit untuk melakukan aktivasi. |
AMOUNT_BELOW_MINIMUM_LIMIT400
Jumlah nominal yang tertera lebih rendah dari batas minimal transaksi cicilan .
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-idoptional |
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.
|
||||||||||||||||||||||||
customer_notification_preference | Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini.
|
||||||||||||||||||||||||
expiry_date | Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam. | ||||||||||||||||||||||||
available_banks | Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
|
||||||||||||||||||||||||
available_retail_outlets | Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
|
||||||||||||||||||||||||
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
|
||||||||||||||||||||||||
fees optional |
Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
|
||||||||||||||||||||||||
payment_details optional |
Objek yang berisi detil pembayaran. Saat ini hanya mendukung pembayaran QRIS.
|
||||||||||||||||||||||||
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. | ||||||||||||||||||||||||
channel_properties optional |
object Menentukan konfigurasi dari setiap metode pembayaran atau kanal pembayaran yang akan digunakan untuk pembuatan tautan pembayaran (invoice) Cards channel child parameters
|
||||||||||||||||||||||||
metadataopsional |
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 Error
Kode Error | Deskripsi |
---|---|
INVALID_JSON_FORMAT400 |
Request body bukan format JSON yang valid. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
INVOICE_NOT404 |
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:
- 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.
- 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-idoptional |
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.
|
||||||||||||
customer_notification_preference | Objek yang berisi pilihan notifikasi / pemberitahuan untuk invoice ini.
|
||||||||||||
expiry_date | Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam. | ||||||||||||
available_banks | Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
|
||||||||||||
available_retail_outlets | Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
|
||||||||||||
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
|
||||||||||||
fees optional |
Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda
|
||||||||||||
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. | ||||||||||||
metadataopsional |
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 Error
Kode Error | Deskripsi |
---|---|
INVALID_JSON_FORMAT400 |
Request body bukan format JSON yang valid. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
INVOICE_NOT404 |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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. | ||||||||||||
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
|
||||||||||||
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
|
||||||||||||
fees optional |
array |
Array fee berupa objek JSON yang menunjukkan tambahan biaya yang Anda berlakukan ke pelanggan Anda. Parameter objek 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. | ||||||||||||
bank_code optional |
string |
Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah BANK_TRANSFER |
||||||||||||
ewallet_type optional |
string |
Kode ewallet yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah EWALLET |
||||||||||||
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
- Pembayaran langganan dengan jumlah tetap (misalnya, langganan streaming konten, kontribusi donasi berulang)
- Pembayaran langganan berbasis penggunaan/ Tagihan (misalnya tagihan Utilitas, biaya roaming data)
Metode Pembayaran Autodebit yang Didukung di Indonesia (tunduk pada persetujuan penyedia metode pembayaran)
- Kartu Kredit
- BRI DD
- OVO
- SHOPEEPAY
Metode Pembayaran Autodebit yang Didukung di Filipina (tunduk pada persetujuan penyedia metode pembayaran)
- Kartu Kredit
- SHOPEEPAY
- GRABPAY
- MAYA
- GCASH
- UBP
- BPI
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 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx | ||||||||||||||||||||||||
reference_idwajib |
string |
Pengenal yang disediakan merchant untuk rencana pembayaran berulang Min - 1 karakter Maks - 64 karakter |
||||||||||||||||||||||||
customer_idwajib |
string |
ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx | ||||||||||||||||||||||||
recurring_actionwajib |
enum |
Jenis tindakan pembayaran berulang yang diminta. Nilai yang didukung - PAYMENT | ||||||||||||||||||||||||
recurring_cycle_countwajib |
number |
Jumlah total siklus yang dijalankan oleh rencana pembayaran berulang. Siklus pembayaran langsung juga dihitung sebagai 1 hitungan siklus | ||||||||||||||||||||||||
currencywajib |
enum |
Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP | ||||||||||||||||||||||||
amountwajib |
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 |
||||||||||||||||||||||||
statuswajib |
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 |
||||||||||||||||||||||||
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan rencana berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||||||||||||
updatedwajib |
string |
Waktu ISO 8601 untuk pembaruan objek rencana pembayaran berulang terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||||||||||||
payment_methodsopsional |
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
|
||||||||||||||||||||||||
schedule_idwajib bersyarat |
string |
ID jadwal pembayaran berulang yang dihasilkan Xendit. Diperlukan jika parameter schedule tidak disediakan di API pembuatan rencana pembayaran berulang |
||||||||||||||||||||||||
schedulewajib bersyarat |
object |
Objek data yang berisi konfigurasi bagaimana siklus berulang akan dijadwalkan. Diperlukan jika schedule_id tidak disediakan di API pembuatan rencana pembayaran berulang
|
||||||||||||||||||||||||
immediate_action_typeopsional |
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_configopsional |
Objek |
Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
|
||||||||||||||||||||||||
payment_link_for_failed_attemptopsional |
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_actionopsional |
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 | ||||||||||||||||||||||||
metadataopsional |
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 | ||||||||||||||||||||||||
descriptionopsional |
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 |
||||||||||||||||||||||||
itemsopsional |
array |
Susunan objek yang mendeskripsikan produk/jasa
|
||||||||||||||||||||||||
actionsopsional |
array |
Susunan objek yang berisi URL bagi pengguna akhir untuk menyelesaikan rencana pembayaran berulang mereka
|
||||||||||||||||||||||||
success_return_urlopsional |
string |
URL tempat pengguna akhir dialihkan setelah penautan akun berhasil. Harus HTTPS atau HTTP | ||||||||||||||||||||||||
failure_return_urlopsional |
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 |
---|---|---|
idwajib |
string |
ID jadwal berulang yang dibuat oleh Xendit, dengan awalan resc-xxx |
business_idwajib |
string |
ID business yang dibuat oleh Xendit |
reference_idwajib |
string |
Pengidentifikasi yang disediakan penjual untuk jadwal pembayaran berulang Min - 1 karakter Maks - n/a |
intervalwajib |
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_countwajib |
angka |
Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, maka siklus berulang terjadi setiap 3 bulan) |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan jadwal pembayaran berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" |
updateddiperlukan |
string |
Waktu ISO 8601 untuk pembaruan objek jadwal terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" |
total_recurrenceopsional |
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_dateopsional |
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_intervalopsional |
enum |
Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY |
retry_interval_countopsional |
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_retryopsional |
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_notificationsopsional |
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 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
ID siklus berulang yang dihasilkan Xendit, dengan awalan recy-xxx | ||||||||||||||
plan_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx | ||||||||||||||
reference_idwajib |
string |
Pengidentifikasi yang disediakan pedagang, dihasilkan dari objek rencana pembayaran berulang Min - 1 karakter Maks - 64 karakter |
||||||||||||||
customer_idwajib |
string |
ID pelanggan yang dihasilkan Xendit, dihasilkan dari objek rencana pembayaran berulang, dengan awalan cust-xxx | ||||||||||||||
recurring_actionwajib |
enum |
Jenis tindakan berulang yang diminta, dihasilkan dari objek rencana pembayaran berulang. Nilai yang didukung - PAYMENT | ||||||||||||||
tyoewajib |
enum |
Jenis siklus berulang - Nilai yang tersedia - SCHEDULED, IMMEDIATE | ||||||||||||||
cycle_numberwajib |
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_countwajib |
angka |
Jumlah tindakan yang telah dicoba untuk objek siklus berulang ini. Nilainya adalah gabungan dari percobaan pertama dan percobaan ulang | ||||||||||||||
attempt_detailswajib |
array |
Informasi detail dari setiap upaya tindakan
|
||||||||||||||
statuswajib |
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_timestampwajib |
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. | ||||||||||||||
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan siklus berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||
updateddiperlukan |
string |
Waktu ISO 8601 untuk pembaruan objek siklus terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||
currencywajib |
enum |
Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP | ||||||||||||||
amountwajib |
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-idoptional |
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_idwajib |
string |
Pengenal yang disediakan merchant untuk pelanggan. Permintaan dengan reference_id duplikat akan menghasilkan error. Sebagai gantinya, Anda harus melakukan PATCH objek pelanggan.
|
||
typewajib |
string |
Jenis pelanggan. Nilai yang didukung: INDIVIDUAL |
||
individual_detaildiperlukan dengan syarat |
object |
Objek JSON yang berisi detail individu. Wajib diisi jika jenisnya adalah INDIVIDUAL
Parameter detail individu
|
||
mobile_numberopsional |
string |
Nomor ponsel pelanggan dalam format E.164
|
||
emailopsional |
string |
Alamat email pelanggan
|
Parameter Respons
Respons sukses akan berisi satu Objek Pelanggan
Kode Error
Lihat error lainnya di sini.
Kode Error | Keterangan |
---|---|
DUPLICATE_ERROR409 |
reference_id yang disediakan telah digunakan sebelumnya. Harap masukkan reference_id yang unik. |
IDEMPOTENCY_ERROR409 |
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-idoptional |
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-ruleopsional |
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 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx | ||||||||||||||||||||
reference_idwajib |
string |
Pengenal yang disediakan merchant untuk rencana pembayaran berulang Min - 1 karakter Maks - 64 karakter |
||||||||||||||||||||
customer_idwajib |
string |
ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx. Hanya mendukung objek pelanggan dengan tipe INDIVIDUAL |
||||||||||||||||||||
recurring_actionwajib |
enum |
Jenis tindakan pembayaran berulang yang diminta. Nilai yang didukung - PAYMENT | ||||||||||||||||||||
recurring_cycle_countwajib |
number |
Jumlah total siklus yang dijalankan oleh rencana pembayaran berulang. Siklus pembayaran langsung juga dihitung sebagai 1 hitungan siklus | ||||||||||||||||||||
currencywajib |
enum |
Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP | ||||||||||||||||||||
amountwajib |
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 |
||||||||||||||||||||
statuswajib |
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 |
||||||||||||||||||||
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan rencana berulang. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||||||||
updatedwajib |
string |
Waktu ISO 8601 untuk pembaruan objek rencana pembayaran berulang terbaru. Zona waktu UTC+0. Contoh nilai: "2020-04-20T16:23:52Z" | ||||||||||||||||||||
payment_methodsopsional |
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
|
||||||||||||||||||||
schedulewajib |
object |
Objek data yang berisi konfigurasi bagaimana siklus berulang akan dijadwalkan.
|
||||||||||||||||||||
immediate_action_typeopsional |
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_configopsional |
Objek |
Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
|
||||||||||||||||||||
payment_link_for_failed_attemptopsional |
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_actionopsional |
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 | ||||||||||||||||||||
metadataopsional |
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 | ||||||||||||||||||||
descriptionopsional |
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 |
||||||||||||||||||||
itemsopsional |
array |
Susunan objek yang mendeskripsikan produk/jasa
|
||||||||||||||||||||
success_return_urlopsional |
string |
URL tempat pengguna akhir dialihkan setelah penautan akun berhasil. Harus HTTPS atau HTTP | ||||||||||||||||||||
failure_return_urlopsional |
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_ERROR400 |
Ada input yang tidak valid di salah satu kolom permintaan yang wajib |
API_VALIDATION_ERROR400 |
schedule harus disertakan dalam isi permintaan agar respons berhasil. Harap periksa badan permintaan Anda |
API_VALIDATION_ERROR400 |
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_ERROR400 |
Peringkat untuk metode pembayaran harus berurutan mulai dari 1 |
API_VALIDATION_ERROR400 |
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_ERROR400 |
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_ERROR400 |
anchor_date tidak menerima tanggal dari 29 hingga 31. Harap periksa request Anda untuk menentukan semua nilai |
API_VALIDATION_ERROR400 |
Jumlah items.net_unit_amount harus sama dengan jumlah rencana |
INVALID_PAYMENT_METHOD_ID400 |
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_KEY401 |
Format kunci API tidak valid |
PAYMENT_METHOD_ID_NOT_FOUND404 |
payment_method_id yang diberikan tidak ditemukan. Coba lagi dengan payment_method_id |
CUSTOMER_NOT_FOUND404 |
customer_id tidak valid atau tidak ditemukan. Harap coba lagi dengan customer_id yang valid |
DATA_NOT_FOUND404 |
schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
UNSUPPORTED_CONTENT_TYPE415 |
Jenis konten yang diminta tidak didukung |
SERVER_ERROR500 |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.plan.activated |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0. |
dataopsional |
object |
Objek Rencana dengan status ACTIVE |
api_versionopsional |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.plan.inactivated |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0. |
dataopsional |
object |
Objek Rencana dengan status INACTIVE |
api_versionopsional |
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 |
---|---|---|
idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
Parameter Body | Tipe | Deskripsi | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
customer_idwajib |
string |
ID pelanggan yang dibuat oleh Xendit, dengan awalan cust-xxx | ||||||||||||||||||||
currencywajib |
enum |
Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP | ||||||||||||||||||||
amountwajib |
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_methodsopsional |
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
|
||||||||||||||||||||
notification_configopsional |
Objek |
Objek berisi preferensi notifikasi untuk rencana pembayaran berulang
|
||||||||||||||||||||
payment_link_for_failed_attemptopsional |
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 |
||||||||||||||||||||
metadataopsional |
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 | ||||||||||||||||||||
descriptionopsional |
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 |
||||||||||||||||||||
itemsopsional |
array |
Susunan objek yang mendeskripsikan produk/jasa
|
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_ERROR400 |
Ada input yang tidak valid di salah satu kolom permintaan yang wajib |
API_VALIDATION_ERROR400 |
Setiap nilai rank untuk metode pembayaran harus unik. Harap periksa permintaan Anda untuk membatalkan peringkat. |
API_VALIDATION_ERROR400 |
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_ERROR400 |
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_ID400 |
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_KEY401 |
Format kunci API tidak valid |
PAYMENT_METHOD_ID_NOT_FOUND404 |
payment_method_id yang diberikan tidak ditemukan. Coba lagi dengan payment_method_id yang valid |
CUSTOMER_NOT_FOUND404 |
customer_id tidak valid atau tidak ditemukan. Coba lagi dengan customer_id yang valid |
UNSUPPORTED_CONTENT_TYPE415 |
Jenis konten yang diminta tidak didukung |
SERVER_ERROR500 |
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-idoptional |
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 |
---|---|---|
idwajib |
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-idoptional |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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 |
---|---|---|
idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
Parameter Query | Tipe | Keterangan |
---|---|---|
limitopsional |
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_idopsional |
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 |
---|---|---|
datadiperlukan |
array |
Larik Objek Siklus yang diminta berdasarkan parameter query |
has_morewajib |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.created |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0. |
dataopsional |
object |
Cycle Object dengan status SCHEDULED |
api_versionopsional |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.retrying |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0. |
dataopsional |
object |
Cycle Object dengan status RETRYING |
api_versionopsional |
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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 |
---|---|---|
eventwajib |
string |
Mengidentifikasi peristiwa yang memicu webhook ke merchant - recurring.cycle.failed |
business_idwajib |
string |
Business ID dari merchant |
createdwajib |
string |
Waktu ISO 8601 untuk pembuatan pemberitahuan webhook. Zona waktu UTC+0. |
dataopsional |
object |
Cycle Object dengan status FAILED |
api_versionopsional |
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-idoptional |
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_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
idwajib |
string |
ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx |
Parameter Body | Tipe | Keterangan |
---|---|---|
schedule_timestampopsional |
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. |
currencyopsional |
enum |
Kode mata uang ISO 4217 untuk rencana pembayaran berulang. Mata uang yang didukung - IDR, PHP |
amountopsional |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
INELIGIBLE_CYCLE_REQUEST403 |
Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
idwajib |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
INELIGIBLE_CYCLE_REQUEST403 |
Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui |
DATA_NOT_FOUND404 |
plan_id rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
idwajib |
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_KEY401 |
Format kunci API tidak valid |
INELIGIBLE_CYCLE_REQUEST403 |
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_REACHED403 |
Jumlah maksimum (5) upaya picu telah tercapai |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
idwajib |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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-idoptional |
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_idwajib |
string |
ID rencana pembayaran berulang yang dibuat oleh Xendit, dengan awalan repl-xxx |
idwajib |
string |
ID siklus pembayaran berulang yang dihasilkan Xendit, dengan awalan recy-xxx |
Parameter Body | Tipe | Keterangan |
---|---|---|
amountwajib |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
INELIGIBLE_CYCLE_REQUEST403 |
Perubahan yang diminta pada siklus tidak dapat diproses. Hanya siklus dalam status "SCHEDULED" yang dapat dibatalkan atau diperbarui |
DATA_NOT_FOUND404 |
cycle_id siklus rencana pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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 |
---|---|---|
idwajib |
string |
ID jadwal pembayaran berulang yang dibuat oleh Xendit, dengan awalan resc-xxx |
Parameter Header | Tipe | Keterangan |
---|---|---|
for-user-idoptional |
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 |
---|---|---|
intervalopsional |
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_countopsional |
number |
Jumlah unit interval antara siklus berulang yang berurutan (mis. interval = MONTH, interval_count = 3, maka siklus berulang terjadi setiap 3 bulan) |
total_recurrenceopsional |
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_dateopsional |
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_intervalopsional |
enum |
Jenis interval antara percobaan yang gagal dan percobaan ulang. Nilai yang didukung - DAY |
retry_interval_countopsional |
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_retryopsional |
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_notificationsopsional |
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_ERROR400 |
Ada input yang tidak valid di salah satu kolom permintaan yang wajib |
API_VALIDATION_ERROR400 |
Setiap nilai rank untuk metode pembayaran harus unik. Harap periksa permintaan Anda untuk membatalkan peringkat. |
API_VALIDATION_ERROR400 |
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_ERROR400 |
anchor_date tidak menerima tanggal dari 29 hingga 31. Harap periksa request Anda untuk menentukan semua nilai |
INVALID_API_KEY401 |
Format kunci API tidak valid |
DATA_NOT_FOUND404 |
schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
UNSUPPORTED_CONTENT_TYPE415 |
Jenis konten yang diminta tidak didukung |
SERVER_ERROR500 |
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-idoptional |
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 |
---|---|---|
idwajib |
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_ERROR400 |
Ada input yang tidak valid di salah satu objek permintaan yang wajib |
INVALID_API_KEY401 |
Format kunci API tidak valid |
UNSUPPORTED_CONTENT_TYPE403 |
Jenis konten yang diminta tidak didukung |
DATA_NOT_FOUND404 |
schedule_id jadwal pembayaran berulang tidak ditemukan. Harap periksa request Anda lagi. |
SERVER_ERROR500 |
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.
Selain menggunakan type
, anda dapat melakukan konfigurasi akun sendiri dengan parameter configurations
.
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:
- Buat Akun (langkah ini)
- 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
|
||||||
type optional |
string |
Jenis akun yang anda buat. Jika tidak ditentukan, akan default ke jenis CUSTOM dan memerlukan parameter configurations . Nilai yang tersedia:
|
||||||
public_profile di perlukan untuk
|
object |
Berisikan informasi yang akan terlihat oleh pembayar atau penerima akhir (contoh muncul pada halaman hosted checkout, laporan tagihan kartu kredit, dll)
|
||||||
configurations di perlukan jika
|
object |
Konfigurasi untuk akun tipe CUSTOM
|
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"
}
Example: Respon Buat Akun (CUSTOM)
{
"id": "5cafeb170a2b18519b1b8761",
"created": "2021-01-01T10:00:00Z",
"updated": "2021-01-01T10:00:00Z",
"type": "CUSTOM",
"email": "angie@pinkpanther.com",
"public_profile": {
"business_name": "Angie custom stand"
},
"status": "LIVE",
"configurations": {
"has_dashboard": true,
"payment_settings_follow_platform": true,
"has_withdrawal": false
}
}
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:
|
updated required |
string |
Tanda waktu ketika akun diupdate Zona Waktu:
|
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
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: |
status required |
string |
Status pembuatan Akun Nilai yang tersedia: |
configurations optional |
object |
Konfigurasi untuk sub-akun tipe CUSTOM .Parameter yang didukung: payment_settings_follow_platform , has_withdrawal , has_dashboard |
Error Codes
Error Code | Error Message |
---|---|
API_VALIDATION_ERROR400 |
Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi |
INVALID_CONFIGURATION400 |
Parameter configurations tidak valid. Mohon mengikuti petunjuk untuk tiap parameter di bagian Request di atas. |
TYPE_AND_CONFIGURATION_CONFLICT400 |
Mohon menggunakan salah satu dari parameter type atau configuration |
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:
|
updated required |
string |
Tanda waktu ketika akun diupdate Zona Waktu:
|
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
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: |
status required |
string |
Status pembuatan Akun Nilai yang tersedia:
|
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 optionaldefault:
|
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:
|
updated required |
string |
Tanda waktu ketika akun diupdate Zona Waktu:
|
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
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: |
status required |
string |
Status pembuatan Akun Nilai yang tersedia:
|
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
|
||
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)
|
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:
|
updated required |
string |
Tanda waktu ketika akun diupdate Zona Waktu:
|
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
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: |
status required |
string |
Status pembuatan Akun Nilai yang tersedia: |
Objek Account Holder
Contoh Objek Account Holder
{
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": {
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
},
"address": {
"city": "test1",
"country": "ID",
"district": "test",
"postal_code": "1111",
"street_line1": "test",
"street_line2": "test",
"sub_district": "test",
"province_state": "test"
},
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"kyc": {
"status": "NOT_VERIFIED"
},
"created_at": "2023-03-30T11:41:57.881Z",
"updated_at": "2023-03-30T11:44:01.122Z"
}
Parameter | Type | Description | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
idrequired |
string |
Pengidentifikasi unik yang dihasilkan Xendit untuk setiap objek Account Holder. Simpan ID ini untuk dihubungkan ke sub-akun Anda |
||||||||||||||||||||
business_detailrequired |
object |
Objek yang berisi detail bisnis pemilik akun Child parameters
|
||||||||||||||||||||
individual_detailsrequired |
array[object] |
Informasi individu untuk pemilik akun (direktur, pemilik bisnis, dsb.). Anda dapat memberikan lebih dari satu individu. Child parameters
|
||||||||||||||||||||
addressrequired |
object |
Alamat perusahaan
|
||||||||||||||||||||
kyc_documentsrequired |
object |
Objek yang mengandung semua dokumen yang dibutuhkan untuk pemilik akun
|
||||||||||||||||||||
website_urlrequired |
string |
Situs web atau media sosial perusahaan Maximum length 255 charactersMinimum length 1 character |
||||||||||||||||||||
phone_numberrequired |
string |
Nomor telepon perusahaan dengan format E.164 Maximum length 15 characters |
||||||||||||||||||||
emailrequired |
string |
Alamat email pemilik akun atau bisnis Maximum length 255 charactersMinimum length 1 character |
||||||||||||||||||||
kycrequired |
array[object] |
Objek yang mengandung status verifikasi Account Holder Child parameters
|
||||||||||||||||||||
capabilitiesoptional |
array[object] |
Objek yang mengandung status verifikasi kemampuan Account Holder Child parameters
|
Buat Account Holder
Account Holder atau pemegang akun adalah identitas pemilik akun Xendit yang dibuat di Platform Anda. Untuk melengkapi akun dengan identitas, Anda harus melengkapkan 2 langkah berikut:
- Buat Akun
- Buat Account Holder
Informasi yang diperlukan akan berdasarkan dari jenis entitas pemilik akun. Mohon membaca panduan kami untuk melihat informasi lebih lengkap.
Endpoint: Buat Account Holder
POST https://api.xendit.co/account_holders
Request Parameters
Parameter objek yang diminta berbeda untuk tiap negara. Mohon membaca panduan ini untuk parameter lengkapnya.
Example Create Account Holder Request
curl https://api.xendit.co/account_holders -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--data-raw '{
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": [{
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
}],
"address": {
"city": "test1",
"country": "ID",
"district": "test",
"postal_code": "1111",
"street_line1": "test",
"street_line2": "test",
"sub_district": "test",
"province_state": "test"
},
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+6281234567",
"email": "test@xendit.co"
}'
Contoh Parameter Buat Account Holder untuk entitas jenis Corporation di Indonesia (Perseroan Terbatas)
{
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": [{
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
}],
"address": {
"city": "test1",
"country": "ID",
"district": "test",
"postal_code": "1111",
"street_line1": "test",
"street_line2": "test",
"sub_district": "test",
"province_state": "test"
},
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+6281234567",
"email": "test@xendit.co"
}
Parameter | Type | Deskripsi | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
business_detailrequired |
object |
Objek yang berisi detail bisnis pemilik akun Child parameters
|
||||||||||||||||||||
individual_detailsrequired |
array[object] |
Informasi individu untuk pemilik akun (direktur, pemilik bisnis, dsb.). Anda dapat memberikan lebih dari satu individu. Child parameters
|
||||||||||||||||||||
addressrequired |
object |
Alamat perusahaan
|
||||||||||||||||||||
kyc_documentsrequired |
object |
Objek yang mengandung semua dokumen yang dibutuhkan untuk pemilik akun
|
||||||||||||||||||||
website_urlrequired |
string |
Situs web atau media sosial perusahaan Maximum length 255 charactersMinimum length 1 character |
||||||||||||||||||||
phone_numberrequired |
string |
Nomor telepon perusahaan dengan format E.164 Maximum length 15 characters |
||||||||||||||||||||
emailrequired |
string |
Alamat email pemilik akun atau bisnis Maximum length 255 charactersMinimum length 1 character |
Response Parameters
Example: Create Account Holder Response
{
"id": "4376b7b0-1c44-46be-8640-828f79cdc8be",
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": {
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
},
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+62181234567",
"email": "test@xendit.co",
"kyc": {
"status": "NOT_VERIFIED"
},
"created_at": "2023-03-30T11:41:57.881Z",
"updated_at": "2023-03-30T11:44:01.122Z"
}
Returns Account Holder object with status 200
Error Codes
Error Code | Error Message |
---|---|
API_VALIDATION_ERROR400 |
Masukan tidak lolos validasi. Pesan kesalahan mengandung detail masukan yang tidak lolos validasi. |
REQUEST_FORBIDDEN_ERROR 403 |
The API key is forbidden to perform this request. You need to use the Platform API key with Account Holder write access. |
FEATURE_NOT_ACTIVATED 403 |
Fitur ini belum diaktifkan untuk akun anda. Mohon mengirim pesan ke help@xendit.co |
INVALID_API_KEY 401 |
Format API key tidak valid |
SERVER_ERROR 500 |
Ada error yang tidak teridentifikasi. Mohon mengirim pesan ke help@xendit.co dan kami akan membantu investigasi. |
Link Account Holder
Gunakan endpoint Update Account untuk menyambungkan ID Account Holder ke sub-akun anda. Permintaan ini hanya didukung untuk akun jenis OWNED
.
Endpoint: Update Account
PATCH https://api.xendit.co/v2/accounts/{id}
Example: Update Account
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 $'{"account_holder_id":"4376b7b0-1c44-46be-8640-828f79cdc8be"}'
<?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 = [
'acccount_holder_id' => '4376b7b0-1c44-46be-8640-828f79cdc8be'
]
];
$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;
Path Parameters
Parameter | Type | Deskripsi |
---|---|---|
id required |
string |
id akun yang telah dibuat |
Body Parameters
Parameter | Type | Deskripsi |
---|---|---|
account_holder_id required |
string |
Account Holder adalah identitas pemilik akun Xendit yang dibuat di Platform Anda |
Response Parameters
Example: Update Account Response
{
"id": "5cafeb170a2b18519b1b8761",
"created": "2021-01-01T10:00:00Z",
"updated": "2021-01-01T11:00:00Z",
"type": "OWNED",
"email": "angie@pinkpanther.com",
"public_profile": {
"business_name": "Angie lemonade stand"
},
"status": "LIVE"
"account_holder_id": "4376b7b0-1c44-46be-8640-828f79cdc8be"
}
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:
|
updated required |
string |
Tanda waktu ketika akun diupdate Zona Waktu:
|
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
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: |
status required |
string |
Status pembuatan Akun Nilai yang tersedia:
|
account_holder_id required |
string |
ID unik yang dibuat oleh Xendit untuk objek Account Holder, menggunakan endpoint Create Account Holder |
Cek Account Holder dengan ID
Endpoint: Cek Account Holder dengan ID
GET https://api.xendit.co/account_holders/{id}
Endpoint ini mengambil Account Holder yang telah dibuat sebelumnya. Endpoint ini digunakan untuk mengecek status verifikasi Account Holder dengan menggunakan ID.
Request Parameters
Example Get Account Holder Request
curl https://api.xendit.co/account_holders/4376b7b0-1c44-46be-8640-828f79cdc8be -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Path Parameter | Type | Description |
---|---|---|
idrequired |
string |
ID Account Holder Xendit yang dibuat menggunakan POST /account_holders |
Response Parameters
Example Get Account Holder Response
{
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": {
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
},
"address": {
"city": "test1",
"country": "ID",
"district": "test",
"postal_code": "1111",
"street_line1": "test",
"street_line2": "test",
"sub_district": "test",
"province_state": "test"
},
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"kyc": {
"status": "NOT_VERIFIED"
},
"created_at": "2023-03-30T11:41:57.881Z",
"updated_at": "2023-03-30T11:44:01.122Z"
}
Mengembalikan objek Account Holder dengan status 200
Error Codes
Error Code | Error Message |
---|---|
REQUEST_FORBIDDEN_ERROR403 |
API key ini tidak diizinkan untuk mengirim permintaan ini. Anda perlu menggunakan kunci API Platform dengan akses Read untuk Account Holder. |
DATA_NOT_FOUND404 |
ID Account Holder tidak ditemukan, kemungkinan ID invalid. |
INVALID_API_KEY401 |
API Key invalid |
Update Account Holder
Gunakan endpoint Update Account Holder untuk memperbarui informasi pemilik akun anda. Langkah ini mungkin diperlukan ketika informasi dan penyerahan dokumen Anda tidak mencukupi atau tidak valid, misalnya situs website tidak valid, selfie buram, ID tidak valid, dll. Permintaan ini hanya didukung untuk akun jenis OWNED
.
Endpoint: Update Account Holder
PATCH https://api.xendit.co/account_holders/{id}
Example: Update Account
curl https://api.xendit.co/account_holders/{id} -X PATCH \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-H 'Content-Type: application/json' \
-d $'{"website_url": "marketplace.xendit.com"}'
Path Parameters
Path Parameter | Type | Deskripsi |
---|---|---|
id required |
string |
id Account Holder yang telah dibuat |
Request Parameters
Parameter | Type | Deskripsi | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
business_detailrequired |
object |
Objek yang berisi detail bisnis pemilik akun Child parameters
|
||||||||||||||||||||
individual_detailsrequired |
array[object] |
Informasi individu untuk pemilik akun (direktur, pemilik bisnis, dsb.). Anda dapat memberikan lebih dari satu individu. Child parameters
|
||||||||||||||||||||
addressrequired |
object |
Alamat perusahaan
|
||||||||||||||||||||
kyc_documentsrequired |
object |
Objek yang mengandung semua dokumen yang dibutuhkan untuk pemilik akun
|
||||||||||||||||||||
website_urlrequired |
string |
Situs web atau media sosial perusahaan Maximum length 255 charactersMinimum length 1 character |
||||||||||||||||||||
phone_numberrequired |
string |
Nomor telepon perusahaan dengan format E.164 Maximum length 15 characters |
||||||||||||||||||||
emailrequired |
string |
Alamat email pemilik akun atau bisnis Maximum length 255 charactersMinimum length 1 character |
||||||||||||||||||||
capabilitiesoptional |
object |
Objek yang mengandung status verifikasi kemampuan Account Holder Child parameters
|
Response Parameters
Example: Update Account Holder Response
{
"id": "4376b7b0-1c44-46be-8640-828f79cdc8be",
"business_detail": {
"type": "CORPORATION",
"legal_name": "test17",
"trading_name": "test",
"description": "testing",
"industry_category": "EDUTECH",
"tax_identification_number": "1234567891345678",
"business_identification_number": "1234567",
"initial_deed_of_establishment_status": "UNCHANGED",
"country_of_operation": "ID"
},
"individual_details": [{
"role": "owner",
"given_names": "Adrian",
"surname": "Fauzi",
"phone_number": "+6281234567",
"email": "test@xendit.co",
"passport_number": "ABC12345",
"ktp_number": "1234567891345678"
}],
"kyc_documents": [
{
"type": "AUTHORIZED_PERSON_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2",
},
{
"type": "SELFIE_WITH_KTP_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "NIB_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "DEED_OF_COMPANY_ESTABLISHMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "CORPORATE_TAX_ID_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
},
{
"type": "SERVICE_AGREEMENT_DOCUMENT",
"country": "ID",
"file_id": "63f8719642f5856dcb142bd2"
}
],
"website_url": "https://xendit.co",
"phone_number": "+62181234567",
"email": "test@xendit.co",
"kyc": {
"status": "NOT_VERIFIED"
},
"created_at": "2023-03-30T11:41:57.881Z",
"updated_at": "2023-03-30T11:44:01.122Z"
}
Returns Account Holder object with status 200
Error Codes
Error Code | Error Message |
---|---|
API_VALIDATION_ERROR400 |
Masukan tidak lolos validasi. Pesan kesalahan mengandung detail masukan yang tidak lolos validasi. |
INSUFFICIENT_ACCOUNT_HOLDER_DATA 400 |
Data object Account Holder belum cukup untuk meminta aktivasi channel pembayaran ini. Harap diperbarui dengan informasi yang benar. |
REQUEST_FORBIDDEN_ERROR 403 |
API key ini tidak diizinkan untuk mengirim permintaan ini. Anda perlu menggunakan kunci API Platform dengan akses Write untuk Account Holder. |
FEATURE_NOT_ACTIVATED 403 |
Fitur ini belum diaktifkan untuk akun anda. Mohon mengirim pesan ke help@xendit.co |
KYC_VERIFICATION_IN_PROGRESS 403 |
Account Holder tidak bisa diperbarui jika verifikasi KYC sedang berjalan, mohon mencoba ulang setelah proses verifikasi selesai. |
CHANNEL_HAS_BEEN_ACTIVATED 403 |
Channel pembayaran sudah aktif. |
CHANNEL_ACTIVATION_IN_PROGRESS 403 |
Aktivasi channel pembayaran masih dalam proses. |
KYC_VERIFICATION_REQUIRED 403 |
Verifikasi KYC belum dilakukan untuk sub-akun ini. Mohon melakukan Request Capabilities setelah proses verifikasi selesai terlebih dalulu. |
INVALID_API_KEY 401 |
Format API key tidak valid |
DATA_NOT_FOUND 500 |
ID Account Holder tidak ditemukan, kemungkinan ID invalid. |
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:
|
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:
|
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:
|
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:
|
amount required |
string |
Nominal yang telah di transfer |
Kode Error
Error Code | Description |
---|---|
API_VALIDATION_ERROR400 |
Masukan tidak lolos validasi. Pesan kesalahan mengandung detail masukan yang tidak lolos validasi. |
INVALID_JSON_FORMAT400 |
Request body bukan format JSON yang valid. |
INVALID_SOURCE_OR400 |
Source atau destination ID akun tidak ditemukan. Mohon gunakan business ID yang valid dan tersedia dalam akun xenPlatform Anda. |
INSUFFICIENT_BALANCE400 |
Jumlah saldo dari akun Anda tidak mencukupi. |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
API_KEY_ENVIRONMENT403 |
Gunakan LIVE API key Anda saat melakukan transfers antara akun LIVE, atau gunakan TEST API key Anda saat melakukan transfers antara akun TEST. |
DUPLICATE_REFERENCE403 |
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_PROGRESS425 |
Error terjadi ketika Transfer dengan Requester ID & Reference yang sama masih diproses |
MISMATCH_PAYLOAD_FOR_REFERENCE400 |
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 |
---|---|---|
referencerequired |
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_KEY401 |
API key tidak memiliki izin untuk mengakses endpoint ini, butuh akses xenPlatform. |
DATA_NOT_FOUND404 |
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",
"reference_id": "reference"
},
{
"percent_amount": 5,
"currency": "IDR"
"destination_account_id": "5cafeb170a2b18519b1b8768",
"reference_id": "reference"
}
]
}'
'
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
|
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",
"reference_id": "reference"
},
{
"percent_amount": 5.25,
"currency": "IDR",
"destination_account_id": "5cafeb170a2b18519b1b8768",
"reference_id": "reference"
}
],
"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
|
||||||||||
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_AMOUNT400 |
Nominal biaya dan/atau dalam bentuk angka negatif atau format yang salah |
API_VALIDATION_ERROR400 |
Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi |
DESTINATION_ACCOUNT_NOT_FOUND400 |
Dikembalikan saat destination_account_id pada obyek route tidak memiliki hubungan dengan Business-ID dari pemilik Akun atau invalid. |
DUPLICATE_ERROR400 |
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
invoice
: Mengirimkan webhook ketika Invoice telah terbayarkan atau kedaluwarsa.fva_status
: Mengirimkan webhook ketika Virtual Account berhasil dibuat atau diperbaharui. Hanya tersedia untuk Indonesia 🇲🇨fva_paid
: Mengirimkan webhook ketika Virtual Account telah berhasil dibayar oleh pelanggan Anda. Hanya tersedia untuk Indonesia 🇲🇨ro_fpc_paid
: Mengirimkan webhook ketika kode pembayaran Alfamart/Indomaret telah berhasil dibayar oleh pelanggan Anda. Hanya tersedia untuk Indonesia 🇲🇨regional_ro_paid
: Mengirimkan webhook ketika kode pembayaran 7 Eleven, Cebuana, and ECPay di Filipina. Hanya tersedia untuk Indonesia 🇵🇭ewallet
: Tipe eWallet baru dari API/ewallets/charges
untuk menerima event charge dan event-event lainnya dari semua kanal eWallets.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.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.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.qr_code
: Xendit mengirimkan notifikasi ke sistem Anda ketika QR terlah berhasil dibayar atau proses refund telah selesai. Parameter ini hanya berlaku untuk APIqr_codes
versi2022-07-31
.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.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 bisnispayment_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 bisnispayment_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 bisnispayment_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 bisniscapture_succeeded
: Xendit mengirimkan notifikasi ke sistem Anda ketika ada manual capture melalui Payment Capture API telah berhasil. Tersedia untuk semua bisniscapture_failed
: Xendit mengirimkan notifikasi ke sistem Anda ketika ada manual capture melalui Payment Capture API telah gagal. Tersedia untuk semua bisnispayment_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
disbursement
: Xendit mengirimkan notifikasi ke sistem Anda pada saat Disbursement telah berhasil dieksekusi, dengan status berhasil atau gagal transfer. Hanya tersedia untuk Indonesia 🇲🇨ph_disbursement
: Xendit mengirimkan notifikasi ke sistem Anda pada saat Disbursement telah berhasil dieksekusi, dengan status berhasil atau gagal transfer. Hanya tersedia untuk Filipina 🇵🇭batch_disbursement
: Xendit mengirimkan notifikasi ke sistem Anda pada saat Batch Disbursement telah berhasil dieksekusi. Hanya tersedia untuk Indonesia 🇲🇨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
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-idoptional |
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:
|
Parameter Body | Tipe | Deskripsi |
---|---|---|
url required |
string |
URL dari server Anda yang sudah Anda tentukan untuk menerima webhook dari kami
|
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:
|
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:
|
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_FORMAT400 |
Anda menambahkan format URL yang salah |
CALLBACK_AUTHENTICATION_TOKEN_NOT_FOUND_ERROR404 |
Tidak ada token verifikasi webhook untuk akun ini, silakan hubungi help@xendit.co |
API_VALIDATION_ERROR400 |
Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi |
Callback Verifikasi KYC Account Holder
Endpoint: Webhook Verifikasi KYC Account Holder
POST https://yourcompany.com/xenplatform_webhook_url
Webhook verifikasi KYC Account Holder dapat digunakan untuk mengetahui jika hasil verifikasi menjadi PASSED
,FAILED
, atau RESUBMISSION_REQUIRED
. Permintaan ini hanya didukung untuk akun jenis OWNED
.
Siapkan URL untuk menerima webhook di Pengaturan Webhook di Dasbor Xendit.
Notifikasi akan dikirim dalam bentuk request POST ke URL yang disimpan. Xendit melampirkan header x-callback-token
yang dapat Anda validasi terhadap Token Verifikasi di Pengaturan Webhook untuk memverifikasi keaslian pesan.
Mohon segera respon balik dengan status 200
. Xendit menandai acara webhook sebagai gagal jika tidak ada respons dalam waktu 30 detik. Jika event tersebut gagal, percobaan ulang otomatis akan dimulai dalam 24 jam berikutnya. Alternatifnya, Anda dapat mengirim ulang event apa saja di tab Webhook. Anda juga dapat menerima pemberitahuan melalui email setiap 6 jam untuk memeriksa kesehatan webhook Anda.
Pelajari Webhook lebih lanjut.
Webhook Payload
Contoh Webhook Verifikasi Passed untuk KYC Account Holder
{
"event": "account_holder.kyc.status",
"created": "2021-01-01T10:00:00Z",
"business_id": "5fe2b0137b7d62542fe6d7de",
"data": {
"id": "57fb4e076fa3fa296b7f5a97",
"created": "2021-01-01T10:00:00Z",
"updated": "2021-01-01T10:00:00Z",
"kyc": {
"status": "PASSED",
"verified_at": "2021-01-01T10:00:00Z",
"requested_at": "2021-01-01T10:00:00Z",
"kyc_passed_at": "2021-01-01T10:00:00Z",
}
}
}
Header Parameter | Type | Description |
---|---|---|
x-callback-tokenrequired |
string |
Token unik untuk akun Xendit Anda yang digunakan untuk verifikasi asal mula event yang dikirimkan ke sistem Anda |
webhook-idrequired |
string |
Pengidentifikasi unik untuk tiap webhook untuk membantu Anda menangani webhook ganda dengan menerapkan idempotensi. Saat Anda menerima webhook-id yang sama dua kali, perlakukan permintaan berikutnya sebagai duplikat dan tolak webhook tersebut untuk mencegah webhook ganda |
Body Parameter | Type | Deskripsi | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
event required |
string |
Tipe event webhookAvailable values:
|
||||||||||||||||||||||||||
business_id required |
string |
ID akun dimana event ini terjadi. Ini akan menjadi ID akun Platform Anda untuk webhook Accounts. | ||||||||||||||||||||||||||
created required |
string |
Waktu kapan webhook dikirim Timezone:
|
||||||||||||||||||||||||||
data required |
array[object] |
Metadata untuk tipe event ini. Untuk account_holder.kyc.status , akan mengandung objek status KYC Account Holder
|
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:
- Webhook Pembuatan Akun Owned untuk mengirimkan notifikasi ke sistem Anda ketika akun
OWNED
telah berhasil dibuat - 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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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:
|
||||||||||||||||
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:
|
||||||||||||||||
data required |
object |
Memiliiki metadada untuk jenis tindakan. Untuk account.created , object Akun.
|
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
:
account.registered
- Saat sebuah Akun sudah berhasil teregistrasi via email undanganaccount.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:
account.suspected
- Saat Akun disuspek, Xendit akan memberhentikan semua aktivitas uang keluar dari Akun tersebut. Parameterstatus
di akun tersebut akan tetapLIVE
karena aktivitas uang masuk akan berjalan seperti biasa.account.suspended
- Saat Akun disuspensi, Xendit akan memberhentikan semua aktivitas uang masuk dan uang keluar dari Akun tersebut. Parameterstatus
di Akun tersebut akan berubah menjadiSUSPENDED
.account.cleared
- Saat Akun telah dibebaskan, Xendit akan mengaktifkan kembali seluruh kegiatan uang masuk dan uang keluar untuk dilakukan dari Akun tersebut. Parameterstatus
di akun tersebut akan berubah menjadiLIVE
.
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-tokenwajib |
string |
Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan |
webhook-idwajib |
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:
|
||||||||||
created wajib |
string |
Waktu ketika webhook dikirimkan Timezone:
|
||||||||||
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
|
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_LIVE404 |
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
- Skenario Testing Credit/Debit Card
- Skenario Testing Ewallets
- Skenario Testing Direct Debit
- Skenario Testing Virtual Accounts
- Skenario Testing Retail Outlet
- Skenario Testing Invoices
- Skenario Testing Disbursements and Payouts
Docs Changelog
API Reference Changelog
January 13, 2025
- Menambahkan kode error baru
REFUND_TEMPORARILY_UNAVAILABLE
dengan kode status http400
pada fitur refund kartu kredit.
November 19, 2024
- Menghapus panduan integrasi
Safe Acceptance API
date credit card charge.
November 5, 2024
- Menghapus channel Paylater
UANGME
di Indonesia
November 4, 2024
- Menambahkan
network_transaction_id
padanetwork_response
untuk fitur charge (otorisasi dan/atau capture) pada pembayaran dengan kartu
October 23, 2024
- Menambahkan dukungan untuk eWallet
WECHATPAY
eWallet di Malaysia - Menambahkan properti channel
allowed_payment_options
untuk ewallet MY GrabPay
October 4, 2024
- Menambahkan
network_response
untuk fitur tokenisasi, otentikasi, otorisasi dan charge
September 18, 2024
- Mengganti jumlah maksimum karakter pada
card_data.card_holder_first_name
dancard_data.card_holder_last_name` menjadi 50 karakter
- Mengganti jumlah maksimum karakter pada
card_data.card_holder_email
menjadi 254
September 9, 2024
- Menambahkan UBP & BPI pada Subscriptions
- Menambahkan Mandiri DD pada Subscriptions
-
September 4, 2024
- Mengganti parameter
card_data
pada API create authentication menjadi opsional
August 15, 2024
- Menambahkan
AMBANK
sebagai bank virtual account di Malaysia
August 5, 2024
- Menambahkan
BIDV
sebagai bank virtual account di Vietnam - Menambahkan
UOB
sebagai bank virtual account di Malaysia
August 1, 2024
- Menambahkan parameter untuk mendapatkan informasi pemilik kartu pada to collect objek card_data untuk fitur tokenisasi
- Menambahkan parameter untuk mendapatkan informasi pemilik kartu pada
card_data
untuk fitur otentikasi
July 29, 2024
- Menghapus
update-scheduled-cycle
pada Subscriptions,update-scheduled-cycle
masih dapat digunakan untuk merchant lama
July 10, 2024
- Menambahkan
allow_installment
pada Invoice API
June 13, 2024
- Menambahkan referensi API xenPlatform
Account Holder
versi Indonesia
June 4, 2024
- Menambahkan
metadata
pada Invoice API
May 14, 2024
- Menambahkan
VPB
sebagai bank virtual account di Vietnam - Menambahkan
ALTERNATIVE_DISPLAYS
untuk menampilkanVietQR
di Vietnam
Apr 17, 2024
- Tambahkan tipe akun xenPlatform
CUSTOM
Apr 7, 2024
- Menambahkan CHANNEL_UNAVAILABLE 503 error pada API pembuatan Virtual Account
Mar 22, 2024
- Menambahkan parameter
channel_properties
pada API untuk membuat invoice. Parameter ini dapat digunakan untuk menambahkan pengaturan pada metode pembayaran kartu kredit
Mar 20, 2024
- Tambahkan
at_timestamp
pada Get Balance API yang digunakan untuk mendapatkan total balance pada masa lampau - Tambahkan tipe DETAIL_TRANSACTIONS untuk Generate Report API
Feb 20, 2024
- Menghapus dokumentasi API xenPlatform v1 Create Account yang telah di deprekasi
Feb 6, 2024
- Menambahkan
TOUCHNGO
sebagai eWallet di Malaysia untuk API Invoice
Feb 3, 2024
- Menghapus 'MAXIMUM_TRANSFER_AMOUNT_ERROR' dan 'MAXIMUM_TRANSFER_AMOUNT_ERROR' pada Invoice
Feb 1, 2024
- Menambahkan tipe
TRANSACTION_ANALYSIS
ke API Hasilkan Laporan
Jan 15, 2024
- Menambahkan
MSB
sebagai bank virtual account di Vietnam - Menambahkan
STANDARD_CHARTERED
sebagai bank virtual account di Thailand
Dec 18, 2023
- Menambahkan format
amount
untuk mata uang MYR, VND, dan THB pada section API Payouts - Menambahkan mata uang MYR, VND, dan THB pada judul section API Payouts
Nov 21, 2023
- Buat API Pembayaran Terpisah baru
Nov 15, 2023
- Menambahkan
account_type
pada objek "Payout"
November 9, 2023
- Menambahkan Webhook callback enum baru untuk XenPlatform
report
,payment_succeeded
,payment_awaiting_capture
,payment_pending
,payment_failed
,capture_suceeded
,capture_failed
,payment_request_completed
October 19, 2023
- Tambahkan informasi mengenai batas kecepatan per IP
October 16, 2023
- Menghapus 'metadata' pada cycle-object didalam kode bas di recurring
- Menghapus 'metadata' pada callback-siklus pada recurring
- Menghapus 'metadata' pada ubah-siklus pada recurring
- Menghapus 'metadata' pada picu-pembayaran pada recurring
- Menghapus 'buat jadwal' pada recurring
October 10, 2023
- Menghapus 'schedule_id' pada buat-rencana recurring
- Menghapus 'metadata' pada cycle-object recurring
October 09, 2023
- Menambahkan API Customer ke SDK Baru
October 03, 2023
- Menambahkan saluran Ewallet JeniusPay Indonesia ke Invoice API
September 25, 2023
- Menambahkan informasi mengenai versi terbaru SDK dan menghapus informasi SDK yang lama
September 20, 2023
- Menambahkan
API_VALIDATION_ERROR
pada kode kesalahan "Pembuatan Payout Link" - Menambahkan batas jumlah minimum dan maksimum pada Payout Links
Agustus 10, 2023
- Menambahkan
BNC
sebagai nilaipayment_methods
baru di API Pembuatan Invoice
Juli 26, 2023
- Pembaharuan rekomendasi error code di tokenisasi, charge, dan capture
- Menghapus duplikasi PROCESSOR_ERROR di seksi pembuatan charge
Juli 20, 2023
- Pembaharuan pembuatan dan panggilan faktur untuk operasional di Thailand dan Vietnam.
Juli 3, 2023
- Menambahkan xenPlatform with-fee-rule header pada Direct Debit API
Juni 22, 2023
- Menambahkan
payer_email
danshould_send_email
pada API Pembuatan Invoice
Juni 13, 2023
- Menambahkan tipe kartu PREPAID dan UNKNOWN pada respon Create Charge Credit Card
Juni 12, 2023
- Menambahkan alasan kegagalan baru pada pembayaran Kartu Kredit
June 11, 2023
- Menambahkan XenPlatform
for-user-id
header pada Subscriptions API
Juni 8, 2023
- Menambahkan
qr_code
danrecurring
pada API Pengaturan Callback URL
Mei 23, 2023
- Menambah halaman Charge menggunakan CVV untuk Multiple Use Token
- Menghilangkan CVN dalam request charge dan authorization
- Memperjelas amount yang digunakan tidak menggunakan desimal
Mei 15, 2023
- Menambahkan saluran Filipina Direct Debit BDO EPay ke Invoice API
April 14, 2023
- Menambahkan
country
dancurrency
pada Get Virtual Account Banks API
April 12, 2023
- Menambahkan
currency
request parameter di Get Balance API
April 4, 2023
- Menambahkan unlink dengan konfirmasi untuk KTB direct debit di Thailand
Maret 29, 2023
- Menambah
GET list accounts API
di fitur xenPlatform
Maret 22, 2023
- Menambahkan
BNC
(Bank Neo Commerce) sebagai channel baru untuk Virtual Accounts
Maret 20, 2023
- Menambahkan objek opsional baru
payment_link_for_failed_attempt
dalam Recurring - objek rencana untuk membuat payment link untuk auto charged gagal
Maret 7, 2023
- Menghapus enum
ovo_paid
pada API Pengaturan Callback URL (Jadwal awal penghapusan pada tanggal 31 Mei 2022)
Februari 14, 2023
- Perbaikan
status
untuk pembuatan Batch Disbursement
Februari 10, 2023
- Menambah API untuk Picu Pembayaran siklus pembayaran berulang (Recurring)
Februari 8, 2023
- Mengubah
QRIS
menjadiQR_CODE
padapayment_method
parameter di Invoice Callback
Februari 7, 2023
- Deprekasi
fixed_va
sebagai parameter untuk pembuatan Invoice
Januari 31, 2023
- Menambahkan
country
dancurrency
sebagai parameter baru untuk pembuatan VA - VA sekarang mendukung 3 bank baru di Vietnam
Januari 12, 2023
- Mengubah nilai maksimal
items.quantity
dari 1000 menjadi 100000 pada API Pembuatan Invoice
Januari 3, 2023
- Menambahkan
SAHABAT_SAMPOERNA
sebagai nilaipayment_methods
baru di API Pembuatan Invoice
Desember 22, 2022
- Dokumentasi Rate Limit
Desember 13, 2022
- Perbaikan dan error code tambahan di Transfers API
Desember 8, 2022
- Produk baru: Payouts
- Produk "Payouts" yang sudah ada diganti namanya menjadi "Payout Links"
December 08, 2022
- Menambahkan API reference bahasa untuk recurring
November 29, 2022
- Menambahkan
payment_id
pada parameter Invoice Callback
November 11, 2022
- Menambahkan
DD_RCBC
sebagai nilaipayment_methods
baru di API Pembuatan Invoice
November 8, 2022
- Menambahkan parameter
report_version
pada API Menghasilkan Laporan
November 3, 2022
- Menambahkan izin API key baru
Report
pada API Report - Menambahkan izin API key baru
Transaksi
pada API Transaksi
October 28, 2022
- Menambahkan
ATOME
sebagai nilaipayment_methods
baru di API Pembuatan Invoice
October 27, 2022
- Menambahkan
date_of_registration
dandomicile_of_registration
pada Customer Object - Mengubah panjang maksimum email menjadi 50 karakter di Customer Object
Oktober 18, 2022
- Menambahkan
MAXIMUM_REFUND_TRANSACTION_REACHED
sebagai kode kesalahan pengembalian dana eWallet baru
Oktober 12, 2022
- Menambahkan
ID_JENIUSPAY
sebagai channel pembayaran eWallet - Menambahkan
destination_account_id
pada Fee Rule API - Membuat
for-user-id
sebagai optional saat headerwith-fee-rule
tersedia
Oktober 11, 2022
- Get Balance API menggunakan API key permission baru
Balance
September 30, 2022
- Menambahkan pemberitahuan bahwa API xenPlatform v1 Buat Akun dan Update Akun akan berhenti beroperasi pada tanggal 30 September 2023
September 12, 2022
- Menambahkan
min_amount
danmax_amount
sebagai parameter baru pada pembuatan VA - Menambahkan
reference
sebagai parameter baru ke dalam objekpayment_detail
pada notifikasi pembayaran
September 6, 2022
- Menghapus duplikasi field
country
dalam fieldidentity_accounts
- Menambahkan deskripsi alphanumeric dalam semua field freetext
Agusttus 23, 2022
- Halaman Request-ID baru di API Reference
Agustus 22, 2022
- Menambahkan alur pengalihan/non-auto debit
ID_LINKAJA
pada Postman Collection - Menambahkan alur pengalihan/non-auto debit
ID_DANA
pada Postman Collection
Agustus 15, 2022
- Menambahkan tipe webhook baru
payment_method_v2
pada API Pengaturan Callback URL
Agustus 9, 2022
- Perbarui Tipe Transaksi di Laporan Transaksi
Agustus 5, 2022
- Menambahkan alur pengalihan/non-auto debit
ID_LINKAJA
- Menambahkan alur pengalihan/non-auto debit
ID_DANA
- Jumlah maksimal QRIS yang diperbarui menjadi Rp 10.000.000
- Jumlah maksimal Cashalo yang diperbarui menjadi 8.000 PHP
- Akulaku sekarang menerima diskon sebagai item
Juli 27, 2022
- Menambahkan
DBS
sebagai channel baru Virtual Accounts - Menambahkan
BSI
sebaagai channel yang tersedia untuk parametersuggested_amount
Juli 15, 2022
- Menambahkan
ID_ATOME
danPH_ATOME
sebagai saluran paylater baru
Juli 14, 2022
- Attribut Customer Object
type
dirubah darioptional
menjadirequired
Juni 20, 2022
- Menambahkan
payment_remark
pada object pembayaran Virtual Account untuk BSS VA
Juni 13, 2022
- Menambahkan ID_ASTRAPAY sebagai channel pembayaran eWallet
- Menjelaskan bahwa PayMaya sama dengan Maya
- Menambahkan
FAILURE_DETAILS_UNAVAILABLE
sebagai salah satu kode eror eWallet - Mengubah "card_expiry" dari required ke optional dalam API Initialize Linked Account Token
Juni 2, 2022
- GET by id dan PATCH requests untuk servis customer object
Mei 27, 2022
- Menggunakan versi terbaru: 2020-10-31 sebagai versi “default” untuk customer object service
- Menambahkan respons field baru yaitu: hashed_phone_number & trading_name
Mei 12, 2022
- Menambahkan callback Account Suspension pada xenPlatform
Mei 11, 2022
- Menghapus endpoint GET
/payment_channels
Mei 10, 2022
- Menambahkan with-fee-rule header di RO (PH & ID)
Apr 25, 2021
- Menambahkan
settlement_status
danestimated_settlement_time
di objek Transaction
Apr 21, 2021
- Pembaharuan error code untuk endpoint Charge, Void, dan Refund eWallet
- Menambahkan deskripsi pada
fees_paid_amount
danadjusted_received_amount
di invoice callback mengenai rencana penghapusan - Menghapus
fees_paid_amount
danadjusted_received_amount
pada contoh invoice callback
Apr 19, 2022
- Menambahkan opsi
CASHALO
,DD_BCA_KLIKPAY
,UANGME
ke dalam pembuatan invoice payment_methods
Apr 18, 2022
- Menambahkan
SUSPENDED
sebagai nilai tersedia untukstatus
parameter pada API GET Account by ID
Apr 05, 2022
- Menambahkan promo pada API Safe Acceptance sebagai objek opsional
Mar 21, 2022
- Menambahkan kanal notifikasi baru
viber
pada API Invoice dan Recurring Payment
Mar 16, 2022
- Menambahkan Shopeepay Filipa pada API Invoice
- Menambahkan kanal Paylater baru
ID_INDODANA
pada Paylater API
Mar 11, 2022
- Menambahkan
surname
pada buat invoice APIcustomer
object - Menambahkan
customer
andcustomer_notification_preference
pada invoice response
Mar 10, 2022
- Menambahkan with-fee-rule pada eWallet v2 di ID
Mar 09, 2022
- Menambahkan kanal Paylater baru
PH_CASHALO
Feb 28, 2022
- Menghapus persyaratan keunikan
reference_id
di ewallets charge API
Feb 08, 2022
- Menambahkan contoh mendapatkan invoice berdasarkan External ID
- Memberi keterangan pada
fees_paid_amount
danadjusted_received_amount
pada Notifikasi Invoice
Feb 04, 2022
- Menambahkan DANA sebagai metode pembayaran eWallet tokenisasi
- Menambahkan ShopeePay ke metode pembayaran eWallet PH
- Alur account linking API tokenisasi yang baru dan disimplifikasi
- Menambahkan metode pengembalian sebagian dana untuk ShopeePay
Feb 03, 2022
- Menambahkan parameter external_id yang bisa digunakan untuk update Virtual Account
Jan 20, 2022
- Menambahkan header
with-fee-rule
pada API ewallet untuk kanal Filipina - Menambahkan rincian kode kegagalan untuk transaksi kartu kredit yang gagal
Jan 17, 2022
- Menghilangkan
bank_account_number
andpayment_code
from Buat Invoice respon
Jan 14, 2022
- Menambahkan retail-outlet endpoint cek daftar pembayaran dari ID Fixed Payment Code
Jan 13, 2022
- Menambahkan Android dan iOS SDK
- Mengganti Github repository iOS SDK ke repository baru. Repository lama akan tetap didukung
Jan 11, 2022
- Menambahkan tipe
ph_disbursement
pada API Pengaturan Callback URL
Jan 05, 2022
- Menghilangkan status
REFUNDED
dan menambahkan tipe transaksiREFUND
pada API Transaksi
Dec 28, 2021
- Menambahkan penjelasan bahwa khusus untuk BCA Aggregator, merchant bisa membuat VA name dengan karakter angka.
Dec 24, 2021
- Menambahkan BJB pada API Reference Virtual Account
Dec 22, 2021
- Menambahkan fitur void & refund untuk LinkAja
- Memperjelas bahwa fitur refund OVO hanya tersedia untuk tokenized payment
Dec 15, 2021
- Menambahkan response Dapatkan/Buat Faktur dan Daftar Faktur untuk menyertakan
available_paylaters
Dec 13, 2021
- Menambahkan detail pembayaran dalam panggilan balik kode QR
Dec 10, 2021
- Menambahkan opsi QRIS ke dalam pembuatan invoice payment_methods
- Perbarui deskripsi pembuatan faktur payment_methods
Dec 9, 2021
- Menambahkan metode pembayaran
CEBUANA
untuk POST Buat Invoice dan Invoice Callback
Dec 2, 2021
- Menambahkan dokumentasi
metadata
di Cards Create Charge Endpoint
Nov 18, 2021
- Menghapus BJB pada API Reference Virtual Account
- Mengubah merchant descriptor dari XENDIT menjadi XDT
Nov 15, 2021
- Menambahhkan parameter baru
locale
pada Buat Invoice dan Get Invoice API
Nov 12, 2021
- Menambahkan
url
dancategory
untuk setiap item pesanan pada INVOICE
Nov 1, 2021
- Menambahkan metode void dan refund untuk eWallet
- Menambahkan parameter baru status, refunded_amount, void_status, dan voided_at pada Charge Object untuk Charge API, Get Payment Status dan Payment Callback
Oct 29, 2021
- Menambahkan INCOMPLETE_AUTHENTICATION pada respon charge credit card
Oct 21, 2021
- BARU - GET Transfer API untuk pengguna XenPlatform
- Menambahkan objek payment_details ke GET Invoice response payload
- Menambahkan objek payment_details ke panggilan balik Faktur
Oct 19, 2021
- Menambahkan detail untuk Paylater refund dan Akulaku
Oct 18, 2021
- Tambahkan
fee object
sebagai parameter body ditransaction object
- Mengubah channel menjadi channel_code di transaction object
- Menambahkan kode error
INVALID_DESTINATION
di Buat Disbursement
Oct 08, 2021
- Memperbarahui limitasi nominal pembayaran minimum dan maksimum untuk Virtual Account
- Memperbarahui deskripsi parameter untuk Virtual Account
Oct 07, 2021
- Menambahkan header Fee Rule di QRIS
Oct 05, 2021
- Menambahkan larangan pengunaan prefix pada saat membuat Fixed Payment Code
Oct 04, 2021
- Menambahkan BSI (Bank Syariah Indonesia) sebagai bank channel baru untuk Invoice
Sep 30, 2021
- Billease PayLater sudah ditambahkan sebagai metode pembayaran di PH
- Kredivo dan Akulaku sudah ditambahkan sebagai metode pembayaran di ID
- Deskripsi status sudah diperbaharui di callback payload
Sep 28, 2021
- Menambahkan BSI (Bank Syariah Indonesia) sebagai bank channel baru untuk Virtual Account
Sep 27, 2021
- Menambahkan kode sampel .NET untuk Balance, Virtual Account, Disbursement, Invoice, Customer, Linked Account, Payment Method, Direct Debit Payment, and eWallets API dalam versi EN dan ID
- Menambahkan kode sampel .NET untuk Retail Outlet (PH) dalam versi EN
- Menambahkan Virtual Account, Disbursement, Invoice, Customer, Direct Debit, Retail Outlet (PH) dan eWallets ke dalam daftar produk yang didukung oleh library .NET dalam versi EN dan ID
Sep 21,2021
- Menambahkan Karakter Spesial pada Nama Fixed Payment Code
Sep 19,2021
- Menambahkan panggilan balik kedaluwarsa tokenisasi eWallet
- Menambahkan kode kesalahan untuk tokenized yang diisi dengan token yang kedaluwarsa
Sep 15,2021
- Menambahkan Akulaku sebagai saluran pembayaran di Paylater
- Menambahkan metode pengembalian dana di Paylater
Sep 10, 2021
- Menambahkan BJB (Bank Jabar Banten) sebagai bank channel baru untuk Virtual Account
Aug 26, 2021
- Menambahkan pembeda produk/layanan DIGITAL dan FISIK ke jenis item pesanan paylater
- Diskon dan biaya yang dihapus dari jenis item pesanan
Aug 25, 2021
- Menambahkan Prefix pada nama BNI VA
- Menambahkan status aktivasi pada Get Virtual Account Banks
- Menambahkan request parameter pada header untuk RO PH
Aug 19, 2021
- Menambahkan 2 parameter opsional untuk membuat invoice:
items
danfees
Aug 18, 2021
- Menambahkan kode sampel PHP untuk Linked Account, Payment Method, Recurring Payment, dan Direct Debit Payment API dalam versi EN dan ID
- Menambahkan Direct Debit ke dalam daftar produk yang didukung oleh library PHP dalam versi EN dan ID
Aug 18, 2021
- Menambahkan kode sampel PHP untuk Customer API dalam versi EN dan ID
- Menambahkan Customer ke dalam daftar produk yang didukung oleh library PHP dalam versi EN dan ID
Aug 5, 2021
- Menambahkan kode sampel Go untuk Linked Account, Payment Method, Recurring Payment, dan Direct Debit Payment API dalam versi EN dan ID
- Menambahkan Direct Debit ke dalam daftar produk yang didukung oleh library Go dalam versi EN dan ID
Aug 5, 2021
- Menambahkan metode pemutusan tautan Tokenisasi eWallets
Aug 4, 2021
- Menambahkan kode sampel Go untuk Customer API dalam versi EN dan ID
- Menambahkan Customer ke dalam daftar produk yang didukung oleh library Go dalam versi EN dan ID
Jul 29, 2021
- Menambahkan kode sampel Java untuk Linked Account, Payment Method, Recurring Payment, dan Direct Debit Payment API dalam versi EN dan ID
- Menambahkan Direct Debit ke dalam daftar produk yang didukung oleh library Java dalam versi EN dan ID
Jul 28, 2021
- Menambahkan kode sampel Java untuk Customer API dalam versi EN dan ID
- Menambahkan Customer ke dalam daftar produk yang didukung oleh library Java dalam versi EN dan ID
Jul 28, 2021
- Mengganti parameter wajib
payer_email
dandeskripsi
pada Buat Invoice API menjadi paramater opsional
Jul 27, 2021
- QR Code DYNAMIC dapat dibayarkan satu-kali
Jul 23, 2021
- Menambahkan kode error di xenPlatform Transfers
Jul 5, 2021
- API Refund Terbaru
- Update Object Direct Debit Payment BCA KlikPay, BCA OneKlik, dan dukungan refund
- Menambahkan deskripsi error untuk PAYMENT_STATUS_FAILED
- Menambahkan deskripsi callback untuk payment method expired/expired event
Jul 21, 2021
- Menambahkan bagian Laporan
Jul 13, 2021
- Menambahkan Buat Akun v2
- Menambahkan Callback Pembaruan Akun v2
- Menambahkan Dapatkan Akun dengan ID
Jul 12, 2021
- Menambahkan definisi type dan status pada Retail Outlet - ID
- Menambahkan penautan akun untuk tokenisasi Shopeepay
Jun 28, 2021
- Menambahkan
ewallet
,direct_debit
, danpayment_method
pada API POST /callback_urls
Jun 24, 2021
- Menambahkan bagian Transactions
Jun 21, 2021
- Ditambahkan SAKUKU eWallets API
Jun 3, 2021
- Perbaiki langkah tokenisasi eWallets
- Menambahkan penautan akun untuk tokenisasi OVO
June 2, 2021
- Penambahan batasan jumlah maksimum dan minimum Disbursements
- Menambahkan VA pada Fee Rule API
May 28, 2021
- Menambahkan
QRIS
pada API GET/payment_channels
- Menambahkan Cards pada Fee Rule API
May 12, 2021
- Batas pembayaran kode QR yang diperbarui hingga 5 juta IDR
May 5, 2021
- Menambahkan Kode Error pada API Mengatur Callback URLs
Apr 28, 2021
- Menambahkan halaman testing untuk Safe Acceptance pada Cards
Apr 12, 2021
- Menambahkan parameter
metadata
pada QR Codes
Apr 08, 2021
- Menambahkan bagian alur tokenisasi untuk eWallet
Apr 07, 2021
- Endpoint baru untuk menghapuskan token akun yang bertaut
- Pembaruan kode error untuk Inisiasi penautan akun Direct Debit
- Pembaruan kode error untuk Membuat Pembayaran Direct Debit
- Pembaruan kode error untuk Validasi OTP untuk Pembayaran Direct Debit
- Tambahan alasan kegagalan untuk Pembayaran Direct Debit
Mar 29, 2021
- API Mendapatkan Token baru pada Kartu Kredit
Mar 26, 2021
- Akun tipe
OWNED
sekarang tersedia di Filipina
Mar 25, 2021
- Menambahkan parameter
approval_code
pada respon Safe Acceptance - Memperbaiki deskripsi dari
approval_code
pada respon Charge - Memperbaiki posisi dari parameter
reward
pada respon Get Charge Option
Mar 17, 2021
- Terdapat batasan maksimum jumlah karakter untuk business_name pada endpoint /accounts. Jika jumlahnya lebih dari 128 karakter maka akan terpotong.
Mar 12, 2021
- Menambahkan tautan ke dokemuntasi Safe Acceptance sebagai petunjuk untuk membuat signature pada fitur Safe Acceptance
- Menambahkan paremeter baru pada permintaan dan respons Safe Acceptance
- Menambahkan paremeter baru pada permintaan dan respons Get Charge Option
Mar 10, 2021
- Menambahkan Gcash dan Grabpay sebagai saluran eWallet di Filipina untuk pembayaran satu kali
Mar 05, 2021
- Menambahkan limitasi panjang karakter pada nama RO
- API Customers kini dapat menggunakan header
for-user-id
untuk XenPlatform
Mar 04, 2021
- API Safe Acceptance baru pada Kartu Kredit
Mar 01, 2021
- Menambahkan jumlah karakter yang diperbolehkan untuk nama pada BCA VA
Feb 26, 2021
- API Direct Debit sekarang mendukung header XenPlatform
for-user-id
- Kode VA bank terbaru yaitu
BNI_SYARIAH
- Melarang penggunaan nama institusi atau bank di Indonesia pada pembuatan VA
- Menambahkan kode sampel Node.js pada API
/ewallets/charges
Feb 22, 2021
- Menambahkan Go di section library untuk versi bahasa
- Menambahkan PHP di section library untuk versi bahasa
- Menambahkan Java di section library untuk versi bahasa
- Menambahkan kode sampel Go pada API
/ewallets/charges
- Menambahkan kode sampel PHP pada API
/ewallets/charges
- Menambahkan kode sampel Java pada API
/ewallets/charges
Feb 17, 2021
Menambahkan kode sampel Python pada API /ewallets/charges
Feb 15, 2021
- Menambahkan Customers & Direct Debit ke dalam daftar produk yang didukung oleh library Node JS
- Menambahkan kode sampel Node JS pada API
/customers
,/linked_account_tokens
,/payment_methods
,/direct_debits
Feb 10, 2021
- Menambahkan
status
pada respon Kartu Kredit Charge API - Menambahkan status
REVERSED
pada daftar status respon API charge - Menambahkan query parameter
id_type
pada API permintaan charge untuk membantu pengguna mendapatkan rincian charge dengan menggunakan ID charge maupun external ID - Menambhakan
cvn_code
pada respon Kartu Kredit Charge API
Feb 09, 2021
- Menambahkan catatan bahwa channel_properties diperlukan saat checkout_method = ONE_TIME_PAYMENT
Feb 05, 2021
API eWallet baru yang simple dan konsisten yang mendukung top provider eWallet di Indonesia dan Filipina
Feb 4, 2021
- Menambahkan Node JS di section library dalam versi bahasa
- Menambahkan QR Codes ke dalam daftar produk yang didukung oleh library Node JS dalam versi inggris dan bahasa
- Menambahkan kode sampel Node JS pada API
/qr_codes
Feb 1, 2021
- Penambahan batas maksimum Disbursements/Transfer antar bank dari Rp 50,000,000 menjadi Rp 100,000,000
Jan 22, 2021
- Penambahan parameter currency pada pembuatan otentikasi kartu kredit
Jan 21, 2021
- Penambahan objek customer sebagai endpoint tersendiri
- Penambahan File service
Jan, 19, 2021
- Menambah kekurangan dokumentasi parameter "currency" pada pembuatan VA untuk API versi 2018-12-12
Jan, 04, 2021
- Menambahkan feature untuk GET Pembayaran QR Code dengan pagination
Dec, 29, 2020
- Memperbarui halaman membuat virtual akun
Dec, 17, 2020
- Menambahkan API untuk membuat akun Philippines pada xenPlatform
Dec, 8, 2020
- Menambahkan billing_details dan customer pada parameter request pembuatan token
- Memperbaiki contoh pada parameter billing_details pada pembuatan charge
- Menghapus TOKENIZATION_ERROR dan CREDIT_CARD_DATA_ERROR pada bagian kode error pada tokenisasi
Nov, 26, 2020
- Memperpanjang durasi payout dari 1 hari menjadi 3 hari
Nov, 11, 2020
- Tambahkan PATCH account
Nov, 2, 2020
- Perubahan payload create, update, dan respon get fixed payment code
Oct 22, 2020
- Penambahan pointer pada referensi Shopeepay
Oct 20, 2020
- Penambahan payload Virtual Account Payment Callback Request
Okt 4, 2020
- Penambahan endpoint update promotion
- Penambahan endpoint delete promotion
- Penambahan parameter min_original_amount pada create promotion dan object promotion
- Penambahan parameter min_original_amount pada respon get charge option promotion
- Penambahan parameter max_discount_amount pada create promotion
- Penambahan parameter max_discount_amount pada respon get charge option promotion
- Perubahan struktur direktori Cards
Agu 04, 2020
- Penambahan kode sampel Python untuk Balance
- Penambahan kode sampel Python untuk Batch Disbursement
- Penambahan kode sampel Python untuk Cards
- Penambahan kode sampel Python untuk Cardless Credit
- Penambahan kode sampel Python untuk Disbursement
- Penambahan kode sampel Python untuk Direct Debit
- Penambahan kode sampel Python untuk Ewallets
- Penambahan kode sampele Python untuk Invoice
- Penambahan kode sampel Python untuk Payout
- Penambahan kode sampel Python untuk QR Codes
- Penambahan kode sampel Python untuk Recurring Payment
- Penambahan kode sampel Python untuk Retail Outlets
- Penambahan kode sampel Python untuk Virtual Account
- Penambahan kode sampel Python untuk XenPlatform
- Penambahan kode sampel Go untuk Balance
- Penambahan kode sampel Go untuk Cards
- Penambahan kode sampel Go untuk Cardless Credit
- Penambahan kode sampel Go untuk Disbursement
- Penambahan kode sampel Go untuk Ewallets
- Penambahan kode sampel Go untuk Invoice
- Penambahan kode sampel Go untuk Payouts
- Penambahan kode sampel Go untuk Recurring Payment
- Penambahan kode sampel Go untuk Retail Outlets
- Penambahan kode sampel Go untuk Virtual Account
Aug 3, 2020
- Penambahan API Get Virtual Account Details pada Postman Collection
- Penambahan API Update Virtual Account pada Postman Collection
- Penambahan API Get Virtual Account Payment Details pada Postman Collection
- Penambahan API Update Fixed Payment Code pada Postman Collection
- Penambahan API Get Fixed Payment Code Details pada Postman Collection
Sep 28, 2020
- Perubahan pada respons pembuatan Virtual Accounts dari ACTIVE menjadi PENDING
- Penambahan parameter expiration_date untuk respons pembuatan Virtual Accounts
Sep 17, 2020
Penambahan Platform Fee sebagai fitur baru untuk xenPlatform
Sep 14, 2020
Upaya Pengiriman Callback Terbaru
Agu 04, 2020
- Penambahan kode sampel Python untuk Balance
- Penambahan kode sampel Python untuk Batch Disbursement
- Penambahan kode sampel Python untuk Cards
- Penambahan kode sampel Python untuk Cardless Credit
- Penambahan kode sampel Python untuk Disbursement
- Penambahan kode sampel Python untuk Direct Debit
- Penambahan kode sampel Python untuk Ewallets
- Penambahan kode sampel Python untuk Invoice
- Penambahan kode sampel Python untuk Payouts
- Penambahan kode sampel Python untuk QR Codes
- Penambahan kode sampel Python untuk Recurring payment
- Penambahan kode sampel Python untuk Retail outlets
- Penambahan kode sampel Python untuk Virtual account
- Penambahan kode sampel Python untuk xenPlatform
- Penambahan kode sampel Go untuk Balance
- Penambahan kode sampel Go untuk Cards
- Penambahan kode sampel Go untuk Cardless Credit
- Penambahan kode sampel Go untuk Disbursement
- Penambahan kode sampel Go untuk Ewallets
- Penambahan kode sampel Go untuk Invoice
- Penambahan kode sampel Go untuk Payouts
- Penambahan kode sampel Go untuk Recurring payment
- Penambahan kode sampel Go untuk Retail outlets
- Penambahan kode sampel Go untuk Virtual account
Sept 9, 2020
- Perubahan maksimum expected_amount menjadi Rp 2,500,000 untuk Alfamart
Aug 13, 2020
- Perubahan panjang maksimum external_id dari 1000 menjadi 950 untuk Virtual Account
Aug 12, 2020
- Penambahan bagian dokumentasi baru: Versioning
- Penambahan definisi kompatibilitas dengan versi sebelumnya
- Penambahan panduan migrasi untuk Versioning
- Penambahan Changelog untuk API pada bagian Versioning
Agu 11, 2020
- Penambahan custom header pada create refund
Aug 04, 2020
- Penambahan kode sampel Python untuk Balance
- Penambahan kode sampel Python untuk Batch Disbursement
- Penambahan kode sampel Python untuk Kartu Kredit
- Penambahan kode sampel Python untuk Cardless Credit
- Penambahan kode sampel Python untuk Disbursement
- Penambahan kode sampel Python untuk Direct Debit
- Penambahan kode sampel Python untuk Ewallets
- Penambahan kode sampel Python untuk Invoice
- Penambahan kode sampel Python untuk Payouts
- Penambahan kode sampel Python untuk QR Codes
- Penambahan kode sampel Python untuk Recurring payment
- Penambahan kode sampel Python untuk Retail outlets
- Penambahan kode sampel Python untuk Virtual account
- Penambahan kode sampel Python untuk xenPlatform
Aug 3, 2020
- Penambahan API Get Virtual Account Details pada Postman Collection
- Penambahan API Update Virtual Account pada Postman Collection
- Penambahan API Get Virtual Account Payment Details pada Postman Collection
- Penambahan API Update Fixed Payment Code pada Postman Collection
- Penambahan API Get Fixed Payment Code Details pada Postman Collection
Jul 31, 2020
- Penambahan API Transfer xenPlatform untuk dapat melakukan transfer antar sub-akun
Jul 30, 2020
- Pembaruan kode sampel PHP untuk Balance
- Pembaruan kode sampel PHP untuk Cards
- Pembaruan kode sampel PHP untuk Cardless Credit
- Pembaruan kode sampel PHP untuk Disbursement
- Pembaruan kode sampel PHP untuk Ewallets
- Pembaruan kode sampel PHP untuk Invoice
- Pembaruan kode sampel PHP untuk Payouts
- Pembaruan kode sampel PHP untuk Recurring payment
- Pembaruan kode sampel PHP untuk Retail outlets
- Pembaruan kode sampel PHP untuk Virtual account
Jul 28, 2020
- Pembaruan expiration_date Virtual Account & Retail Outlets menjadi 31 tahun dari 30 tahun
- Pembaruan name Retail Outlets dari huruf menjadi alfanumerik
- Pembaruan expected_amount minimal Retail Outlet Indomaret menjadi 10,000 dari 11,000
Jul 27, 2020
- Penambahan kode sampel Java untuk Balance
- Penambahan kode sampel Java untuk Batch Disbursement
- Penambahan kode sampel Java untuk Kartu Kredit
- Penambahan kode sampel Java untuk Cardless Credit
- Penambahan kode sampel Java untuk Disbursement
- Penambahan kode sampel Java untuk Ewallets
- Penambahan kode sampel Java untuk Invoice
- Penambahan kode sampel Java untuk Payouts
- Penambahan kode sampel Java untuk Recurring payment
- Penambahan kode sampel Java untuk Retail outlets
- Penambahan kode sampel Java untuk Virtual account
Jul 24, 2020
- Penambahan recurring pada Direct Debit
- Penambahan bagian
Library
- Penambahan library Python
Jul 16, 2020
- Pembaruan deskripsi payment_code Retail Outlets untuk melingkupi informasi mengenai Payment via Barcode
Jul 07, 2020
- Pembaruan callback paths retail outlet, ovo, dan batch disbursement untuk penyetelan API Callback URL
Jul 07, 2020
- Penambahan mata uang pada pembuatan recurring payment
Jul 07, 2020
- Penambahan error baru AMOUNT_BELOW_MINIMUM_LIMIT dan AMOUNT_ABOVE_MINIMUM_LIMIT ketika merchant melakukan request charge diatas atau dibawah nominal tertentu
- Penambahan error baru AUTHORIZATION_EXPIRED ketika merchant melakukan capture authorization diatas 7 hari
Jul 01, 2020
- Penambahan versi ID untuk direct debit
June 30, 2020
- Penambahan opsi get charge untuk mendapatkan cicilan yang tersedia
- Penambahan cicilan pada request charge
- Pembuangan tipe promo pada pembuatan promo
- Penambahan kode error baru untuk menangani cicilan tanpa nama pemegang kartu pada request
Jun 24, 2020
- Pembuangan limit traksaksi dan is_deleted dari contoh promotion
Jun 18, 2020
- Penambahan bagian untuk recurring direct debit
June 17, 2020
- Penambahan field billing details pada endpoint charge
- Penambahan alasan baru untuk gagal refund
Jun 11, 2020
- Penambahan kode bank baru SAHABAT_SAMPOERNA untuk Virtual Accounts
- Penambahan field sender_name untuk respon callback Virtual Account
Jun 06, 2020
- Penambahan produk Direct Debit
May 31, 2020
- Penambahan endpoint baru untuk tipe pembayaran Kredito - perhitungan terhadap nilai cicilan
May 26, 2020
- Penambahan alasan gagal pada respon Reverse Authorization di Bahasa Inggris dan Indonesia
- Perbaikan fields yang tidak akurat pada respon authorization
May 21, 2020
- Penambahan endpoint Callback URL untuk xenPlatform
May 13, 2020
- Pembaruan status issued pada payout ke pending
May 12, 2020
- Penambahan payment_method_id pada endpoint recurring payment
May 06, 2020
- Pembaruan kode gagal OVO
April 28, 2020
email
sekarang diharuskan saat pembuatan payout- Pembuangan
passcode
dari respon payout
April 24, 2020
- Perbaikan copywriting untuk get payment channels
April 20, 2020
- Perbaikan kode error untuk eWallets and QR
April 16, 2020
- Pembaruan referensi untuk QR code
April 16, 2020
- Penambahan referensi API payment channels
April 14, 2020
- Pembaruan status pada payouts
March 20,2020
- Pemasukan checkout expiry pada LINKAJA
- Perbaikan error format timestamp pada callback pembayaran DANA dan get payment status
- Pembuangan catatan "only alphanumeric characters" pada pembuatan pembayaran OVO disebabkan catatan "The only allowed punctuation is -" yang adalah constraint pengganti
March 19, 2020
- Pembaruan error pada body respon GET ewallets
- Pembaruan postman collection untuk ewallets dan cardless credit
March 11, 2020
- Pembuangan dan pemberian label pada fields yang sudah tidak digunakan di invoice
March 5, 2020
- Pembuangan endpoint legacy bank account data request
March 3, 2020
- Perbaikan endpoint yang hilang untuk cardless credit
- Perbaikan kode error LINKAJA
- Perbaikan error kode DANA
- Revisi kode error OVO
March 2, 2020
- Penambahan
email
sebagai field optional saat pembuatan payout
February 28, 2020
- Penambahan
reminder_time
sebagai field optional saat pembuatan invoice - Penambahan
reminder_date
sebagai field optional pada respon pembuatan invoice - Peningkatan kualitas dokumentasi virtual accounts dan retail outlets
February 26, 2020
- Library Go baru
- Library PHP baru
- Penambahan produk baru untuk library Java
February 18, 2020
- Introduce new EWallet: OVO asynchronous create payment callback flow
- New Versioning section
February 14, 2020
- Penambahan API Transfers untuk xenPlatform
- Klarifikasi field yang sudah tidak digunakan pada respon callback invoice
- Pembaruan tanggal ke 2020 pada halaman Invoice
February 12, 2020
- Pembaruan API Refund dengan required header dan values respon baru
- Pembaruan API Charge dengan detail pada labels MID
February 04, 2020
- Penambahan kode sample Node.js
January 23, 2020
- Penambahan currency dan mid_label pada Create Charge API
January 20, 2020
- Pembaruan untuk melingkupi headers xenPlatform untuk semua API yang kompatibel
January 16, 2020
- Pembaruan field dari
email_to
keemail
pada payout
January 14, 2020
- Pembaruan respon get payment status untuk eWallets
- Pembaruan requirement alfanumerik pada external_id OVO
January 9, 2020
- Pengenalan library Node.js baru
January 6, 2020
- Penambahan API xenPlatform
December 15, 2019
- Pembaruan limit nominal Disbursement
December 14, 2019
- Pembaruan beberapa request callback pada invoice
December 12, 2019
- Produk baru: Payouts
- Bagian Skenario Testing baru
December 11, 2019
- Bagian Checklists baru
- Bagian Error Handling baru
- iOS SDK baru
December 9, 2019
- Bagian Authentication baru
- Bagian Libraries / SDKs baru
- Bagian Errors baru
- Bagian Callback baru
November 27, 2019
- Pembaruan beberapa respon pada dokumentasi API recurring
November 26, 2019
- Pembuangan status
EXPIRED
danPENDING
pada callback DANA - Penambahan penjelasan pada API_VALIDATION_ERROR
November 21, 2019
- Perubahan satu field pada respon checkoutRequest untuk LinkAJa dari
redirect_url
tocheckout_url
November 7, 2019
- Pembaruan deskripsi parameter untuk callback invoice
October 31, 2019
- Pembuantan
items
pada INVOICE
October 30, 2019
- Peningkatan kualitas contoh PHP untuk Cardless Credit (Kredivo)
- Penambahan eWallet baru: LINKAJA
October 23, 2019
- Pembuangan callback Refund
- Pembuangan status Refund PENDING