NAV undefined
bash php javascript java go python

Pengantar

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

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

Belajar API kami menggunakan Postman

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

Otentikasi

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

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==

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

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

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

Lalu, enkripsikan ke frasa sandi Base64

eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

Tambahkan enkripsi tersebut ke dalam HTTP(s) header

Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

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

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

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

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

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

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

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

  1. Credit/debit cards
  2. eWallets
  3. Cardless Credit
  4. QR Codes
  5. Direct Debit
  6. Transfer bank via Virtual Accounts
  7. Retail Outlets
  8. Invoices
  9. Recurring Payments
  10. Payouts
  11. Disbursements
  12. 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:

Panduan Migrasi

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

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

Changelog

2020-02-01

eWallets

2019-05-01

Credit Cards

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 yang terjadi pada akun Anda, seperti disbursement telah berhasil dilakukan, Virtual Account telah dibuat atau dibayar, atau Invoice telah kedaluwarsa

Instalasi

Anda perlu menyediakan endpoint sistem Anda untuk menerima 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-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

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

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

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-id
optional
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: VIRTUAL_ACCOUNT, RETAIL_OUTLET, EWALLET,CREDIT_CARD
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

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

Contoh Respon Proses Tokenisasi

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

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

Lihat Sample Proses Tokenisasi untuk contoh implementasi.

Token Sekali Pakai

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

Token Pemakaian Berulang

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

Parameter Request (Money-in write permission)

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

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

Parameter Body Tipe Deskripsi
amount
optional
string Jumlah biaya yang ingin dikenakan. Wajib diiisi untuk Token Sekali Pakai untuk proses otentikasi
card_number
required
string Nomor kartu kredit
card_exp_month
required
string Bulan kedaluwarsa
card_exp_year
required
string Tahun kedaluwarsa
card_cvn
optional
string Kode CVN/CVC kartu
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
should_authenticate
optional
default: true
boolean Penentuan apakah proses tokenisasi akan digabung dengan proses otentikasi atau tidak
xenditResponseHandler
required
function Fungsi penanganan respon yang dipanggil ketika proses tokenisasi dilakukan, yang digunakan untuk menerima pesan kesalahan dan respon tokenisasi

Parameter Respon

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

Status-status pada Proses Tokenisasi

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

Alasan Kegagalan pada Proses Tokenisasi

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

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

Pembuatan Otentikasi

Javascript Function: createAuthentication

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

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

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

Lihat Sample Otentikasi untuk contoh implementasi.

Contoh Objek authenticationData

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

Contoh Respon Otentikasi

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

Parameter Request (Money-in write permission)

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

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

Parameter Body Tipe Deskripsi
amount
required
string Jumlah biaya yang ingin diotentikasi.
token_id
required
string Token untuk otentikasi.
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-id
optional
string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

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

Parameter Respon

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

Status Pengembalian Otorisasi

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

Alasan Kegagalan Pengembalian Otorisasi

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

Error Pada Permintaan Pengembalian Otorisasi

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

Pembuatan Charge

Definisi: Pembuatan Charge

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

Contoh Permintaan Pembuatan Charge

