Pengantar
Selamat Datang! Di Xendit, misi utama kami adalah untuk menyediakan infrastruktur pembayaran untuk membantu Anda mencapai kesuksesan. Kami akan membantu Anda dalam mengurus uang masuk (menerima pembayaran) dan uang keluar (melakukan pembayaran). Pengguna kami mencakup dari platform bisnis ke perusahaan penyedia pinjaman, dan segala hal diantaranya.
API Xendit dikembangkan berdasarkan konsep REST. API kami dibuat untuk mudah dipahami, berorientasi sumber daya, dan menggunakan kode respons HTTP untuk mendeteksi jika terjadi kesalahan. Kami menggunakan fitur dan fungsi bawaan HTTP sehingga dapat dimengerti oleh klien HTTP umum. Respons API kami memiliki format JSON, termasuk juga pesan kesalahannya.
Belajar API kami menggunakan Postman
Untuk mempermudah proses familiarisasi dengan API kami, kami menyediakan sebuah koleksi Postman yang berisi contoh dari seluruh API yang Xendit pakai. Silakan lihat di Panduan Postman untuk belajar lebih lanjut!
Otentikasi
Untuk dapat sukses melakukan otentikasi dengan API Xendit, Anda harus melakukan otentikasi API key menggunakan
Basic Auth
. Anda dapat mendapatkan API key melalui Dasbor. Sebagai contoh jika API key Anda adalah
xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==
Pilih otentikasi
Basic Auth
. Masukkan nilai API key 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!
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.
Produk yang didukung
- Credit/debit cards
- eWallets
- Cardless Credit
- QR Codes
- Direct Debit
- Transfer bank via Virtual Accounts
- Retail Outlets
- Invoices
- Recurring Payments
- Payouts
- Disbursements
- Batch Disbursements
Instalasi
Anda dapat menginstall library ini dengan menggunakan pip pip install xendit-python
atau lihat kode selengkapnya pada Github
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 merevolusi API 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 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 dituju melalui API-version
header pada request API
Header | Deskripsi |
---|---|
API-Version optional |
string Cantumkan parameter ini dalam request API untuk memilih versi API yang dihendaki. Format: YYYY-MM-DD . Contoh: 2020-02-01 Bila tidak dicantumkan, Xendit akan memakai versi API yang sesuai dengan setingan Anda |
Kompatibilitas Dengan Versi Sebelumnya
Kami menganggap perubahan-perubahan berikut sebagai perubahan 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 ID objek apapun
- 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, eror, 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
Changelog
2020-02-01
eWallets
- Pembayaran OVO diproses secara asinkron dan callback akan dikirimkan setelah pembayaran telah selesai diproses
2019-05-01
Credit Cards
- Pembuatan Refund Kartu Kredit diproses secara sinkron
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 |
Callback
Xendit menggunakan callback untuk memberikan notifikasi ke sistem atau aplikasi Anda ketika ada
Instalasi
Anda perlu menyediakan endpoint sistem Anda untuk menerima callback dari Xendit. Notifikasi callback yang dikirimkan akan melalui request POST ke URL yang Anda cantumkan di Dashboard. Anda dapat melakukan konfigurasi callback URL Anda melalui Pengaturan Callback. Anda juga dapat menggunakan tool seperti ngrok untuk membuat endpoint sementara untuk menerima callback pada saat melakukan testing
Upaya Pengiriman dan Pengiriman Ulang
Penjelasan mengenai upaya pengiriman callback ke sistem serta pengiriman ulang yang akan dijalankan apabila callback tidak direspon dengan baik oleh sistem Anda
Melihat Events
Anda dapat mengecek informasi-informasi perihal upaya pengiriman callback dari Xendit ke sistem Anda seperti respon terakhir dari sistem Anda, upaya-upaya pengiriman ulang, waktu untuk merespon callback, dan status HTTP yang Xendit terima untuk setiap pengiriman. Semua informasi ini dapat Anda akses melalui Callback tab
Upaya Pengiriman Ulang
Xendit akan mengirimkan callback 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 Callback Melalui Email
Anda juga dapat menerima ringkasan statistik callback 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 callback event dengan benar sangatlah krusial untuk memastikan integrasi Anda berjalan sesuai yang diharapkan
Segera Merespon Event
Bila Anda memiliki callback 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 callback Anda dianjurkan untuk dipisah agar callback diterima dengan sukses dan cepat dan tidak timeout
Penanganan Events yang duplikat
Endpoint callback 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 callback 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 callback 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 callback 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 Callback token unik untuk akun Xendit Anda yang digunakan untuk verifikasi asal mula event yang dikirimkan ke sistem Anda |
Anda dapat mengambil data callback token anda melalui Dasbor pada Pengaturan Callback. 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)
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 ). |
Parameter Respon
Contoh Respon Permintaan Pengecekan Saldo
{
"balance": 1241231
}
Parameter | Deskripsi |
---|---|
balance | Sisa saldo di tipe akun yang ditentukan dalam permintaan API anda |
Kanal Pembayaran
Mendapatkan Kanal Pembayaran
Endpoint: Mendapatkan Kanal Pembayaran API
GET https://api.xendit.co/payment_channels
Contoh Mendapatkan Kanal Pembayaran
curl https://api.xendit.co/payment_channels -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
Parameter Request
Menghasilkan daftar objek kanal pembayaran. Gunakan ini untuk mengetahui kanal pembayaran yang tersedia untuk bisnis anda.
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-idoptional |
string |
User-id dari sub account 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 Respon
Contoh Respon Mendapatkan Kanal Pembayaran
[
{
"business_id": "xxxxxxxx",
"is_livemode": true,
"channel_code": "BRI",
"name": "BRI Virtual account",
"currency": "IDR",
"channel_category": "VIRTUAL_ACCOUNT",
"is_enabled": false
},
{
"business_id": "xxxxxxxx",
"is_livemode": true,
"channel_code": "MASTERCARD",
"name": "Mastercard credit and debit cards",
"currency": "IDR",
"channel_category": "CREDIT_CARD",
"is_enabled": true
},
{
"business_id": "xxxxxxxx",
"is_livemode": true,
"channel_code": "MASTERCARD",
"name": "Mastercard credit and debit cards",
"currency": "USD",
"channel_category": "CREDIT_CARD",
"is_enabled": true
}
...
]
Parameter | Tipe | Deskripsi |
---|---|---|
business_id required |
string |
ID bisnis anda |
is_livemode required |
boolean |
Bernilai true saat membuat permintaan menggunakan live API key.false saat membuat perminataan menggunakan test API key. |
channel_code required |
string |
Kode kanal pembayaran |
name required |
string |
Nama kanal pembayaran |
currency required |
Mata uang yang diproses oleh kanal pembayaran. Hal ini berdasarkan kode mata uang ISO 4217 | |
channel_category required |
string |
Kategori kanal pembayaran. Nilai yang tersedia: |
is_enabled required |
boolean |
Saat bernilai true , permintaan API dapat berhasil dibuat untuk bisnis tersebut dengan kanal pembayaran. Saat bernilai false , permintaan API akan gagal. Anda harus mengaktifkan kanal pembayaran di pengaturan dashboard agar dapat membuatnya berhasil. |
Credit Cards
Fitur API kartu kredit kami membantu Anda untuk memroses transaksi kartu kredit / debit baik yang diterbitkan di Indonesia maupun internasional, yang berasosiasi dengan skema utama: Visa, Mastercard, dan JCB. Untuk memroses kartu yang diterbitkan dengan skema AMEX, Anda harus menggunakan akun pelanggan Anda yang terdaftar pada bank BCA di Indonesia.
Kami mendesain API kami sebaik dan semodular mungkin demi memberikan Anda pengendalian penuh untuk setiap tahapan pemrosesan pembayaran. Saat menggunakan Xendit, data sensitif yang terdapat pada kartu tidak akan melewati server Anda. Integrasi pembayaran kartu kredit yang kami bangun mengutamakan optimisasi tingkat sukses / penerimaan transaksi. Kamis udah memroses pembayaran kartu pada lebih dari 100 negara sampai hari ini.
Untuk mendapatkan penjelasan lebih lanjut bagaimana proses integrasi dengan sistem kami, mohon dapat melihat tautan dokumentasi.
Pembuatan Token (Tokenization)
Javascript Function: createToken
Xendit.card.createToken(tokenData, function (err, data) {
if (err) {
//Definisikan penanganan kesalahan
}
if (data.status === 'VERIFIED') {
// Penanangan keberhasilan
} else if (data.status === 'IN_REVIEW') {
// Penanganan otentikasi (3DS)
} else if (data.status === 'FAILED') {
// Penanganan kegagalan
}
});
Proses tokenisasi adalah sebuah proses dimana data dari kartu kredit (nomor kartu dan tanggal kedaluwarsa) disimpan dengan aman di sisi klien dalam bentuk token, agar data-data sensitif yang ada pada kartu kredit tidak pernah melewati sistem Anda. Token tersebut kemudian akan digunakan untuk melakukan Pembuatan Charge.
Contoh objek tokenData dengan data tagihan pemilik kartu
{
"amount": "10000",
"card_data": {
"account_number": "4456530000001096",
"exp_month": "12",
"exp_year": "2020"
},
"card_cvn": "123",
"is_multiple_use": false,
"should_authenticate": true,
"billing_details": {
"given_names": "John",
"surname": "Hudson",
"email": "john@xendit.co",
"mobile_number": "+6208123123123",
"phone_number": "+6208123123123",
"address": {
"country": "ID",
"street_line1": "Panglima Polim IV",
"street_line2": "Ruko Grand Panglima Polim, Blok E",
"city": "Jakarta Selatan",
"province_state": "DKI Jakarta",
"postal_code": "12345"
}
}
}
Contoh objek tokenData dengan data pemilik kartu (dapat berupa alamat pengiriman barang)
{
"amount": "10000",
"card_data": {
"account_number": "4456530000001096",
"exp_month": "12",
"exp_year": "2020"
},
"card_cvn": "123",
"is_multiple_use": false,
"should_authenticate": true,
"customer": {
"reference_id": "123e4567-e89b-12d3-a456-426614174000",
"mobile_number": "+6208123123123",
"email": "john@xendit.co",
"given_names": "John",
"surname": "Hudson",
"phone_number": "+6208123123123",
"nationality": "ID",
"addresses": [{
"country": "ID",
"street_line1": "Panglima Polim IV",
"street_line2": "Ruko Grand Panglima Polim, Blok E",
"city": "Jakarta Selatan",
"province_state": "DKI Jakarta",
"postal_code": "12345",
"category": "WORK"
}],
"date_of_birth": "1990-04-13",
"description": "customer using promo",
"metadata": {}
}
}
Token dapat dibuat untuk sekali pemakaian atau pemakaian beberapa kali. Bila Anda menginginkan penyimpanan data kartu untuk penggunaan yang akan datang, silahkan ubah nilai is_multiple_use
menjadi true.
Lihat Sample Proses Tokenisasi untuk contoh implementasi. Untuk contoh implementasi SDK, dapat dilihat di halama dokumentasi Xendit untuk Android SDK and IOS SDK.
Token Sekali Pakai
Pada normalnya, proses otentikasi harus dilakukan untuk token sekali pakai, sehingga parameter amount
wajib diisi. Bila proses otentikasi bukan suatu keharusan pada akun bisnis Anda, pengisian amount
dapat dilewati dengan mengubah nilai should_authenticate
menjadi false.
Token Pemakaian Berulang
Ketika melakukan proses tokenisasi untuk token pemakaian berulang, parameter amount
tidak wajib diisi karena nilai tersebut sudah akan ditentukan dan ditampilkan pada proses Otentikasi. Lihat Pembuatan Otentikasi untuk detil lebih lanjut.
Parameter Request (Money-in write permission)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-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_number required |
string |
Nomor kartu yang akan dikonversi menjadi token | |||||||||||||||||||||||||||||||||||||||||
card_exp_month required |
string |
Bulan kedaluwarsa kartu yang akan dikonversi menjadi token | |||||||||||||||||||||||||||||||||||||||||
card_exp_year required |
string |
Tahun kedaluwarsa kartu yang akan dikonversi menjadi token | |||||||||||||||||||||||||||||||||||||||||
card_cvn optional |
string |
Kode CVN/CVC kartu. Opsional namun sangat direkomendasikan. Dibutuhkan untuk kartu yang diterbitkan di Eropa. | |||||||||||||||||||||||||||||||||||||||||
is_multiple_use optional default: false |
boolean |
Penentuan apakah token akan digunakan berulang kali atau tidak | |||||||||||||||||||||||||||||||||||||||||
currency optional default: IDR |
string |
Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO.Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan IDR | |||||||||||||||||||||||||||||||||||||||||
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
| |
Contoh Respon Tokenisasi
{
"id": "5fcd8deb93e9a90020d8fd2d",
"masked_card_number": "445653XXXXXX1096",
"authentication_id": "5fcd8deb93e9a90020d8fd2e",
"status": "IN_REVIEW",
"card_info": {
"bank": "PT. Bank Rakyat Indonesia (Persero)",
"country": "ID",
"type": "CREDIT",
"brand": "VISA"
},
"payer_authentication_url": "https://redirect-staging.xendit.co/redirects/authentications/bundled/5fcd8deb93e9a90020d8fd2d?api_key=xnd_public_development_bPgL7lc65YTfywEk10f5qneRuu537yonRbfgQRMBLPUr1mZP4nNVd7iNHU"
}
Response Parameters
Body Parameter | Type | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
id required |
string |
ID token kartu kredit/debit. ID token ini akan digunakan kemudian untuk melakukan proses charge pada kartu kredit. | ||||||||||
authentication_id required |
string |
Akan disertakan apabila otentikasi digabung demgam Token Sekali Pakai. | ||||||||||
masked_card_number required |
string |
6 angka pertama dan 4 angka terakhir pada kartu kredit. | ||||||||||
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
|
Status-status pada Proses Tokenisasi
Status | Deskripsi |
---|---|
IN_REVIEW | Pelanggan harus mengotentikasi identitas mereka. Xendit menyediakan tautan kepada Anda agar dinavigasikan kepada pengguna Anda untuk melakukan 3DS dengan mudah. |
VERIFIED | Pelanggan berhasil melakukan otentikasi terhadap identitas mereka. Oleh karena itu, pengiriman token ke sistem backend Anda untuk melakukan charge adalah tindakan yang aman. |
FAILED | Proses tokenisasi dapat mengalami kegagalan dengan alasan yang bervariasi. Lihat Alasan Kegagalan pada Proses Tokenisasi. |
Alasan Kegagalan pada Proses Tokenisasi
Alasan Kegagalan | Deskripsi |
---|---|
AUTHENTICATION |
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. |
INVALID_JSON_FORMAT400 |
Isi dari request bukan format JSON yang benar. |
ACCOUNT_NUMBER400 |
Nomor kartu kredit tidak valid atau salah. |
VALIDATION_ERROR 400 |
Data dikirimkan dengan format yang salah |
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. |
CONNECTION_ERROR |
Terjadi kesalahan pada saat melakukan hubungan dengan server kami. Silahkan mencoba lagi dan bila kegagalan terus terjadi, silahkan mencoba menggunakan perangkat atau jaringan lain |
TOKENIZATION_ERROR |
Kesalahan umum. Coba lagi atau coba dengan menggunakan kartu yang lain. |
Pembuatan Otentikasi
Javascript Function: createAuthentication
Xendit.card.createAuthentication(authenticationData, function (err, data) {
if (err) {
//Definisikan penanganan kesalahan
}
if (data.status === 'VERIFIED') {
// Penanganan keberhasilan
} else if (data.status === 'IN_REVIEW') {
// Penanganan otentikasi (3DS)
} else if (data.status === 'FAILED') {
// Penanganan kegagalan
}
});
Untuk melakukan otentikasi pada token, silahkan menggunakan fungsi Xendit.card.createAuthentication
di Xendit.js. Fungsi ini menerima objek authenticationData
dan mengembalikan authentication_id
yang dapat digunakan untuk melakukan otentikasi. Silahkan melihat Pembuatan Charge untuk detil lebih lanjut mengenai Charge.
Lihat Sample Otentikasi untuk contoh implementasi.
Contoh Objek authenticationData
{
"amount": "10000",
"token_id": "58e2096018b815f555c8a524"
}
Contoh Respon Otentikasi
{
"id": "58e2097218b815f555c8a526",
"status": "VERIFIED"
}
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 Body | Tipe | Deskripsi |
---|---|---|
amount required |
string |
Jumlah biaya yang ingin diotentikasi. |
token_id required |
string |
Token untuk otentikasi. |
xenditResponseHandler required |
function |
Penanganan respon, dipanggil setelah percobaan otentikasi untuk menangani kesalahan dan respon. |
Parameter Respon
Parameter | Tipe | Deskripsi |
---|---|---|
id required |
string |
ID Otentikasi yang akan digunakan dengan Token ID untuk melakukan Charge |
status required |
string |
Status Otentikasi. Lihat Status-status Tokenisasi |
payer_authentication_url optional |
string |
Bila status respon adalah IN_REVIEW, parameter ini akan mengandung tautan yang menuju ke halaman otentikasi yang digunakan pengguna untuk melakukan proses otentikasi menggunakan 3DS |
failure_reason optional |
string |
Bila status respon adalah FAILED , lihat Alasan Kegagalan pada Proses Tokenisasi untuk melihat deskripsi kegagalan. |
Pembuatan Otorisasi
Pembuatan otorisasi menggunakan API yang sama dengan pembuatan charge, hanya saja parameter capture
diisi dengan nilai false
Definisi: Pembuatan Otorisasi
POST https://api.xendit.co/credit_card_charges
Contoh Permintaan Pembuatan Otorisasi
curl -X POST \
https://api.xendit.co/credit_card_charges \
-u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
-H 'content-type: application/json' \
-d '{
"token_id" : "598d5d0e51e0870d44c61534",
"external_id": "postman-charge-1502436817",
"amount": 140000,
"authentication_id":"598d5d0f51e0870d44c61535",
"card_cvn":"123",
"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
"123", // Card CVN
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,
card_cvn="123",
)
print(charge)
Contoh Respon Pembuatan Otorisasi
{
"created": "2020-01-11T07:33:14.442Z",
"status": "AUTHORIZED",
"business_id": "5850e55d8d9791bd40096364",
"authorized_amount": 140000,
"external_id": "postman-charge-1502436793",
"merchant_id": "xendit",
"merchant_reference_code": "598d5d0d51e0870d44c61533",
"card_type": "CREDIT",
"masked_card_number": "400000XXXXXX0002",
"charge_type": "SINGLE_USE_TOKEN",
"card_brand": "VISA",
"bank_reconciliation_id": "5132390610356134503009",
"eci": "05",
"id": "598d5dba51e0870d44c61539"
}
You can do authorization using create charge endpoint. Just capture field as false, and you will receive an authorized charge response.
Otorisasi Dengan Nilai 0
Pembuatan otorisasi menggunakan API yang sama dengan pembuatan charge, hanya saja parameter amount
diisi dengan nilai 0
Pembuatan Charge. Kegunaan dari fitur ini adalah untuk melakukan pengecekan apakah kartu dapat melakukan transaksi atau tidak.
Otorisasi dengan nilai 0 tidak tersedia untuk transaksi melalui MIGS dan koneksi langsung ke bank. Apabila Anda melakukan proses transaksi dengan metode aggregator, fitur ini akan otomatis bekerja untuk Anda. Fitur ini juga otomatis bekerja pada mode tes
Example Zero Amount Authorization Request
curl -X POST \
https://api.xendit.co/credit_card_charges \
-u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
-H 'content-type: application/json' \
-d '{
"token_id" : "598d5d0e51e0870d44c61534",
"external_id": "postman-charge-1502436817",
"amount": 0,
"authentication_id":"598d5d0f51e0870d44c61535",
"card_cvn":"123"
}'
<?php
require 'vendor/autoload.php';
$options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';
$xenditPHPClient = new XenditClient\XenditPHPClient($options);
$external_id = 'sample-external-id-1475459775872';
$token_id = 'sample-token-id-1475459775872';
$amount = 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
"123", // Card CVN
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",
"card_cvn": "123",
"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",
"suburb": "Kebayoran",
"city": "Jakarta Selatan",
"province": "DKI Jakarta",
"postal_code": "993448",
"country": "Indonesia"
}
},
"promotion": {
"reference_id": "BCA_10",
"original_amount": 1000000
},
"installment": {
"count": 3,
"interval": "month"
}
}'
<?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,
'card_cvn' => '123',
'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',
cardCvn: "123",
descriptor: "My new store",
currency: "IDR",
midLabel: "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",
suburb: "Kebayoran",
city: "Jakarta Selatan",
province: "DKI Jakarta",
zip_code: "993448",
country: "Indonesia"
}
},
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
"123", //Card CVN
"XENDIT*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,
card_cvn="123",
)
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 |
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. | |||||||||||||||||||||||||||||||||||
amount required |
number |
Jumlah biaya yang akan di-charge. | |||||||||||||||||||||||||||||||||||
authentication_id optional |
string |
ID Otentikasi untuk mengotentikasi charge. Tidak wajib diisi hanya bila sudah diotentikasi dengan Token Sekali Pakai, atau setingan tidak wajib otentikasi sudah diaktifkan pada akun Anda. | |||||||||||||||||||||||||||||||||||
card_cvn optional |
string |
3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Wajib diisi untuk kartu kredit yang diterbitkan dari Eropa. | |||||||||||||||||||||||||||||||||||
amount required |
number |
Jumlah biaya yang akan di-charge. | |||||||||||||||||||||||||||||||||||
authentication_id optional |
string |
ID Otentikasi untuk mengotentikasi charge. Tidak wajib diisi hanya bila sudah diotentikasi dengan Token Sekali Pakai, atau setingan tidak wajib otentikasi sudah diaktifkan pada akun Anda. | |||||||||||||||||||||||||||||||||||
card_cvn optional |
string |
3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Wajib diisi untuk kartu kredit yang diterbitkan dari Eropa. | |||||||||||||||||||||||||||||||||||
capture 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 XENDIT*[MERCHANT_NAME]-DESCRIPTOR Untuk pelanggan dengan mode switcher, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR |
|||||||||||||||||||||||||||||||||||
currency optionaldefault:
|
string |
Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO.Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan IDR | |||||||||||||||||||||||||||||||||||
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
|
|||||||||||||||||||||||||||||||||||
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": "XENDIT*MYBUSINESS-MY NEW STORE",
"id": "598d5dba51e0870d44c61539",
"mid_label": "IDR_MID",
"promotion": {
"reference_id": "BCA_10",
"original_amount": "1000000"
},
"installment": {
"month": 3,
"interval": "month"
}
}
Contoh Respon Otorisasi
{
"created": "2020-01-11T07:43:39.563Z",
"status": "AUTHORIZED",
"business_id": "5850e55d8d9791bd40096364",
"authorized_amount": 90000,
"external_id": "postman-authorize-1502437417",
"merchant_id": "xendit",
"merchant_reference_code": "598d5ffb51e0870d44c6153a",
"card_type": "CREDIT",
"masked_card_number": "400000XXXXXX0002",
"charge_type": "SINGLE_USE_TOKEN",
"card_brand": "VISA",
"bank_reconciliation_id": "5132390610356134503009",
"eci": "05",
"descriptor": "XENDIT*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. | ||||
card_type required |
string |
Tipe Kartu (CREDIT or DEBIT ). |
||||
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 (CREDIT or DEBIT ). |
||||
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 . |
||||
failure_reason optional |
string |
Bila status charge adalah FAILED , lihat Status-status pada Charge untuk keterangan lebih lanjut. |
||||
approval_code optional |
string |
Series of number (usually 6 digits) which is a code that indicate your authorization is approved by acquiring bank. | ||||
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 XENDIT*[MERCHANT_NAME]-DESCRIPTOR Untuk switcher merchant, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR |
||||
currency optionaldefault:
|
string |
Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO.Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan IDR | ||||
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
|
Status status pada Charge
Status | Deskripsi |
---|---|
CAPTURED | Charge telah berhasil di-captured dan dana tersebut akan dikirimkan ke rekening sesuai dengan jadwal settlement yang ditentukan. |
AUTHORIZED | Charge telah berhasil diotorisasi. |
FAILED | Charge gagal. Lihat Alasan Kegagalan Charge |
Alasan Kegagalan Pembuatan Charge
Alasan Gagal | Deskripsi |
---|---|
EXPIRED_CARD | Kartu yang akan di-capture telah kedaluwarsa. Kami sarankan untuk menggunakan kartu yang lain. |
CARD_DECLINED | Kartu yang akan di-capture ditolak oleh bank. Kami sarankan untuk menggunakan kartu yang lain. |
INSUFFICIENT_BALANCE | Kartu yang akan di-capture tidak memiliki saldo yang cukup untuk melengkapi proses capture. |
STOLEN_CARD | Kartu yang akan di-capture telah ditandai sebagai kartu yang dicuri. Kami sarankan untuk menggunakan kartu yang lain. |
INACTIVE_CARD | Kartu yang akan di-capture tidak aktif. Kami sarankan untuk menggunakan kartu yang lain. |
INVALID_CVN | Nomor CVN yang dimasukkan salah. |
PROCESSOR_ERROR | Proses charge gagal karena adanya isu integrasi antara prosesor kartu dengan bank. Silahkan hubungi kami bila Anda menemui isu ini. |
BIN_BLOCK | BIN (Bank Identification Number) kartu tersebut telah diblokir sesuai dengan permintaan dari Bank. |
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. |
TOKEN_ALREADY400 |
ID Token Sekali Pakai sudah pernah digunakan ketika melakukan Charge. |
AUTHENTICATION400 |
ID otentikasi sudah pernah digunakan ketika melakukan charge. |
INVALID_TOKEN_ID400 |
Format ID token tidak valid. |
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. |
AUTHENTICATION_ID400 |
ID Otentikasi wajib diisi. |
AMOUNT_GREATER_THAN400 |
Jumlah nominal angka yang di-charge melampaui jumlah yang diotentikasi |
INVALID_AUTHENTICATION_ID_ERROR 400 |
Format ID otentikasi tidak valid. |
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. |
AUTHENTICATION_NOT404 |
Token yang telah diotentikasi dengan otentikasi ID tersebut tidak ditemukan. |
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: |
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) |
Capture Charge
Definisi: Capture Charge
POST https://api.xendit.co/credit_card_charges/:credit_card_charge_id/capture
Contoh Permintaan Capture Charge
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { Card } = x;
const cardSpecificOptions = {};
const card = new Card(cardSpecificOptions);
const resp = await card.captureCharge({
chargeID: id,
amount: 10000,
});
console.log(resp)
curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e/capture \
-X POST \
-u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
-d amount=15000
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '598942c4bb91a4ec309e9a37';
$params = ['amount' => 10000];
$captureCharge = \Xendit\Cards::capture($id, $params);
var_dump($captureCharge);
?>
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
CreditCardCharge creditCardCharge = CreditCard.captureCharge(
"12345678", //chargeId
10000 //amount
);
} catch (XenditException e) {
e.printStackTrace();
}
captureChargeData := card.CaptureChargeParams{
ChargeID: "598942c4bb91a4ec309e9a37",
Amount: 9900,
}
chargeResp, err := card.CaptureCharge(&captureChargeData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("captured charge: %+v\n", chargeResp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
CreditCard = xendit_instance.CreditCard
charge = CreditCard.capture_charge(
credit_card_charge_id="5f0422aa2bbbe50019a368c2",
amount=75000,
)
print(charge)
Contoh Respon Capture Charge
{
"created": "2020-01-08T04:49:08.815Z",
"status": "CAPTURED",
"business_id": "5848fdf860053555135587e7",
"authorized_amount": 10000,
"external_id": "test-pre-auth",
"merchant_id": "xendit",
"merchant_reference_code": "598942aabb91a4ec309e9a35",
"card_type": "CREDIT",
"masked_card_number": "400000XXXXXX0002",
"charge_type": "SINGLE_USE_TOKEN",
"card_brand": "VISA",
"bank_reconciliation_id": "5132390610356134503009",
"capture_amount": 9900,
"id": "598942c4bb91a4ec309e9a37"
}
Capture pada charge hanya perlu dilakukan apabila Anda melakukan pra-otentikasi dengan menentukan parameter capture
dengan nilai false
pada request Pembuatan Charge. Anda dapat melakukan capture dengan nominal yang berbeda dengan nominal yang terotorisasi selama nominal tersebut tidak melampaui nominal yang terotorisasi. Respon dari endpoint sama dengan respon charge
Parameter Request (Money-in write permission)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-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. |
INVALID_JSON_FORMAT 400 |
Isi dari request bukan format JSON yang benar. |
AMOUNT_GREATER_THAN400 |
Nominal capture melebihi nominal yang terotorisasi. |
INVALID_CHARGE400 |
Status charge tidak terotorisasi |
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. |
Mendapatkan Charge
Definisi: Mendapatkan Charge
GET https://api.xendit.co/credit_card_charges/:credit_card_charge_id
Contoh Permintaan Mendapatkan Charge
curl https://api.xendit.co/credit_card_charges/5877255293ff67900c6aa64e \
-X GET \
-u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '598942c4bb91a4ec309e9a37';
$getCharge = \Xendit\Cards::retrieve($id);
var_dump($getCharge);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { Card } = x;
const cardSpecificOptions = {};
const card = new Card(cardSpecificOptions);
const resp = await card.getCharge({ chargeID: '5877255293ff67900c6aa64e' });
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
CreditCardCharge creditCardCharge = CreditCard.getCharge("5877255293ff67900c6aa64e");
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
getChargeData := card.GetChargeParams{
ChargeID: "598942c4bb91a4ec309e9a37",
}
chargeResp, err := card.GetCharge(&getChargeData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("retrieved charge: %+v\n", chargeResp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
CreditCard = xendit_instance.CreditCard
charge = CreditCard.get_charge(
credit_card_charge_id="5f0422aa2bbbe50019a368c2",
)
print(charge)
Contoh Respon Charge Response
{
"created": "2020-08-08T04:49:08.815Z",
"status": "CAPTURED",
"business_id": "5848fdf860053555135587e7",
"authorized_amount": 10000,
"external_id": "test-pre-auth",
"merchant_id": "xendit",
"merchant_reference_code": "598942aabb91a4ec309e9a35",
"card_type": "CREDIT",
"masked_card_number": "400000XXXXXX0002",
"charge_type": "SINGLE_USE_TOKEN",
"card_brand": "VISA",
"bank_reconciliation_id": "5132390610356134503009",
"capture_amount": 9900,
"id": "598942c4bb91a4ec309e9a37"
}
Ini adalah endpoint untuk mengambil suatu objek charge. Anda perlu menentukan nilai dari charge_id
. Respon dari endpoint sama dengan respon pembuatan charge
Parameter Request (Money-in read permission)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-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 yang sudah diotorisasi |
Kode Error
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR 400 |
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi. |
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 | Description |
---|---|
amount required |
number Nominal original dari transaksi (Sebelum diberlakukan pemotongan). |
bin optional |
array of strings 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. |
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. |
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 detail parameter promotions
|
||||||||||||||||||||||
installments optional |
object Menjelaskan tentang opsi cicilan yang tersedia. parameter tambahan untuk cicilan
|
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
.
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
Kanal pembayaran ewallet memungkinkan Anda untuk menerima pembayaran dari nasabah melalui penyedia jasa ewallet terbesar di Indonesia seperti OVO, DANA, LinkAja dan Shopeepay.
Pembuatan Pembayaran eWallet
Endpoint: Pembuatan Pembayaran Ewallet
POST https://api.xendit.co/ewallets
Versi
Anda sedang melihat API versi 2020-02-01. Klik di sini untuk melihat versi sebelumnya.
Versi | Changelog |
---|---|
2020-02-01 (terbaru) | Berisi flow yang asynchronous dengan callback dari pembuatan pembayaran OVO. |
2019-02-04 | Mengembalikan respon secara langsung tanpa adanya callback. |
OVO
Parameter Request
Contoh: Request Pembuatan Pembayaran Ewallet
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'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$ovoParams = [
'external_id' => 'ovo-ewallet',
'amount' => 1000,
'phone' => '08123123123',
'ewallet_type' => 'OVO'
];
$createOvo = \Xendit\EWallets::create($ovoParams);
var_dump($createOvo);
?>
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.createPayment({
externalID: 'ovo-ewallet',
amount: 1000,
phone: '08123123123',
ewalletType: EWallet.Type.OVO,
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
EWalletPayment ewal = EWalletPayment.createOvoPayment(
"ovo-ewallet", //externalId
1000, //amount
"08123123123" //phone
);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
data := ewallet.CreatePaymentParams{
ExternalID: "ovo-ewallet",
Amount: 1000,
Phone: "08123123123",
EWalletType: xendit.EWalletTypeOVO,
CallbackURL: "mystore.com/callback",
RedirectURL: "mystore.com/redirect",
}
resp, err := ewallet.CreatePayment(&data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
EWallet = xendit_instance.EWallet
ovo_payment = EWallet.create_ovo_payment(
external_id="ovo-ewallet-testing-id-1593663430",
amount="80001",
phone="08123123123",
)
print(ovo_payment)
Parameter Header | Tipe | Deskripsi |
---|---|---|
X-API-VERSIONoptional |
string |
Versi API dalam semantik tanggal (contoh: 2020-02-01). 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. Silakan buka xenPlatform untuk informasi lebih lanjut. |
with-fee-ruleoptional |
string |
ID Fee Rule yang ingin Anda aplikasikan ke pembayaran untuk Invoice ini Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API This header is only used if you have access to xenPlatform. See xenPlatform for more information |
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Catatan: Tanda baca yang diperbolehkan: - . Catatan: Panjang maksimum yang diperbolehkan adalah 50 karakter. Catatan: Harus unik untuk setiap request. |
amount required |
number |
Nominal yang pelanggan Anda harus bayarkan. Catatan: Nominal minimum adalah Rp 1 dan maksimum adalah Rp 10.000.000. |
phone required |
string |
Nomor telepon dari pelanggan (contoh: 08123123123) Catatan: Pelanggan harus memiliki akun eWallet terdaftar yang aktif dengan nomor telepon Indonesia sebelum melakukan request pembayaran. Catatan: Format nomor telepon harus "08123123123" (tidak menggunakan "+62"). |
ewallet_type required |
string |
ewallet_type harus dalam huruf besar: 'OVO' |
Parameter Respon
Contoh: Respon Sukses dari Pembuatan Ewallet
{
"business_id": "5850eteStin791bd40096364",
"external_id": "ovo-ewallet",
"amount": 1000,
"phone": "08123123123",
"ewallet_type": "OVO",
"status": "PENDING",
"created": "2020-02-20T00:00:00.000Z",
}
Parameter | Tipe | Deskripsi |
---|---|---|
business_id required |
string |
ID yang merupakan identifikasi unik untuk merchant |
external_id required |
string |
ID yang merupakan identifikasi unik dari setiap request |
amount required |
number |
Nominal yang diinginkan |
phone required |
string |
Nomor telepon pelanggan |
ewallet_type required |
string |
Tipe dari e-wallet. Nilai: OVO |
status required |
string |
Status pembayaran. Nilai: PENDING |
created required |
string |
Timestamp ISO 8601 saat request pembuatan pembayaran dilakukan (dalam UTC) |
Error-error pada Respon API
Contoh: Respon Error dari Request Pembuatan Pembayaran Ewallet
{
"error_code": "DUPLICATE_PAYMENT_REQUEST_ERROR",
"message": "There is already a payment request with external_id: ovo-ewallet"
}
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR422 |
Ada input yang salah pada salah satu request field wajib. |
EWALLET_TYPE_NOT_SUPPORTED422 |
ewallet_type is yang anda minta belum tersedia saat ini |
DUPLICATE_PAYMENT_REQUEST_ERROR400 |
Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini |
DANA
Parameter Request
Contoh: Request Pembuatan Pembayaran Ewallet
curl https://api.xendit.co/ewallets -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d external_id = 'dana-ewallet' \\
-d amount = 1001 \\
-d expiration_date = '2020-02-20T00:00:00.000Z' \\
-d callback_url = 'https://my-shop.com/callbacks' \\
-d redirect_url = 'https://my-shop.com/home' \\
-d ewallet_type = 'DANA'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$danaParams = [
'external_id' => 'dana-ewallet',
'amount' => 1000,
'phone' => '081298498259',
'expiration_date' => '2020-02-20T00:00:00.000Z',
'callback_url' => 'https://my-shop.com/callbacks',
'redirect_url' => 'https://my-shop.com/home',
'ewallet_type' => 'DANA'
];
$createDana = \Xendit\EWallets::create($danaParams);
var_dump($createDana);
?>
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.createPayment({
externalID: 'dana-ewallet',
amount: 1001,
expirationDate: new Date(2020, 1, 20),
callbackURL: 'https://my-shop.com/callbacks',
redirectURL: 'https://my-shop.com/home',
ewalletType: EWallet.Type.DANA,
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
EWalletPayment ewal = EWalletPayment.createDanaPayment(
"dana-ewallet", //externalId
1000, //amount
"08123123123", //phone
"24-08-2019", //expirationDate
"callback_url", //callbackUrl
"redirect_url" //redirectUrl
);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
data := ewallet.CreatePaymentParams{
ExternalID: "dana-ewallet",
Amount: 20000,
Phone: "08123123123",
EWalletType: xendit.EWalletTypeDANA,
CallbackURL: "mystore.com/callback",
RedirectURL: "mystore.com/redirect",
}
resp, err := ewallet.CreatePayment(&data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
EWallet = xendit_instance.EWallet
dana_payment = EWallet.create_dana_payment(
external_id="dana-ewallet-test-1593663447",
amount="1001",
callback_url="https://my-shop.com/callbacks",
redirect_url="https://my-shop.com/home",
)
print(dana_payment)
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. Silakan buka xenPlatform untuk informasi lebih lanjut. |
with-fee-ruleoptional |
string |
ID Fee Rule yang ingin Anda aplikasikan ke pembayaran untuk Invoice ini Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API This header is only used if you have access to xenPlatform. See xenPlatform for more information |
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter. |
amount required |
number |
Nominal yang pelanggan Anda harus bayarkan. Catatan: Nominal minimum adalah Rp 1 dan maksimum adalah Rp 10.000.000. |
expiration_date optional |
string |
Pelanggan anda tidak dapat menyelesaikan pembayaran melewati tanggal kedaluwarsa ini Timezone: Zona waktu, UTC kecuali Anda tentukan (Contoh 2020-03-20T04:54:10+07:00) Expiry: Jika tidak diisi, waktu standar yang ditetapkan adalah 24 jam. |
callback_url required |
string |
URL untuk menerima callback setelah pembayaran dilakukan oleh pelanggan anda |
redirect_url required |
string |
URL untuk mengarahkan pelanggan anda setelah selesai melakukan pembayaran |
ewallet_type required |
string |
ewallet_type harus dalam huruf besar: 'DANA' |
Parameter Respon
Contoh: Respon Sukses dari Pembuatan Ewallet
{
"external_id": "dana-ewallet",
"checkout_url": "https://dana.id/m/portal/cashier/checkout?id=5d34079d51a9ed12c78a78d3",
"amount": 1000,
"ewallet_type": "DANA"
}
Parameter | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik dari setiap request |
checkout_url required |
string |
URL yang dibuat oleh DANA untuk customer Anda melakukan pembayaran |
amount required |
number |
Nominal yang diinginkan |
ewallet_type required |
string |
Tipe dari e-wallet. Nilai: DANA |
Kode Error
Contoh: Respon Error dari Request Pembuatan Pembayaran EWallet
{
"error_code": "DUPLICATE_ERROR",
"message": "Transaction with this external_id is already exist"
}
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR422 |
Ada input yang salah pada salah satu request field wajib. |
EWALLET_TYPE_NOT_SUPPORTED422 |
ewallet_type is yang anda minta belum tersedia saat ini |
DUPLICATE_ERROR400 |
Pembayaran dengan external_id yang sama telah dibuat sebelumnya. |
CHECKOUT_ERROR400 |
Terjadi kesalahan eksternal dari DANA. Mohon untuk mencoba kembali dalam beberapa menit atau silakan hubungi tim customer success kami. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini |
LINKAJA
Parameter Request
Contoh: Request Pembuatan Pembayaran Ewallet
curl https://api.xendit.co/ewallets -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--header 'content-type: application/json' \
--data '{
"external_id": "linkaja-ewallet",
"phone": "081245671234",
"amount": 300000,
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 100000,
"quantity": 1
},
{
"id": "345678",
"name": "Powerbank",
"price": 200000,
"quantity": 1
}
],
"callback_url": "http://yourwebsite.com/callback",
"redirect_url": "https://yourwebsite.com/order/123",
"ewallet_type": "LINKAJA",
}'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$linkajaParams = [
'external_id' => 'linkaja-ewallet',
'amount' => 300000,
'phone' => '081298498259',
'items' => [
[
'id' => '123123',
'name' => 'Phone Case',
'price' => 100000,
'quantity' => 1
],
[
'id' => '345678',
'name' => 'Powerbank',
'price' => 200000,
'quantity' => 1
]
],
'callback_url' => 'https =>//yourwebsite.com/callback',
'redirect_url' => 'https =>//yourwebsite.com/order/123',
'ewallet_type' => 'LINKAJA'
];
$createLinkaja = \Xendit\EWallets::create($linkajaParams);
var_dump($createLinkaja);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { EWallet } = x;
const ewalletSpecificOptions = {};
const ew = new EWallet(ewalletSpecificOptions);
const item = {
id: "345678",
name: "Powerbank",
price: 200000,
quantity: 1,
};
const resp = await ew.createPayment({
externalID: 'linkaja-ewallet',
amount: 300000,
items: [item, item],
callbackURL: 'https://my-shop.com/callbacks',
redirectURL: 'https://my-shop.com/home',
ewalletType: EWallet.Type.LINKAJA,
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
//items
EWalletLinkajaItem items[] = new EWalletLinkajaItem[1];
items[0] =
EWalletLinkajaItem.builder()
.id("123")
.name("Phone Case")
.price(200000)
.quantity(1)
.build();
EWalletPayment ewal = EWalletPayment.createLinkajaPayment(
"linkaja-ewallet", //externalId
1000, //amount
"08123123123", //phone
items, //EWwalletLinkajaitem[]
"callback_url", //callbackUrl
"redirect_url" //redirectUrl
);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
item1 := ewallet.Item {
ID: "123123",
Name: "Phone Case",
Price: 100000,
Quantity: 1,
}
item2 := ewallet.Item {
ID: "345678",
Name: "Powerbank",
Price: 200000,
Quantity: 1,
}
var items []ewallet.Item
items = append(items, item1)
items = append(items, item2)
data := ewallet.CreatePaymentParams{
ExternalID: "linkaja-ewallet",
Amount: 300000,
Phone: "08123123123",
EWalletType: xendit.EWalletTypeLINKAJA,
CallbackURL: "mystore.com/callback",
RedirectURL: "mystore.com/redirect",
Items: items,
}
resp, err := ewallet.CreatePayment(&data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
EWallet = xendit_instance.EWallet
items = []
item = EWallet.helper_create_linkaja_item(
id="123123", name="Phone Case", price=100000, quantity=1
)
items.append(item)
linkaja_payment = EWallet.create_linkaja_payment(
external_id="linkaja-ewallet-test-1593663498",
phone="089911111111",
items=items,
amount=300000,
callback_url="https://my-shop.com/callbacks",
redirect_url="https://xendit.co/",
)
print(linkaja_payment)
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. Silakan buka xenPlatform untuk informasi lebih lanjut. |
with-fee-ruleoptional |
string |
ID Fee Rule yang ingin Anda aplikasikan ke pembayaran untuk Invoice ini Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API This header is only used if you have access to xenPlatform. See xenPlatform for more information |
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter. |
phone required |
string |
Nomor telepon dari pelanggan (contoh: 08123123123) Catatan: Pelanggan harus memiliki akun eWallet terdaftar yang aktif dengan nomor telepon Indonesia sebelum melakukan request pembayaran. |
amount required |
number |
Nominal yang pelanggan Anda harus bayarkan. Catatan: Nominal minimum adalah Rp 100 dan maksimum adalah Rp 10.000.000 |
items required |
array of item object |
Daftar barang / produk. |
item objectrequired |
item object |
Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number] |
callback_urlrequired |
string |
Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran. |
redirect_urlrequired |
string |
Setelah pembeli melakukan pembayaran di halaman checkout mitra eWallet, mereka akan diarahkan ke redirect_url . Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda. |
ewallet_type required |
string |
ewallet_type harus dalam huruf besar: 'LINKAJA' |
Parameter Respon
Contoh: Respon Sukses dari Pembuatan Ewallet
{
"checkout_url": "https://ewallet-linkaja-dev.xendit.co/checkouts/b0c464ab-dcdc-4426-9255-759a9450c9d2",
"transaction_date": "2019-10-25T08:42:54.308Z",
"amount": 300000,
"external_id": "linkaja-ewallet",
"ewallet_type": "LINKAJA"
}
Parameter | Tipe | Deskripsi |
---|---|---|
checkout_url required |
string |
URL yang dibuat oleh LINKAJA untuk customer Anda melakukan pembayaran Expiry: Waktu kadaluarsa secara otomatis adalah 5 menit. |
transaction_date required |
string |
Timestamp ISO 8601 saat request pembuatan pembayaran dilakukan (dalam UTC) |
amount required |
number |
Nominal yang diinginkan |
external_id required |
string |
ID yang merupakan identifikasi unik dari setiap request |
ewallet_type required |
string |
Tipe dari e-wallet. Nilai: LINKAJA |
Error-error pada Respon API
Contoh: Respon Error dari Request Pembuatan Pembayaran Ewallet
{
"error_code": "DUPLICATE_PAYMENT_ERROR",
"message": "Checkout URL with the same external_id has been created before."
}
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Ada input yang salah pada salah satu request field wajib. |
GENERATE_CHECKOUT_TOKEN_ERROR422 |
Sebuah error terjadi dalam proses pembuatan checkout_url. |
EWALLET_TYPE_NOT_SUPPORTED422 |
ewallet_type is yang anda minta belum tersedia saat ini |
DUPLICATE_PAYMENT_ERROR400 |
Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini |
Shopeepay
{}
Saluran pembayaran Shopeepay akan tersedia di Xendit [eWallet BETA endpoint] (https://developers.xendit.co/ewallets-beta/#tag/eWallets-Callback-Notifications).
Seluruh saluran pembayaran eWallet kami akan digabungkan ke dalam endpoint ini. Seluruh endpoint yang ada saat ini akan tetap tersedia dan dipertahankan.
Cek Status Pembayaran (Money-in read permission)
Endpoint: Cek Status Pembayaran Ewallet
GET https://api.xendit.co/ewallets?external_id={external_id}&ewallet_type={ewallet_type}
Endpoint ini digunakan untuk mengecek status dari sebuah pembayaran. Anda perlu memasukkan external_id
dan ewallet_type
.
Parameter Request (Money-in read permission)
Contoh: Request Cek Status Pembayaran Ewallet
OVO, DANA, LINKAJA
curl 'https://api.xendit.co/ewallets?external_id=ovo-ewallet&ewallet_type=OVO' \
-X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$external_id = 'ovo-payment';
$ewallet_type = 'OVO';
$getPayments = \Xendit\EWallets::getPaymentStatus($external_id, $ewallet_type);
var_dump($getPayments);
?>
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.getPayment({
externalID: 'ovo-ewallet',
ewalletType: EWallet.Type.OVO,
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
EWalletPayment payment = EWalletPayment.getPaymentStatus("ovo-ewallet", EWalletPayment.EWalletType.OVO);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
data := ewallet.GetPaymentStatusParams{
ExternalID: "ovo-payment",
EWalletType: xendit.EWalletTypeDANA,
}
resp, err := ewallet.GetPaymentStatus(&data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("retrieved payment: %+v\n", resp)
from xendit import Xendit, EWalletType
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
EWallet = xendit_instance.EWallet
ovo_payment_status = EWallet.get_payment_status(
ewallet_type=EWalletType.OVO,
external_id="ovo-ewallet-testing-id-1234",
)
print(ovo_payment_status)
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 |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik dari sistem Anda seperti nomor ponsel, surat elektronik atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter. |
ewallet_type required |
string |
Tipe dari eWallet yang akan digunakan. Harus dalam huruf kapital. Tipe eWallet yang tersedia: 'OVO', 'DANA', 'LINKAJA' |
Contoh: Respon Sukses dari Cek Status Pembayaran
Status pada Respon OVO
OVO
{
"amount": 10000,
"business_id": "5850eteStin791bd40096364",
"ewallet_type": "OVO",
"external_id": "ovo-payment",
"status": "COMPLETED",
"transaction_date": "2020-01-14T11:48:47.903Z"
}
Status | Deskripsi |
---|---|
COMPLETED | Transaksi pembayaran untuk external_id yang ditentukan berhasil |
PENDING | Transaksi pembayaran untuk external_id yang ditentukan sedang menunggu persetujuan dari pengguna OVO |
FAILED | Transaksi pembayaran untuk external_id yang ditentukan gagal dan tidak diselesaikan (contoh: pengguna tidak menyetujui pembayaran atau sesi pembayaran telah berakhir) |
Status pada Respon DANA
DANA
{
"amount": 10000,
"business_id": "5850eteStin791bd40096364",
"checkout_url": "https://example.com/checkout",
"external_id": "dana-payment-23",
"expiration_date": "2020-03-20T04:54:10+07:00",
"status": "PAID"
}
Status | Deskripsi |
---|---|
PAID | Transaksi pembayaran untuk external_id yang ditentukan berhasil |
PENDING | Transaksi pembayaran untuk external_id yang ditentukan sedang menunggu persetujuan dari pengguna DANA |
FAILED | Pembuatan pembayaran dengan DANA untuk external_id yang ditentukan gagal |
EXPIRED | URL transaksi pembayaran untuk external_id yang ditentukan telah kadaluarsa (pengguna tidak mengakses link pembayaran atau menyelesaikan proses pembayaran) |
Status pada Respon LinkAja
LINKAJA - COMPLETED or FAILED
{
"amount": 10000,
"business_id": "5850eteStin791bd40096364",
"external_id": "linkaja-payment-23",
"payment_timestamp": "2020-01-14T11:48:47.903Z",
"status": "COMPLETED"
}
LINKAJA - PENDING or EXPIRED
{
"amount": 10000,
"business_id": "5850eteStin791bd40096364",
"checkout_url": "https://example.com/checkout",
"expired_at": "2020-01-14T11:48:47.903Z",
"external_id": "linkaja-payment-23",
"status": "PENDING"
}
Status | Deskripsi |
---|---|
COMPLETED | Transaksi pembayaran untuk external_id yang ditentukan berhasil |
PENDING | Transaksi pembayaran untuk external_id yang ditentukan sedang menunggu persetujuan dari pengguna LinkAja |
FAILED | Pembuatan pembayaran dengan LinkAja untuk external_id yang ditentukan gagal |
EXPIRED | URL transaksi pembayaran untuk external_id yang ditentukan telah kadaluarsa (pengguna tidak mengakses link pembayaran atau menyelesaikan proses pembayaran) |
Kode Error
Contoh: Respon Gagal dari Cek Status Pembayaran
{
"error_code": "PAYMENT_NOT_FOUND_ERROR",
"message": "Payment not found",
}
Kode Error | Deskripsi |
---|---|
PAYMENT_NOT_FOUND_ERROR404 |
Pembayaran tidak ditemukan |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini |
Callback Status Pembayaran
Anda butuh menyediakan endpoint pada sistem anda untuk menerima callback notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika pelanggan anda menyelesaikan pembayaran OVO, DANA, LINKAJA dan Shopeepay.
Callback notifikasi pembayaran akan dikirim melalui request POST ke "callback_url" yang anda isi di request pembuatan pembayaran. Catatan: Mohon berikan respon kembali dengan status 200
agar kami tahu bahwa notifkasi telah diterima.
Versi
Anda sedang melihat API versi 2020-02-01. Klik di sini untuk melihat versi sebelumnya.
Versi | Changelog |
---|---|
2020-02-01 (terbaru) | Berisi flow yang asynchronous dengan callback dari pembuatan pembayaran OVO. |
2019-02-04 | Mengembalikan respon secara langsung tanpa adanya callback. |
Contoh Callback Status Pembayaran
OVO
Data Callback
Contoh: Callback Status Pembayaran Berhasil
{
"event": "ewallet.payment",
"id": "6bb25ae6-cf57-437a-9b36-7ad2ee17b727",
"external_id": "ECLrAZPq8F6",
"business_id": "5850eteStin791bd40096364",
"phone": "081234567890",
"ewallet_type": "OVO",
"amount": 20000,
"created": "2019-11-01T12:34:56.007Z",
"status": "COMPLETED"
}
Parameter | Tipe | Deskripsi |
---|---|---|
event required | string |
Available value: "ewallet.payment" |
id required | string |
Unique identifier generated for the payment (payment_id) |
external_id required |
string |
ID yang merupakan identifikasi unik dari setiap request |
business_id required |
string |
ID yang merupakan identifikasi unik untuk merchant |
phone required |
string |
Nomor telepon pelanggan |
ewallet_type required |
string |
Tipe dari e-wallet. Nilai: OVO |
amount required |
number |
Nominal yang diinginkan |
status required |
string |
Status pembayaran. Nilai: FAILED, COMPLETED |
failure_code optional | string |
Bila pembayaran berstatus FAILED, kami memasukkan failure_code untuk detil dari kegagalan. Nilai: Lihat kolom Kode Kegagalan pada tabel ini |
created required |
string |
Timestamp ISO 8601 saat request pembuatan pembayaran dilakukan (dalam UTC) |
Kode Kegagalan (Failure Code)
Contoh: Callback Status Pembayaran Gagal
{
"event": "ewallet.payment",
"id": "6bb25ae6-cf57-437a-9b36-7ad2ee17b727",
"external_id": "ECLrAZPq8F6",
"business_id": "5850eteStin791bd40096364",
"phone": "081234567890",
"ewallet_type": "OVO",
"amount": 20000,
"failure_code": "USER_DECLINED_THE_TRANSACTION",
"status": "FAILED"
}
Kode Kegagalan | Deskripsi |
---|---|
USER_DID_NOT_AUTHORIZE_THE_PAYMENT |
Pengguna tidak melakukan autorisasi pembayaran dalam kurun waktu yang ditentukan |
USER_DECLINED_THE_TRANSACTION |
Pengguna menolak request pembayaran |
PHONE_NUMBER_NOT_REGISTERED |
Nomor handphone tidak terdaftar |
EWALLET_APP_UNREACHABLE |
eWallet provide/server tidak dapat dijangkau oleh aplikasi ewallet/handphone pengguna. Kasus umum yang terjadi adalah karena aplikasi ewallet di-uninstalled/isu pada jaringan. |
OVO_TIMEOUT_ERROR |
Terdapat timeout connection dari aplikasi OVO ke server OVO |
CREDENTIALS_ERROR |
Merchant tidak terdaftar di sistem penyedia eWallet |
ACCOUNT_AUTHENTICATION_ERROR |
Autentikasi user gagal |
ACCOUNT_BLOCKED_ERROR |
Tidak dapat memproses transaksi karena akun pengguna diblok |
SENDING_TRANSACTION_ERROR |
Eror ketika mengirimkan notifikasi transaksi ke OVO |
EXTERNAL_ERROR |
Terdapat eror pada sisi penyedia eWallet |
DANA
Contoh: Callback Status Pembayaran Berhasil
{
"external_id": "dana-ewallet",
"amount": 1001,
"business_id": "5850eteStin791bd40096364",
"payment_status": "PAID",
"transaction_date": "2020-03-20T04:54:10+07:00",
"ewallet_type": "DANA",
"callback_authentication_token": "sample-token-id=="
}
Parameter | Tipe | Deskripsi |
---|---|---|
external_id | string |
Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request. |
amount | number |
Nominal transaksi. |
business_id | string |
business_id Anda yang terdaftar pada sistem kami. |
payment_status | string |
Status pembayaran. Catatan: Status yang ada adalah EXPIRED dan PAID. |
transaction_date | string |
Waktu ketika pembayaran dibuat. |
ewallet_type | string |
Tipe eWallet yang Anda pilih ketika membuat request pembayaran. Supported ewallet types: OVO, DANA, dan LINKAJA |
callback_authentication_token | string |
Verifikasi API Key callback Anda yang dapat ditemukan pada dasbor Xendit Anda. Anda butuh melakukan verifikasi nilai ini apakah memiliki nilai yang sama. |
LINKAJA
Contoh: Callback Status Pembayaran Berhasil
{
"external_id": "linkaja-ewallet",
"amount": 300000,
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 100000,
"quantity": 1
},
{
"id": "345678",
"name": "Powerbank",
"price": 200000,
"quantity": 1
}
],
"status": "SUCCESS_COMPLETED",
"ewallet_type": "LINKAJA",
"callback_authentication_token": "sample-token-id=="
}
Parameter | Tipe | Deskripsi |
---|---|---|
external_id | string |
Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request. |
amount | number |
Nominal pembayaran yang telah Anda isi ketika melakukan Generate Checkout URL request. |
items | array of item |
Daftar dari barang / produk yang ada isi ketika mengirimkan Generate Checkout URL request. |
item object |
item detail |
Informasi dari barang / produk, akan mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number] |
status | string |
Status dari pembayaran. Catatan: Status yang ada adalah FAILED dan SUCCESS_COMPLETED |
ewallet_type | string |
Tipe eWallet yang Anda pilih ketika membuat request pembayaran. Supported ewallet types: OVO, DANA, dan LINKAJA |
callback_authentication_token | string |
Berisi Callback Verification API Key yang Anda bisa temukan di Dashboard Xendit. Anda perlu verifikasi kembali apakah ini memiliki isi yang sama |
Shopeepay
{}
Saluran pembayaran Shopeepay akan tersedia di Xendit [eWallet BETA endpoint] (https://developers.xendit.co/ewallets-beta/#tag/eWallets-Callback-Notifications).
Seluruh saluran pembayaran eWallet kami akan digabungkan ke dalam endpoint ini. Seluruh endpoint yang ada saat ini akan tetap tersedia dan dipertahankan.
Cardless Credit
Pembayaran kredit tanpa kartu memungkinkan Anda untuk menerima pembayaran uang muka dari penyedia jasa kredit. Nasabah Anda juga mendapatkan pilihan untuk melakukan cicilan dengan tenor yang sesuai dengan kebutuhan nasabah.
Pembuatan Pembayaran / Generate Checkout URL
Endpoint: Generate Checkout URL
POST https://api.xendit.co/cardless-credit
Parameter Request
Contoh: Generate Checkout URL
curl https://api.xendit.co/cardless-credit -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--header 'content-type: application/json' \
--data '{
"cardless_credit_type": "KREDIVO",
"external_id": "test-cardless-credit-01",
"amount": 800000,
"payment_type": "3_months",
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 200000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 2
},
{
"id": "234567",
"name": "Bluetooth Headset",
"price": 400000,
"type": "Audio",
"url": "http://example.com/phone/bluetooth_headset",
"quantity": 1
}
],
"customer_details": {
"first_name": "customer first name",
"last_name": "customer last name",
"email": "customer@yourwebsite.com",
"phone": "081513114262"
},
"shipping_address": {
"first_name": "first name",
"last_name": "last name",
"address": "Jalan Teknologi No. 12",
"city": "Jakarta",
"postal_code": "12345",
"phone": "081513114262",
"country_code": "IDN"
},
"redirect_url": "https://example.com",
"callback_url": "http://example.com/callback-cardless-credit"
}'
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'cardless_credit_type' => 'KREDIVO',
'external_id' => 'test-cardless-credit-01',
'amount' => 800000,
'payment_type' => '3_months',
'items' => [
[
'id' => '123123',
'name' => 'Phone Case',
'price' => 200000,
'type' => 'Smartphone',
'url' => 'http=>//example.com/phone/phone_case',
'quantity' => 2
],
[
'id' => '234567',
'name' => 'Bluetooth Headset',
'price' => 400000,
'type' => 'Audio',
'url' => 'http=>//example.com/phone/bluetooth_headset',
'quantity' => 1
]
],
'customer_details' => [
'first_name' => 'customer first name',
'last_name' => 'customer last name',
'email' => 'customer@yourwebsite.com',
'phone' => '081513114262'
],
'shipping_address' => [
'first_name' => 'first name',
'last_name' => 'last name',
'address' => 'Jalan Teknologi No. 12',
'city' => 'Jakarta',
'postal_code' => '12345',
'phone' => '081513114262',
'country_code' => 'IDN'
],
'redirect_url' => 'https://example.com',
'callback_url' => 'http://example.com/callback-cardless-credit'
];
$createPayment = \Xendit\CardlessCredit::create($params);
var_dump($createPayment);
?>
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
//items
CardlessCreditItem items[] = new CardlessCreditItem[1];
items[0] =
CardlessCreditItem.builder()
.id("123")
.name("Phone Case")
.price(200000)
.type("Smartphone")
.url("https://www.example.org")
.quantity(1)
.build();
//address
CardlessCreditShippingAddress address =
CardlessCreditShippingAddress.builder()
.firstName("Lorem")
.lastName("Ipsum")
.address("Jalan teknologi")
.city("Jakarta")
.postalCode("12345")
.countryCode("IDN")
.phone("08129748247684")
.build();
//Customer
CardlessCreditCustomer customer =
CardlessCreditCustomer.builder()
.firstName("Lorem")
.lastName("Ipsum")
.email("email@example.com")
.phone("08129748247684")
.build();
CardlessCredit cardlessCredit = CardlessCredit.create(
"KREDIVO",
"external_id",
200000,
CardlessCredit.PaymentType.THREE_MONTHS.getVal(),
items,
customer,
address,
"www.example.com",
"www.example.com"
);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
createPaymentData := cardlesscredit.CreatePaymentParams{
CardlessCreditType: xendit.CardlessCreditTypeEnumKREDIVO,
ExternalID: "test-cardless-credit-01",
Amount: 200000,
PaymentType: xendit.PaymentTypeEnum3Months,
Items: []cardlesscredit.Item{
{
ID: "123",
Name: "Laptop Asus Ila",
Price: 200000,
Type: "Laptop",
URL: "http://asus-ila.com",
Quantity: 1,
},
},
CustomerDetails: cardlesscredit.CustomerDetails{
FirstName: "Michael",
LastName: "Belajarrock",
Email: "michaelbelajarrock@mail.com",
Phone: "08123123123",
},
ShippingAddress: cardlesscredit.ShippingAddress{
FirstName: "Michael",
LastName: "Belajarjazz",
Address: "Jalan Teknologi No. 12",
City: "Jakarta",
PostalCode: "40000",
Phone: "08123123123",
CountryCode: "IDN",
},
RedirectURL: "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
CallbackURL: "https://google.com",
}
resp, err := cardlesscredit.CreatePayment(&createPaymentData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created payment: %+v\n", resp)
from xendit import Xendit, CardlessCreditType
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
CardlessCredit = xendit_instance.CardlessCredit
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
customer_details = CardlessCredit.helper_create_customer_details(
first_name="customer first name",
last_name="customer last name",
email="customer@email.com",
phone="0812332145",
)
shipping_address = CardlessCredit.helper_create_shipping_address(
first_name="first name",
last_name="last name",
address="Jl Teknologi No. 12",
city="Jakarta",
postal_code="12345",
phone="081513114262",
country_code="IDN",
)
cardless_credit_payment = CardlessCredit.create_payment(
cardless_credit_type=CardlessCreditType.KREDIVO,
external_id="id-1595923113",
amount=10000,
payment_type="3_months",
items=cardless_credit_items,
customer_details=customer_details,
shipping_address=shipping_address,
redirect_url="https://my-shop.com/home",
callback_url="https://my-shop.com/callback",
)
print(cardless_credit_payment)
Contoh: Respon Sukses dari Generate Checkout URL
{
"redirect_url": "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
"transaction_id": "66403e84-c8da-4af4-8d30-d17e95522f43",
"order_id": "123456-test-cardless-credit-01",
"external_id": "test-cardless-credit-01",
"cardless_credit_type": "KREDIVO"
}
Parameter Body | Tipe | Deskripsi |
---|---|---|
cardless_credit_type required |
string |
Tipe dari Cardless Credit yang akan digunakan. Harus dalam huruf kapital. Tipe eWallet yang tersedia: OVO |
external_id required |
string |
Sebuah ID pilihan Anda. Seringkali ini adalah indentifikasi unik seperti nomor telepon, email atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter. |
amount required |
number |
Jumlah yang pelanggan Anda harus bayarkan. Note: jumlah minimum adalah Rp 1. |
payment_type required |
string |
Tipe cicilan pembayaran, Anda bisa memilih antara: "30_days", "3_months", "6_months" and "12_months". |
items required |
array of item object |
Daftar barang / produk. |
item objectrequired |
item object |
Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number] |
customer_detailsrequired |
object |
Informasi pembeli, harus mengandung: first_name [string], last_name [string], email [string], phone [string] |
shipping_addressrequired |
object |
Informasi dari alamat pengiriman, harus mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string] |
redirect_urlrequired |
string |
Setelah pembeli melakukan pembayaran di halaman checkout mitra Cardless Credit, mereka akan diarahkan ke redirect_url . Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda. |
callback_urlrequired |
string |
Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran. |
Kode Error
Contoh: Respon Error dari Generate Checkout URL
{
"error_code": "API_VALIDATION_ERROR",
"message": "[fieldName] is required"
}
{
"error_code": "DUPLICATE_PAYMENT_ERROR",
"message": "Checkout URL with the same external_id has been created before."
}
Kode Error | Deskripsi |
---|---|
MERCHANT_NOT_FOUND422 |
Anda belum terdaftar untuk menggunakan cardless credit dengan tipe ini.. |
GENERATE_CHECKOUT_URL_ERROR422 |
Request Anda tidak memenuhi syarat atau ada masalah di sistem partner Cardless Credit kami. |
DUPLICATE_PAYMENT_ERROR422 |
Anda sudah pernah membuat Generate Checkout Request dengan external_id yang sama sebelumnya. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini |
Menghitung Tipe Pembayaran
Fitur Perhitungan Tipe Pembayaran membantu Anda untuk menentukan cicilan yang terbaik yang akan ditawarkan ke nasabah Anda oleh penyedia jasa Kredit Tanpa Kartu. Anda dapat menggunakan API ini untuk menghitung serta menampilkan paket cicilan sebelum nasabah Anda melakukan otentikasi
Endpoint: Menghitung Tipe Pembayaran
POST https://api.xendit.co/cardless-credit/payment-types
Parameter Request
Contoh: Menghitung Tipe Pembayaran Request
curl https://api.xendit.co/cardless-credit/payment-types -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
--header 'content-type: application/json' \
--data '{
"cardless_credit_type": "KREDIVO",
"amount": 2000000,
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 1000000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 1
}
]
}'
<?php
$url = 'https://api.xendit.co/cardless-credit/payment-types';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$item_1 = new stdClass();
$item_1->id = "123123";
$item_1->name = "Phone Case";
$item_1->price = 200000;
$item_1->type = "Smartphone";
$item_1->url = "http://example.com/phone/phone_case";
$item_1->quantity = 2;
$data = [
"cardless_credit_type" => "KREDIVO",
"amount" => 800000,
"items" => [ $item_1 ],
];
$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, CardlessCreditType
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
CardlessCredit = xendit_instance.CardlessCredit
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
cardless_credit_payment_types = CardlessCredit.calculate_payment_type(
cardless_credit_type=CardlessCreditType.KREDIVO,
amount=10000,
items=cardless_credit_items,
)
print(cardless_credit_payment_types)
Parameter Body | Tipe | Deskripsi |
---|---|---|
cardless_credit_type required |
string |
Tipe cardless-credit yang akan dibayarkan. Harus dalam huruf kapital. Tipe Cardless credit yang didukung: KREDIVO |
amount required |
number |
Nominal yang akan dibayarkan oleh end customer. Note: nilai minimum adalah Rp 1 |
items required |
array of item object |
Daftar barang / produk. |
items.id required |
string |
Produk ID merchant dari produk spesifik dalam transaksi. |
items.name required |
string |
Nama spesifik produk dalam transaksi. |
items.price required |
number |
Harga per unit dari produk spesifik dalam transaksi. |
items.type required |
string |
Kategori dari produk spesifik dalam transaksi |
items.url required |
string |
Web url dari produk spesifik dalam transaksi. |
items.quantity required |
number |
Kuantitas dari produk spesifik dalam transaksi. |
Parameter Respon
Contoh: Respons dari Menghitung Tipe Pembayaran
{
"message": "Available payment types are listed.",
"payments": [
{
"raw_monthly_installment": 187534.6668043921,
"name": "Bayar dalam 6 bulan",
"amount": 1000000,
"installment_amount": 1125240,
"raw_amount": 1000000,
"rate": 2.95,
"down_payment": 0,
"monthly_installment": 187540,
"discounted_monthly_installment": 0,
"tenure": 6,
"id": "6_months"
},
{
"raw_monthly_installment": 1020000,
"name": "Bayar dalam 30 hari",
"amount": 1020000,
"installment_amount": 1020000,
"raw_amount": 1020000,
"rate": 0,
"down_payment": 0,
"monthly_installment": 1020000,
"discounted_monthly_installment": 0,
"tenure": 1,
"id": "30_days"
},
{
"raw_monthly_installment": 356786.46273702476,
"name": "Bayar dalam 3 bulan",
"amount": 1000000,
"installment_amount": 1070370,
"raw_amount": 1000000,
"rate": 2.95,
"down_payment": 0,
"monthly_installment": 356790,
"discounted_monthly_installment": 0,
"tenure": 3,
"id": "3_months"
}
]
}
Parameter | Tipe | Deskripsi |
---|---|---|
message required |
string |
Tipe pembayaran yang tersedia. |
payments required |
array |
Daftar tipe pembayaran yang dikalkulasi. |
payments.raw_monthly_installment required |
number |
Cicilan bulanan sebelum pembulatan. |
payments.name required |
string |
Nama cicilan. |
payments.amount required |
number |
Total pembayaran sebelum bunga. |
payments.installment_amount required |
number |
Total pembayaran setelah bunga. |
payments.raw_amount required |
number |
Nominal pembayaran sebelum bunga dan pembulatan. |
payments.rate required |
number |
Tarif bunga yang dikenakan pada transaksi. |
payments.down_payment required |
number |
Nilai pembayaran dimuak. |
payments.monthly_installment required |
number |
Cicilan bulanan yang ditawakan Kredivo pada end user. |
payments.discounted_monthly_installment required |
number |
Cicilan bulanan yang ditawakan Kredivo pada end user setelah diskon.(Jika ada) |
payments.tenure required |
number |
Pembayaran cicilan per bulan. |
payments.id required |
string |
ID dari tipe cicilan. |
Notifikasi Pembayaran / Callback
Anda perlu menyediakan sebuah endpoint di sistem Anda untuk menerima notifikasi pembayaran / callback dari sistem kami. Kami akan mengirim notifikasi pembayaran / callback ketika pembeli sudah melakukan pembayaran di halaman Checkout partner kami (Kredivo).
Notifikasi Pembayaran / Callback akan dikirim sebagai POST request ke "callback_url" yang telah Anda isi ketika mengirimkan Generate Checkout URL request.
Data Callback
Contoh: Request Notifikasi Pembayaran / Callback
{
"external_id": "test-cardless-credit-01",
"order_id": "75191237c81273jajsh7291c-test-cardless-credit-01",
"transaction_id": "ashd7129-sh82-a9ks-js82-asj82912bajs",
"amount": 800000,
"transaction_status": "settlement",
"payment_type": "3_months",
"items": [
{
"id": "123123",
"name": "Phone Case",
"price": 200000,
"type": "Smartphone",
"url": "http://example.com/phone/phone_case",
"quantity": 2
},
{
"id": "234567",
"name": "Bluetooth Headset",
"price": 400000,
"type": "Audio",
"url": "http://example.com/audio/bluetooth_headset",
"quantity": 1
}
],
"customer_details": {
"first_name": "customer first name",
"last_name": "customer last name",
"email": "customer@yourwebsite.com",
"phone": "081513114262"
},
"shipping_address": {
"first_name": "first name",
"last_name": "last name",
"address": "Jalan Teknologi No. 12",
"city": "Jakarta",
"postal_code": "12345",
"phone": "081513114262",
"country_code": "IDN"
},
"cardless_credit_type": "KREDIVO",
"callback_authentication_token": "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
}
Parameter | Tipe | Deskripsi |
---|---|---|
external_id | string |
Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request. |
order_id | string |
Identifikasi unik yang kami berikan kepada mitra Cardless Credit kami. |
transaction_id | string |
ID transaksi yang diberikan oleh mitra Cardless Credit. |
transaction_status | string |
Status Transaksi, yang berisi: settlement: Transaksi berhasil pending: Pembeli belum melakukan pembayaran deny: Transaksi ditolak oleh mitra Cardless Credit kami cancel: Transaksi sudah dibatalkan expire: Pembeli tidak melakukan pembayaran dalam 24 jam, maka transaksi dinyatakan kadaluarsa |
payment_type | string |
Tipe cicilan. |
amount | number |
Jumlah pembayaran yang telah Anda isi ketika melakukan Generate Checkout URL request. |
items | array of item |
Daftar dari barang / produk yang ada isi ketika mengirimkan Generate Checkout URL request. |
item object |
item detail |
Informasi dari barang / produk, akan mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number] |
customer_details | object |
Informasi pembeli, akan mengandung: first_name [string], last_name [string], email [string], phone [string] |
shipping_address | object |
Informasi alamat pengiriman, akan mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string] |
cardless_credit_type | string |
Tipe Cardless Credit. Tipe Cardless Credit yang tersedia: KREDIVO |
callback_authentication_token | string |
Berisi Callback Verification API Key yang Anda bisa temukan di Dashboard Xendit. Anda perlu verifikasi kembali apakah ini memiliki isi yang sama |
QR Codes
Pembayaran QR codes memungkinkan Anda untuk menerima pembayaran langsung dari saldo aplikasi mobile banking atau saldo eWallet milik customer. Di Indonesia, Anda dapat menerima pembayaran dari penyedia layanan manapun yang terkoneksi dengan jaringan QRIS (misal, OVO, Gopay, Dana, LinkAja, BCA, CIMB, Shopeepay).
Pembuatan QR Code
Endpoint: Pembuatan QR Code
POST https://api.xendit.co/qr_codes
Parameter Request
Contoh: Pembuatan QRIS QR Code
curl https://api.xendit.co/qr_codes -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
-d external_id='testing_id_123' \
-d type='DYNAMIC' \
-d callback_url='https://yourwebsite.com/callback'\
-d nominal=1500
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "external_id=testing_id_123&type=DYNAMIC&callback_url=https://yourwebsite.com/callback&nominal=1500");
curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
var request = require('request');
var dataString = 'external_id=testing_id_123&type=DYNAMIC&callback_url=https://yourwebsite.com/callback&nominal=1500';
var options = {
url: 'https://api.xendit.co/qr_codes',
method: 'POST',
body: dataString,
auth: {
'user': 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==',
'pass': ''
}
};
function callback(error, Respon, body) {
if (!error && Respon.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
from xendit import Xendit, QRCodeType
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
QRCode = xendit_instance.QRCode
qrcode = QRCode.create(
external_id="qrcode-id-1594794038",
type=QRCodeType.DYNAMIC,
callback_url="https://webhook.site",
amount=4000,
)
print(qrcode)
Parameter Header | Tipe | Deskripsi |
---|---|---|
for-user-idoptional |
string |
Sub-account user-id untuk transaksi ini. Header ini hanya digunakan apabila Anda memiliki akses Xenplatform. Silakan akses xenPlatform untuk informasi lebih lengkap. |
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id wajib |
string |
ID transaksi unik yang dibuat oleh merchant Catatan: ID transaksi harus unik |
type wajib |
string |
DYNAMIC or STATIC Catatan: QR Code DYNAMIC mengandung nilai pembayaran ketika dilakukan pemindaian dan dapat dibayarkan berkali-kali Catatan: QR code STATIC membutuhkan customer untuk memasukkan nilai pembayaran dan dapat dibayarkan berkali-kali |
callback_urlwajib |
string |
URL untuk dapat menerima notifikasi pembayaran setelah pembayaran dilakukan oleh customer |
amountopsional |
number |
Nilai pembayaran yang tercantum pada QR Code, customer hanya dapat melakukan pembayaran sesuai dengan nilai yang tertera setelah pemindaian QR Code. Untuk QR Code STATIC, parameter nominal akan diabaikan. Catatan: Minimum nominal adalah Rp 1,500 Catatan: Maximum nominal adalah Rp 2,000,000 |
Parameter Respon
Contoh: Respon Sukses Pembuatan QRIS QR Code API
{
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"nominal": 1500,
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"callback_url": "https://yourwebsite.com/callback",
"type": "DYNAMIC",
"status": "ACTIVE",
"created": "2020-01-08T18:18:18.661Z",
"updated": "2020-01-08T18:18:18.661Z"
}
Parameter | Tipe | Deskripsi |
---|---|---|
id wajib |
string |
Pengidentifikasi unik dari sebuah transaksi |
external_id wajib |
string |
Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code |
amount wajib |
number |
nominal yang tertera pada request Catatan: nilai akan NULL jika tipe yang dimaksud adalah STATIC |
qr_string wajib |
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) |
callback_url wajib |
string |
URL untuk dapat menerima notifikasi pembayaran setelah pembayaran dilakukan oleh customer |
type wajib |
string |
DYNAMIC atau STATIC |
status wajib |
string |
ACTIVE (QR code dapat dibayar) atau INACTIVE (DYNAMIC QR code telah dibayar ) |
created wajib |
string |
Timestamp ISO 8601 ketika QR Code telah dibuat when (dalam UTC) |
updated wajib |
string |
Timestamp ISO 8601 ketika QR code telah diperbaharui (dalam UTC) |
Kode Error
Contoh: Create QRIS QR Code API Error Respon Error API Pembuatan QRIS Code
{
"error_code": "API_VALIDATION_ERROR",
"message": "nominal must be within range [1500, 2000000]"
}
Kode Error | Description |
---|---|
DUPLICATE_ERROR409 |
Pembayaran dengan external_id yang sama telah dibuat sebelumnya |
DATA_NOT_FOUND409 |
Merchant QRIS tidak ditemukan. Silakan hubungi tim customer success kami untuk aktivasi. |
REQUEST_FORBIDDEN_ERROR403 |
API key yang digunakan tidak memiliki ijin untuk melakukan request . Silakan atur ijin yang sesuai untuk API key yang Anda gunakan. Pelajari selengkapnya here |
API_VALIDATION_ERROR400 |
Terdapat input yang salah pada salah satu parameter wajib pada request |
Get QR Code menggunakan External ID
GET https://api.xendit.co/qr_codes/:external_id
Parameter Request
Contoh: Get QR Code by external_id
curl https://api.xendit.co/qr_codes/external_id -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/external_id');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
var request = require('request');
var options = {
url: 'https://api.xendit.co/qr_codes/external_id',
auth: {
'user': 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==',
'pass': ''
}
};
function callback(error, Respon, body) {
if (!error && Respon.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
QRCode = xendit_instance.QRCode
qrcode = QRCode.get_by_ext_id(
external_id="qrcode-id-1594794038",
)
print(qrcode)
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 |
---|---|---|
external_id wajib |
string |
ID transaksi unik yang dibuat oleh merchant |
Parameter Respon
Contoh: Respon Sukses Get QR Code menggunakan external_id
{
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"nominal": 1500,
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"callback_url": "https://yourwebsite.com/callback",
"type": "DYNAMIC",
"status": "ACTIVE",
"created": "2020-01-08T18:18:18.661Z",
"updated": "2020-01-08T18:18:18.661Z"
}
Parameter | Tipe | Deskripsi |
---|---|---|
id wajib |
string |
Pengidentifikasi unik dari sebuah transaksi |
external_id wajib |
string |
Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code |
nominal wajib |
number |
nominal yang tertera pada request Catatan: nilai akan NULL jika tipe yang dimaksud adalah STATIC |
qr_string wajib |
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) |
callback_url wajib |
string |
URL untuk dapat menerima notifikasi pembayaran setelah pembayaran dilakukan oleh customer |
type wajib |
string |
DYNAMIC atau STATIC |
status wajib |
string |
ACTIVE (QR code dapat dibayar) atau INACTIVE (DYNAMIC QR code telah dibayar) |
created wajib |
string |
Timestamp ISO 8601 ketika QR Code telah dibuat when (dalam UTC) |
updated wajib |
string |
Timestamp ISO 8601 ketika QR code telah diperbaharui (dalam UTC) |
Kode Error
Contoh: Create QRIS QR Code API Error Respon
{
"error_code": "DATA_NOT_FOUND",
"message": "QR code with external_id testing_id_123 not found"
}
Kode Error | Deskripsi |
---|---|
DATA_NOT_FOUND404 |
QR code dengan spesifik external_id tidak ditemukan. |
REQUEST_FORBIDDEN_ERROR403 |
API key yang digunakan tidak memiliki ijin untuk melakukan request . Silakan atur ijin yang sesuai untuk API key yang Anda gunakan. Pelajari selengkapnya here |
Get Array of Payments menggunakan External ID
GET https://api.xendit.co/qr_codes/payments?external_id={external_id}&from={created}&to={created}&limit={number}
Get Array of Payments menggunakan external_id
Contoh: Get Array of Payments menggunakan external_id
curl 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2' -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
var request = require('request');
var options = {
url: 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2',
auth: {
'user': 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==',
'pass': ''
}
};
function callback(error, Respon, body) {
if (!error && Respon.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
Path Parameter | Type | Description |
---|---|---|
external_id wajib |
string |
ID transaksi unik dari merchant untuk membuat QR code |
limit optional |
number |
Default = 10. Jumlah transaksi pembayaran yang dikembalikan pada response |
from optional |
string |
Timestamp awal untuk filter berdasarkan waktu menggunakancreated , timestamp seharusnya lebih awal dari parameter to |
to optional |
string |
Timestamp akhir untuk filter berdasarkan waktu menggunakan created , timestamp harus lebih dari parameter from |
Respon Get Array of Payments menggunakan external_id
Contoh: Respon Sukses Get Array of Payments menggunakan external_id
[
{
"id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
"amount": 1500,
"created": "2020-01-08T18:18:18.857Z",
"qr_code": {
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"type": "DYNAMIC"
},
"status": "COMPLETED"
},
{
"id": "qrpy_8182837te-87st-49ing-8696-1229bd22222",
"amount": 1500,
"created": "2020-01-08T18:18:20.857Z",
"qr_code": {
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"type": "DYNAMIC"
},
"status": "COMPLETED"
}
]
Parameter | Deskripsi |
---|---|
id wajib | string Pengidentifikasi unik dari sebuah transaksi |
nominal wajib | number nominal yang dibayarkan oleh customer |
created wajib | string Timestamp ISO 8601 ketika QR Code telah dibayarkan (dalam UTC) |
qr_code wajib | string Objek QR code yang diasosiasikan dengan pembayaran QR code |
qr.id wajib | string Pengidentifikasi unik untuk pembuatan transaksi QR code |
qr.external_id wajib | string Pengidentifikasi unik untuk request pembayaran spesifik dari merchant |
qr.qr_string wajib | string QR string yang akan ditampilkan untuk user |
qr.type wajib | string Tipe QR code - DYNAMIC atau STATIC |
status wajib | string Status pembayaran. Nilai yang mungkin muncul: COMPLETED |
API Respon Eror
Contoh: Respon Error API Get Array of Payments menggunakan external_id
{
"error_code": "DATA_NOT_FOUND",
"message": "QR code with external_id testing_id_123 not found"
}
Kode Eror | Deskripsi |
---|---|
DATA_NOT_FOUND404 |
QR code external_id spesifik tersebut tidak ditemukan. |
REQUEST_FORBIDDEN_ERROR403 |
API key yang digunakan tidak memiliki ijin untuk melakukan request . Silakan atur ijin yang sesuai untuk API key yang Anda gunakan. Pelajari selengkapnya here |
Simulasi Pembayaran (mode tes)
Parameter Request
Contoh: Simulasi pembayaran pada mode test
curl https://api.xendit.co/qr_codes/:external_id/payments/simulate -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
-d nominal=1500
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/:external_id/payments/simulate');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "nominal=1500");
curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
var request = require('request');
var dataString = 'nominal=1500';
var options = {
url: 'https://api.xendit.co/qr_codes/:external_id/payments/simulate',
method: 'POST',
body: dataString,
auth: {
'user': 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==',
'pass': ''
}
};
function callback(error, Respon, body) {
if (!error && Respon.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
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 |
---|---|---|
external_id wajib |
string |
Merchant provided unique transaction ID used to create QR code |
Parameter Body | Tipe | Deskripsi |
---|---|---|
nominaloptional |
number |
The payment value for simulation in callback to test mode endpoint Catatan: Min nominal is 1,500 IDR Catatan: Max nominal is 2,000,000 IDR |
Parameter Respon
Contoh: Respon Sukses Simulasi Pembayaran (mode test)
{
"id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
"nominal": 1500,
"created": "2020-01-08T18:18:18.857Z",
"qr_code": {
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"type": "DYNAMIC"
},
"status": "COMPLETED"
}
Parameter | Tipe | Deskripsi |
---|---|---|
id wajib | string |
Pengidentifikasi unik dari sebuah transaksi |
nominal wajib | number |
nominal yang dibayarkan oleh customer Catatan: nilai akan NULL jika tipe yang dimaksud adalah STATIC |
created wajib | string |
Timestamp ISO 8601 ketika QR code telah dibayarkan (dalam UTC) |
qr_code wajib | string |
Objeck QR code yang diasosiasikan dengan pembayaran QR code |
qr.id wajib | string |
Pengidentifikasi unik untuk pembuatan transaksi QR Code |
qr.external_id wajib | string |
Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code |
qr.qr_string wajib | 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) |
qr.type wajib | string |
Tipe QR code - DYNAMIC or STATIC |
status wajib | string |
Status pembayaran. Nilai yang mungkin muncul: COMPLETED |
Kode Error
Contoh: Create QRIS QR Code API Error Respon
{
"error_code": "DATA_NOT_FOUND",
"message": "QR code with external_id testing_id_123 not found"
}
Kode Error | Deskripsi |
---|---|
INACTIVE_QR_CODE410 |
Simulasi pembayaran untuk DYNAMIC QRIS telah selesai sebelumnya. QRIS DYNAMIC tidak aktif. |
DATA_NOT_FOUND404 |
QR code dengan spesifik external_id tidak ditemukan. |
REQUEST_FORBIDDEN_ERROR403 |
API key yang digunakan tidak memiliki ijin untuk melakukan request . Silakan atur ijin yang sesuai untuk API key yang Anda gunakan. Pelajari selengkapnya here |
API_VALIDATION_ERROR400 |
Terdapat input yang salah pada salah satu parameter wajib pada request. |
Callback Status Pembayaran
Anda butuh menyediakan endpoint pada sistem anda untuk menerima callback notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika pelanggan anda menyelesaikan pembayaran.
Catatan: Mohon berikan respon kembali dengan status 200
agar kami tahu bahwa notifkasi telah diterima.
Data Callback
{
"event": "qr.payment",
"id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
"nominal": 1500,
"created": "2020-01-08T18:18:18.857Z",
"qr_code": {
"id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
"external_id": "testing_id_123",
"qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
"type": "DYNAMIC"
},
"status": "COMPLETED"
}
Parameter | Tipe | Deskripsi |
---|---|---|
event wajib | string |
Nilai yang tersedia: "qr.payment" |
id wajib | string |
Pengidentifikasi unik dari sebuah transaksi |
nominal wajib | number |
nominal yang dibayarkan oleh customer Catatan: nilai akan NULL jika tipe yang dimaksud adalah STATIC |
created wajib | string |
Timestamp ISO 8601 ketika QR code telah dibayar (dalam UTC) |
qr_code wajib | string |
Objek QR code yang diasosiasikan dengan pembayaran QR code |
qr.id wajib | string |
Pengidentifikasi unik dari pembuatan transaksi QR code |
qr.external_id wajib | string |
Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code |
qr.qr_string wajib | 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) |
qr.type wajib | string |
Type QR code - DYNAMIC or STATIC |
status wajib | string |
Status pembayaran. Nilai yang mungkin muncul: COMPLETED |
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.
Create Customer
Customer objek wajib digunakan untuk menghubungkan metode pembayaran dengan direct debit. Endpoint ini memungkinkan Anda untuk dengan mudah menghubungkan dan menelusuri transaksi dan metode pembayaran
Endpoint: Create Customer
POST https://api.xendit.co/customers
Parameter Request
Contoh Request Membuat Customer
curl https://api.xendit.co/customers -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d reference_id=demo_1475801962607 \
-d given_names="John" \
-d mobile_number="+6287774441111" \
-d email="customer@website.com" \
<?php
$url = "https://api.xendit.co/customers";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$data = [
"given_names" => "John",
"reference_id" => "demo_1475801962607",
"mobile_number" => "+6287774441111",
"email" => "customer@website.com"
];
$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({
"given_names":"John",
"reference_id":"demo_1475801962607",
"mobile_number":"+6287774441111",
"email":"customer@website.com"});
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));
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
DirectDebit = xendit_instance.DirectDebit
customer = DirectDebit.create_customer(
reference_id="merc-1594279037",
email="t@x.co",
given_names="Adyaksa",
)
print(customer)
Request Body Parameter | Deskripsi | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
reference_id required |
string ID untuk identifikasi customer |
||||||||||||||||
mobile_number nomor handphone atau email wajib |
string Nomor ponsel customer dalam standar format internasional E.164 . Format: +(country code)(subscriber number)
|
||||||||||||||||
email nomor handphone atau email wajib |
string Alamat email dari customer |
||||||||||||||||
given_names required |
string Nama depan customer |
||||||||||||||||
middle_name optional |
string Nama tengah customer |
||||||||||||||||
surname optional |
string Nama keluarga customer |
||||||||||||||||
description optional |
string Deskripsi yang disediakan oleh merchant untuk customer |
||||||||||||||||
phone_number optional |
string Alternatif nomor telepon dengan standar format internasional E.164 . Format: +(country code)(subscriber number)
|
||||||||||||||||
nationality optional |
string Dua huruf 2-letter ISO 3166-2 country code kode negara kebangsaan customer |
||||||||||||||||
addresses optional |
object array Himpunan objek yang mengandung informasi alamat customer secara spesifikSetiap objek mungkin memiliki properti di bawah ini:
|
||||||||||||||||
date_of_birth optional |
string Tanggal lahir customer dalam format YYYY-MM-DD
|
||||||||||||||||
metadata optional |
object Format JSON bebas untuk informasi tambahan yang bisa Anda gunakan |
Parameter Respon
Contoh Respon Sukses Membuat Customer
{
"id": "239c16f4-866d-43e8-9341-7badafbc019f",
"reference_id": "demo_1475801962607",
"email": "customer@website.com",
"mobile_number": null,
"given_names": "John",
"description": null,
"middle_name": null,
"surname": null,
"phone_number": null,
"nationality": null,
"addresses": null,
"date_of_birth": null,
"metadata": null
}
Parameter | Deskripsi | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id |
string ID unik yang dihasilkan oleh Xendit secara spesifik untuk customer ini |
||||||||||||||||
reference_id |
string Pengidentifikasi yang Anda sediakan pada saat melakukan request |
||||||||||||||||
mobile_number |
string Nomor handphone customer |
||||||||||||||||
string Alamat email customer |
|||||||||||||||||
given_names |
string Nama depan customer |
||||||||||||||||
middle_name |
string Nama tengah customer |
||||||||||||||||
surname |
string Name keluarga customer |
||||||||||||||||
description |
string Deskripsi yang Anda sediakan untuk customer objek |
||||||||||||||||
phone_number |
string Alternatif atau saluran telepon |
||||||||||||||||
nationality |
string Kode negara untuk kebangsaan customer |
||||||||||||||||
addresses |
object array Himpunan objek yang mengandung informasi sepsifik dari alamat customer
|
||||||||||||||||
date_of_birth |
string Tanggal lahir customer dalam format YYYY-MM-DD
|
||||||||||||||||
metadata |
object Format JSON bebas untuk informasi tambahan yang bisa Anda gunakan |
Kode Error
Lihat lainnya error pada ummunya di sini.
Error Code | Deskripsi |
---|---|
DUPLICATE_ERROR 409
|
reference_id yang Anda gunakan sudah pernah digunakan sebelumnya. Silakan masukkan reference_id unik dan coba kembali |
Inisiasi Linked Account Tokenization
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
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
$url = "https://api.xendit.co/linked_account_tokens/auth";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$data = [
"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"
]
];
$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/linked_account_tokens/auth";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
var reqBody = JSON.stringify({
"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"
}
});
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));
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)
Request Body Parameter | Deskripsi | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
customer_id required |
string ID dari objek customer yang akun tokennya akan dihubungkan |
||||||||||
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.
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.
|
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.
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
$linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
$url = "https://api.xendit.co/linked_account_tokens/" . $linkedAccountTokenId . "/validate_otp";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$data = [
"otp_code" => "123456"
];
$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 linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
let url = "https://api.xendit.co/linked_account_tokens/" + linkedAccountTokenId + "/validate_otp";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
var reqBody = JSON.stringify({
"otp_code":"123456"
});
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));
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)
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. |
Mendapatkan Access Account menggunakan Linked Account Token
Endpoint ini akan mengembalikan akun bank yang dapat diakses oleh linked account token
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
$linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
$url = "https://api.xendit.co/linked_account_tokens/" . $linkedAccountTokenId . "/accounts";
$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_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 linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
let url = "https://api.xendit.co/linked_account_tokens/" + linkedAccountTokenId + "/validate_otp";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
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));
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_account_by_token(
linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
)
print(accessible_accounts)
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": {
"account_mobile_number": "62818555988",
"card_last_four": "1234",
"card_expiry": "06/24",
"account_email": "email@email.com"
}
}]
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 terhubungNilai yang diekspektasi: DEBIT_CARD
|
||||||||||
properties |
object Objek yang mengandung informasi berhubungan dengan akun. Nilai di dalam properties berubah berdasarkan tipe akun: Untuk tipe DEBIT_CARD (BRI):
|
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.
|
Membuat 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.
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
$url = "https://api.xendit.co/payment_methods";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$data = [
"customer_id" => "ba830b92-4177-476e-b097-2ad5ae4d3e55",
"type" => "DEBIT_CARD",
"properties" => [
"id" => "la-aa620619-124f-41db-995b-66a52abe036a"
]
];
$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/payment_methods/";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
var reqBody = JSON.stringify({
"customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
"type": "DEBIT_CARD",
"properties": {
"id": "la-aa620619-124f-41db-995b-66a52abe036a"
}
});
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));
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)
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 Nilai yang tersedia: DEBIT_CARD , BANK_ACCOUNT
|
||||
properties required |
object Informasi tambahan untuk identifikasi metode pembayaran: Untuk Debit Card Linking (BRI):
|
||||
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.Nilai yang tersedia: DEBIT_CARD
|
||||||||||
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 |
---|---|
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
|
Membuat Pembayaran Recurring dengan Direct Debit
Endpoint: Membuat Pembayaran Recurring
POST https://api.xendit.co/recurring_payments
Recurring payment memungkinkan Anda untuk menggunakan fitur auto debet pada direct debut untuk menarik dana dari akun bank customer Anda untuk pembayaran berulang atau terjadwal.
Parameter Request
Contoh: Pembuatan Recurring Request
curl https://api.xendit.co/recurring_payments -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d external_id=recurring_31451441 \
-d payment_method_id=pm_testing_id_123\
-d payer_email=sample_email@xendit.co \
-d interval=MONTH \
-d interval_count=1 \
-d description='Monthly room cleaning service' \
-d total_recurrence=10\
-d charge_immediately=true\
-d invoice_duration=300\
-d amount=125000
<?php
require 'vendor/autoload.php';
$options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';
$xenditPHPClient = new XenditClient\XenditPHPClient($options);
$external_id = 'recurring_31451441';
$amount = 125000;
$payment_method_id='pm_testing_id_123';
$payer_email = 'sample_email@xendit.co';
$interval = 'MONTH';
$interval_count = 1;
$description = 'Monthly room cleaning service';
$total_recurrence=10;
$charge_immediately=true;
$invoice_duration=300;
$response = $xenditPHPClient->createRecurringPayment($external_id, $amount, $payer_email, $interval, $interval_count, $description);
print_r($response);
?>
const x = require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.createPayment({
externalID: 'recurring_31451441',
amount: 125000,
payerEmail: 'sample_email@xendit.co',
interval: RecurringPayment.Interval.Month,
intervalCount: 1,
description: 'Monthly room cleaning service',
payment_method_id: 'pm_testing_id_123',
total_recurrence: 10,
charge_immediately: true,
invoice_duration: 300
});
console.log(resp);
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.create_recurring_payment(
external_id="recurring_12345",
payer_email="test@x.co",
description="Test Curring Payment",
amount=100000,
interval="MONTH",
interval_count=1,
payment_method_id="pm_testing_id_123",
)
print(recurring_payment)
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID yang merupakan identifikasi unik (tipikal pengidentifikasi unik untik identifier recurring payment di sstem Anda) |
payment_method_id optional |
string |
Silakan isi dengan payment method id yang telah dibuat untuk customer pada create payment method |
payer_email required |
string |
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda |
description required |
string |
Deskripsi pembayaran atau tagihan Recurring Anda |
amount required |
number |
Nominal harga per Invoice per interval. Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000 untuk direct debit |
interval required |
string |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antara DAY , WEEK , MONTH . |
interval_count required |
number |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
invoice_duration required |
number |
Pastikan Anda mengisi nilai parameter ini dengan 300 durasi waktu yang tersedia untuk customer Anda melakukan pembayarn sebelum kadaluarsa dalam Second). |
total_recurrence optional |
number |
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY , Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API. |
should_send_email optional |
boolean |
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa default:
|
missed_payment_action optional |
string |
Gunakan IGNORE , jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP , jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu default:
|
start_date optional |
string (ISO 8601) |
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda. |
charge_immediately optional |
boolean |
Silakan isi dengan nilai true jika pembayaran pertama dilakukan segera setelah pembayaran recurring dibuat dengan start_date yang valid, Invoice berikutnya akan dibuat pada start_date dan kalkulasi untuk invoice recurring berikutnya adalah interval *interval_count + start_date |
Parameter Respon
Contoh: Respon Pembuatan Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "ACTIVE",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": false,
"missed_payment_action": "IGNORE",
"last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5dddeea6bdb99f4b23e5eef7",
"created": "2017-06-12T14:00:00.306Z",
"updated": "2017-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z",
"recharge": true,
"payment_method_id": "pm_testing_id_123"
}
Parameter | Tipe | Deskripsi |
---|---|---|
id | string |
ID dari Recurring Anda yang diberikan dari Xendit |
user_id | string |
Xendit Business ID Anda |
external_id | string |
ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda |
status | string |
ACTIVE Tagihan Recurring Anda ber-status aktifSTOPPED Tagihan Recurring Anda telah dihentikan dari sistem XenditPAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API |
amount | number |
Nominal harga per Invoice per interval. |
payer_email | string |
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda |
description | string |
Deskripsi pembayaran atau tagihan Recurring Anda |
should_send_email | boolean |
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa |
interval | string |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antara DAY , WEEK , MONTH . |
interval_count | number |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH dan interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
recurrence_progress | number |
Siklus saat ini dari pembayaran recurring. Jika customer Anda ada pada siklus ke-4 dari pembayaraan recurring, makan Anda akan melihat 4 pada response recurrence_progress |
last_created_invoice_url | string |
url yang mengarahkan ke invoice terakhir yang dibuat oleh pembayaran recurring ini |
invoice_duration | number |
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit. |
created | string (ISO 8601) |
ISO timestamp sebagai penanda kapan pembayaran recurring dibuat. Timezone adalah UTC+0 |
updated | string (ISO 8601) |
ISO timestamp sebagai penanda kapan pembayaran recuriing di update. Timezone adalah UTC+0 |
charge_immediately optional |
boolean |
Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date |
recharge | boolean |
Parameter ini akan memiliki nilai true untuk pembayaran direct debit |
payment_method_id | string |
payment_method_id untuk pembayaran recurring ini |
Kode Eror
Kode Error | Deskripsi |
---|---|
API_VALIDATION_ERROR400 |
Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit. |
INVALID_JSON_FORMAT400 |
Bukan format JSON yang valid. |
INVALID_PAYMENT_METHOD_ID_ERROR400 |
Payment method id invalid |
REQUEST_FORBIDDEN_ERROR403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini here |
Perasi Recurring Lainnya
Untuk melakukan request pembayaran recurring lainnya sepertiget, edit, pause, resume, stop - refer to recurring payments
Membuat Pembayaran 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
$url = "https://api.xendit.co/direct_debits";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [
"Content-Type" => "application/json",
"Idempotency-key" => "Test_Idempotent_Key",
];
$data = [
"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/"
];
$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/direct_debits";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
headers.append("Idempotency-key", "Test_Idempotent_Key");
var reqBody = JSON.stringify({
"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/"
});
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));
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)
Header | Deskripsi |
---|---|
Idempotency-key required |
string Disediakan oleh merchant untuk mencegah duplikasi request. Bisa sama dengan reference_id atau GUID. Note: Max 100 karakter |
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 true untuk charge akun customer dengan OTPfalse untuk charge akun end customer tanpa OTP |
||||||||||||||||||||||||
description optional |
string Deskripsi untuk transaksi direct debit |
||||||||||||||||||||||||
basket optional |
array Himpunan objek yang mendeskripsikan item yang dibeli menggunakan direct debit
|
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,
"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. |
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_ERROR 409
|
Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali. |
PAYMENT_METHOD_NOT_FOUND_ERROR 400
|
Payment_methd_id yang disediakan tidak sesuai, tidak ditemukan atau akses tidak tersedia. |
INVALID_PAYMENT_METHOD_ERROR 503
|
Payment method telah expire atau tidak tersedia |
Validasi OTP untuk Pembayaran Direct Debit
Validasi OTP yang disediakan oleh end customer melalui endpoint ini untuk menyelesakan transaksi jika transaksi tersebut parameter is otp adalah enabled.
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
$direct_debit_id = "ddpy-623dca10-5dad-4916-test";
$url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/validate_otp";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$data = [
"otp_code" => "111222"
];
$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 direct_debit_id = "ddpy-623dca10-5dad-4916-test";
let url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/validate_otp";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
var reqBody = JSON.stringify({
"otp_code":"111222"
});
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));
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)
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 |
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. |
Get Customer by Reference ID
Mendapatkan himpunan dengan customer object yang cocok dengan reference_id
yang telah Anda sediakan.
Endpoint: Get Customer by Reference ID
GET https://api.xendit.co/customers?reference_id={reference_id}
Request Get Customer menggunakan Reference ID
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));
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
DirectDebit = xendit_instance.DirectDebit
customer = DirectDebit.get_customer_by_ref_id(
reference_id="merc-1594279037",
)
print(customer)
Query String Parameter | Deskripsi |
---|---|
reference_id required |
string Pengidentifikasi yang disediakan merchant untuk customer |
Respon Get Customer menggunakan Reference ID
Contoh Respon Sukses Get Customer menggunakan Reference ID
[{
"id": "239c16f4-866d-43e8-9341-7badafbc019f",
"reference_id": "demo_1475801962607",
"email": "customer@website.com",
"mobile_number": null,
"given_names": "John",
"description": null,
"middle_name": null,
"surname": null,
"phone_number": null,
"nationality": null,
"addresses": null,
"date_of_birth": null,
"metadata": null
}]
Parameter | Deskripsi |
---|---|
id |
string ID unik dari Xendit untuk customer yang Anda buat |
reference_id |
string Pengidentifikasi yang Anda sediakan pada saat melakukan request |
mobile_number |
string Nomor handphone customer |
string Alamat email customer |
|
given_names |
string Nama depan customer |
middle_name |
string Nama tengah customer |
surname |
string Nama keluarga customer |
description |
string Deskripsi yang Anda sediakan untuk customer objek |
phone_number |
string Alternatif nomor telepon |
nationality |
string Kode negara untuk kebangsaan customer |
addresses |
object array Himpunan objek yang mengandung informasi alamat customer secara spesifik |
date_of_birth |
string Tanggal lahir customer dalam format YYYY-MM-DD
|
metadata |
object Json dalam format bebas sebagai tambahan informasi yang Anda sediakan pada saat melakukan request |
Get Customer by Reference ID - Errors
Lihat lainnyaerror pada umumnya di sini.
Get Payment Methods menggunakan Customer ID
Endpoint ini mengembalikan himpunan payment method yang terhubung dengan customer_id
yang tersedia
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
$url = "https://api.xendit.co/payment_methods";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$queryString = "?customer_id=ba830b92-4177-476e-b097-2ad5ae4d3e55";
$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/payment_methods";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
let queryString = "?customer_id=ba830b92-4177-476e-b097-2ad5ae4d3e55";
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));
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)
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 |
string Tipe akun yang telah dihubungkan.Nilai yang diekspektasi: DEBIT_CARD or BANK_ACCOUNT
|
||||||||||
properties |
object Objek yang mengandung informasi terkait dengan akun. Nilai dalam properties berubah berdasarkan tipe akun: Untuk tipe DEBIT_CARD (BRI):
|
||||||||||
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.
Get Direct Debit Payment Status by ID
Mendapatkan detail dari pembayaran direct debit dengan transaksi ID dari Xendit
Endpoint: Get Payment Staus by ID
POST 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
$direct_debit_id = "ddpy-623dca10-5dad-4916-test";
$url = "https://api.xendit.co/direct_debits/" . $direct_debit_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;
let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
let direct_debit_id = "ddpy-623dca10-5dad-4916-test";
let url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
var requestOptions = {
method: 'GET',
headers: headers,
body: reqBody,
redirect: 'follow'
};
fetch(url, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
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)
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 |
Get Payment Status menggunakan Reference ID
Mendapatkan detail dari pembayaran direct debit dengan menggunakan reference ID
Endpoint: Get Payment Staus 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
$url = "https://api.xendit.co/direct_debits/";
$apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
$headers = [];
$headers[] = "Content-Type: application/json";
$queryString = "?reference_id=test_merchant_reference_id";
$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/direct_debits/";
var headers = new Headers();
headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
headers.append("Content-Type", "application/json");
let queryString = "?reference_id=test_merchant_reference_id";
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));
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)
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 |
Callback Notifications
Merchants harus menyediakan endpoint di sistem Anda untuk dapat menerima notifikasi callback dari sistem kami. Notifikasi callback akan dikirimkan ke endpoint yang disediakan pada saat request pembayaran direct debit.
Callback Payload Status Pembayaran
Payload
Contoh: Callback 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 Callback - Failure Reasons Status Callback 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. |
Callback 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": "description",
"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 |
Virtual Accounts
Virtual accounts adalah akun virtual dari bank yang dibuat dan diperuntukan kepada pelanggan yang berfungsi sebagai media untuk menerima pembayaran yang akan di bayarkan pelanggan terhadap bank.
Pembuatan Virtual Account
Endpoint: Pembuatan Virtual Accounts (VA)
POST https://api.xendit.co/callback_virtual_accounts
Untuk lingkungan produksi, aktifkan Virtual Account dari dasbor dengan masuk ke Dasbor > Pengaturan > Terima Uang > Metode pembayaran > Virtual accounts dan klik tombol "Aktifkan!". Rentang VA akan diatur dan diaktifkan secara instan. Dalam lingkungan pengembangan, pengembangan rentang VA akan ditugaskan segera. Baca lebih lanjut tentang virtual accounts.
Apakah anda ingin menggunakan virtual akun yang terikat dengan transaksi daripada pengguna? Gunakan invoices API kita.
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)
JSON
{
"external_id": "demo-1475804036622",
"bank_code": "BNI",
"name": "Rika Sutanto"
}
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 |
---|---|---|
external_idrequired |
string |
ID sesuai pilihan anda. Seringkali ID itu unik seperti nomor telepon, email or ID transaction. Panjang maksimum yang diperbolehkan adalah 950 karakter.
|
bank_coderequired |
string |
Kode bank virtual account yang anda mau buat. Note: Kami sangat menyarankan untuk mengarahkan pelanggan anda untuk membayar ke BNI virtual account untuk transfer antar bank
|
namerequired |
string |
Nama pengguna/virtual account, nama ini yang akan ditampilkan pada tampilan para pengguna, misalkan pada layar konfirmasi mesin ATM.Perlu diperhatikan bahwa kolom ini hanya dapat berisi huruf dan spasi dan tidak memiliki batasan (meskipun bank akan hanya menampilkan nama virtual account sesuai jumlah batasan dari sisi bank)
|
virtual_account_numberoptional |
string |
Nomor virtual akun yang ingin anda tetapkan. Jika anda tidak menetapkan nomor virtual account yang ingin anda buat, sistem kami akan memilih secara acak. Note: Jangan sertakan merchat code (4 atau 5 digit pertama pada yang ada di keseluruhan nomor virtual account) standar:
|
suggested_amountoptional |
integer positive |
Nominal yang disarankan yang ingin anda tetapkan. Note:Pengguna dapat melihat nominal yang di sarankan akan tetapi tetap dapat memasukan nominal diluar dari yang di sarankan (Untuk nominal yang disarankan hanya tersedia pada Mandiri dan BRI) standar:
|
is_closedoptional |
boolean |
Ketika diatur menjadi *true* , virtual account hanya akan menerima pembayaran sesuai nominal yang ditentukan dalam expected_amount standar:
|
expected_amountoptional |
integer positive |
Nominal yang diharapkan oleh virtual account ketika is_closed diatur menjadi *true* standar:
|
expiration_dateoptional |
ISO 8601 Date |
Waktu kedaluwarsa virtual accountzona waktu:
|
is_single_useoptional |
boolean |
Ketika diatur menjadi *true* , status virtual account akan menjadi inactive setelah dibayarstandar:
|
descriptionoptional |
string |
Deskripsi tentang virtual account yang di buat. Ini hanya tersedia untuk bank BRI
|
Parameter Respon
Contoh Respon Pembuatan Virtual Accounts
{
"owner_id":"57b4e5181473eeb61c11f9b9",
"external_id":"demo-1475804036622",
"bank_code":"BNI",
"merchant_code":"8808",
"name":"Rika Sutanto",
"account_number":"8808999939380502",
"is_closed": false,
"expiration_date": "2051-09-27T17:00:00.000Z",
"id":"57f6fbf26b9f064272622aa6",
"is_single_use": true,
"status": "PENDING"
}
Contoh Respon Pembuatan Virtual Accounts dengan bank code BRI
{
"owner_id": "5de8d83cafcf47000f8e76bc",
"external_id": "1576132512",
"bank_code": "BRI",
"merchant_code": "26215",
"name": "rezki",
"account_number": "262159999857807",
"expected_amount": 700000,
"is_single_use": false,
"description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
"currency": "IDR",
"status": "PENDING",
"expiration_date": "2050-12-11T17:00:00.000Z",
"is_closed": false,
"id": "5df1dfa06c3736110078f9a1"
}
Parameter | Tipe | Deskripsi |
---|---|---|
owner_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
bank_coderequired |
string |
Kode bank yang bersangkutan, misal, BNI. |
merchant_coderequired |
string |
Merchant code adalah 4-5 angka awalan dari nomor akun virtual. contoh: 01234 + nomor anda |
namerequired |
string |
Nama virtual account |
account_numberrequired |
string |
Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking. |
is_closedrequired |
boolean |
Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak. |
idrequired |
string |
ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account. |
is_single_userequired |
boolean |
Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar |
statusrequired |
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. |
suggested_amountoptional |
string |
Nominal yang diharapkan untuk pembuatan virtual account |
expected_amountoptional |
string |
Nominal yang diharapkan saat is_closed diubah menjadi true |
descriptionoptional |
string |
deskripsi dari virtual account yang mana akan di tampilkan ketika melakukan pembayaran. Hanya tersedia untuk bank BRI. |
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 |
Tanggl 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 |
Nominal yang diharapkan The expected amount hanya bisa lebih dari nol |
MAXIMUM_EXPECTED400 |
Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000 |
CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED400 |
Nama virtual account tidak boleh mengandung nama bank atau institusi |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
Bank yang tersedia untuk Virtual Account
Endpoint: Mendapatkan bank yang tersedia untuk virtual accounts
GET https://api.xendit.co/available_virtual_account_banks
Contoh Permintaan mendapatkan bank yang tersedia untuk virtual accounts
curl https://api.xendit.co/available_virtual_account_banks -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
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)
Parameter Respon
Contoh respon saat mendapatkan bank yang tersediua untuk virtual accounts
{
"name": "Bank Negara Indonesia",
"code": "BNI"
}
Parameter | Deskripsi |
---|---|
namerequired |
Nama bank |
coderequired |
Kode bank, yang berkaitan saat pembuatan virtual account |
Mendapatkan 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)
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
{
"owner_id": "58cd618ba0464eb64acdb246",
"external_id": "va-1507867286",
"bank_code": "BRI",
"merchant_code": "26215",
"name": "Steve Wozniak",
"account_number": "262151000393993",
"is_single_use": false,
"status": "ACTIVE",
"expiration_date": "2048-10-12T17:00:00.000Z",
"is_closed": false,
"id": "59e03a976fab8b1850fdf347"
}
Parameter | Tipe | Deskripsi |
---|---|---|
owner_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat pembuatan virtual account |
bank_coderequired |
string |
Kode bank dari nomor virtual account |
merchant_coderequired |
string |
4 atau 5 angka didepan sebelum nomor lengkap virtual account |
namerequired |
string |
Nama virtual account |
account_numberrequired |
string |
Nomor akun dari virtual account |
expiration_daterequired |
string |
Tanggal kedaluwarsa virtual account |
is_closedrequired |
boolean |
Nilai yang mendifinisikan virtual account harus dibayar sesuai nominal yang diharapkan atau tidak |
idrequired |
string |
ID virtual account |
is_single_userequired |
boolean |
Nilai yang mendefinisikan virtual account hanya bisa digunakan satu kali atau berulang-ulang |
statusrequired |
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. |
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 |
Pembaruan Virtual Accounts
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)
{
"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 |
---|---|---|
suggested_amountoptional |
integer positive |
Nominal yang disarankan yang ingin anda tetapkan. |
expected_amountoptional |
integer positive |
Nominal yang diharapkan saat is_closed diubah menjadi true |
expiration_dateoptional |
ISO 8601 Date |
Waktu ketika virtual account akan kedaluwarsa. Anda dapat mengaturnya ke hari-hari sebelumnya untuk segera mengubah virtual account itu menjadi kedaluwarsa zona waktu:
|
is_single_useoptional |
boolean |
Ketika diubah menjadi *true* , virtual account akan menjadi inactive setelah dibayarstandar:
|
descriptionoptional |
string |
Deskripsi tentang virtual account yang di buat. Ini hanya tersedia untuk bank BRI
|
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"
}
Parameter | Tipe | Deskripsi |
---|---|---|
owner_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
bank_coderequired |
string |
Kode bank yang bersangkutan, misal, BNI. |
merchant_coderequired |
string |
4 atau 5 angka didepan sebelum nomor lengkap virtual account |
namerequired |
string |
Nama virtual account |
account_numberrequired |
string |
Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking. |
idrequired |
string |
ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account. |
is_closedrequired |
boolean |
Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak. |
is_single_userequired |
boolean |
Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar. |
statusrequired |
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. |
suggested_amountoptional |
string |
Nominal yang diharapkan dari virtual account yang diperbarui |
expected_amountoptional |
string |
Nominal yang diharapkan saat is_closed diubah menjadi true |
descriptionoptional |
string |
deskripsi dari virtual account yang mana akan di tampilkan ketika melakukan pembayaran. Hanya tersedia untuk bank BRI. |
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 |
Nominal yang diharapkan The expected amount hanya bisa lebih dari nol |
MAXIMUM_EXPECTED400 |
Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000 |
REQUEST_FORBIDDEN403 |
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini. |
Notifikasi / Callback Pembayaran Virtual Account
Endpoint: Notifikasi Pembayaran Virtual Account
POST https://yourcompany.com/virtual_account_paid_callback_url
Ketika seseorang membayar ke virtual account anda, API untuk notifikasi kami akan mengirimkan notifikasi URL anda yang telah ada atur dalam dashboard. API notifikasi kami juga akan mengirimkan notifikasi ke URL anda untuk pembuatan virtual account dan pembaruan virtual account. Silahkan liatPembuatan Virtual Accounts untuk lebih detail. Untuk informasi lebih lanjut mengenai notikasi silahhkan bacadocs.
Contoh ini hanya digunakan untuk menampilkan isi parameter yang dikirimkan dari API Xendit ke URL notifikasi anda dan tidak dapat dicoba disini. Jika anda menginginkan untuk mencoba permintaan notifikasi ini, gunakan fitur di dashboard dan pilih Callbacks settings.
Data Callback terkait Pembayaran
Parameter Header | Tipe | Description |
---|---|---|
x-callback-tokenrequired |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
Contoh Permintaan Notifikasi Pembayaran Virtual Account Payment
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
--data-binary "{
id: \"57fb4e076fa3fa296b7f5a97\",
payment_id: \"demo-1476087608948_1476087303080\",
callback_virtual_account_id: \"57fb4df9af86ce19778ad359\",
owner_id: \"57b4e5181473eeb61c11f9b9\",
external_id: \"demo-1476087608948\",
account_number: \"8808999939380502\",
bank_code: \"BNI\",
amount: 99000,
transaction_timestamp: \"2016-10-10T08:15:03.080Z\",
merchant_code: \"8808\",
sender_name: \"JOHN DOE\",
updated: \"2016-10-10T08:15:03.404Z\",
created: \"2016-10-10T08:15:03.404Z\"
}" \
'https://api.xendit.co/virtual_account_paid_callback_url'
JSON
{
"amount": 50000,
"callback_virtual_account_id": "5f8e658568ed5f402a1faadb",
"payment_id": "5f8e658f8d65ab385241f17a",
"external_id": "demo-va-callback",
"account_number": "9999624535",
"merchant_code": "88608",
"bank_code": "MANDIRI",
"transaction_timestamp": "2020-10-20T04:20:31.000Z",
"currency": "IDR",
"created": "2020-10-20T04:20:31.937Z",
"updated": "2020-10-20T04:20:33.074Z",
"id": "5f8e658fc5710a7ae00f75db",
"owner_id": "5c2323c67d6d305ac433ba20"
}
Parameter Body | Tipe | Description |
---|---|---|
payment_idrequired |
string |
Dalam sistem internal kami disebut dengan payment ID |
callback_virtual_account_idrequired |
string |
Nilai kolom id didapatkan dari respon saat virtual account berhasil dibuat. Lihat Pembuatan Virtual Accounts |
owner_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
account_numberrequired |
string |
Nomor lengkap virtual account (tanpa 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking. |
bank_coderequired |
string |
Kode bank yang bersangkutan, misal, BNI. |
amountrequired |
integer positive |
Jumlah yang dibayar |
merchant_coderequired |
string |
5 angka didepan sebelum nomor lengkap virtual account, e.g 01234 your_number |
idrequired |
string |
ID dari pembayaran virtual account |
transaction_timestamprequired |
string |
Tanggal dan waktu pembayaran virtual account |
sender_name |
string |
Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account |
Data Callback 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_callback_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_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
bank_coderequired |
string |
Kode bank yang bersangkutan, misal, BNI. |
merchant_coderequired |
string |
5 angka didepan sebelum nomor lengkap virtual account |
namerequired |
string |
Nama virtual account |
account_numberrequired |
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_amountoptional |
string |
Nominal yang disarankan untuk membuat virtual account |
is_closedrequired |
boolean |
Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak. |
expected_amountoptional |
string |
Nominal yang diharapkan saat is_closed diubah menjadi true |
idrequired |
string |
ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account. |
is_single_userequired |
boolean |
Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar. |
statusrequired |
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. |
Error Notifikasi Virtual Account
Perlu diperhatikan pada kasus ini kita tidak mendapatkan respon sukses dari server anda pada percobaan pertama, kami akan mencoba lagi sebanyak 2 kali dengan jeda 30 detik disetiap percobaan. Setelah 3 kali mendapatkan respon gagal, kami akan mendapatkan peringatan bahwa notifikasi itu telah gagal. Tim kami akan menghubungin anda untuk menyelesaikan masalah ini.
Mendapatkan Pembayaran Virtual Account
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)
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": "1502450097080",
"callback_virtual_account_id": "598d5f71bf64853820c49a18",
"external_id": "demo-1502437214715",
"merchant_code": "77517",
"account_number": "1000016980",
"bank_code": "BNI",
"amount": 5000,
"sender_name": "JOHN DOE",
"transaction_timestamp": "2017-08-11T11:14:57.080Z"
}
Parameter | Tipe | Description |
---|---|---|
idrequired |
string |
ID pembayaran virtual account |
payment_idrequired |
string |
Dalam sistem internal kami disebut dengan payment ID |
callback_virtual_account_idrequired |
string |
ID dari virtual account yang telah dibayar |
external_idrequired |
string |
External ID pembayaran virtual account |
merchant_coderequired |
string |
5 angka didepan sebelum nomor lengkap virtual account |
account_numberrequired |
string |
Nomor akun dari virtual account |
bank_coderequired |
string |
Kode bank dari nomor virtual account |
amountrequired |
integer positive |
Jumlah yang dibayarkan ke virtual account ini |
transaction_timestamprequired |
string |
Tanggal dan waktu bahwa virtual account telah dibayar |
sender_name |
string |
Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account |
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 |
Retail Outlets
Pembuatan Fixed Payment Code
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-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_idrequired |
string |
ID pilihan Anda. Seringkali pengenal unik seperti nomor telepon, email atau transaksi ID. Panjang maksimum yang diijinkan adalah 1000 karakter.
|
retail_outlet_namerequired |
string |
Nama Fixed Payment Code yang ingin Anda buat
|
namerequired |
string |
Nama pengguna - data ini dapat digunakan oleh kasir Toko Outlet untuk memvalidasi pengguna akhir
|
expected_amountoptional |
integer positive |
Jumlah yang diharapkan akan dibayarkan oleh pengguna akhir |
payment_codeoptional |
string |
Fixed Payment Code yang ingin Anda tetapkan, contohnya 12345. Jika Anda tidak mengirimkan, maka akan dipilih secara acakstandar:
|
expiration_dateoptional |
ISO 8601 Date |
Waktu yang ditentukan ketika Fixed Payment Code akan kedaluwarsazona waktu:
|
is_single_useoptional |
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_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namerequired |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixrequired |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namerequired |
string |
Nama untuk Fixed Payment Code anda |
payment_coderequired |
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_amountrequired |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_userequired |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_daterequired |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idrequired |
string |
Kode unik untuk Fixed Payment Code |
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. |
Pembaruan Fixed Payment Code
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-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 |
---|---|---|
nameoptional |
string |
Nama untuk Fixed Payment Code
|
expected_amountoptional |
integer positive |
Nominal yang diharapkan akan dibayar oleh pengguna akhir |
expiration_dateoptional |
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_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namerequired |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixrequired |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namerequired |
string |
Nama untuk Fixed Payment Code anda |
payment_coderequired |
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_amountrequired |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_userequired |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_daterequired |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idrequired |
string |
Kode unik untuk Fixed Payment Code |
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. |
Mendapatkan Fixed Payment Code
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-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 |
---|---|---|
fixed_payment_code_id required |
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_idrequired |
string |
ID pengguna anda |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
retail_outlet_namerequired |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
prefixrequired |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
namerequired |
string |
Nama untuk Fixed Payment Code anda |
payment_coderequired |
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_amountrequired |
integer positive |
Nominal yang diharapkan akan dibayarkan oleh pengguna akhir |
is_single_userequired |
boolean |
Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak |
expiration_daterequired |
ISO 8601 Date |
Waktu ketika Fixed Payment Code akan kedaluarsa |
idrequired |
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 Fixed Payment Code (Callback)
Endpoint: Notifikasi Pembayaran Fixed Payment Code
POST https://yourcompany.com/fixed_payment_code_paid_callback_url
Ketika seseorang membayar ke Fixed Payment Code Anda, API callback kami akan mengenai URL Anda yang sudah Anda setel di dasbor.
Contoh ini hanya digunakan untuk menunjukkan parameter yang mengirim dari API Xendit ke URL callback Anda dan tidak dapat diuji di sini. Jika anda menginginkan untuk mencoba permintaan notifikasi ini, gunakan fitur di dashboard dan pilih Callbacks settings.
Data Callback
Parameter Header | Tipe | Deskripsi |
---|---|---|
x-callback-tokenrequired |
string |
Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut |
Contoh Permintaan Notifikasi Pembayaran Fixed Payment Code
curl --include \
--request POST \
--url https://yourcompany.com/fixed_payment_code_paid_callback_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 |
---|---|---|
idrequired |
string |
Pengidentifikasi unik dari sebuah transaksi |
external_idrequired |
string |
ID pilihan anda yang anda berikan saat melakukan permintaan |
prefixrequired |
string |
3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain |
payment_coderequired |
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_namerequired |
string |
Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET |
namerequired |
string |
Nama untuk Fixed Payment Code |
amountrequired |
integer positive |
Nominal yang telah dibayarkan |
statusrequired |
string |
Status pembayaran. Nilai yang mungkin muncul: SETTLING atau COMPLETED |
transaction_timestamprequired |
ISO 8601 Date |
Tanggal saat Fixed Payment Code dibayarkan |
payment_idrequired |
string |
ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran |
fixed_payment_coderequired |
string |
ID unik untuk pembayaran Fixed Payment Code |
fixed_payment_code_idrequired |
string |
ID unik untuk Fixed Payment Code |
owner_idrequired |
string |
ID pengguna anda |
Kesalahan Permintaan Notifikasi Pembayaran Fixed Payment Code
Perhatikan bahwa dalam kasus di mana kami tidak mendapatkan respons yang berhasil dari server Anda pada percobaan pertama, kami akan mencoba lagi 2 kali lebih lama dengan penundaan 30 detik antara setiap percobaan. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah.
Invoice
Pembuatan Invoice
Endpoint: Pembuatan Invoice
POST https://api.xendit.co/v2/invoices
Invoice memungkinkan pengguna untuk membayar melalui berbagai macam metode pembayaran. Setelah pembayaran dilakukan, sebuah notifikasi akan dikirimkan tanpa memperhatikan metode pembayaran yang digunakan.
Untuk mengetahui lebih lanjut tentang invoice, Anda dapat membuka tautan dokumentasi kami.
Parameter Request (Money-in write permission)
Contoh Permintaan Pembuatan Invoice
curl https://api.xendit.co/v2/invoices -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d external_id=demo_1475801962607 \
-d payer_email=sample_email@xendit.co \
-d description='Trip to Bali' \
-d amount=230000
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'external_id' => 'demo_1475801962607',
'payer_email' => 'alfina@xendit.co',
'description' => 'Trip to Bali',
'amount' => 50000
];
$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({
externalID: 'demo_1475801962607',
amount: 230000,
payerEmail: 'sample_email@xendit.co',
description: 'Trip to Bali',
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
Map<String, Object> params = new HashMap<>();
params.put("external_id", "demo_1475801962607");
params.put("amount", 50000);
params.put("payer_email", "customer@domain.com");
params.put("description", "Trip to Bali");
Invoice invoice = Invoice.create(params);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
data := invoice.CreateParams{
ExternalID: "demo_1475801962607",
Amount: 50000,
PayerEmail: "alfina@xendit.co",
Description: "Trip to Bali",
}
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
invoice = Invoice.create(
external_id="invoice-1593684000",
amount=20000,
payer_email="customer@domain.com",
description="Invoice Demo #123",
)
print(invoice)
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-fee-ruleoptional |
string |
ID Fee Rule yang ingin Anda aplikasikan ke pembayaran untuk Invoice ini Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API This header is only used if you have access to xenPlatform. See xenPlatform for more information |
Parameter Body | Tipe | Deskripsi |
---|---|---|
external_id required |
string |
ID unik yang berfungsi sebagai tanda pengenal sebuah invoice di dalam sistem Anda |
payer_email required |
string |
Email pengguna yang akan membayar |
description required |
string |
Deskripsi invoice |
amount required |
number |
Jumlah tagihan yang harus dibayar. Jumlah tagihan minimum untuk pembuatan invoice adalah 1. |
should_send_email optionaldefault:
|
boolean |
Memastikan pengguna untuk mendapat email mengenai status invoice saat dibuat, dibayar, atau kedaluwarsa |
callback_virtual_account_id optional |
string |
Memungkinkan metode pembayaran melalui Fixed Virtual Account, masukkan nilai id yang didapatkan dari respons saat pembuatan fixed virtual account. Lihat Pembuatan Fixed Virtual Account |
invoice_duration optional |
number |
durasi waktu yang dimiliki pengguna akhir untuk membayar tagihan sebelum kadaluwarsa (dalam detik) |
success_redirect_url optional |
string |
Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan Contoh : https://yourcompany.com/example_item/10/success_page |
failure_redirect_url optional |
string |
Tautan yang diarahkan apabila tagihan telah kedaluwarsa Contoh : https://yourcompany.com/example_item/10/failed_checkout |
payment_methods optional |
array of strings |
pilihan metode pembayaran yang tersedia di akun Anda. biarkan kolom ini kosong jika semua saluran pembayaran diharapkan tersedia dalam invoice ini. Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA", "ALFAMART", "INDOMARET", "CREDIT_CARD", "OVO"] |
mid_label optional |
string |
MID label yang dapat Anda gunakan saat Anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. |
currency optional |
string |
mata uang yang Anda gunakan untuk nominal penagihan invoice Anda example : "IDR" |
fixed_va optionaldefault:
|
boolean |
Isi parameter ini dengan true untuk menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk pelanggan Anda. |
reminder_time optional |
integer positive |
Waktu pengingat invoice sebelum kedaluwarsa. Nilai yang diizinkan adalah 1, 3, 7, 15, atau 30 hari sebelum kedaluwarsa |
Parameter Respon
Contoh Respon Pembuatan Invoice
{
"id": "579c8d61f23fa4ca35e52da4",
"user_id": "5781d19b2e2385880609791c",
"external_id": "invoice_123124123",
"status": "PENDING",
"merchant_name": "Xendit",
"merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1493610897264_473.png",
"amount": 50000,
"payer_email": "albert@xendit.co",
"description": "This is a description",
"invoice_url": "https://invoice.xendit.co/web/invoices/595b6248c763ac05592e3eb4",
"expiry_date": "2016-08-01T11:20:01.017Z",
"available_banks": [
{
"bank_code": "BCA",
"collection_type": "POOL",
"bank_account_number": 1000008,
"transfer_amount": 54000
}
],
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART",
"payment_code": "ALFA123456",
"transfer_amount": 54000
}
],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2017-06-12T14:00:00.306Z",
"mid_label": "test-mid",
"currency": "IDR",
"fixed_va":true
}
Parameter | Deskripsi | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | ID invoice yang didapatkan dari Xendit | ||||||||||||
user_id | ID bisnis Xendit Anda | ||||||||||||
external_id | ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda | ||||||||||||
status |
PENDING Invoice masih belum dibayar |
||||||||||||
merchant_name | Nama perusahaan atau situs Anda | ||||||||||||
merchant_profile_picture_url | Tautan ke gambar profil perusahaan Anda | ||||||||||||
amount | Jumlah tagihan invoice | ||||||||||||
payer_email | Email pembayar, didapatkan dari permintaan API Anda | ||||||||||||
description | Deskripsi invoice, didapatkan dari permintaan API Anda | ||||||||||||
invoice_url | Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda. | ||||||||||||
expiry_date | Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam. | ||||||||||||
available_banks | Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
|
||||||||||||
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 | ||||||||||||
created | Waktu ISO yang tercatat saat invoice dibuat | ||||||||||||
updated | Waktu ISO yang tercatat saat invoice diperbarui | ||||||||||||
mid_label | MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice | ||||||||||||
currency | Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice | ||||||||||||
fixed_va | Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama. |
||||||||||||
reminder_date optional |
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:
|
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. |
MINIMAL_TRANSFER400 |
Tidak dapat membuat invoice karena jumlah tagihan di bawah Rp11000. |
MAXIMUM_TRANSFER400 |
Tidak dapat membuat invoice karena jumlah tagihan di atas Rp1000000000. |
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. |
Mendapatkan invoice
Endpoint: Mendapatkan Invoice
GET https://api.xendit.co/v2/invoices/{invoice_id}
Parameter Request (Money-in read permission)
Contoh Permintaan Mendapatkan Invoice
curl https://api.xendit.co/v2/invoices/{invoice_id} -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
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)
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
}
],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2017-06-12T14:00:00.306Z",
"mid_label": "test-mid",
"currency": "IDR",
"paid_at": "2017-06-13T11:00:00.306Z",
"credit_card_charge_id": "579c8d61f23fa4ca35e52eas",
"payment_method": "BANK_TRANSFER",
"payment_channel": "BCA",
"payment_destination": "10002233222294375",
"success_redirect_url": "www.xendit.co",
"failure_redirect_url": "www.xendit.co",
"fixed_va":true
}
Parameter | Deskripsi | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | ID invoice yang didapatkan dari Xendit | ||||||||||||
user_id | ID bisnis Xendit Anda | ||||||||||||
external_id | ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda | ||||||||||||
status |
PENDING invoice belum dibayar PAID invoice sudah berhasil dibayar SETTLED dana yang dibayarkan sudah masuk ke saldo EXPIRED invoice sudah kedaluwarsa |
||||||||||||
merchant_name | Nama perusahaan atau situs Anda | ||||||||||||
merchant_profile_picture_url | Tautan ke gambar profil perusahaan Anda | ||||||||||||
amount | Jumlah tagihan invoice | ||||||||||||
payer_email | Email pembayar, didapatkan dari permintaan API Anda | ||||||||||||
description | Deskripsi invoice, didapatkan dari permintaan API Anda | ||||||||||||
invoice_url | Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda. | ||||||||||||
expiry_date | Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam. | ||||||||||||
available_banks | Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
|
||||||||||||
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", "ALFAMART", "OVO", "CREDIT_CARD"] |
||||||||||||
payment_destination | Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar. | ||||||||||||
fixed_va | Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama. |
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)
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. | ||||||||||||
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 |
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 (Callback)
Endpoint: Notifikasi Invoice
POST https://yourcompany.com/invoice_callback_url
Saat sebuah invoice dibayar, sistem kami akan mengirimkan notifikasi ke URL notifikasi yang sudah dikonfigurasi di dasbor. Untuk instruksi lebih lanjut mengenai notifikasi dapat dilihat dalam dokumentasi invoice.
Contoh di bawah ini hanya digunakan untuk memperlihatkan parameter notifikasi yang dikirimkan oleh API Xendit ke URL notifikasi Anda. Jika Anda ingin mengetes notifikasi ini, dapat menggunakan fitur pengetesan di dasbor dengan pergi ke Pengaturan > Developer > Callbacks.
Data Callback
Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Bank
curl --include \
--request POST \
--header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
--header "Content-Type: application/json" \
--data-binary "{
id: \"593f4ed1c3d3bb7f39733d83\",
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: \"2017-06-14T02:32:50.912Z\",
payer_email: \"test@xendit.co\",
description: \"Invoice callback test\",
adjusted_received_amount: 1995000,
fees_paid_amount: 5000,
created: \"2017-06-13T02:32:49.827Z\",
updated: \"2017-06-13T02:32:50.912Z\",
currency: \"IDR\",
payment_channel: \"MANDIRI\",
payment_destination: \"8458478548758748\",
}" \
'{{your_company_domain}}/{{callback_url}}'
Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Outlet Ritel
curl --include \
--request POST \
--header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
--header "Content-Type: application/json" \
--data-binary "{
id: \"593f4ed1c3d3bb7f39733d83\",
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: \"2017-06-14T02:32:50.912Z\",
payer_email: \"test@xendit.co\",
description: \"Invoice callback test\",
adjusted_received_amount: 1995000,
fees_paid_amount: 5000,
created: \"2017-06-13T02:32:49.827Z\",
updated: \"2017-06-13T02:32:50.912Z\",
currency: \"IDR\",
payment_channel: \"ALFAMART\",
payment_destination: \"TEST815\",
}" \
'{{your_company_domain}}/{{callback_url}}'
Parameter | Deskripsi |
---|---|
id | ID invoice yang didapatkan dari Xendit |
user_id | ID bisnis Xendit Anda |
external_id | ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda |
merchant_name | Nama perusahaan atau situs Anda |
amount | Jumlah tagihan invoice |
fees_paid_amount | Biaya Xendit diambil langsung dari pembayaran invoice - terima kasih karena sudah mendukung dunia pembayaran yang lebih baik :) |
status | PAID invoice sudah dibayar EXPIRED invoice sudah kedaluwarsa. Notifikasi invoice kedaluwarsa secara umum tidak diaktifkan. Jika Anda ingin mengaktifkannya untuk bisnis Anda, Anda dapat melakukannya di Xendit Dashboard |
payer_email | Email pembayar, didapatkan dari permintaan API Anda |
description | Deskripsi invoice, didapatkan dari permintaan API Anda |
adjusted_received_amount | Jumlah netto uang yang masuk ke saldo Anda setelah dipotong biaya. Terima kasih karena sudah menggunakan jasa kami :) |
payment_method | Metode pembayaran yang dipakai POOL Tipe nonfixed virtual accountCREDIT_CARD Tipe kartu kredit |
bank_code | Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah POOL |
retail_outlet_name | Kode outlet ritel yang digunakan untuk menerima pembayaaran jika metode pembayaran yang dipakai adalah RETAIL_OUTLET |
paid_amount | Jumlah tagihan yang dibayar |
updated | Waktu ISO yang tercatat saat invoice diperbarui |
created | Waktu ISO yang tercatat saat invoice dibuat |
mid_label | MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice |
currency | Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice |
success_redirect_url | Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API. |
failure_redirect_url | Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API |
paid_at | Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar. |
credit_card_charge_id | Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit. |
payment_method | Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar. Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET", "EWALLET"] |
payment_channel | Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar. Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA", "ALFAMART", "OVO", "CREDIT_CARD"] |
payment_destination | Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar. |
Callback Error
Jika kami tidak mendapat respon sukses dari server Anda, kami akan mencoba lagi untuk mengirimkan notifikasi sebanyak 2 kali dengan jeda waktu 30 detik untuk setiap percobaan. Setelah 3 kali gagal, kami akan mendapatkan peringatan internal mengenai pengiriman notifikasi yang gagal. Tim kami akan segera mengontak Anda untuk menyelesaikan isu ini.
Pembayaran Recurring
Membuat Pembayaran Recurring
Endpoint: Membuat Pembayaran Recurring
POST https://api.xendit.co/recurring_payments
Pembayaran Recurring membantu Anda untuk menagih pelanggan Anda menggunakan sistem kami.
Parameter Request
Contoh: Request Pembuatan Recurring
curl https://api.xendit.co/recurring_payments -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d external_id=recurring_31451441 \
-d payer_email=sample_email@xendit.co \
-d interval=MONTH \
-d interval_count=1 \
-d description='Monthly room cleaning service' \
-d amount=125000
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'external_id' => 'recurring_31451441',
'payer_email' => 'sample_email@xendit.co',
'description' => 'Monthly room cleaning service',
'amount' => 125000,
'interval' => 'MONTH',
'interval_count' => 1
];
$createRecurring = \Xendit\Recurring::create($params);
var_dump($createRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.createPayment({
externalID: 'recurring_31451441',
amount: 125000,
payerEmail: 'sample_email@xendit.co',
interval: RecurringPayment.Interval.Month,
intervalCount: 1,
description: 'Monthly room cleaning service',
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
Map<String , Object> params = new HashMap<>();
params.put("external_id", "recurring_31451441");
params.put("payer_email", "sample_email@xendit.co");
params.put("interval", "MONTH");
params.put("interval_count", 1);
params.put("description", "Monthly room cleaning service");
params.put("amount", 125000);
RecurringPayment recurringPayment = RecurringPayment.create(params);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
createData := recurringpayment.CreateParams{
ExternalID: "recurring_31451441",
Amount: 125000,
PayerEmail: "sample_email@xendit.co",
Description: "Monthly room cleaning service",
Interval: xendit.RecurringPaymentIntervalDay,
IntervalCount: 1,
}
resp, err := recurringpayment.Create(&createData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("created recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.create(
external_id="recurring_12345",
payer_email="test@x.co",
description="Test Curring Payment",
amount=100000,
interval="MONTH",
interval_count=1,
)
print(recurring_payment)
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 |
---|---|---|
external_id required |
string |
ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda |
payer_email required |
string |
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda |
description required |
string |
Deskripsi pembayaran atau tagihan Recurring Anda |
amount required |
number |
Nominal harga per Invoice per interval. Nominal paking kecil untuk membuat Recurring adalah IDR 1. Nominal maksimum adalah IDR 1,000,000,000 |
interval required |
string |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY , WEEK , MONTH . |
interval_count required |
number |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
total_recurrence optional |
number |
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY , Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API. |
invoice_duration optional |
number |
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit. |
should_send_email optionaldefault:
|
boolean |
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa |
missed_payment_action optionaldefault:
|
string |
Gunakan IGNORE , jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP , jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu |
credit_card_token optional |
string |
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token. |
start_date optional |
string (ISO 8601) |
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda. |
success_redirect_url optional |
string |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar Contoh : https://yourcompany.com/example_item/10/success_page |
failure_redirect_url optional |
string |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa Contoh : https://yourcompany.com/example_item/10/failed_checkout |
recharge optionaldefault:
|
boolean |
Isi parameter ini dengan true ketika Anda ingin mengaktifkan auto-charge dan mendapatkan informasi kartu kredit melalui XenInvoice. |
charge_immediately optional |
boolean |
Gunakan true jika Anda ingin melakukan penagihan pertama sebelum penagihan yang akan dilakukan pada start_date ,Invoice selanjutnya yang akan ditagihkan ke pelanggan akan dibuat pada start_date . Dan waktu pembuatan untuk invoice selanjutnya lagi akan jatuh pada interval *interval_count + start_date |
payment_method_id optional |
string |
Isi parameter ini dengan id dari payment method yang sudah diaktifkan untuk sebuah pelanggan |
currency optional |
string |
Mata uang dari nominal yang Anda buat contoh : "IDR" |
Parameter Respon
Contoh: Response Pembuatan Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "ACTIVE",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": false,
"missed_payment_action": "IGNORE",
"last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
"created": "2017-06-12T14:00:00.306Z",
"updated": "2017-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z",
"recharge": true
}
Parameter | Deskripsi |
---|---|
id | ID dari Recurring Anda yang diberikan dari Xendit |
user_id | Xendit Business ID Anda |
external_id | ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda |
status | ACTIVE Tagihan Recurring Anda ber-status aktifSTOPPED Tagihan Recurring Anda telah dihentikan dari sistem XenditPAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API |
payer_email required |
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda |
last_created_invoice_url | URL yang disediakan oleh Xendit untuk penagihan recurring |
description required |
Deskripsi pembayaran atau tagihan Recurring Anda |
amount required |
Nominal harga per Invoice per interval. Nominal paling kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000 |
interval required |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY , WEEK , MONTH . |
interval_count required |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
total_recurrence optional |
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY , Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API. |
invoice_duration optional |
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit. |
should_send_email optionaldefault:
|
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa |
missed_payment_action optionaldefault:
|
Gunakan IGNORE , jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP , jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu |
credit_card_token optional |
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token. |
start_date optional |
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda. |
success_redirect_url optional |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar Contoh : https://yourcompany.com/example_item/10/success_page |
failure_redirect_url optional |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa Contoh : https://yourcompany.com/example_item/10/failed_checkout |
created | Sebuah ISO timestamp saat tagihan Recurring dibuat |
updated | Sebuah ISO timestamp saat tagihan Recurring terakhir kali diubah |
recharge | Disaat nilai dari parameter ini adalah true , berarti Anda ingin mengaktifkan auto-charge dan mengambil informasi kartu kredit melalui XenInvoice. |
charge_immediately optional |
boolean Disaat nilai dari parameter ini adalah true , berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date |
payment_method_id | id dari payment method yang akan melakukan pembayaran berulang |
currency optional |
string Mata uang dari nominal yang Anda buat |
Kode Error
Kode Error | Description |
---|---|
API_VALIDATION_ERROR400 |
Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit. |
INVALID_JSON_FORMAT400 |
bukan format JSON yang valid. |
INVALID_CREDIT_CARD_TOKEN_ERROR400 |
Token kartu kredit tidak valid. |
INVALID_PAYMENT_METHOD_ID_ERROR400 |
Payment method id tidak valid. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
UNSUPPORTED_CURRENCY400 |
Mata uang tersebut belum dikonfigurasi pada pengaturan Anda, silakan hubungi kami. |
Mendapatkan Sebuah Data Pembayaran Recurring
Endpoint: Mendapatkan Sebuah Data Pembayaran Recurring
GET https://api.xendit.co/recurring_payments/{id}
Parameter Request
Contoh Request untuk Mendapatkan Sebuah Data Pembayaran Recurring
curl https://api.xendit.co/recurring_payments/{id} \
-X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '579c8d61f23fa4ca35e52da3';
$getRecurring = \Xendit\Recurring::retrieve($id);
var_dump($getRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.getPayment({ id: '579c8d61f23fa4ca35e52da3' });
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
RecurringPayment recurringPayment = RecurringPayment.get("EXAMPLE_ID");
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
getData := recurringpayment.GetParams{
ID: "579c8d61f23fa4ca35e52da3",
}
resp, err := recurringpayment.Get(&getData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("retrieved recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.get(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
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 | Deskripsi |
---|---|
id | ID dari Recurring Anda yang diberikan dari Xendit |
Parameter Respon
Contoh Response dari Mendapatkan Sebuah Data Pembayaran Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "ACTIVE",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": true,
"missed_payment_action": "IGNORE",
"last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
"created": "2017-06-12T14:00:00.306Z",
"updated": "2018-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z",
"recharge":true
}
Parameter | Deskripsi |
---|---|
id | ID dari Recurring Anda yang diberikan dari Xendit |
user_id | Xendit Business ID Anda |
external_id | ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda |
status | ACTIVE Tagihan Recurring Anda ber-status aktifSTOPPED Tagihan Recurring Anda telah dihentikan dari sistem XenditPAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API |
payer_email required |
Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda |
description required |
Deskripsi pembayaran atau tagihan Recurring Anda |
amount required |
Nominal harga per Invoice per interval. Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000 |
interval required |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY , WEEK , MONTH . |
interval_count required |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
total_recurrence optional |
Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY , Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API. |
invoice_duration optional |
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit. |
next_scheduled_at |
tanggal penerbitan invoice berikutnya dalam standar ISO dengan default 24 jam |
should_send_email optionaldefault:
|
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa |
missed_payment_action optionaldefault:
|
Gunakan IGNORE , jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP , jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu |
credit_card_token optional |
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token. |
start_date optional |
Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda. |
success_redirect_url optional |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda telah terbayar Contoh : https://yourcompany.com/example_item/10/success_page |
failure_redirect_url optional |
Pelanggan Anda akan di-arahkan ke URL yang Anda input di parameter ini saat pembayaran invoice pelanggan Anda tidak terbayar hingga kedaluwarsa Contoh : https://yourcompany.com/example_item/10/failed_checkout |
created | Sebuah ISO timestamp saat tagihan Recurring dibuat |
updated | Sebuah ISO timestamp saat tagihan Recurring terakhir kali diubah |
last_created_invoice_url | URL yang disediakan oleh Xendit untuk penagihan recurring |
recharge | Disaat nilai dari parameter ini adalah true , berarti Anda ingin mengaktifkan auto-charge dan mengambil informasi kartu kredit melalui XenInvoice. |
charge_immediately optional |
boolean Disaat nilai dari parameter ini adalah true , berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date |
Kode Error
Kode Error | Description |
---|---|
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
NOT_FOUND_ERROR404 |
Tidak dapat menemukan Recurring dengan ID. |
Mengubah Pembayaran Recurring
Jika anda ingin mengubah pembayaran Recurring Anda, Anda dapat mengakses API berikut untuk mengubah amount
, interval
, interval_count
, should_send_email
, missed_payment_action
atau credit_card_token
Endpoint: Mengubah Pembayaran Recurring
PATCH https://api.xendit.co/recurring_payments/{id}
Parameter Request
Contoh: Request Mengubah Pembayaran Recurring
curl https://api.xendit.co/recurring_payments/579c8d61f23fa4ca35e52da3 \
-X PATCH \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d amount=80000 \
-d interval=WEEK \
-d interval_count=2 \
-d should_send_email=true \
-d missed_payment_action=STOP \
-d credit_card_token=522f0ba2ab70de5d2b409eee \
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '579c8d61f23fa4ca35e52da3';
$params = ['amount' => 80000];
$editRecurring = \Xendit\Recurring::update($id, $params);
var_dump($editRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.editPayment({
id: '579c8d61f23fa4ca35e52da3',
amount: 80000,
interval: RecurringPayment.Interval.Week,
intervalCount: 2,
shouldSendEmail: true,
missedPaymentAction: RecurringPayment.Action.Stop,
creditCardToken: '522f0ba2ab70de5d2b409eee',
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
Map<String, Object> params = new HashMap<>();
params.put("amount", 80000);
params.put("interval", "WEEK");
RecurringPayment recurringPayment = RecurringPayment.edit("EXAMPLE_ID", params);
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
editData := recurringpayment.EditParams{
ID: "579c8d61f23fa4ca35e52da3",
Amount: 80000,
Interval: xendit.RecurringPaymentIntervalWeek,
IntervalCount: 2,
}
resp, err := recurringpayment.Edit(&editData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("edited recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.edit(
id="5f05825ff9f52d3ed204c687",
interval_count=2,
)
print(recurring_payment)
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 |
---|---|---|
idrequired |
string |
ID dari Recurring Anda yang diberikan dari Xendit |
Parameter Body | Tipe | Deskripsi |
---|---|---|
amountoptional |
number |
Nominal harga per Invoice per interval. Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000 |
credit_card_token optional |
string |
Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token. |
interval optional |
string |
Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY , WEEK , MONTH . |
interval_count optional |
number |
Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali. |
should_send_email optional |
boolean |
Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa |
invoice_duration optional |
number |
Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit. |
reschedule_at optional |
string (ISO 8601) |
Jadwal saat invoice berikutnya akan diterbitkan. Jika dibiarkan kosong, invoice akan diterbitkan berdasarkan pembayaran recurring sebelumnya. |
missed_payment_action optional |
string |
Gunakan IGNORE , jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP , jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu |
payment_method_id optional |
string |
Isi parameter ini dengan id dari payment method yang sudah diaktifkan untuk sebuah pelanggan |
customer_id optional |
string |
isi parameter ini dengan id pelanggan yang diinginkan |
Paramter Respon
Contoh: Response Mengubah Pembayaran Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "ACTIVE",
"amount": 80000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "WEEK",
"interval_count": 2,
"recurrence_progress": 1,
"should_send_email": true,
"missed_payment_action": "STOP",
"recharge": true,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2017-06-12T14:00:00.306Z",
"start_date": "2017-06-19T14:00:00.306Z"
}
Semua response akan sama dengan Get Recurring
Kode Error
Kode Error | Description |
---|---|
NOT_FOUND_ERROR404 |
Tidak dapat menemukan Recurring dengan ID. |
API_VALIDATION_ERROR400 |
Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit. |
INVALID_JSON_FORMAT400 |
bukan format JSON yang valid. |
INVALID_CREDIT_CARD_TOKEN_ERROR400 |
Token kartu kredit tidak valid. |
INVALID_PAYMENT_METHOD_ID_ERROR400 |
Payment method id tidak valid. |
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
Menghentikan Pembayaran Recurring
Anda dapat menghentikan pembayaran Recurring Anda dengan API berikut.
Endpoint: Menghentikan Pembayaran Recurring
POST https://api.xendit.co/recurring_payments/{id}/stop!
Parameter Request
Contoh: Request Menghentikan Pembayaran Recurring
curl https://api.xendit.co/recurring_payments/{id}/stop! -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '579c8d61f23fa4ca35e52da3';
$stopRecurring = \Xendit\Recurring::stop($id);
var_dump($stopRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.stopPayment({ id: '579c8d61f23fa4ca35e52da3' });
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
RecurringPayment recurringPayment = RecurringPayment.stop("EXAMPLE_ID");
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
stopData := recurringpayment.StopParams{
ID: "579c8d61f23fa4ca35e52da3",
}
resp, err := recurringpayment.Stop(&stopData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("stopped recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.stop(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
Parameter Path | Tipe | Deskripsi |
---|---|---|
id required |
string |
ID dari Recurring Anda yang diberikan dari Xendit |
Response Menghentikan Pembayaran Recurring
Contoh: Response Menghentikan Pembayaran Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "STOPPED",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": true,
"missed_payment_action": "IGNORE",
"recharge": true,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2018-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z"
}
Semua response akan sama dengan Get Recurring
Kode Error
Kode Error | Deskripsi |
---|---|
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
NOT_FOUND_ERROR404 |
Tidak dapat menemukan Recurring dengan ID |
Menghentikan Sementara Pembayaran Recurring
Endpoint: Menghentikan Sementara Pembayaran Recurring
POST https://api.xendit.co/recurring_payments/{id}/pause!
Parameter Request
Contoh Request Menghentikan Sementara Pembayaran Recurring
curl https://api.xendit.co/recurring_payments/{id}/pause!
-X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '579c8d61f23fa4ca35e52da3';
$pauseRecurring = \Xendit\Recurring::pause($id);
var_dump($pauseRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.pausePayment({ id: '579c8d61f23fa4ca35e52da3' });
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
RecurringPayment recurringPayment = RecurringPayment.pause("EXAMPLE_ID");
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
pauseData := recurringpayment.PauseParams{
ID: "579c8d61f23fa4ca35e52da3",
}
resp, err := recurringpayment.Pause(&pauseData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("paused recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.pause(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
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 dari Recurring Anda yang diberikan dari Xendit |
Parameter Respon
Contoh: Response Menghentikan Sementara Pembayaran Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "PAUSED",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": true,
"missed_payment_action": "IGNORE",
"recharge": true,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2018-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z"
}
Semua response akan sama dengan Get Recurring
Kode Error
Kode Error | Deskripsi |
---|---|
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
NOT_FOUND_ERROR404 |
Tidak dapat menemukan Recurring dengan ID |
Melanjutkan Pembayaran Recurring
Endpoint: Melanjutkan Pembayaran Recurring
POST https://api.xendit.co/recurring_payments/{id}/resume!
Parameter Request
Anda dapat melanjutkan pembayaran Recurring yang dihentikan sementara dengan API berikut.
Contoh: Request Melanjutkan Pembayaran Recurring
curl https://api.xendit.co/recurring_payments/{id}/resume!
-X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$id = '579c8d61f23fa4ca35e52da3';
$resumeRecurring = \Xendit\Recurring::resume($id);
var_dump($resumeRecurring);
?>
const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
const { RecurringPayment } = x;
const rpSpecificOptions = {};
const rp = new RecurringPayment(rpSpecificOptions);
const resp = await rp.resumePayment({ id: '579c8d61f23fa4ca35e52da3' });
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
RecurringPayment recurringPayment = RecurringPayment.resume("EXAMPLE_ID");
} catch (XenditException e) {
e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
resumeData := recurringpayment.ResumeParams{
ID: "579c8d61f23fa4ca35e52da3",
}
resp, err := recurringpayment.Resume(&resumeData)
if err != nil {
log.Fatal(err)
}
fmt.Printf("resumed recurring payment: %+v\n", resp)
from xendit import Xendit
api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
xendit_instance = Xendit(api_key=api_key)
RecurringPayment = xendit_instance.RecurringPayment
recurring_payment = RecurringPayment.resume(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
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 dari Recurring Anda yang diberikan dari Xendit |
Parameter Respon
Contoh: Response Melanjutkan Pembayaran Recurring
{
"id": "579c8d61f23fa4ca35e52da3",
"user_id": "5781d19b2e2385880609791c",
"external_id": "recurring_31451441",
"status": "ACTIVE",
"amount": 125000,
"payer_email": "sample_email@xendit.co",
"description": "Monthly room cleaning service",
"interval": "MONTH",
"interval_count": 1,
"recurrence_progress": 1,
"should_send_email": true,
"missed_payment_action": "IGNORE",
"recharge": true,
"created": "2017-06-12T14:00:00.306Z",
"updated": "2018-06-12T14:00:00.306Z",
"start_date": "2017-07-12T14:00:00.306Z"
}
Semua response akan sama dengan Get Recurring
Kode Error
Kode Error | Deskripsi |
---|---|
REQUEST_FORBIDDEN403 |
API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini |
NOT_FOUND_ERROR404 |
Tidak dapat menemukan Recurring dengan ID |
Recurring Callback
Xendit akan memberikan notifikasi mengenai pembayaran Recurring Anda melalui Invoice Callback. Response tambahan dari Invoice Callback jika Invoice Anda dihasilkan oleh pembayaran Recurring:
Parameter | Tipe | Deskripsi |
---|---|---|
recurring_payment_id | string |
ID dari Recurring Anda yang diberikan dari Xendit |
Mendapatkan Daftar Pembayaran Recurring
Untuk mendapatkan daftar pembayaran Recurring, Anda dapat melakukannya melalui List all invoices dan menggunakan parameter tambahan. Berikut parameter tambahan yang harus dimasukkan:
Parameter 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 |
---|---|---|
recurring_payment_id | string |
ID dari Recurring Anda yang diberikan dari Xendit |
Payouts
Memudahkan pengiriman dana ke pelanggan Anda, menggunakan UI yang kami sediakan ke berbagai channel pembayaran.
Pembuatan Payout
Endpoint: Pembuatan Payouts
POST https://api.xendit.co/payouts
Parameter Request
Contoh Permintaan Pembuatan Payout
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 di dalam sistem Anda.Maksimal:
|
amount required |
integer positive |
Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda. |
email required |
string |
Alamat email yang ingin Anda kirimkan notifikasi. |
Parameter Respon
Contoh Respon Pembuatan Payout
{
"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 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. Jumlah tagihan maksimal tergantung pada saldo Anda. |
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED Payout telah dibatalkan. Status ini muncul karena payout 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 . |
expiration_timestampoptional |
ISO8601 |
Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari. Timezone:
|
createdoptional |
ISO8601 |
Tanggal dan waktu yang tercatat saat payout 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 |
---|---|
INSUFFICIENT_BALANCE400 |
Saldo di akun Anda tidak cukup untuk membuat payout dengan jumlah yang diinginkan. |
DUPLICATE_PAYOUT_ERROR400 |
Payout dengan external_id yang sama telah dibuat sebelumnya. |
UNAUTHORIZED_MERCHANT_ERROR403 |
Merchant ini tidak diizinkan untuk melakukan permintaan tersebut. |
Mendapatkan Payout
Endpoint: Mendapatkan Payout
GET https://api.xendit.co/payouts/:id
Parameter Request
Contoh Permintaan Mendapatkan Payout
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 yang ingin didapatkan |
Parameter Respon
Contoh Respon Mendapatkan Payout
{
"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 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. Jumlah tagihan maksimal tergantung pada saldo Anda. |
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED Payout telah dibatalkan. Status ini muncul karena payout 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 . |
expiration_timestampoptional |
ISO8601 |
Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari. Timezone:
|
createdoptional |
|
Tanggal dan waktu yang tercatat saat payout 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 tidak ditemukan di dalam sistem. |
UNAUTHORIZED_MERCHANT_ERROR403 |
Merchant ini tidak diizinkan untuk melakukan permintaan tersebut. |
Penutupan Payout
Endpoint: Penutupan Payout
POST https://api.xendit.co/payouts/:id/void
Anda bisa menutup sebuah payout secara langsung menggunakan endpoint ini.
Parameter Request
Contoh Permintaan Penutupan Payout
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 to retrieve |
Parameter Respon
Example Void Payout 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. Jumlah tagihan maksimal tergantung pada saldo Anda. |
merchant_nameoptional |
string |
Nama perusahaan atau situs Anda. |
statusrequired |
string |
PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan andaVOIDED Payout telah dibatalkan. Status ini muncul karena payout 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 . |
expiration_timestampoptional |
ISO8601 |
Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari.Timezone:
|
createdoptional |
ISO8601 |
Tanggal dan waktu yang tercatat saat payout 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 |
---|---|
PAYOUT_NOT_FOUND_ERROR404 |
Payout tidak ditemukan di dalam sistem. |
UNAUTHORIZED_MERCHANT_ERROR403 |
Merchant ini tidak diizinkan untuk melakukan permintaan tersebut. |
Disbursement
Dengan Xendit, anda dapat untuk mengirim dana ke bank manapun diseluruh Indonesia.
Pembuatan Disbursement
Endpoint: Pembuatan Disbursement
POST https://api.xendit.co/disbursements
Permintaan Pembuatan Disbursement (Money-out write permission)
Contoh Permintaan Pembuatan Disbursement
curl https://api.xendit.co/disbursements -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-H "X-IDEMPOTENCY-KEY: unique-id-12345" \
-d external_id=demo_1475459775872 \
-d bank_code=BCA \
-d account_holder_name='Bob Jones' \
-d account_number='1231241231' \
-d description='Reimbursement untuk sepatu' \
-d amount=17000
<?php
use Xendit\Xendit;
require 'vendor/autoload.php';
Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
$params = [
'external_id' => '12345',
'amount' => 1000,
'bank_code' => 'BCA',
'account_holder_name' => 'RAIDY WIJAYA',
'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: 'demo_1475459775872',
amount: 17000,
bankCode: 'BCA',
accountHolderName: 'Bob Jones',
accountNumber: '123124231',
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", "demo_1475459775872");
params.put("bank_code", "BCA");
params.put("account_holder_name", "Bob Jones");
params.put("account_number", "123124231");
params.put("description", "Reimbursement for shoes");
params.put("amount", "17000");
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: "RAIDY WIJAYA",
AccountNumber: "1234567890",
Description: "Disbursement from Go",
Amount: 1000,
}
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="demo_1475459775872",
bank_code="BCA",
account_holder_name="Bob Jones",
account_number="1231242311",
description="Reimbursement for shoes",
amount=17000,
)
print(disbursement)
Header Parameter | Deskripsi |
---|---|
X-IDEMPOTENCY-KEYoptional |
string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.
|
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 | Deskripsi |
---|---|
external_idrequired |
string ID disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement
|
bank_coderequired |
string Kode bank tujuanKode bank harus menurut daftar kode yang tertera disini here |
account_holder_namerequired |
string Nama pemegang rekening sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support.
|
account_numberrequired |
string Nomor rekening bank tujuan. Jika menggunakan e-wallet, nomor telfon yang terdaftar dengan akun e-wallet.
|
descriptionrequired |
string Deskripsi untuk dikirim beserta pengiriman dana
|
amountrequired |
number Jumlah untuk di disburse
|
Respon Pembuatan Disbursement
Contoh Respon Pembuatan Disbursement
{
"user_id": "5785e6334d7b410667d355c4",
"external_id": "12345",
"amount": 1000,
"bank_code": "BCA",
"account_holder_name": "RAIDY WIJAYA",
"disbursement_description": "Refunds Sepatu",
"status": "PENDING",
"id": "57f1ce05bb1a631a65eee662"
}
Parameter | Deskripsi |
---|---|
user_idrequired |
string Business ID Xendit Anda |
external_idrequired |
string Custom ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order. |
amountrequired |
number Jumlah disbursement |
bank_coderequired |
string Kode bank atau e-wallet tujuan. Lihat kode bank |
account_holder_namerequired |
string Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support. |
disbursement_descriptionrequired |
Ini adalah deskripsi yang anda berikan untuk kami:) |
statusrequired |
string PENDING Proses pengiriman sudah dimulai tetapi belum diselesaikan oleh bank. |
idrequired |
string Unique Disbursement ID |
Kesalahan Dalam Pembuatan Disbursement
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 > Mengirim Uang > Pengiriman. Tambahkan deskripsi default 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 supported. |
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.. |
MAXIMUM400 |
Jumlah transfer yang diminta lebih tinggi dari maksimum yang ditentukan untuk bank tujuan yang dipilih. Ubah jumlah transfer sebelum mencoba ulang. |
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. Harap menggunakan API Get disbursement dengan menggunakan external_id untuk memeriksa apakah disbursement sudah dibuat. Jika Anda menerima DIRECT_DISBURSEMENT_NOT_FOUND_ERROR, artinya disbursement belum terbuat; Mohon untuk mencoba kembali dalam 1-2 jam. |
Mendapatkan Disbursement dengan ID
Endpoint: Mendapatkan Disbursement dengan ID
GET https://api.xendit.co/disbursements/{disbursement_id}
Endpoint ini digunakan untuk query pengecekan status transaksi disbursement.
Permintaan Mendapatkan Disbursement dengan ID (Money-out read permission)
Contoh Permintaan Mendapatkan Disbursement dengan ID
curl https://api.xendit.co/disbursements/57c9010f5ef9e7077bcb96b6 -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
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)
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 | Deskripsi |
---|---|
disbursement_idrequired |
string ID disbursement yang akan diambilDisbursement_id harus cocok dengan Disbursement ID yang disediakan dalam response berhasilan kami pada saat disbursement |
Get Disbursement Response
Respon Permintaan Disbursement dengan ID
{
"user_id": "5785e6334d7b410667d355c4",
"external_id": "disbursement_12345",
"amount": 500000,
"bank_code": "BCA",
"account_holder_name": "Rizky",
"disbursement_description": "Custom description",
"status": "PENDING",
"id": "57c9010f5ef9e7077bcb96b6"
}
Parameter | Deskripsi |
---|---|
user_id | Your Xendit Business ID |
external_id | ID custom yang ditetapkan saat pembuatan disbursement. Customer kami sering menggunakan nomor telfon, alamat email, atau transaction/order ID |
amount | Disburse amount |
bank_code | Kode bank tujuan. Lihat kode bank |
account_holder_name | Nama pemilik rekening bank sesuai bank records. Digunakan untuk verifikasi dan skenario error / customer support |
disbursement_description | Ini adalah deskripsi yang Anda berikan kepada kami :) |
status |
PENDING Transfer dimulai.COMPLETED Bank telah mengkonfirmasi pengiriman dana.FAILED Bank menolak pencairan. Kami tidak akan mencoba lagi. |
id | Unique disbursement ID |
Kesalahan Mendapatkan Disbursement dengan ID
Kode Kesalahan | Deskripsi |
---|---|
INVALID_JSON_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. |
Mendapatkan Disbursement dengan External ID
Endpoint: Mendapatkan Disbursement dengan External ID
GET https://api.xendit.co/disbursements?external_id={external_id}
Endpoint ini digunakan untuk query status disbursement dengan external_id.
Permintaan Mendapatkan Disbursement dengan External ID (Money-out read permission)
Contoh Permintaan Mendapatkan disbursement dengan External ID
curl https://api.xendit.co/disbursements?external_id=72655 -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
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)
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. |
Query | Description |
---|---|
external_idrequired |
string Custom ID disbursement yang ditetapkan oleh customer saat pembuatan disbursement The external_id harus sama dengan external_id yang digunakan saat pembuatan disbursement |
Respon Permintaan Mendapatkan Disbursement dengan External ID
Respon Permintaan Mendapatkan Disbursement dengan External ID
[
{
"user_id": "5785e6334d7b410667d355c4",
"external_id": "disbursement_12345",
"amount": 500000,
"bank_code": "BCA",
"account_holder_name": "Rizky",
"disbursement_description": "Contoh deskripsi",
"status": "PENDING",
"id": "57c9010f5ef9e7077bcb96b6"
},
{
"user_id": "5785e6334d7b410667d355c4",
"external_id": "disbursement_45678",
"amount": 450000,
"bank_code": "BNI",
"account_holder_name": "Anita",
"disbursement_description": "deskripsi",
"status": "COMPLETED",
"id": "5a963089fd5fe5b6508f0b7b"
}
]
Parameter | Deskripsi |
---|---|
user_id | Xendit Business ID Anda |
external_id | Custom ID ditetapkan saat pembuatan disbursement. Customer kami sering menggunakan nomor telfon, alamat email, atau transaction/order ID |
amount | Disburse amount |
bank_code | Kode bank tujuan. Lihat kode bank |
account_holder_name | Nama pemilik rekening bank sesuai bank records. Digunakan untuk verifikasi dan skenario error / customer support |
disbursement_description | Ini adalah deskripsi yang Anda berikan kepada kami :) |
status |
PENDING Transfer sudah dimulai.COMPLETED Bank telah mengkonfirmasi pengiriman dana.FAILED Bank menolak disbursement. Kami tidak akan mencoba kembali. |
id | Unique disbursement ID |
Kesalahan Mendapatkan Disbursement dengan External ID
Kode Kesalahan | Deskripsi |
---|---|
REQUEST_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_callback_url
Ketika transaksi pencairan berhasil, API callback kami akan hit URL Anda yang sudah Anda atur di dashboard. Untuk informasi lebih lanjut tentang callback silakan baca dokumen ini.
Contoh ini hanya digunakan untuk menampilkan parameter body yang dikirim dari API Xendit ke URL callback Anda. Jika Anda ingin menguji permintaan panggilan balik ini, gunakan fitur test di dasbor dan pilih Settings -> Configuration -> Disbursement.
Permintaan Notifikasi Disbursement
Contoh Permintaan Notifikasi Disbursement
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
--data-binary "{
\"id\": \"57e214ba82b034c325e84d6e\",
\"user_id\": \"57c5aa7a36e3b6a709b6e148\",
\"external_id\": \"disbursement_123124123\",
\"amount\": 150000,
\"bank_code\": \"BCA\",
\"account_holder_name\": \"XENDIT\",
\"disbursement_description\": \"Xendit disbursement\",
\"failure_code\": \"INVALID_DESTINATION\",
\"is_instant\": false,
\"status\": \"FAILED\",
\"updated\": \"2016-10-10T08:15:03.404Z\",
\"created\": \"2016-10-10T08:15:03.404Z\"
}" \
'https://api.xendit.co/disbursement_callback_url'
Parameter | Deskripsi |
---|---|
is_instant | Menunjukkan apakah pencairan disalurkan secara instan |
user_id | Your Xendit Business ID |
external_id | Custom ID yang anda pilih untuk mengidentifikasi transaksi. Customer kami biasanya menggunakan nomor telfon, alamat email, atau ID transaksi/order. |
amount | Disburse amount |
bank_code | Kode bank tujuan. Lihat kode bank |
account_holder_name | Nama pemegang rekening bank sesuai dengan catatan bank atau e-wallet. Digunakan untuk verifikasi dan skenario error / customer support. |
disbursement_description | Ini adalah deskripsi yang Anda berikan kepada saya :) |
status |
COMPLETED Bank telah mengkonfirmasi pengiriman dana.FAILED Disbursement gagal karena failure code |
failure_code (optional) |
INSUFFICIENT_BALANCE Saldo di akun Anda tidak cukup untuk melakukan pencairan dalam jumlah yang 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 jam INVALID_DESTINATION Bank telah melaporkan bahwa rekening tujuan tidak terdaftar atau diblokir. Jika tidak yakin tentang ini, silakan coba lagi atau hubungi bank tujuan 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 jam Untuk informasi lebih detail mengenai berbagai error code diatas, silakan lihat Common Errors in Disbursements. |
id | Unique disbursement ID |
Kesalahan Notifikasi Disbursement
Dalam kasus di mana kami tidak mendapatkan response berhasil dari server Anda, kami akan melakukan retry sebanyak 2 kali, dengan waktu 30 detik antar setiap retry. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah tersebut.
Mendapatkan Ketersediaan Bank Disbursement
Endpoint: Mendapatkan Ketersediaan Bank Disbursement
GET https://api.xendit.co/available_disbursements_banks
Contoh Permintaan Mendapatkan Ketersediaan Bank Disbursement
curl https://api.xendit.co/available_disbursements_banks -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
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)
API endpoint ini akan memberikan Anda daftar bank yang kami support untuk disbursement. Kami mendukung transfer ke 140+ bank di Indonesia, termasuk beberapa BPD dan BPR, dan akun virtual bank-bank besar (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, dan Bank NOBU). Kami juga mendukung pencairan untuk e-wallet utama (GoPay, OVO, dan Mandiri e-cash). Jika Anda ingin kami mendukung pembayaran ke tujuan tertentu, silakan hubungi kami di support@xendit.co.
Mendapatkan Ketersediaan Bank Disbursement (Money-out read permission)
Mendapatkan Ketersediaan Bank Disbursement
[
{
"name": "Bank Mandiri",
"code": "MANDIRI",
"can_disburse": true,
"can_name_validate": true
},
{
"name": "Bank Rakyat Indonesia (BRI)",
"code": "BRI",
"can_disburse": true,
"can_name_validate": true
},
{
"name": "Bank Central Asia (BCA)",
"code": "BCA",
"can_disburse": true,
"can_name_validate": true
}
]
Parameter | Deskripsi |
---|---|
name | Nama lengkap bank atau e-wallet |
code | Kode bank atau e-wallet tujuan disbursement |
Batch Disbursement
Batch disbursements adalah sekumpulan petunjuk yang berisi perintah untuk disburse dana ke bank manapun di Indonesia
Idempotency dapat menggunakan kunci X-IDEMPOTENCY-KEY.
Pembuatan Batch Disbursement
Dengan API endpoint ini anda dapat membuat sejumlah disbursement dalam waktu yang sama
Endpoint: Pembuatan batch disbursement
POST https://api.xendit.co/batch_disbursements
Parameter Request (Money-out write permission)
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-KEYoptional |
string |
Unique key to mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production |
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 |
---|---|---|
referencerequired |
string |
ID batch disbursement pada sistem anda yang digunakan untuk merekonsiliasi |
disbursementrequired |
Disbursement Item[] |
List disbursement yang ada didalam batch |
Disbursement Item
Parameter | Tipe | Deskripsi |
---|---|---|
amountrequired |
number |
Nominal uang yang akan di transfer |
bank_coderequired |
string |
Kode bank penerima |
bank_account_namerequired |
string |
Nama pemilik rekening bank penerima |
bank_account_numberrequired |
string |
Nomor rekening bank penerima |
descriptionrequired |
string |
Catatan untuk disertai dalam transfer |
external_idoptional |
string |
ID disbursement pada sistem Anda |
email_tooptional |
string[] |
Alamat email yang menerima pemberitahuan disbursement setelah disbursement selesai |
email_ccoptional |
string[] |
Alamat email yang menerima carbon copy email pemberitahuan disbursement setelah disbursement selesai |
email_bccoptional |
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": "NEEDS_APPROVAL",
"id": "58dca1dffee4228917d37336"
}
Parameter | Tipe | Deskripsi |
---|---|---|
createdrequired |
string |
Timestamp pembuatan batch disbursement creation dalam format ISO |
referencerequired |
string |
ID batch disbursement dalam sistem Anda yang digunakan untuk rekonsiliasi setelah disbursement selesai |
total_uploaded_countrequired |
number |
Jumlah disbursement count dalam batch |
total_uploaded_amountrequired |
number |
Jumlah disbursement amount dalam batch |
statusrequired |
string NEEDS_APPROVAL |
Batch disbursement telah dibuat tapi butuh persetujuan sebelum diproses lebih lanjut |
idrequired |
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 (Callback)
Endpoint: Notifikasi Batch Disbursement
POST https://yourcompany.com/disbursement_callback_url
Setelah membuat batch disbursement melalui API, untuk menerima callback, Anda harus masuk ke Dashboard dan mengikuti langkah-langkah berikut:
- Approve batch disbursement
- Konfirmasi nama yang tidak match, apabila diharuskan
Ketika semua disbursement telah diproses, sistem kami akan hit URL callback yang telah Anda tetapkan. Kami juga akan memberi Anda callback jika batch disbursement telah dihapus di dashboard. Anda dapat menyetel konfigurasi notifikasi URL anda melalui Dashboard --> Settings --> Configuration --> Batch Disbursements.
Data Callback
Parameter | Deskripsi |
---|---|
created | Timestamp pembuatan batch disbursement dalam format ISO |
updated | Timestamp perubahan status batch disbursement terakhir dalam format ISO |
reference | ID batch disbursement dalam sistem Anda, digunakan untuk merekonsiliasi disbursement setelah proses disbursement selesai |
total_uploaded_count | Jumlah count seluruh disbursement dalam batch yang di request |
total_uploaded_amount | Jumlah amount seluruh disbursement dalam batch yang Anda request |
approved_at | Timestamp batch disbursement yang di approve dalam format ISO |
approver_id | User ID user yang melakukan approval batch disbursement |
status | COMPLETED Semua disbursement berhasilCHECK Sebagian disbursement berhasil dibayarkan DELETED Batch disbursement telah terhapus FAILED Seluruh disbursement gagal dibayarkan |
id | Unique ID batch disbursement dalam sistem kami |
user_id | Xendit Business ID Anda |
total_error_count | Jumlah disbursement count dalam sistem yang gagal dibayarkan |
total_error_amount | Jumlah amount disbursement yang gagal terbayar dalam batch |
total_disbursed_count | Jumlah disbursement count yang berhasil terbayar dalam batch |
total_disbursed_amount | Jumlah disbursement amount yang berhasil terbayar dalam batch |
disbursements | Rincian setiap disbursement dalam batch, dijelaskan di bawah ini |
Disbursement
Parameter | Deskripsi |
---|---|
created | Timestamp pembuatan item batch disbursement dalam format ISO |
updated | Timestamp status update batch disbursement terakhir dalam format ISO |
external_id | ID disbursement dari sistem Anda |
amount | Amount untuk di disburse |
bank_code | Kode bank penerima. Lihat kode bank |
bank_account_number | Nomor rekening bank penerima |
bank_account_name | Nama pemilik rekening bank penerima |
description | Deskripsi untuk menyertai disbursement |
email_to | Alamat email yang mendapatkan notifikasi rincian disbursement setelah disbursement selesai |
email_cc | Alamat email yang menerima carbon copy email pemberitahuan disbursement setelah disbursement selesai |
email_bcc | Alamat email yang menerima blind carbon copy email pemberitahuan disbursement setelah disbursement selesai |
status | COMPLETED Disbursement berhasil terbayar FAILED Disbursement gagal terbayar |
bank_reference | Nomor referensi transaksi dari bank |
valid_name | Nama pemegang rekening penerima yang valid sesuai dengan bank penerima |
failure_code | Error code yang menyertai disbursement failure |
failure_message | Error message yang menyertai disbursement failure |
id | Unique ID batch disbursement item pada sistem kami |
Callback Error
Dalam kasus di mana kami tidak mendapatkan response berhasil dari server Anda, kami akan melakukan retry sebanyak 2 kali, dengan waktu 30 detik antar setiap retry. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah tersebut.
Mendapatkan Ketersediaan Bank Disbursement
Endpoint: Mendapatkan Ketersediaan Bank Disbursement
GET https://api.xendit.co/available_disbursements_banks
Contoh Panggilan Mendapatkan Ketersediaan Bank Disbursement
curl https://api.xendit.co/available_disbursements_banks -X GET \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
<?php
require 'vendor/autoload.php';
$options['secret_api_key'] = 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==';
$xenditPHPClient = new XenditClient\XenditPHPClient($options);
$response = $xenditPHPClient->getAvailableDisbursementBanks();
print_r($response);
?>
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.
Parameter Respon (Money-out read permission)
Mendapatkan Respon Ketersediaan Bank Disbursement
[
{
"name": "Bank Central Asia (BCA)",
"code": "BCA"
},
{
"name": "Bank Mandiri",
"code": "MANDIRI"
},
{
"name": "Bank Rakyat Indonesia (BRI)",
"code": "BRI"
}
]
Parameter | Deskripsi |
---|---|
name | Nama lengkap bank |
code | Kode bank, relevan saat pembuatan Virtual Account |
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
Pembuatan akun memungkinkan akun Anda untuk membuat sub-account yang akan dihubungkan dengan akun Anda
Pembuatan Akun API memperbolehkan akun xenPlatform anda untuk membuat sub-account yang dihubungkan dengan akun anda. Respons yang dihasilkan akan memiliki nilai user_id
yang anda bisa simpan untuk membuat transaksi pada sub-account di masa depan.
Ada dua jenis akun yang bisa di buat : MANAGED
, dan OWNED
.
Untuk akun MANAGED
: ketika sebuah permintaan POST dibuat pada Create Account API dengan email yang valid pada bagian account_email
, sebuah sub-account akan dibuat, dan sebuah email undangan sebagai sub-account akan dikirimkan untuk registrasi lebih lanjut. Melalui email pengiriman sub-account, mitra rekan anda bisa menyelesaikan proses pendaftaran untuk mendapatkan akses ke dashboard Xenditnya.
Untuk akun OWNED
: akun ini tidak memiliki akses ke dashboard Xendit. Ketiak sebuah POST request dibuat sukses ke API Create Account dengan email yang valid pada bagian account_email
, sebuah sub-account akan dibuat. Tidak ada email yang akan dikirimkan untuk pendaftaran lebih lanjut. Parameter business_name
menjadi wajib untuk akun OWNED
.
Endpoint: Buat Akun
POST https://api.xendit.co/accounts
Parameter Request
Example: Buat Akun
curl https://api.xendit.co/accounts -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d account_email=angie@pinkpanther.com \
-d type=OWNED \
-d business_profile[business_name]="Angie's lemonade stand" \
<?php
$url = 'https://api.xendit.co/accounts';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$data = [
'account_email' => 'angie@pinkpanther.com',
'type' => 'OWNED',
'business_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_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
echo $result;
from xendit import Xendit, XenPlatformAccountType
api_key = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:"
xendit_instance = Xendit(api_key=api_key)
XenPlatform = xendit_instance.XenPlatform
xenplatform_account = XenPlatform.create_account(
account_email="test-xenplatform@pythonxendit.co",
type=XenPlatformAccountType.OWNED,
business_profile={'business_name': 'python-xendit'}
)
print(xenplatform_account)
Parameter | Tipe | Deskripsi | ||
---|---|---|---|---|
account_email required |
string |
Email penanda untuk akun anda
|
||
type required |
string |
Jenis akun yang anda buat Nilai yang tersedia: |
||
business_profile di perlukan untuk OWNED, yang lainnya optional |
object |
Informasi bisnis mengenai akun yang anda buat
|
Parameter Respon
Example: Respon Buat Akun
{
"created": "2019-01-01T08:51:44.484Z",
"status": "SUCCESSFUL",
"account_email": "angie@pinkpanther.com",
"user_id": "57fb4e076fb3fa296b7f5a17",
"type": "OWNED"
}
Parameter | Tipe | Deskripsi |
---|---|---|
created required |
string |
Tanda waktu ketika akun dibuat Zona Waktu:
|
status required |
string |
Status pembuatan akun Nilai yang tersedia:
|
account_email required |
string |
Email penanda untuk akun yang dibuat |
user_id required |
string |
User_id dari akun yang dibuat, gunakan ini untuk membuat transaksi atas nama merchant Anda. |
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
Update Akun
Gunakan endpoint Update Account untuk melakukan perubahan nama dan email bisnis. Saat ini, fitur ini hanya berlaku untuk sub-akun OWNED
Endpoint: Update Akun
PATCH https://api.xendit.co/accounts/{id}
Parameter Request
Example: Update Akun
curl https://api.xendit.co/accounts/{id} -X PATCH \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d account_email=angie@pinkpanther.com \
-d business_profile[business_name]="Angie's lemonade stand" \
<?php
$url = 'https://api.xendit.co/accounts{id}';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$data = [
'account_email' => 'angie@pinkpanther.com',
'business_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_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
echo $result;
Parameter Path | Tipe | Deskripsi |
---|---|---|
id required |
string |
User_id dari akun yang dibuat, gunakan ini untuk membuat transaksi atas nama merchant Anda. |
Parameter Body | Tipe | Deskripsi | ||
---|---|---|---|---|
account_email required |
string |
Email penanda untuk akun anda
|
||
business_profile di perlukan untuk OWNED, yang lainnya optional |
object |
Informasi bisnis mengenai akun yang anda buat
|
Parameter Respon
Example: Respon Update Akun
{
"created": "2019-01-01T08:51:44.484Z",
"status": "SUCCESSFUL",
"account_email": "angie@pinkpanther.com",
"user_id": "57fb4e076fb3fa296b7f5a17",
"type": "OWNED"
}
Parameter | Tipe | Deskripsi |
---|---|---|
created required |
string |
Tanda waktu ketika akun dibuat Zona Waktu:
|
status required |
string |
Status pembuatan akun Nilai yang tersedia:
|
account_email required |
string |
Email penanda untuk akun yang dibuat |
user_id required |
string |
User_id dari akun yang dibuat, gunakan ini untuk membuat transaksi atas nama merchant Anda. |
type required |
string |
Jenis akun yang dibuat Nilai yang tersedia:
|
Mengatur Callback URLs
API pengaturan callback URL memungkin Anda untuk mengatur Callback URL Sub-akun Anda
Gunakan kunci API pada lingkungan produksi untuk mengatur URL produksi dan gunakan kunci API pada lingkungan development untuk mengatur URL development
Catatan: Callback URL produksi harus menggunakan protokol https
Berikut ini yang dapat digunakan pada parameter :type
Money-In
invoice
: Ketika sebuah Invoice berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Andafva_status
: Ketika sebuah Fixed Virtual Account berhasil terbuat atau diperbarui, sistem kami akan mengirimkan callback ke URL Andafva_paid
: Ketika sebuah Fixed Virtual Account berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Andaro_fpc_paid
: Ketika sebuah Retail Outlet Payment Code berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Andaovo_paid
: Ketika sebuah OVO Request berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Anda
Money-Out
disbursement
: Ketika sebuah Disbursement berhasil dikirim, sistem kami akan mengirimkan callback ke URL Andabatch_disbursement
: Ketika sebuah Batch Disbursement berhasil dikirim, sistem kami akan mengirimkan callback ke URL Anda
Endpoint: Mengatur Callback URLs
POST https://api.xendit.co/callback_urls/:type
Parameter Request
Example: Mengatur Callback 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/callback_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/callback_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 Callback 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 Callback 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 callback dari kami
|
Parameter Respon
Example: Mengatur Callback URLs Response
{
"status": "SUCCESSFUL",
"user_id": "5e6b30d967627b957de8c123",
"url": "https://www.xendit.co/callback_catcher",
"environment": "TEST",
"callback_token": "66a6680348e1c33ed2b9053a8eb9291b9e2230ff4f4d3057c9f4ac26405d2123"
}
Parameter | Tipe | Deskripsi |
---|---|---|
status required |
string |
Status dari pengaturan Callback URL Nilai yang tersedia:
|
user_id required |
string |
user_id yang Callback URL nya sudah diatur |
url required |
string |
The Callback URL that has been set |
environment required |
string |
Lingkungan yang Callback URL nya sudah diatur |
callback_token required |
string |
Token callback unik yang melekat pada setiap sub-akun. Gunakan token callback ini untuk melakukan validasi sebuah callback dikirimkan server Xendit. |
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. |
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 |
Buat Fee 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, eWallets, Kartu Kredit - untuk melakukan pemotongan Platform fee ketika pembayaran tersebut telah settle.
Catatan: Biaya akan dipindahkan dari sub-akun Anda dalam interval 15 menit setelah transaksi Anda sudah settle. Dengan demikian, Anda akan mengalami delay sampai dengan 15 menit dari waktu settlement terjadi hingga biaya platform dipotong.
Endpoint: Buat Fee Rule
POST https://api.xendit.co/fee_rules
Example: Buat Fee Rule
curl https://api.xendit.co/fee_rules -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d name=standard_platform_fee \
-d description=fee_for_all_transactions_accepted_on_behalf_of_vendors \
-d routes[unit]=flat \
-d routes[amount]=3000\
-d routes[currency]=IDR\
<?php
$url = 'https://api.xendit.co/fee_rules';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$data = [
'name' => 'standard_platform_fee',
'description' => 'fee_for_all_transactions_accepted_on_behalf_of_vendors',
'routes' => [
'unit' => 'flat',
'amount' => 3000,
'currency' => 'IDR'
]
];
$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_fee_rules = XenPlatform.fee_rules(
name="standard_platform_fee",
description="fee_for_all_transactions_accepted_on_behalf_of_vendors",
routes={
"unit": "flat",
"amount": 3000,
"currency": "IDR"
}
)
print(xenplatform_fee_rules)
Parameter Request
Parameter Badan | Tipe | Deskripsi | ||||||
---|---|---|---|---|---|---|---|---|
name required |
string |
Nama untuk identifikasi fee 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": "xpfeeru_d9e069f2-4da7-4562-93b7-ded87023d749",
"name": "Standard platform fee",
"description": "Platform fee for all transactions accepted on behalf of vendors",
"routes": {
"unit": "flat",
"amount": 3000,
"currency": "IDR",
"destination_account_id": "5cafeb170c2b18519b148768"
},
"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: xpfeeru_{{id}} Contoh: xpfeeru_NF5p90U3MQ5MXAuH1NF |
||||||||
name required |
string |
Nama untuk identifikasi fee 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 |
Callback Pembaruan Akun
Endpoint: Callback Pembaruan Akun
POST https://yourcompany.com/xenplatform_callback_url
Callback Pembaruan Akun dapat digunakan untuk memberi tahu sistem Anda kapan sub-akun Anda berhasil terdaftar dan pembayaran langsung diaktifkan.
Contoh ini digunakan ketika parameter body yang digunakan pada API Xendit dikirimkan ke callback URL anda.
Anda akan menerima callback dari Create Account API pada 2 titik ketika proses pembuatan sub-account:
- Ketika sub-account didaftarkan
- Ketika pembayaran Live telah diaktifkan untuk sub-account anda.
Silahkan atur callback URL yang pada halaman setting pada Dasbor Xendit anda untuk menerima callback ini. Anda juga bisa melakukan tes callback pada halaman pengaturan yang sama"
Data Callback
Example: Callback Pembaruan Akun Request
curl https://yourcompany.com/xenplatform_callback_url -X POST \
-u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
-d created="2019-01-01T10:51:44.484Z" \
-d event_type="account.registered" \
-d data[user_id]="57fb4e076fb3fa296b7f5a17" \
-d data[account_info][payments_enabled]=false \
<?php
$url = 'https://yourcompany.com/xenplatform_callback_url';
$apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
$headers = [];
$headers[] = 'Content-Type: application/json';
$data = [
'created' => '2019-01-01T10:51:44.484Z',
'event_type' => 'account.registered',
'data' => [
'user_id' => '57fb4e076fb3fa296b7f5a17',
'account_info' => [
'payments_enabled' => false
]
]
];
$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;
Parameter | Tipe | Deskripsi | ||||
---|---|---|---|---|---|---|
created required |
string |
Waktu ketika callback dikirimkan | ||||
event_type required |
string |
Jenis tindakan callback yang dikirimkan Nilai yang tersedia:
|
||||
data required |
object |
Memiliiki metadada untuk jenis tindakan
|
Account Info Metadata Object Parameters
Parameter | Tipe | Deskripsi |
---|---|---|
payments_enabled required |
boolean |
Nilai boolean yang menandakan ketika transaksi telah diaktifkan untuk sub-account |
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
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
- Change payload create, update, and get fixed payment code response
Oct 22, 2020
- Added pointer to Shopeepay reference
Oct 20, 2020
- Change Payload Virtual Account Payment Callback Request
Okt 4, 2020
- Added update promotion endpoint
- Added delete promotion endpoint
- Added min_original_amount parameter on create promotion and promotion object
- Added min_original_amount parameter on get charge option promotion response
- Added max_discount_amount parameter on create promotion
- Added max_discount_amount parameter on get charge option promotion response
- Refactor cards directory
Agu 04, 2020
- Added Python sample code for Balance
- Added Python sample code for Batch Disbursement
- Added Python sample code for Cards
- Added Python sample code for Cardless Credit
- Added Python sample code for Disbursement
- Added Python sample code for Direct Debit
- Added Python sample code for Ewallets
- Added Python sample code for Invoice
- Added Python sample code for Payouts
- Added Python sample code for QR Codes
- Added Python sample code for Recurring payment
- Added Python sample code for Retail outlets
- Added Python sample code for Virtual account
- Added Python sample code for xenPlatform
- Added Go sample code for Balance
- Added Go sample code for Cards
- Added Go sample code for Cardless Credit
- Added Go sample code for Disbursement
- Added Go sample code for Ewallets
- Added Go sample code for Invoice
- Added Go sample code for Payouts
- Added Go sample code for Recurring payment
- Added Go sample code for Retail outlets
- Added Go sample code for Virtual account
Aug 3, 2020
- Menambahkan API Get Virtual Account Details pada Postman Collection
- Menambahkan API Update Virtual Account pada Postman Collection
- Menambahkan API Get Virtual Account Payment Details pada Postman Collection
- Menambahkan API Update Fixed Payment Code pada Postman Collection
- Menambahkan 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
- Mengubah Alfamart maksimum expected_amount menjadi Rp 2,500,000
Aug 13, 2020
- Mengubah panjang maksimum external_id Virtual Account dari 1000 menjadi 950
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
- Menambahkan 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
- API Transfer xenPlatform untuk dapat melakukan transfer antar sub-akun sekarang memungkinkan
Jul 30, 2020
- Perbaharuan kode sampel PHP untuk Balance
- Perbaharuan kode sampel PHP untuk Cards
- Perbaharuan kode sampel PHP untuk Cardless Credit
- Perbaharuan kode sampel PHP untuk Disbursement
- Perbaharuan kode sampel PHP untuk Ewallets
- Perbaharuan kode sampel PHP untuk Invoice
- Perbaharuan kode sampel PHP untuk Payouts
- Perbaharuan kode sampel PHP untuk Recurring payment
- Perbaharuan kode sampel PHP untuk Retail outlets
- Perbaharuan kode sampel PHP untuk Virtual account
Jul 28, 2020
- Perbaharuan expiration_date Virtual Account & Retail Outlets menjadi 31 tahun dari 30 tahun
- Perbaharuan name Retail Outlets dari huruf menjadi alfanumerik
- Perbaharuan 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
- Update payment_code description under Retail Outlets to include info about Payment via Barcode
Jul 07, 2020
- Added retail outlet, ovo and batch disbursement callback paths to Set Callback URL API
Jul 07, 2020
- Add currency support on recurring payment creation
Jul 07, 2020
- Add new error AMOUNT_BELOW_MINIMUM_LIMIT and AMOUNT_ABOVE_MINIMUM_LIMIT when merchant try to request charge above or below a certain amount
- Add new error AUTHORIZATION_EXPIRED when merchant tries to capture authorization above 7 days
Jul 01, 2020
- Added ID version for direct debit
June 30, 2020
- Add get charge option to retrieve available installments
- Add installment on charge request
- Remove promo type on promo creation
- Add new error code to handle installment without cardholder name in the request
Jun 24, 2020
- Remove transaction limit and is_deleted from promotion example
Jun 18, 2020
- Added section for recurring under direct debit
June 17, 2020
- Add billing details field on charge endpoint
- Add new refund failure reason
Jun 11, 2020
- Added new SAHABAT_SAMPOERNA bank code for Virtual Accounts
- Added sender_name field for Virtual Account callback response
Jun 06, 2020
- Added Direct Debit product suite
May 31, 2020
- Added new endpoint for Kredivo payment types - calculation of installment values
May 26, 2020
- Add failure reason for Reverse Authorization response in english and bahasa
- Fix innacurate fields on authorization response
May 21, 2020
-Menambahkan endpoint Callback URL untuk xenPlatform
May 13, 2020
- update issued status on payout to pending
May 12, 2020
- add payment_method_id on recurring payment endpoint
May 06, 2020
- Updated OVO failure codes
April 28, 2020
- Make
email
required when creating payout - Remove
passcode
from payout response
April 24, 2020
- Improve copywriting to get payment channels
April 20, 2020
- Fixed error codes for eWallets and QR codes
April 16, 2020
- Updated reference for qr codes
April 16, 2020
- Add payment channels API reference
April 14, 2020
- update statuses for payouts
March 20,2020
- Included checkout expiry of LINKAJA
- Fix timestamp format error in DANA payment callback and get payment status
- Removed "only alphanumeric characters" note for OVO payment creation as "The only allowed punctuation is -" note is the superseding constraint
March 19, 2020
- Update error in response body for GET ewallets
- Update postman collection for ewallets and cardless credit
March 11, 2020
- Remove and give label to deprecated fields in invoice
March 5, 2020
- Remove legacy bank account data request endpoint
March 3, 2020
- Fix missing endpoint for cardless credit
- Fix LINKAJA error codes
- Fix DANA error codes
- Revise OVO error codes
March 2, 2020
- Add
email
as an optional field when creating payout
February 28, 2020
- Add
reminder_time
as optional field when creating invoice - Add
reminder_date
as optional field in invoice creation response - Improve documentation of virtual accounts and retail outlets
February 26, 2020
- New Go library
- New PHP library
- More supported products for Java library
February 18, 2020
- Introduce new EWallet: OVO asynchronous create payment callback flow
- New Versioning section
February 14, 2020
- Added Transfers API on xenPlatform
- Clarified a deprecated field on invoice callback response
- Updated dates to 2020 on Invoice page
February 12, 2020
- Updated Refund API with required header and new response values
- Updated Charge API with detail on MID labels
February 04, 2020
- Added Node.js code samples
January 23, 2020
- Added currency and mid_label to Create Charge API
January 20, 2020
- Updated to include xenPlatform headers for all compatible APIs
January 16, 2020
- Update field for
email_to
toemail
in payout
January 14, 2020
- Updated get payment status responses for eWallets
- Updated alphanumeric requirement in OVO external_id
January 9, 2020
- Introduce new Node.js library
January 6, 2020
- Added xenPlatform API
December 15, 2019
- Update Disbursement amount limits
December 14, 2019
- Update several callback requests in invoice
December 12, 2019
- New Product: Payouts
- New Test Scenarios section
December 11, 2019
- New Checklists section
- New Error Handling section
- New iOS SDK
December 9, 2019
- New Authentication section
- New Libraries / SDKs section
- New Errors section
- New Callback section
November 27, 2019
- Update several responses in recurring API documentation
November 26, 2019
- Remove
EXPIRED
andPENDING
status in DANA callback - Add explanation on API_VALIDATION_ERROR
November 21, 2019
- Change one field in checkoutRequest response for LinkAja from
redirect_url
tocheckout_url
November 7, 2019
- Update parameter description for invoice callback.
October 31, 2019
- Remove
items
in INVOICE.
October 30, 2019
- Refine PHP example for Cardless Credit (Kredivo).
- Add new eWallet: LINKAJA.
October 23, 2019
- Remove Refund Callback.
- Remove Refund PENDING status.