curl -X POST \
  https://api.xendit.co/credit_card_charges \
  -u xnd_development_OYiAfOR3gbOunJU4frcaHmLCYNLy8oQuknDm+R1r9G3S/byhDAB+gA==: \
  -H 'content-type: application/json' \
  -d '{
      "token_id" : "598d5d0e51e0870d44c61534",
      "external_id": "postman-charge-1502436817",
      "amount": 900000,
      "authentication_id": "598d5d0f51e0870d44c61535",
      "card_cvn": "123",
      "descriptor": "My new store"
      "currency": "IDR",
      "mid_label": "IDR_MID",
      "billing_details": {
        "given_names": "John",
        "middle_name": "Doe",
        "surname": "John Doe",
        "email": "johndoe@xendit.co",
        "mobile_number": "+62899336634448",
        "phone_number": "+629934448",
        "address": {
          "street_line_1": "Panglima Polim IV",
          "street_line_2": "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",
      middle_name: "Doe",
      surname: "John Doe",
      email: "johndoe@xendit.co",
      mobile_number: "+62899336634448",
      phone_number: "+629934448",
      address: {
          street_line_1: "Panglima Polim IV",
          street_line_2: "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=75000,
    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-id
optional
string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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


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

default: true
boolean Kondisi dimana Anda akan menentukan apakah akan melakukan Capture langsung atau tidak langsung. Ubah nilai menjadi false bila Anda menginginkan otentikasi saja (penahanan uang), untuk kemudian di-capture dengan capture endpoint.
Catatan: Otorisasi akan kedaluwarsa dalam 7 hari.
descriptor
optional
string Deskriptor khusus untuk mengidentifikasi merchant pada laporan penggunaan kartu kredit pemilik kartu.
Note:
Untuk pelanggan dengan mode aggregator, nilai yang akan dikembalikan adalah XENDIT*[MERCHANT_NAME]-DESCRIPTOR
Untuk pelanggan dengan mode switcher, nilai yang akan dikembalikan adalah [MERCHANT_NAME]-DESCRIPTOR
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
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
given_names string Nama pertama
middle_name
optional
string Nama tengah
surname
optional
string Nama belakang
email
optional
string Alamat email
mobile_number
optional
string Nomor handphone
phone_number
optional
string Nomor telepon lain (telpon rumah atau kantor)
address
required
object Objek Alamat
parameter objek alamat
street_line_1
optional
string Alamat 1 (Nama jalan/nama kantor)
street_line_2
optional
string Alamat 2 (Nama apartemen/nama gedung/nama perumahan)
suburb
optional
string Suburban (Jika ada)
city
optional
string Kota
province
optional
string Provinsi
state
optional
string Negara bagian (jika ada)
zip_code
required
string Kode POS atau kode ZIP
country
optional
string Negara
deskripsi
optional
string Deskripsi opsional (contoh: jika ada informasi tambahan mengenai pemegang kartu)
promotion
optional
object Jika Anda ingin menggunakan promosi, Anda harus memasukkan parameter ini pada permintaan transaksi Anda
reference_id
optional
string Karakter alfanumerik unik yang digunakan sebagai referensi dari promo yang dibuat oleh user, dapat berupa ID atau nama promo.
original_amount
optional
number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
installment
optional
object Parameter ini diperlukan sebagai penanda bahwa permintaan Charge menggunakan metode cicilan. Untuk mengecek apakah BIN atau token id yang digunakan mempunyai opsi cicilan, mohon mengacu pada Opsi Charge.
count
required
numberBersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan tenor 3 bulan, maka nilai yang dimasukkan adalah 3.
interval
required
string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran. Jika Anda menginginkan cicilan dengan periode bulanan, maka nilai yang dimasukkan adalah month. Untuk saat ini Xendit hanya menyediakan cicilan dengan periode interval bulanan.

Contoh Respon Pembuatan Charge

{
    "created": "2020-01-11T07:33:14.442Z",
    "status": "CAPTURED",
    "business_id": "5850e55d8d9791bd40096364",
    "authorized_amount": 900000,
    "external_id": "postman-charge-1502436793",
    "merchant_id": "xendit",
    "merchant_reference_code": "598d5d0d51e0870d44c61533",
    "card_type": "CREDIT",
    "masked_card_number": "400000XXXXXX0002",
    "charge_type": "SINGLE_USE_TOKEN",
    "card_brand": "VISA",
    "bank_reconciliation_id": "5132390610356134503009",
    "eci": "05",
    "capture_amount": 900000,
    "descriptor": "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
created
required
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
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
mid_label
optional
string Karakter string spesifik yang digunakan untuk memberikan label pada MID pelanggan. Konfigurasi penanda label ini dapat dilakukan melalui menu pengaturan kartu kredit di Dasbor, pada menu pengaturan kartu kredit ( Jika pelanggan tidak menyertakan mid_label bersamaan dengan request transaksi, transaksi akan diproses menggunakan MID prioritas 1.
Catatan:
Hanya dikembalikan pada response untuk switcher merchant
id
required
string ID dari charge di sistem Xendit.
promotion
optional
object Jika Anda ingin menggunakan promosi pada transaksi charge, Anda harus memasukkan parameter di bawah ini.
detil objek promosi
reference_id
optional
string Referensi unik seperti nama atau ID yang diberikan pada promo yang telah dibuat.
original_amount
optional
number Nominal asli dari transaksi (sebelum diberikan potongan harga).
installment
optional
object Parameter ini diberikan pada respon sebagai penanda bahwa permintaan Charge menggunakan metode cicilan. Untuk melihat apakah BIN mempunyai cicilan yang tersedia atau tidak, lihat [Permintaan Opsi Charge] (#permintaan-opsi-charge).
detil objek installment
count
required
number Bersamaan dengan parameter interval, parameter ini mendefinisikan tenor dari cicilan yang akan digunakan untuk pembayaran.
interval
required
string Bersamaan dengan parameter count, parameter ini mendefinisikan periode dari cicilan yang akan digunakan untuk pembayaran.

Status status pada Charge

Status Deskripsi
CAPTURED Charge telah berhasil di-captured dan dana tersebut akan dikirimkan ke rekening sesuai dengan jadwal settlement yang ditentukan.
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_ALREADY_USED_ERROR
400
ID Token Sekali Pakai sudah pernah digunakan ketika melakukan Charge.
AUTHENTICATION_ALREADY_USED_ERROR
400
ID otentikasi sudah pernah digunakan ketika melakukan charge.
INVALID_TOKEN_ID_ERROR
400
Format ID token tidak valid.
INVALID_CVN_LENGTH_ERROR
400
Jumlah angka CVN tidak valid. Untuk kartu berlogo AMEX, jumlah angka CVN harus 4 angka. Selain AMEX, jumlah angka CVN harus 3 angka.
AUTHENTICATION_ID_MISSING_ERROR
400
ID Otentikasi wajib diisi.
AMOUNT_GREATER_THAN_AUTHENTICATED_ERROR
400
Jumlah nominal angka yang di-charge melampaui jumlah yang diotentikasi
INVALID_AUTHENTICATION_ID_ERROR
400
Format ID otentikasi tidak valid.
REQUEST_FORBIDDEN_ERROR
403
API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
TOKEN_NOT_FOUND_ERROR
404
ID token tersebut tidak ditemukan dalam sistem.
AUTHENTICATION_NOT_FOUND_ERROR
404
Token yang telah diotentikasi dengan otentikasi ID tersebut tidak ditemukan.
MID_NOT_FOUND_ERROR
404
MID yang digunakan pada parameter mid_label tidak dapat ditemukan. Lakukan pengecekan ulang jika Anda sudah mendaftarkan mid tersebut atau lakukan pengecekan pada input parameter mid Anda
INVALID_PROMOTION_DETAILS
400
Detil promosi yang dimasukkan tidak valid. Mohon dapat melakukan permintaan kembali dengan mengganti input objek promo yang ingin digunakan.
CARDHOLDER_NAME_REQUIRED
400
Mohon dapat menyertakan nama pemilik kartu pada parameter billing_details pada request Anda.
INSTALLMENT_BELOW_AMOUNT_MINIMUM
400
Nominal transaksi yang ingin dilakukan berada di bawah minimum batas transaksi cicilan.
INSTALLMENT_UNAVAILABLE
404
Kemungkinan penjelasan kesalahan:
  • Fitur cicilan tidak tersedia untuk kartu yang diterbitkan oleh bank tersebut. Mohon dicoba kembali menggunakan kartu yang lain.
  • Interval dari cicilan yang diajukan tidak tersedia. Mohon dicoba kembali menggunakan interval periode cicilan yang lain.
  • AMOUNT_BELOW_MINIMUM_LIMIT
    400
    Nominal yg dimasukkan pada input di bawah batas minimum transaksi. Mohon lakukan permintaan dengan nominal yang sama atau lebih dari batas minimum. Batas minimum yang ditentukan dari sistem berdasarkan mata uang yg digunakan adalah sebagai berikut:
  • IDR: 5000.
  • PHP: 20.

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

  • 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-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

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

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
    INVALID_JSON_FORMAT
    400
    Isi dari request bukan format JSON yang benar.
    AMOUNT_GREATER_THAN_AUTHORIZED_ERROR
    400
    Nominal capture melebihi nominal yang terotorisasi.
    INVALID_CHARGE_STATUS_ERROR
    400
    Status charge tidak terotorisasi
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan
    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-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

    Parameter Query Tipe Deskripsi
    credit_card_charge_id
    required
    string ID charge 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_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan

    Permintaan Opsi Charge

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

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

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

    Definisi: Permintaan Opsi Charge

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

    Contoh Permintaan Opsi Charge

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

    Contoh Respon dari Permintaan Opsi Charge

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

    Permintaan Untuk Mendapatkan Opsi Charge

    Parameter 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.
    Karaktera-z, A-Z, 0-9; simbol yang diterima - _ \
    token_id
    required
    string ID token dari kartu, didapatkan saat melakukan proses tokenisasi dengan xendit. Kami akan mencari nilai BIN dari token ID yang dimasukkan.

    Respon Permintaan Opsi Charge

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

    Nilai ini dapat berbeda untuk setiap bank.

    Pembuatan Promo

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

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

    Definisi: Pembuatan Promo

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

    Contoh Membuat Permintaan Pembuatan Promo

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

    Contoh Response Permintaan Pembuatan Promo

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

    Permintaan Pembuatan Promo

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

    Response Pembuatan Promo

    Objek Promo

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

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

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

    Status Promo

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

    Kesalahan Pembuatan Promo

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

    Mendapatkan Promo

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

    Definisi: Mendapatkan Promo

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

    Contoh Permintaan Untuk Mendapatkan Promo

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

    Contoh Respon Permintaan Untuk Mendapatkan Promo

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

    Parameter Yang dapat Digunakan

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

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

    Respon Permintaan Mendapatkan Promo

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

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

    Mendapatkan Perhitungan Promo

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

    Definisi: Mendapatkan Perhitungan Promo

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

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

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

    Contoh Permintaan Perhitungan Promo Menggunakan Token ID

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

    Contoh Respon dari Permintaan Penghitungan Promo

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

    Permintaan Mendapatkan Perhitungan Promo

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

    Response Perhitungan Promo

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

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

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

    Pembaruan Promo

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

    Definisi: Pembaruan Promo

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

    Contoh Permintaan Pembaruan Promotion

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

    Contoh Respon Pembaruan Promotion

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

    Parameter Permintaan Pembaruan Promo

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

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

    Respon Pembaruan Promo

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

    Error Codes

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

    Menghapus Promo

    Gunakan fitur ini untuk menghapus promo yang telah dibuat.

    Definition: Menghapus Promo

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

    Contoh Permintaan Menghapus Promo

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

    Contoh Respon Permintaan Menghapus Promo

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

    Parameter Permintaan Menghapus Promo

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

    Respon Permintaan Menghapus Promo

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

    Error Codes

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

    eWallet

    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-VERSION
    optional
    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-id
    optional
    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-rule
    optional
    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_ERROR
    422
    Ada input yang salah pada salah satu request field wajib.
    EWALLET_TYPE_NOT_SUPPORTED
    422
    ewallet_type is yang anda minta belum tersedia saat ini
    DUPLICATE_PAYMENT_REQUEST_ERROR
    400
    Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

    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-id
    optional
    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-rule
    optional
    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_ERROR
    422
    Ada input yang salah pada salah satu request field wajib.
    EWALLET_TYPE_NOT_SUPPORTED
    422
    ewallet_type is yang anda minta belum tersedia saat ini
    DUPLICATE_ERROR
    400
    Pembayaran dengan external_id yang sama telah dibuat sebelumnya.
    CHECKOUT_ERROR
    400
    Terjadi kesalahan eksternal dari DANA. Mohon untuk mencoba kembali dalam beberapa menit atau silakan hubungi tim customer success kami.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

    LINKAJA

    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-id
    optional
    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-rule
    optional
    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 object
    required
    item object Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
    callback_url
    required
    string Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran.
    redirect_url
    required
    string Setelah pembeli melakukan pembayaran di halaman checkout mitra eWallet, mereka akan diarahkan ke redirect_url. Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda.
    ewallet_type
    required
    string 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_ERROR
    400
    Ada input yang salah pada salah satu request field wajib.
    GENERATE_CHECKOUT_TOKEN_ERROR
    422
    Sebuah error terjadi dalam proses pembuatan checkout_url.
    EWALLET_TYPE_NOT_SUPPORTED
    422
    ewallet_type is yang anda minta belum tersedia saat ini
    DUPLICATE_PAYMENT_ERROR
    400
    Pembayaran dengan external_id yang sama sudah pernah dilakukan sebelumnya.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Query Tipe Deskripsi
    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_ERROR
    404
    Pembayaran tidak ditemukan
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

    Callback Status Pembayaran

    Anda butuh menyediakan endpoint pada sistem anda untuk menerima callback notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika pelanggan anda menyelesaikan pembayaran 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 object
    required
    item object Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
    customer_details
    required
    object Informasi pembeli, harus mengandung: first_name [string], last_name [string], email [string], phone [string]
    shipping_address
    required
    object Informasi dari alamat pengiriman, harus mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string]
    redirect_url
    required
    string Setelah pembeli melakukan pembayaran di halaman checkout mitra Cardless Credit, mereka akan diarahkan ke redirect_url. Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda.
    callback_url
    required
    string Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran.

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

    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-id
    optional
    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_url
    wajib
    string URL untuk dapat menerima notifikasi pembayaran setelah pembayaran dilakukan oleh customer
    amount
    opsional
    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_ERROR
    409
    Pembayaran dengan external_id yang sama telah dibuat sebelumnya
    DATA_NOT_FOUND
    409
    Merchant QRIS tidak ditemukan. Silakan hubungi tim customer success kami untuk aktivasi.
    REQUEST_FORBIDDEN_ERROR
    403
    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_ERROR
    400
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    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_FOUND
    404
    QR code dengan spesifik external_id tidak ditemukan.
    REQUEST_FORBIDDEN_ERROR
    403
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    external_id
    wajib
    string Merchant provided unique transaction ID used to create QR code
    Parameter Body Tipe Deskripsi
    nominal
    optional
    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_CODE
    410
    Simulasi pembayaran untuk DYNAMIC QRIS telah selesai sebelumnya. QRIS DYNAMIC tidak aktif.
    DATA_NOT_FOUND
    404
    QR code dengan spesifik external_id tidak ditemukan.
    REQUEST_FORBIDDEN_ERROR
    403
    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_ERROR
    400
    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 spesifik

    Setiap objek mungkin memiliki properti di bawah ini:
    kode negara tempat tinggal customer
    Key Value
    country required 2-huruf 2-letter ISO 3166-2 country code
    street_line1 optional Nama jalan tempat tinggal dan nomor unit
    street_line2 optional Alamat jalan tempat tinggal
    city
    optional
    Kota/Kabupaten tempat tinggal customer
    province optional Provinsi tempat tinggal customer
    state optional Negara bagian di dalam negara,jika berlaku
    postal_code optional Kode pos, jika berlaku
    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
    email 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 kode negara tempat tinggal customer
    Key Value
    country required 2-huruf 2-letter ISO 3166-2 country code
    street_line1 optional Nama jalan tempat tinggal dan nomor unit
    street_line2 optional Alamat jalan tempat tinggal
    city
    optional
    Kota/Kabupaten tempat tinggal customer
    province optional Provinsi tempat tinggal customer
    state optional Negara bagian di dalam negara,jika berlaku
    postal_code optional Kode pos, jika berlaku
    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_idyang 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)
    Key Value
    account_mobile_number
    required
    Nomor handphone yang terdaftar pada penyelenggara jasa atau kanal pembayaran
    card_last_four
    required
    Empat digit terakhir kartu debit
    card_expiry
    required
    Bulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    account_email
    required
    Alamat email customer yang terdaftar di penyelenggara jasa atau kanal pembayaran
    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 terhubung
    Nilai 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):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringMasa kadaluarsa bulan dan tahun kartu (dalam MM/YY format)
    currency stringMata uang akunISO 4217
    description stringDeskripsi akun (disediakan oleh bank)

    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):
    Key Nilai
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    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):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu debit
    card_expiry stringBulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    currency stringMata uang yang digunakan akun dalam ISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    customer_id string ID dari customer yang metode pembayarannya telah dihubungkan
    status
    required
    string Status dari payment method.
    Status akan ACTIVE sesaat setelah metode pembayaran dibuat.
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object JSON format bebas untuk informasi tambahan yang disediakan dalam request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    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: false
    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: IGNORE
    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 padastart_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 aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    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_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    Bukan format JSON yang valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id invalid
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini 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 OTP
    false 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
    Key Nilai
    reference_id required stringPengidentifikasi dari merchant untuk spesifik produk(ie. SKU)
    name required stringNama produk
    market required string2 huruf dalam format ISO 3166-2, kode negara yang mengindikasikan target negara dimana merchant beroperasi
    type required stringTipe produk
    description optional stringDeskripsi produk
    category optional stringKategori item
    sub-category optional stringSub kategori dari item
    price optional stringHarga per unit
    url optional stringURL produk dengan detil produk
    metadata optional stringObjek tambahan yang dapat digunakan untuk atribut tamabahan dari produk
    quantity optional stringJumlah unit dari item dalam keranjang
    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 dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Membuat Pembayaran

    Contoh Respon Error dalam Membuat Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DUPLICATE_ERROR
    409
    Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali.
    PAYMENT_METHOD_NOT_FOUND_ERROR
    400
    Payment_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 dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Validasi OTP pembayaran

    Contoh Respon Error dalam Validasi OTP Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    Direct_debit_id yang disediakan tidak ada atau tidak memiliki akses
    INVALID_OTP_ERROR
    400
    OTP yang disediakan invalid
    EXPIRED_OTP_ERROR
    400
    OTP yang disediakan telah kadaluarsa expired
    MAX_OTP_ATTEMPTS_ERROR
    400
    Payment method telah mencapai maksimum percobaan verifikasi OTP yang diperbolehkan
    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
    email 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):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringBulan dan tahun kadaluarsa kartu debit (dalam MM/YY format)
    currency stringCurrency akun dalam ISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    customer_id string ID dari customer objek yang dalam hal ini payment method dihubungkan
    status string Status dari payment method.
    Akan berstatus ACTIVE setelah dibuat
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat melakukan request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    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 dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    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 > Konfigurasi > Fix Virtual Account, 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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID sesuai pilihan anda. Seringkali ID itu unik seperti nomor telepon, email or ID transaction. Panjang maksimum yang diperbolehkan adalah 950 karakter.

    Karakter Spesial dan alfanumerik
    Panjang minimal 1 karakter
    bank_code
    required
    string Kode bank virtual account yang anda mau buat.
    Note: Kami sangat menyarankan untuk mengarahkan pelanggan anda untuk membayar ke BNI virtual account untuk transfer antar bank

    Kode bank yang tesedia: MANDIRI, BNI, BRI, PERMATA, BCA
    name
    required
    string Nama pengguna/virtual account, nama ini yang akan ditampilkan pada tampilan para pengguna, misalkan pada layar konfirmasi mesin ATM.Perlu diperhatikan bahwa kolom ini hanya dapat berisi huruf dan spasi dan tidak memiliki batasan (meskipun bank akan hanya menampilkan nama virtual account sesuai jumlah batasan dari sisi bank)

    Karakter Hanya huruf
    Panjang minimal 1 karakter
    virtual_account_number
    optional
    string Nomor virtual akun yang ingin anda tetapkan. Jika anda tidak menetapkan nomor virtual account yang ingin anda buat, sistem kami akan memilih secara acak.
    Note: Jangan sertakan merchat code (4 atau 5 digit pertama pada yang ada di keseluruhan nomor virtual account)

    standar: string acak
    suggested_amount
    optional
    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: tidak ada
    is_closed
    optional
    boolean Ketika diatur menjadi *true*, virtual account hanya akan menerima pembayaran sesuai nominal yang ditentukan dalam expected_amount

    standar: false
    expected_amount
    optional
    integer positive Nominal yang diharapkan oleh virtual account ketika is_closed diatur menjadi *true*

    standar: tidak ada
    expiration_date
    optional
    ISO 8601 Date Waktu kedaluwarsa virtual account

    zona waktu: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak VA dihasilkan
    is_single_use
    optional
    boolean Ketika diatur menjadi *true*, status virtual account akan menjadi inactive setelah dibayar

    standar: false
    description
    optional
    string Deskripsi tentang virtual account yang di buat. Ini hanya tersedia untuk bank BRI

    Karakter spesial dan alfanumerik
    Panjang minimal 1 Karakter
    standar: tidak ada

    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_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    required
    string Merchant code adalah 4-5 angka awalan dari nomor akun virtual. contoh: 01234 + nomor anda
    name
    required
    string Nama virtual account
    account_number
    required
    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_closed
    required
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    id
    required
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_single_use
    required
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • suggested_amount
    optional
    string Nominal yang diharapkan untuk pembuatan virtual account
    expected_amount
    optional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    description
    optional
    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_ERROR
    400
    Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error.
    INVALID_JSON_FORMAT
    400
    Bukan format JSON yang valid.
    VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE
    400
    Nomor virtual account yang anda mau tidak tersedia. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings
    BANK_NOT_SUPPORTED_ERROR
    400
    Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account.
    EXPIRATION_DATE_NOT_SUPPORTED_ERROR
    400
    Tanggl kedaluwarsa untuk virtual account saat ini tidak tersedia.
    EXPIRATION_DATE_INVALID_ERROR
    400
    Bukan tanggal kedaluwarsa yang valid karena lebih awal dari waktu saat ini.
    SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
    400
    Nominal yang diharapkan untuk virtual saat ini tidak dapat digunakan.
    EXPECTED_AMOUNT_REQUIRED_ERROR
    400
    Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi *true*.
    CLOSED_VA_NOT_SUPPORTED_ERROR
    400
    Nilai is_closeduntuk pilihan ini tidak tersedia untuk virtual account.
    DUPLICATE_CALLBACK_VIRTUAL_ACCOUNT_ERROR
    400
    Nomor virtual account yang anda mau buat sudah digunakan
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan The expected amount hanya bisa lebih dari nol
    MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
    CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED_ERROR
    400
    Nama virtual account tidak boleh mengandung nama bank atau institusi
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    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
    name
    required
    Nama bank
    code
    required
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Informasi Virtual Account

    {
        "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_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat pembuatan virtual account
    bank_code
    required
    string Kode bank dari nomor virtual account
    merchant_code
    required
    string 4 atau 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor akun dari virtual account
    expiration_date
    required
    string Tanggal kedaluwarsa virtual account
    is_closed
    required
    boolean Nilai yang mendifinisikan virtual account harus dibayar sesuai nominal yang diharapkan atau tidak
    id
    required
    string ID virtual account
    is_single_use
    required
    boolean Nilai yang mendefinisikan virtual account hanya bisa digunakan satu kali atau berulang-ulang
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • Kode Error

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

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Body Tipe Deskripsi
    suggested_amount
    optional
    integer positive Nominal yang disarankan yang ingin anda tetapkan.
    expected_amount
    optional
    integer positive Nominal yang diharapkan saat is_closed diubah menjadi true
    expiration_date
    optional
    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: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak VA dihasilkan
    is_single_use
    optional
    boolean Ketika diubah menjadi *true*, virtual account akan menjadi inactive setelah dibayar

    standar: false
    description
    optional
    string Deskripsi tentang virtual account yang di buat. Ini hanya tersedia untuk bank BRI

    Karakter spesial dan alfanumerik
    Panjang minimal 1 Karakter
    standar: tidak ada

    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_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    required
    string 4 atau 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
    id
    required
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_closed
    required
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    is_single_use
    required
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • suggested_amount
    optional
    string Nominal yang diharapkan dari virtual account yang diperbarui
    expected_amount
    optional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    description
    optional
    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_ERROR
    400
    Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error.
    INVALID_JSON_FORMAT
    400
    Bukan format JSON yang valid.
    VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE
    400
    Nomor virtual account yang anda mau tidak tersedia. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings
    BANK_NOT_SUPPORTED_ERROR
    400
    Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account.
    SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
    400
    Nominal yang diharapkan untuk virtual saat ini tidak dapat digunakan
    EXPECTED_AMOUNT_REQUIRED_ERROR
    400
    Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi *true*.
    CLOSED_VA_NOT_SUPPORTED_ERROR
    400
    Nilai is_closeduntuk pilihan ini tidak tersedia untuk virtual account..
    INACTIVE_VIRTUAL_ACCOUNT_ERROR
    400
    Nomor virtual account yang anda mau perbarui inactive.
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan The expected amount hanya bisa lebih dari nol
    MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Notifikasi / 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-token
    required
    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_id
    required
    string Dalam sistem internal kami disebut dengan payment ID
    callback_virtual_account_id
    required
    string Nilai kolom id didapatkan dari respon saat virtual account berhasil dibuat. Lihat Pembuatan Virtual Accounts
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    account_number
    required
    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_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    amount
    required
    integer positive Jumlah yang dibayar
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account, e.g 01234 your_number
    id
    required
    string ID dari pembayaran virtual account
    transaction_timestamp
    required
    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_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
    suggested_amount
    optional
    string Nominal yang disarankan untuk membuat virtual account
    is_closed
    required
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    expected_amount
    optional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    id
    required
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_single_use
    required
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • 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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Query Tipe Description
    payment_id
    required
    string ID pembayaran yang ingin anda gunakan

    Parameter Respon

    Contoh Respon Pembayaran Mendapatkan Virtual Account

    {
        "id": "598d91b1191029596846047f",
        "payment_id": "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
    id
    required
    string ID pembayaran virtual account
    payment_id
    required
    string Dalam sistem internal kami disebut dengan payment ID
    callback_virtual_account_id
    required
    string ID dari virtual account yang telah dibayar
    external_id
    required
    string External ID pembayaran virtual account
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account
    account_number
    required
    string Nomor akun dari virtual account
    bank_code
    required
    string Kode bank dari nomor virtual account
    amount
    required
    integer positive Jumlah yang dibayarkan ke virtual account ini
    transaction_timestamp
    required
    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_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    CALLBACK_VIRTUAL_ACCOUNT_PAYMENT_NOT_FOUND_ERROR
    404
    Tidak dapat menemukan notofi kasi pembayaran virtual account berdasarkan payment id

    Retail Outlets

    Pembuatan Fixed Payment Code

    Endpoint: Pembuatan Fixed Payment Code (FPC)

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

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

    Parameter Request

    Contoh Permintaan Pembuatan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id=demo_fixed_payment_code_123 \
       -d retail_outlet_name=ALFAMART \
       -d name='Rika Sutanto' \
       -d expected_amount=10000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => '123',
        'retail_outlet_name' => 'ALFAMART',
        'name' => 'Rika Sutanto',
        'expected_amount' => 10000
      ];
    
      $createFPC = \Xendit\Retail::create($params);
      var_dump($createFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.createFixedPaymentCode({
      externalID: 'demo_fixed_payment_code_123',
      retailOutletName: 'ALFAMART',
      name: 'Rika Sutanto',
      expectedAmt: 10000,
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "test");
      params.put("retail_outlet_name", "ALFAMART");
      params.put("name", "Rika Sutanto");
      params.put("expected_amount", 10000);
    
      FixedPaymentCode fpc = RetailOutlet.createFixedPaymentCode(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := retailoutlet.CreateFixedPaymentCodeParams{
      ExternalID:       "123",
      RetailOutletName: xendit.RetailOutletNameAlfamart,
      Name:             "Rika Sutanto",
      ExpectedAmount:   10000,
    }
    
    resp, err := retailoutlet.CreateFixedPaymentCode(&data)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    
    fmt.Printf("created retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.create_fixed_payment_code(
        external_id="demo_fixed_payment_code_123",
        retail_outlet_name="ALFAMART",
        name="Rika Sutanto",
        expected_amount=10000,
    )
    print(retail_outlet)

    JSON

    {
      "external_id": "demo_fixed_payment_code_123",
      "retail_outlet_name": "ALFAMART",
      "name": "Rika Sutanto",
      "expected_amount": 10000
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID pilihan Anda. Seringkali pengenal unik seperti nomor telepon, email atau transaksi ID. Panjang maksimum yang diijinkan adalah 1000 karakter.

    Karakter spesial dan alfanumerik
    Panjang minimal 1 karakter
    retail_outlet_name
    required
    string Nama Fixed Payment Code yang ingin Anda buat

    Nama Retail Outlets yang tersedia: ALFAMART dan INDOMARET
    name
    required
    string Nama pengguna - data ini dapat digunakan oleh kasir Toko Outlet untuk memvalidasi pengguna akhir

    Karakter Alfanumerik
    Panjang minimal 1 karakter
    expected_amount
    optional
    integer positive Jumlah yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • payment_code
    optional
    string Fixed Payment Code yang ingin Anda tetapkan, contohnya 12345. Jika Anda tidak mengirimkan, maka akan dipilih secara acak

    standar: string acak
    expiration_date
    optional
    ISO 8601 Date Waktu yang ditentukan ketika Fixed Payment Code akan kedaluwarsa

    zona waktu: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak payment code dihasilkan
    is_single_use
    optional
    boolean Jika disetel ke true, Fixed Payment Code tidak akan aktif setelah dibayarkan

    standar: false

    Parameter Respon

    Contoh Respon Pembuatan Fixed Payment Code

    {
       "owner_id": "5b614aa8e79f9214007244d4",
       "external_id": "123",
       "retail_outlet_name": "ALFAMART",
       "prefix": "TEST",
       "name": "Rika Sutanto",
       "payment_code": "TEST123456",
       "type": "USER",
       "expected_amount": 10000,
       "is_single_use": true,
       "expiration_date": "2049-07-31T17:00:00.000Z",
       "id": "5b61881e6cc2770f00117f73"
    }
    Parameter Tipe Deskripsi
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    required
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    required
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    required
    string Nama untuk Fixed Payment Code anda
    payment_code
    required
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    required
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    required
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    required
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    required
    string Kode unik untuk Fixed Payment Code

    Kode Error

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

    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-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

    Parameter Body Tipe Deskripsi
    name
    optional
    string Nama untuk Fixed Payment Code

    Karakter Alfanumerik
    Panjang minimal 1 karakter
    expected_amount
    optional
    integer positive Nominal yang diharapkan akan dibayar oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • expiration_date
    optional
    ISO 8601 Date Waktu yang ditentukan untuk tanggal kadaluarsa Fixed Payment Code. Anda dapat menetapkannya sebagai hari di masa lalu agar segera berakhir Fixed Payment Code

    zona waktu: UTC
    standar: Tanggal kedaluwarsa akan 31 tahun sejak payment code dihasilkan

    Parameter Respon

    Contoh Respon Pembaruan Fixed Payment Code

    {
       "owner_id": "5b614aa8e79f9214007244d4",
       "external_id": "123",
       "retail_outlet_name": "INDOMARET",
       "prefix": "TEST",
       "name": "Joe Contini",
       "payment_code": "TEST123456",
       "type": "USER",
       "expected_amount": 10000,
       "is_single_use": true,
       "expiration_date": "2049-07-31T17:00:00.000Z",
       "id": "5b61881e6cc2770f00117f73"
    }
    Parameter Tipe Deskripsi
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    required
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    required
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    required
    string Nama untuk Fixed Payment Code anda
    payment_code
    required
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    required
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    required
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    required
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    required
    string Kode unik untuk Fixed Payment Code

    Kode Error

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

    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-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Fixed Payment Code

    {
       "owner_id": "5b614aa8e79f9214007244d4",
       "external_id": "123",
       "retail_outlet_name": "ALFAMART",
       "prefix": "TEST",
       "name": "Joe Contini",
       "payment_code": "TEST123456",
       "type": "USER",
       "expected_amount": 20000,
       "is_single_use": true,
       "expiration_date": "2049-07-31T17:00:00.000Z",
       "id": "5b61881e6cc2770f00117f73"
    }
    Parameter Tipe Deskripsi
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    retail_outlet_name
    required
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    prefix
    required
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    name
    required
    string Nama untuk Fixed Payment Code anda
    payment_code
    required
    string Kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau tunjukkan melalui halaman barcode. Anda dapat menambahkan payment_code ke URL halaman barcode (halaman barcode saat ini hanya mendukung Alfamart):
    TEST: https://retail-outlet-barcode-dev.xendit.co/alfamart/:payment_code
    LIVE: https://retail-outlet-barcode.xendit.co/alfamart/:payment_code
    expected_amount
    required
    integer positive Nominal yang diharapkan akan dibayarkan oleh pengguna akhir
  • minimal Rp 10,000 dan maksimal Rp 2,500,000 untuk Alfamart
  • minimal Rp 10,000 dan maksimal Rp 5,000,000 untuk Indomaret
  • is_single_use
    required
    boolean Nilai yang menentukan apakah Fixed Payment Code akan aktif setelah dibayar atau tidak
    expiration_date
    required
    ISO 8601 Date Waktu ketika Fixed Payment Code akan kedaluarsa
    id
    required
    string Kode unik untuk Fixed Payment Code

    Kode Error

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

    Notifikasi Pembayaran 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-token
    required
    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
    id
    required
    string Pengidentifikasi unik dari sebuah transaksi
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    prefix
    required
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    payment_code
    required
    string kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau melalui halaman barcode. Lihat Pembayaran Melalui Barcode untuk info selengkapnya
    retail_outlet_name
    required
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    name
    required
    string Nama untuk Fixed Payment Code
    amount
    required
    integer positive Nominal yang telah dibayarkan
    status
    required
    string Status pembayaran. Nilai yang mungkin muncul: SETTLING atau COMPLETED
    transaction_timestamp
    required
    ISO 8601 Date Tanggal saat Fixed Payment Code dibayarkan
    payment_id
    required
    string ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran
    fixed_payment_code_payment_id
    required
    string ID unik untuk pembayaran Fixed Payment Code
    fixed_payment_code_id
    required
    string ID unik untuk Fixed Payment Code
    owner_id
    required
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-fee-rule
    optional
    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
    optional

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

    default: false
    boolean Isi parameter ini dengan true untuk menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk pelanggan Anda.
    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
    bank_code BCA / MANDIRI / BNI / BRI / PERMATA
    collection_type POOL Tipe nonfixed virtual account
    bank_account_number Akun bank tujuan pembayaran
    transfer_amount (DEPRECATED) Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
    retail_outlet_name Nama outlet ritel
    payment_code Kode unik identifikasi pembayaran
    bank_account_number Akun bank tujuan pembayaran
    transfer_amount (DEPRECATED) Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    should_exclude_credit_card Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice
    should_send_email Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa
    created Waktu ISO yang tercatat saat invoice dibuat
    updated Waktu ISO yang tercatat saat invoice diperbarui
    mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    fixed_va Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.
    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: GMT+0

    Kode Error

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

    Mendapatkan invoice

    Endpoint: Mendapatkan Invoice

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

    Parameter Request (Money-in read permission)

    Contoh Permintaan Mendapatkan Invoice

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    invoice_id
    required
    string ID invoice yang ingin didapatkan

    Parameter Respon

    Contoh Respon Mendapatkan Invoice

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



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

    Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

    should_send_email

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

    updated

    Waktu ISO yang tercatat saat invoice diperbarui

    created

    Waktu ISO yang tercatat saat invoice dibuat

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

    Kode Error

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

    Penutupan invoice

    Endpoint: Penutupan Invoice

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

    Anda bisa menutup sebuah invoice secara langsung menggunakan endpoint ini.

    Catatan:

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

    Parameter Request (Money-in write permission)

    Contoh Permintaan Penutupan Invoice

    curl https://api.xendit.co/invoices/{invoice_id}/expire! -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da4';
      $expireInvoice = \Xendit\Invoice::expireInvoice($id);
      var_dump($expireInvoice);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Invoice } = x;
    const invoiceSpecificOptions = {};
    const i = new Invoice(invoiceSpecificOptions);
    
    const resp = await i.expireInvoice({
      invoiceID: '587cc7b4863f2b462beb31f6',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Invoice invoice = Invoice.expire("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := invoice.ExpireParams{
      ID: "579c8d61f23fa4ca35e52da4",
    }
    
    resp, err := invoice.Expire(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("expired invoice: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Invoice = xendit_instance.Invoice
    
    invoice = Invoice.expire(
        invoice_id="5efda8a20425db620ec35f43",
    )
    print(invoice)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    invoice_id
    required
    string ID invoice yang ingin ditutup

    Respon Penutupan Invoice

    Contoh Respon Penutupan Invoice

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

    Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

    should_send_email

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

    updated

    Waktu ISO yang tercatat saat invoice diperbarui

    created

    Waktu ISO yang tercatat saat invoice dibuat

    Kode Error

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

    Notifikasi Invoice (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 account
    CREDIT_CARD Tipe kartu kredit
    bank_code Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah POOL
    retail_outlet_name Kode outlet ritel yang digunakan untuk menerima pembayaaran jika metode pembayaran yang dipakai adalah RETAIL_OUTLET
    paid_amount Jumlah tagihan yang dibayar
    updated Waktu ISO yang tercatat saat invoice diperbarui
    created Waktu ISO yang tercatat saat invoice dibuat
    mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    success_redirect_url Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
    failure_redirect_url Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
    paid_at Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    credit_card_charge_id Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
    payment_method Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET", "EWALLET"]
    payment_channel Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA", "ALFAMART", "OVO", "CREDIT_CARD"]
    payment_destination Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    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
    optional

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

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

    boolean Gunakan true jika Anda ingin melakukan penagihan pertama sebelum penagihan yang akan dilakukan pada start_date,
    Invoice selanjutnya yang akan ditagihkan ke pelanggan akan dibuat pada start_date. Dan waktu pembuatan untuk invoice selanjutnya lagi akan jatuh pada
    interval*interval_count + start_date
    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 aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    payer_email
    required
    Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    last_created_invoice_url URL yang disediakan oleh Xendit untuk penagihan recurring
    description
    required
    Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    Nominal harga per Invoice per interval.
    Nominal paling kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    interval
    required
    Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    required
    Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    total_recurrence
    optional
    Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    invoice_duration
    optional
    Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    should_send_email
    optional

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

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

    boolean Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date
    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_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    bukan format JSON yang valid.
    INVALID_CREDIT_CARD_TOKEN_ERROR
    400
    Token kartu kredit tidak valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id tidak valid.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
    UNSUPPORTED_CURRENCY
    400
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path 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 aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    payer_email
    required
    Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    description
    required
    Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    interval
    required
    Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    required
    Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    total_recurrence
    optional
    Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    invoice_duration
    optional
    Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    next_scheduled_at
    tanggal penerbitan invoice berikutnya dalam standar ISO dengan default 24 jam
    should_send_email
    optional

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

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

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

    Kode Error

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

    Mengubah Pembayaran Recurring

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

    Endpoint: Mengubah Pembayaran Recurring

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

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID dari Recurring Anda yang diberikan dari Xendit
    Parameter Body Tipe Deskripsi
    amount
    optional
    number Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    credit_card_token
    optional
    string Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
    interval
    optional
    string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    optional
    number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    should_send_email
    optional
    boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
    invoice_duration
    optional
    number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    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_ERROR
    404
    Tidak dapat menemukan Recurring dengan ID.
    API_VALIDATION_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    bukan format JSON yang valid.
    INVALID_CREDIT_CARD_TOKEN_ERROR
    400
    Token kartu kredit tidak valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id tidak valid.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini

    Menghentikan Pembayaran Recurring

    Anda dapat menghentikan pembayaran Recurring Anda dengan API berikut.

    Endpoint: Menghentikan Pembayaran Recurring

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

    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_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
    NOT_FOUND_ERROR
    404
    Tidak dapat menemukan Recurring dengan ID

    Menghentikan Sementara Pembayaran Recurring

    Endpoint: Menghentikan Sementara Pembayaran Recurring

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

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID 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_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
    NOT_FOUND_ERROR
    404
    Tidak dapat menemukan Recurring dengan ID

    Melanjutkan Pembayaran Recurring

    Endpoint: Melanjutkan Pembayaran Recurring

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

    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID 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_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
    NOT_FOUND_ERROR
    404
    Tidak dapat menemukan Recurring dengan ID

    Recurring Callback

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

    Parameter 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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Tipe Deskripsi
    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-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID unik yang berfungsi sebagai tanda pengenal sebuah payout di dalam sistem Anda.

    Maksimal: 200 karakter
    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-10T06:13:21.637Z",
      "created": "2019-12-09T06:13:20.363Z",
      "payout_url": "https://payout.xendit.co/web/67f1b30c-0262-4955-8777-95aa0478c2fc"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED 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_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 24 jam.

    Timezone: GMT+0
    created
    optional
    ISO8601 Tanggal dan waktu yang tercatat saat payout dibuat.

    Timezone: GMT+0
    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat menemukannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    INSUFFICIENT_BALANCE
    400
    Saldo di akun Anda tidak cukup untuk membuat payout dengan jumlah yang diinginkan.
    DUPLICATE_PAYOUT_ERROR
    400
    Payout dengan external_id yang sama telah dibuat sebelumnya.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID payout 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-10T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z",
      "payout_url": "https://payout.xendit.co/web/00754a09-ad00-4475-b874-1dd97f83fc24"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED 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_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 24 jam.

    Timezone: GMT+0
    created
    optional

    ISO8601

    Tanggal dan waktu yang tercatat saat payout dibuat.

    Timezone: GMT+0

    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat meneumkannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    PAYOUT_NOT_FOUND_ERROR
    404
    Payout tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID of the payout 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-10T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED 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_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 24 jam.

    Timezone: GMT+0
    created
    optional
    ISO8601 Tanggal dan waktu yang tercatat saat payout dibuat.

    Timezone: GMT+0
    payout_url
    optional
    string Tautan untuk mengakses tampilan payout, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    email
    optional
    string Email yang ingin Anda kirim notifikasi.
    bank_code
    optional
    string Kode bank yang digunakan untuk menerima pembayaran, selengkapnya disini
    account_holder_name
    optional
    string Nama pemegang akun.
    account_number
    optional
    string Akun bank tujuan pembayaran.
    disbursement_id
    optional
    string ID dari disbursement. Anda dapat menemukannya di sini
    failure_reason
    optional
    string Jika statusnya adalah FAILED, ini akan menjelaskan kegagalan tersebut.
    claimed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah diklaim.

    Timezone: GMT+0
    completed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah selesai.

    Timezone: GMT+0
    failed_timestamp
    optional
    ISO8601 Tanggal dan waktu yang mencatat saat payout telah gagal.

    Timezone: GMT+0
    payment_id
    optional
    string ID pembayaran internal kami yang dapat digunakan sebagai referensi pembayaran.

    Kode Error

    Kode Error Deskripsi
    PAYOUT_NOT_FOUND_ERROR
    404
    Payout tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    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-KEY
    optional
    string Kode unik untuk mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production.

    Karakter Spesial dan alfanumerik
    Panjang maksimum Tidak ada karakter maksimum
    Panjang minimum 1 karakter
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Deskripsi
    external_id
    required
    string ID disbursement pada sistem anda yang digunakan untuk merekonsiliasi disbursement

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

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

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

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

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

    description
    required
    string Deskripsi untuk dikirim beserta pengiriman dana

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

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

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

    Respon Pembuatan Disbursement

    Contoh Respon Pembuatan Disbursement

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

    Kesalahan Dalam Pembuatan Disbursement

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

    Mendapatkan Disbursement dengan ID

    Endpoint: Mendapatkan Disbursement dengan ID

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

    Endpoint ini digunakan untuk query pengecekan status transaksi disbursement.

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

    Contoh Permintaan Mendapatkan Disbursement dengan ID

    curl https://api.xendit.co/disbursements/57c9010f5ef9e7077bcb96b6 -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Deskripsi
    disbursement_id
    required
    string ID disbursement yang akan diambil
    Disbursement_id harus cocok dengan Disbursement ID yang disediakan dalam response berhasilan kami pada saat disbursement

    Get Disbursement Response

    Respon Permintaan Disbursement dengan ID

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

    Kesalahan Mendapatkan Disbursement dengan ID

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

    Mendapatkan Disbursement dengan External ID

    Endpoint: Mendapatkan Disbursement dengan External ID

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

    Endpoint ini digunakan untuk query status disbursement dengan external_id.

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

    Contoh Permintaan Mendapatkan disbursement dengan External ID

    curl https://api.xendit.co/disbursements?external_id=72655 -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      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-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Query Description
    external_id
    required
    string Custom ID disbursement yang ditetapkan oleh customer saat pembuatan disbursement
    The external_id harus sama dengan external_id yang digunakan saat pembuatan disbursement

    Respon Permintaan Mendapatkan Disbursement dengan External ID

    Respon Permintaan Mendapatkan Disbursement dengan External ID

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

    Kesalahan Mendapatkan Disbursement dengan External ID

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

    Notifikasi Disbursement

    Endpoint: Notifikasi Disbursement

    POST https://yourcompany.com/disbursement_callback_url

    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 diinginkan
    UNKNOWN_BANK_NETWORK_ERROR Jaringan bank telah mengembalikan error yang tidak diketahui kepada kami. Kami tidak dapat memprediksi apakah disbursement akan berhasil jika Anda mencoba kembali request disbursement yang sama.
    TEMPORARY_BANK_NETWORK_ERROR Jaringan bank sedang mengalami error sementara. Coba kembali disbursement dalam 1-3 jam
    INVALID_DESTINATION Bank telah melaporkan bahwa rekening tujuan tidak terdaftar atau diblokir. Jika tidak yakin tentang ini, silakan coba lagi atau hubungi bank tujuan langsung
    SWITCHING_NETWORK_ERROR Setidaknya salah satu jaringan switching sedang mengalami masalah. Coba lagi pencairan dalam 1-3 jam
    REJECTED_BY_BANK Bank telah menolak transaksi ini karena alasan yang tidak jelas. Kami tidak dapat memprediksi apakah pencairan akan berhasil jika Anda mencoba kembali permintaan pencairan yang sama.
    TRANSFER_ERROR Kami mengalami error fatal saat memproses pencairan ini. API field tertentu dalam request Anda mungkin tidak valid. Mohon untuk hubungi tim customer support untuk informasi lebih lanjut.
    TEMPORARY_TRANSFER_ERROR Kami mengalami masalah sementara saat memproses pencairan ini. Coba lagi disbursement dalam 1-2 jam

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

    Kesalahan Notifikasi Disbursement

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

    Mendapatkan Ketersediaan Bank Disbursement

    Endpoint: Mendapatkan Ketersediaan Bank Disbursement

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

    Contoh Permintaan Mendapatkan Ketersediaan Bank Disbursement

    curl https://api.xendit.co/available_disbursements_banks -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      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-KEY
    optional
    string Unique key to mencegah request duplikat. Dapat berupa external_id atau GUID manapun. Harus unik di seluruh environment development & production
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Body Tipe Deskripsi
    reference
    required
    string ID batch disbursement pada sistem anda yang digunakan untuk merekonsiliasi
    disbursement
    required
    Disbursement Item[] List disbursement yang ada didalam batch

    Disbursement Item

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

    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
    created
    required
    string Timestamp pembuatan batch disbursement creation dalam format ISO
    reference
    required
    string ID batch disbursement dalam sistem Anda yang digunakan untuk rekonsiliasi setelah disbursement selesai
    total_uploaded_count
    required
    number Jumlah disbursement count dalam batch
    total_uploaded_amount
    required
    number Jumlah disbursement amount dalam batch
    status
    required
    string
    NEEDS_APPROVAL
    Batch disbursement telah dibuat tapi butuh persetujuan sebelum diproses lebih lanjut
    id
    required
    string Unique ID batch disbursement pada sistem kami

    Kode Error

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

    Notifikasi Batch Disbursement (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:

    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 berhasil
    CHECK Sebagian disbursement berhasil dibayarkan
    DELETED Batch disbursement telah terhapus
    FAILED Seluruh disbursement gagal dibayarkan
    id Unique ID batch disbursement dalam sistem kami
    user_id Xendit Business ID Anda
    total_error_count Jumlah disbursement count dalam sistem yang gagal dibayarkan
    total_error_amount Jumlah amount disbursement yang gagal terbayar dalam batch
    total_disbursed_count Jumlah disbursement count yang berhasil terbayar dalam batch
    total_disbursed_amount Jumlah disbursement amount yang berhasil terbayar dalam batch
    disbursements Rincian setiap disbursement dalam batch, dijelaskan di bawah ini

    Disbursement

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

    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

    Panjang minimum 1 karakter
    Panjang maksimum Tidak ada maksimum karakter
    type
    required
    string Jenis akun yang anda buat

    Nilai yang tersedia: MANAGED, OWNED
    business_profile
    di perlukan untuk OWNED, yang lainnya optional
    object Informasi bisnis mengenai akun yang anda buat
    business_name
    di perlukan untuk OWNED, yang lainnya optional
    string Nama bisnis

    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: GMT+0
    status
    required
    string Status pembuatan akun

    Nilai yang tersedia: SUCCESSFUL
    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: MANAGED, OWNED

    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

    1. invoice: Ketika sebuah Invoice berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Anda
    2. fva_status: Ketika sebuah Fixed Virtual Account berhasil terbuat atau diperbarui, sistem kami akan mengirimkan callback ke URL Anda
    3. fva_paid: Ketika sebuah Fixed Virtual Account berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Anda
    4. ro_fpc_paid: Ketika sebuah Retail Outlet Payment Code berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Anda
    5. ovo_paid: Ketika sebuah OVO Request berhasil terbayarkan, sistem kami akan mengirimkan callback ke URL Anda

    Money-Out

    1. disbursement: Ketika sebuah Disbursement berhasil dikirim, sistem kami akan mengirimkan callback ke URL Anda
    2. batch_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-id
    optional
    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: invoice, fva_status, fva_paid, ro_fpc_paid, ovo_paid, batch_disbursement, disbursement
    Parameter Body Tipe Deskripsi
    url
    required
    string URL dari server Anda yang sudah Anda tentukan untuk menerima callback dari kami

    Panjang minimum 1 karakter
    Panjang maksimum Tidak ada maksimum karakter

    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: SUCCESSFUL
    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: GMT+0
    transfer_id
    required
    string Sebuah referensi unik untuk Transfer ini yang dihasilkan oleh sistem Xendit
    reference
    required
    string Sebuah referensi unik untuk Transfer ini yang Anda tentukan ketika permintaan dibuat
    source_user_id
    required
    string Sumber dari transfer. Ini adalah user_id dari master atau sub-account Anda
    destination_user_id
    required
    string Tujuan dari transfer. Ini adalah user_id dari master atau sub-account Anda
    status
    required
    string Status dari Transfer

    Nilai yang tersedia: SUCCESSFUL
    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
    unit
    required
    string Nilai yang tersedia: percent atau flat
    amount
    required
    number Nominal biaya berdasarkan unit. Seluruh unit harus dalam angka positif

    Nominal persen harus antara 0 dan 100
    Nominal persen dibulatkan ke unit moneter terdekat (Contoh: 0.50 IDR akan dibulatkan ke 1 IDR; 0.49 IDR akan dibulatkan ke 0 IDR)
    currency
    required
    string Kode mata uang ISO 4217

    Catatan: Akan mengembalikan sebuah error apabila mata uang tidak cocok dengan mata uang transaksi/akun
    Default: IDR

    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
    unit
    required
    string Nilai yang tersedia: percent atau flat
    amount
    required
    number Nominal biaya berdasarkan unit. Seluruh unit harus dalam angka positif

    Nominal persen harus antara 0 dan 100
    Nominal persen dibulatkan ke unit moneter terdekat (Contoh: 0.50 IDR akan dibulatkan ke 1 IDR; 0.49 IDR akan dibulatkan ke 0 IDR)
    currency
    required
    string Kode mata uang ISO 4217

    Catatan: Akan mengembalikan sebuah error apabila mata uang tidak cocok dengan mata uang transaksi/akun
    Default: IDR
    destination_account_id
    required
    string Akun tujuan sebagai akun yang menerima biaya yang dialokasikan.

    Saat ini hanya dapat dimasukkan business_id master account
    created
    required
    string Timestamp dalam ISO 8601 ketika Fee Rule Object terbuat

    Format: YYYY-MM-DDTHH:mm:ssZ
    Zona waktu: UTC+0
    updated
    required
    string Timestamp dalam ISO 8601 ketika Fee Rule Object terakhir terupdate

    Format: YYYY-MM-DDTHH:mm:ssZ
    Zona waktu: UTC+0
    metadata
    optional
    object Objek dari pasangan key-value tambahan yang digunakan oleh merchant seperti parameter sistem internal (business ID, keranjang belanja). Pengguna dapat mendefinisikan properti dan nilai JSON.

    Anda dapat menspesifikkan hingga 50 key, dengan panjang nama key sampai dengan 40 karakter dan panjang value sampai dengan 500 karakter
    Jika tidak ingin menggunakan maka dikosongkan NULL

    Kode Error

    Kode Error Deskripsi
    INVALID_FEE_AMOUNT
    400
    Nominal biaya dan/atau dalam bentuk angka negatif atau format yang salah
    API_VALIDATION_ERROR
    400
    Input gagal tervalidasi. Error field berisikan detail field mana yang gagal tervalidasi

    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:

    1. Ketika sub-account didaftarkan
    2. 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: account.registered, account.activated
    data
    required
    object Memiliiki metadada untuk jenis tindakan
    string user_id
    required
    User ID dari sub-account
    object account_info
    required
    Info metadata akun

    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

    Docs Changelog

    API Reference Changelog

    Oct 22, 2020

    Oct 20, 2020

    Okt 4, 2020

    Agu 04, 2020

    Aug 3, 2020

    Sep 28, 2020

    Sep 17, 2020

    Penambahan Platform Fee sebagai fitur baru untuk xenPlatform

    Sep 14, 2020

    Upaya Pengiriman Callback Terbaru

    Agu 04, 2020

    Sept 9, 2020

    Aug 13, 2020

    Aug 12, 2020

    Agu 11, 2020

    Aug 04, 2020

    Aug 3, 2020

    Jul 31, 2020

    Jul 30, 2020

    Jul 28, 2020

    Jul 27, 2020

    Jul 24, 2020

    Jul 16, 2020

    Jul 07, 2020

    Jul 07, 2020

    Jul 07, 2020

    Jul 01, 2020

    June 30, 2020

    Jun 24, 2020

    Jun 18, 2020

    June 17, 2020

    Jun 11, 2020

    Jun 06, 2020

    May 31, 2020

    May 26, 2020

    May 21, 2020

    -Menambahkan endpoint Callback URL untuk xenPlatform

    May 13, 2020

    May 12, 2020

    May 06, 2020

    April 28, 2020

    April 24, 2020

    April 20, 2020

    April 16, 2020

    April 16, 2020

    April 14, 2020

    March 20,2020

    March 19, 2020

    March 11, 2020

    March 5, 2020

    March 3, 2020

    March 2, 2020

    February 28, 2020

    February 26, 2020

    February 18, 2020

    February 14, 2020

    February 12, 2020

    February 04, 2020

    January 23, 2020

    January 20, 2020

    January 16, 2020

    January 14, 2020

    January 9, 2020

    January 6, 2020

    December 15, 2019

    December 14, 2019

    December 12, 2019

    December 11, 2019

    December 9, 2019

    November 27, 2019

    November 26, 2019

    November 21, 2019

    November 7, 2019

    October 31, 2019

    October 30, 2019

    October 23, 2019