NAV undefined
bash php javascript java go python csharp

Pengantar

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

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

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

Run in Postman

Silakan kunjungi Panduan Postman untuk pelajari lebih lanjut!

Otentikasi

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

xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==

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

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

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

Lalu, enkripsikan ke frasa sandi Base64

eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

Tambahkan enkripsi tersebut ke dalam HTTP(s) header

Authorization: Basic eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==

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

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

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

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

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

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

Libraries / SDKs

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

Node.js

Instalasi melalui npm

npm install xendit-node

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

Produk yang didukung

  1. Credit/debit cards
  2. eWallets
  3. Cardless Credit
  4. QR Codes
  5. Customers
  6. Direct Debit
  7. Transfer Bank via Virtual Accounts
  8. Retail Outlets
  9. Invoices
  10. Recurring Payments
  11. Payouts
  12. Disbursements
  13. Batch Disbursements

Instalasi

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

Java

Install Xendit ke dalam kode Java anda

Maven

<dependency>
    <groupId>com.xendit</groupId>
    <artifactId>xendit-java-lib</artifactId>
    <version>SELECTED_VERSION</version>
</dependency>

Gradle

compile 'com.xendit:xendit-java-lib:{SELECTED_VERSION}'

Import Library Xendit

import com.xendit.Xendit; 
import com.xendit.exception.XenditException; 
import com.xendit.model.AvailableBank; 
import com.xendit.model.VirtualAccount;

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

Produk yang didukung

  1. Credit/debit cards
  2. eWallets
  3. Cardless Credit
  4. Transfer bank via Virtual Accounts
  5. Retail Outlets
  6. Invoices
  7. Recurring Payments
  8. Payouts
  9. Disbursements
  10. Batch Disbursements
  11. Customers
  12. Direct Debit

Instalasi

Instalasi Library Java Xendit (Gradle dan Maven) sangat mudah dan sederhana. Untuk detail lebih lanjut mengenai langkah-langkah tersebut, lihat bagian kanan.

  1. Tambahkan dependensi Xendit ke dalam kode Java anda
  2. Import library Xendit
  3. Dapatkan API key anda di Dashboard untuk mulai menggunakan Xendit Java Library API.

Anda juga dapat mempelajari lebih lanjut di sumber Github kami untuk panduan instalasi yang lengkap

PHP

Download package PHP di sini

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

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

Anda bisa mengunjungi library PHP kami di Packagist

Terdapat 2 versi dari library Xendit PHP yang kami dukung:

Produk yang didukung - Xendit PHP v2

  1. Credit/debit cards
  2. eWallets
  3. Cardless Credit
  4. Transfer bank via Virtual Accounts
  5. Retail Outlets
  6. Invoices
  7. Recurring Payments
  8. Payouts
  9. Disbursements
  10. Batch Disbursements
  11. Customers
  12. Direct Debit

Produk yang didukung - Xendit PHP v1

  1. Credit/debit cards
  2. Transfer bank via Virtual Accounts
  3. Invoices
  4. Disbursements

Instalasi dan panduan upgrade

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

Go

Lihat sumber pada Github

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

Produk yang didukung

  1. Credit/debit cards
  2. eWallets
  3. Cardless Credit
  4. Transfer Bank via Virtual Accounts
  5. Retail Outlets
  6. Invoices
  7. Recurring Payments
  8. Payouts
  9. Disbursements
  10. Batch Disbursements
  11. Customers
  12. Direct Debit

Instalasi

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

Python

Instalasi melalui pip

pip install xendit-python

Lihat kode sumber pada Github

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

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

C# / .NET

Instalasi melalui .NET CLI

dotnet add package Xendit.net

Instalasi melalui Package Manager

Install-Package Xendit.net

Instalasi melalui PackageReference

<PackageReference Include="Xendit.net" Version="<VERSION>" />

Lihat sumber pada Github

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

Produk yang didukung

  1. Customers
  2. Direct Debit
  3. Bank Transfer via Virtual Accounts
  4. Retail Outlets (PH)
  5. Invoices
  6. Disbursements
  7. eWallets

Instalasi

Anda dapat menginstall library ini dengan menggunakan .NET CLI dotnet add package Xendit.net atau lihat kode selengkapnya pada Github dan NuGet

Versioning

Contoh Versioning

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

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

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

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

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

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

Kompatibilitas Dengan Versi Sebelumnya

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

Panduan Migrasi

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

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

Catatan Perubahan

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

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)
string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

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

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

Parameter Request (Money-out read permission)

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

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

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

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

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

Customers

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

Customer Object

Contoh Customer Object

{
    "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": "Doe",
    "phone_number": "+6285300000000",
    "nationality": "ID",
    "addresses": [{
        "country": "ID",
        "street_line1": "Jalan Makan",
        "street_line2": "Kecematan Kebayoran Baru",
        "city": "Jakarta Selatan",
        "province": "Daerah Khusus Ibukota Jakarta",
        "state": null,
        "postal_code": "12160"
    }],
    "date_of_birth": "2000-01-01",
    "metadata": null
}

Versi

Anda sedang melihat API versi 2020-05-19. Versi yang terbaru telah tersedia! Klik di sini untuk melihat versi terbaru.

Parameter Deskripsi
id string ID unik yang dihasilkan oleh Xendit untuk customer ini
reference_id string Pengidentifikasi yang Anda berikan pada saat melakukan request
mobile_number string Nomor telepon 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 object
phone_number string Nomor telepon alternatif
nationality string Kode negara kewarganegaraan customer
addresses object array Array objek yang mengandung informasi 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 dan nomor unit tempat tinggal
street_line2 optional Alamat 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

Create Customer

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

Versi

Anda sedang melihat API versi 2020-05-19. Versi yang terbaru telah tersedia! Klik di sini untuk melihat versi terbaru.

Parameter Request

Contoh Request Create Customer

curl https://api.xendit.co/customers -X POST \
   -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
   -H 'Content-Type: application/json' \
   -d reference_id=demo_1475801962607 \
   -d given_names="John" \
   -d mobile_number="+6287774441111" \
   -d email="customer@website.com" \
<?php

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

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

  $customerParams = [
    'reference_id' => '' . time(),
    'given_names' => 'customer 1',
    'email' => 'customer@website.com',
    'mobile_number' => '+6281212345678',
    'description' => 'dummy customer',
    'middle_name' => 'middle',
    'surname' => 'surname',
    'addresses' => [
      [
        'country' => 'ID',
        'street_line1' => 'Jl. 123',
        'street_line2' => 'Jl. 456',
        'city' => 'Jakarta Selatan',
        'province' => 'DKI Jakarta',
        'state' => '-',
        'postal_code' => '12345'
      ]
    ],
    'metadata' => [
      'meta' => 'data'
    ]
  ];

  $createCustomer = \Xendit\Customers::createCustomer($customerParams);
  var_dump($createCustomer);

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

const { Customer } = x;
const customerSpecificOptions = {};
const c = new Customer(customerSpecificOptions);

const resp = await c.createCustomer({
  referenceID:'demo_1475801962607',
  givenNames: 'John',
  mobileNumber: '+6287774441111',
  email: 'customer@website.com',
});
console.log(resp);
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="

customerAddress := xendit.CustomerAddress{
  Country:      "ID",
  StreetLine1:  "Jl. 123",
  StreetLine2:  "Jl. 456",
  City:         "Jakarta Selatan",
  Province:     "DKI Jakarta",
  State:        "-",
  PostalCode:   "12345",
}

data := customer.CreateCustomerParams{
  ReferenceID:  "test-reference-id-003",
  Email:        "tes@tes.com",
  GivenNames:   "Given Names",
  Nationality:  "ID",
  DateOfBirth:  "1995-12-30",
  Addresses:    []xendit.CustomerAddress{customerAddress},
  Metadata:     map[string]interface{}{
    "meta": "data",
  },
}

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

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

    CustomerAddress customerAddress =  CustomerAddress.builder()
        .country("ID")
        .streetLine1("Jl. 123")
        .streetLine2("Jl. 456")
        .city("Jakarta Selatan")
        .province("DKI Jakarta")
        .state("-")
        .postalCode("12345")
        .category("None")
        .isPreferred(true)
        .build();
    CustomerAddress[] customerAddressArray = new CustomerAddress[]{customerAddress};

    Map<String, Object> metadata = new HashMap<>();
    metadata.put("halo", "hello");
    metadata.put("tes", "123");

    Map<String, Object> params = new HashMap<>();
    params.put("reference_id", "test-reference-id");
    params.put("email", "tes@tes.com");
    params.put("given_names", "Given Names");
    params.put("nationality", "ID");
    params.put("date_of_birth", "1995-12-30");
    params.put("addresses", customerAddressArray);
    params.put("metadata", metadata);

    Customer customer = Customer.createCustomer(params);
} catch (XenditException e) {
    e.printStackTrace();
}
from xendit import Xendit

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

customer = DirectDebit.create_customer(
    reference_id="merc-1594279037",
    email="t@x.co",
    given_names="Adyaksa",
)
print(customer)
string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";

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

CustomerParameter individualParameterVersion20200519 = new CustomerParameter
{
  ReferenceId = "demo_11212162",
  Email = "john@email.com",
  GivenNames = "John",
  Addresses = new Address[] { new Address { Country = Country.Indonesia } }
};

CustomerResponse individualCustomerVersion20200519 = await customer.Create(individualParameterVersion20200519, version: ApiVersion.Version20200519);
Header Deskripsi
for-user-id
optional
string User-id yang Anda inginkan untuk membuat transaksi.

Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
Parameter Request Body 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 Array objek yang mengandung informasi alamat customer

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 Negarabagian di dalam negara,jika berlaku
postal_code optional Kodepos, 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 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 object
phone_number string Alternatif atau saluran telepon
nationality string Kode negara untuk kebangsaan customer
addresses object array Array 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 Negarabagian di dalam negara,jika berlaku
postal_code optional Kodepos, 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

Get Customer by Reference ID

Mendapatkan array customer object sesuai dengan reference_id yang Anda berikan.

Endpoint: Get Customer by Reference ID

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

Versi

Anda sedang melihat API versi 2020-05-19. Versi yang terbaru telah tersedia! Klik di sini untuk melihat versi terbaru.

Parameter Request

Contoh Request Get Customer menggunakan Reference ID

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

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

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

  $getCustomer = \Xendit\Customers::getCustomerByReferenceID(
    'cust-ref-id'
  );
  var_dump($getCustomer);

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

const { Customer } = x;
const customerSpecificOptions = {};
const c = new Customer(customerSpecificOptions);

const resp = await c.getCustomerByReferenceID({
  referenceID: 'demo_1475801962607',
});
console.log(resp);
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="

data := customer.GetCustomerByReferenceIDParams{
  ReferenceID:    "test-reference-id-003",
}

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

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

    Customer[] customers = Customer.getCustomerByReferenceId("test-reference-id");
} catch (XenditException e) {
    e.printStackTrace();
}
from xendit import Xendit

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

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

Parameter Respon

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
}]
Header 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
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 telepon 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 object
phone_number string Nomor telepon alternatif
nationality string Kode negara kewarganegaraan customer
addresses object array Array objek yang mengandung informasi alamat customer
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

Kode Error

Lihat lainnyaerror pada umumnya di sini.

Files

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

Upload File

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

Endpoint: Upload File

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

Parameter Request

Contoh Request Upload File

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

  $curl = curl_init();

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

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

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

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

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

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

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

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

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

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

Parameter Respon

Contoh Respon Sukses Upload File

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

Kode Error

Lihat contoh error lainya di sini.

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

Get File by Id

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

Endpoint: Get File

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

Contoh Request Get File

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

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

  $curl = curl_init();

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

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

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


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

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

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

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

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

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

print(response.text)

Parameter Respon

Contoh Respon Sukses Get File

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

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
File tidak ditemukan

Download File by Id

Melakukan request GET ke endpoint ini untuk mengunduh file

Endpoint: Download File

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

Example Download File Request

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

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

  $curl = curl_init();

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

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

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


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

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

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

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

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

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

print(response)

Kode Error

Lihat contoh error lainya di sini.

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

Delete File by Id

Melakukan request DELETE ke endpoint ini untuk menghapus file

Endpoint: Delete File

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

Contoh request menghapus file

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

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

  $curl = curl_init();

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

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

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


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

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

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

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

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

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

print(response.text)

Parameter Respon

Contoh respon sukses menghapus file

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

Kode Error

Lihat contoh error lainya di sini.

Kode Error Deskripsi
DATA_NOT_FOUND
404
File tidak ditemukan

Laporan

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

Objek Laporan

Contoh Objek Laporan

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

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

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

Menghasilkan Laporan

Endpoint: Menghasilkan Laporan

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

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

Parameter Request

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

.

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

Contoh Permintaan Menghasilkan Laporan

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

Contoh Respon Menghasilkan Laporan

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

Tipe yang tersdia:
Tipe Deskripsi
BALANCE_HISTORY Laporan yang menunjukkan daftar riwayat dari saldo Anda. Laporan ini sama dengan laporan saldo di dashboard. Lihat Laporan Riwayat Saldo untuk informasi lebih lanjut.
TRANSACTIONS Laporan yang menunjukkan daftar transaksi. Laporan ini sama dengan laporan transaksi di dashboard. Lihat Laporan Transaksi untuk informasi lebih lanjut.
UPCOMING_TRANSACTIONS Laporan yang menunjukkan daftar transaksi mendatang yang akan masuk/keluar dari saldo Anda. Laporan ini sama dengan Laporan Saldo Tertunda/Mendatang di dashboard.
filter
required
object Filter yang diterapkan pada laporan.
Parameter Filter
Kunci Nilai
from
string (ISO 8601)
required
Waktu awal dari transaksi yang akan difilter.

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

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

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

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

default: IDR
string Mata uang untuk difilter
Lihat daftar mata uang yang didukung.

Parameter Respon

Mengembalikan Objek Laporan dengan kode status 201

Kode Error

Lihat daftar kode error umum lainnya disini.

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

Mendapatkan Laporan

Endpoint: Mendapatkan Laporan

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

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

Parameter Request

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

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

Contoh Mendapatkan Laporan

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

Contoh Respon Mendapatkan Laporan

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

Parameter Respon

Mengembalikan Objek Laporan dengan kode status 200

Kode Error

Lihat daftar kode error umum lainnya disini.

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

Notifikasi Laporan

Endpoint: Notifikasi Laporan

POST https://yourcompany.com/report_callback_url

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

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

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

Pelajari lebih lanjut mengenai Callback.

Isi Notifikasi

Contoh Notifikasi Laporan pada Laporan yang Berasil

curl --include \
     --request POST \
     --header "x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
     --header "Content-Type: application/json" \
     --data-binary "{
    \"id\": \"report_5c1b34a2-6ceb-4c24-aba9-c836bac82b28\",
    \"type\": \"BALANCE_HISTORY\",
    \"status\": \"PENDING\",
    \"filter\": {
        \"from\": \"2021-06-23T04:01:55.574Z\",
        \"to\": \"2021-06-24T04:01:55.574Z\"
    },
    \"format\": \"CSV\",
    \"currency\": \"IDR\",
    \"business_id\": \"5f34f60535ba7c1c0eed846a\",
    \"created\": \"2021-06-24T04:01:55.570Z\",
    \"updated\": \"2021-06-24T04:01:55.570Z\"
}}" \
'{{your_company_domain}}/{{callback_url}}'
Parameter Body Tipe Deskripsi
event
required
string Tipe dari notifikasi. Tipe yang tersedia:
Tipe Deskripsi
reports.completed Laporan berhasil. Anda dapata mengunduh laporan dari parameter url.
reports.failed Laporan gagal untuk dihasilkan. Anda dapat mencoba ulang untuk menghasilkan laporan.
Report Object Parameter lainnya sama dengan objek laporan.

Laporan Riwayat Saldo

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

Kolom Laporan

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

Laporan Transaksi

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

Kolom Laporan

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

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

Transaksi

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

Objek Transaksi

Contoh Objek Transaksi

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

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

Status yg tersedia:
Status Description
PENDING Transaksi masih menunggu diproses. Ini merujuk pada transaksi uang keluar ketika saldo uang Anda masih ditahan.
SUCCESS Transaksi uang keluar telah berashil dikirim atau uang masuk telah diterima.
FAILED Transaksi gagal untuk dikirim/diterima.
VOIDED Transaksi uang masuk dibatalkan oleh kustomer.
REFUNDED The money-in transaction is refunded by the customer.
REVERSED Transaksi dibatalkan oleh Xendit.
channel_category
required
string Kategori kanal dari transaksi untuk mengidentifikasi sumber dari transaksi
kanal yang tersedia untuk tiap tipe adalah:
Type Channels
DISBURSEMENT and REMITTANCE_PAYOUT BANK and CASH
PAYMENT CARDS, CARDLESS_CREDIT, DIRECT_DEBIT, EWALLET, PAYLATER, QR_CODE, RETAIL_OUTLET, VIRTUAL_ACCOUNT
TRANSFER XENPLATFORM
business_id
required
string Id dari bisnis yang melakukan transaksi ini.
created
required
string (ISO 8601) Waktu ketika transaksi ini dibuat saat UTC+0.
updated
required
string (ISO 8601) Waktu terakhir ketika transaksi ini diperbarui saat UTC+0.
fee
required
object
Body Parameter Type Description
xendit_fee number Nominal dari biaya.
value_added_tax number Nominal PPN dari transaski.
xendit_withholding_tax number Jumlah dari Xendit Pajak Potong untuk transaksi ini, jika berlaku.
Buka dokumentasi pajak untuk informasi lebih lanjut.
third_party_withholding_tax number Nominal Pajak Potong pihak Ketiga untuk transaksi ini, jika berlaku.
Contoh pihak ketiga : Bank
status string Status biaya
Status Description
PENDING Biaya sedang dalam proses untuk ditagihkan.
COMPLETED Biaya telah berhasil ditagihkan.
CANCELED Transaksi gagal dan biaya dibatalkan.
REVERSED Transaksi telah di reverse dan biaya dikembalikan.

Mendapatkan Transaksi

Endpoint: Mendapatkan Transaksi

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

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

Parameter Request

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

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

Contoh Permintaan Mendapatkan Transaksi

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

Contoh Respon Mendapatkan Transaksi

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

Parameter Respon

Mengembalikan Objek Transaksi dengan kode HTTP status 200

Kode Error

Lihat contoh umum error lainya di sini.

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

Mendapatkan Daftar Transaksi

Endpoint: Mendapatkan Daftar Transaksi

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

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

Parameter Request

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

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

Contoh Permintaan Mendapatkan Daftar Transaksi

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

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

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

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

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

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

Parameter Respon

Contoh Respon Mendapatkan Daftar Transaksi

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

Kode Error

Lihat contoh umum error lainya di sini.

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

Credit Cards

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

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

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

Pembuatan Token (Tokenization)

Javascript Function: createToken

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

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

Proses tokenisasi adalah sebuah proses dimana data dari kartu kredit (nomor kartu dan tanggal kedaluwarsa) disimpan dengan aman di sisi klien dalam bentuk token, agar data-data sensitif yang ada pada kartu kredit tidak pernah melewati sistem Anda. Token tersebut kemudian akan digunakan untuk melakukan Pembuatan Charge.

Contoh objek tokenData dengan data tagihan pemilik kartu

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

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

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

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

Lihat Sample Proses Tokenisasi untuk contoh implementasi. Untuk contoh implementasi SDK, dapat dilihat di halama dokumentasi Xendit untuk Android SDK and IOS SDK.

Token Sekali Pakai

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

Token Pemakaian Berulang

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

Parameter Request (Money-in write permission)

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

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

Contoh Respon Tokenisasi

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

Response Parameters

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

Status-status pada Proses Tokenisasi

Status Deskripsi
IN_REVIEW Pelanggan harus mengotentikasi identitas mereka. Xendit menyediakan tautan kepada Anda agar dinavigasikan kepada pengguna Anda untuk melakukan 3DS dengan mudah.
VERIFIED Pelanggan berhasil melakukan otentikasi terhadap identitas mereka. 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.
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.

Mendapatkan Token

Definisi: Mendapatkan Token

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

Contoh Melakukan Permintaan Mendapatkan Token Request Menggunakan Token ID

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

Contoh Respon Token Response

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

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

Parameter Request

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

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

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

Kode Error

Kode Error Deskripsi
API_VALIDATION_ERROR
400
Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
CREDIT_CARD_TOKEN_NOT_FOUND_ERROR
404
credit_card_token_id tidak ditemukan

Pembuatan Otentikasi

Javascript Function: createAuthentication

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

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

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

Lihat Sample Otentikasi untuk contoh implementasi.

Contoh Objek authenticationData

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

Contoh Respon Otentikasi

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

Parameter Request (Money-in write permission)

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

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

Parameter Body Tipe Deskripsi
amount
required
string Jumlah biaya yang ingin diotentikasi.
token_id
required
string Token untuk otentikasi.
currency
optional: 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. Mata uang yang didukung adalah IDR, PHP dan USD.
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",
        "surname": "John Doe",
        "email": "johndoe@xendit.co",
        "mobile_number": "+62899336634448",
        "phone_number": "+629934448",
        "address": {
          "street_line1": "Panglima Polim IV",
          "street_line2": "Ruko Grand Panglima Polim, Blok E",
          "city": "Jakarta Selatan",
          "province": "DKI Jakarta",
          "postal_code": "993448",
          "country": "ID"
        }
      },
      "promotion": {
          "reference_id": "BCA_10",
          "original_amount": 1000000
      },
      "installment": {
          "count": 3,
          "interval": "month"
      }
    }'
<?php

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

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

  $params = [
      'token_id' => '5e2e8231d97c174c58bcf644',
      'external_id' => 'card_' . time(),
      'authentication_id' => '5e2e8658bae82e4d54d764c0',
      'amount' => 15000,
      'card_cvn' => '123',
      'capture' => false
  ];

  $createCharge = \Xendit\Cards::create($params);
  var_dump($createCharge);

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

const resp = await card.createCharge({
  externalID: 'sample-external-id-1475459775872',
  tokenID: 'sample-token-id-1475459775872',
  amount: 900000,
  authID: '58e2097218b815f555c8a526',
  cardCvn: "123",
  descriptor: "My new store",
  currency: "IDR",
  midLabel: "IDR_MID",
  billing_details: {
      given_names: "John",
      surname: "John Doe",
      email: "johndoe@xendit.co",
      mobile_number: "+62899336634448",
      phone_number: "+629934448",
      address: {
          street_line1: "Panglima Polim IV",
          street_line2: "Ruko Grand Panglima Polim, Blok E",
          city: "Jakarta Selatan",
          province: "DKI Jakarta",
          zip_code: "993448",
          country: "ID"
      }
  },
  promotion: {
      referenceId: "BCA_10",
      originalAmount: 1000000
  },
  installment: {
      count: 3,
      interval: "month"
  }
});
console.log(resp);
Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
try {
  CreditCardCharge creditCardCharge = CreditCard.createCharge(
    "token_id", //tokenId
    "postman-authorize-1502437417", //externalId
    90000, //amount
    "auth_id", //authenticationId
    "123", //Card CVN
    "XENDIT*MYBUSINESS-MY NEW STORE" //Descriptor
  );
} catch (XenditException e) {
  e.printStackTrace();
}
xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="

createChargeData := card.CreateChargeParams{
  TokenID:          "example-token-id",
  AuthenticationID: "example-authentication-id",
  ExternalID:       "postman-charge-1502436793",
  Amount:           900000,
  Capture:          new(bool),
}

chargeResp, err := card.CreateCharge(&createChargeData)
if err != nil {
  log.Fatal(err)
}

fmt.Printf("created charge: %+v\n", chargeResp)
from xendit import Xendit

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

charge = CreditCard.create_charge(
    token_id="5f0410898bcf7a001a00879d",
    external_id="card_charge-1594106478",
    amount=900000,
    card_cvn="123",
)
print(charge)

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

Parameter Request (Money-in write permission)

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

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

with-fee-rule
optional
string ID Fee Rule yang ingin Anda aplikasikan ke transaksi yang dilakukan

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
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
Kunci Nilai
given_names string Nama pertama
surname
optional
string Nama belakang
email
optional
string Alamat email
mobile_number
optional
string Nomor handphone
phone_number
optional
string Nomor telepon lain (telpon rumah atau kantor)
address
required
object Objek Alamat
parameter objek alamat
street_line1
optional
string Nama bangunan dan nomor unit apartemen / rumah
street_line2
optional
string Alamat bangunan
suburb
optional
string Suburban (Jika ada)
city
optional
string Kota
province
optional
string Gunakan parameter ini untuk memasukkan provinsi, state, atau region dari pemilik kartu. Jika pemilik kartu merupakan penduduk USA, pastikan nilai yang iinput adalah kode negara bagian (contoh gunakan CA untuk California)
state
optional
string Gunakan parameter ini untuk memasukkan provinsi, state, atau region dari pemilik kartu. Jika pemilik kartu merupakan penduduk USA, pastikan nilai yang iinput adalah kode negara bagian (contoh gunakan CA untuk California)
zip_code
required
string Kode POS atau kode ZIP
country
optional
string 2-hufur ISO 3166-2 kode negara untuk menunjukkan negara pemilik kartu
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.
status
required
string Status dari transaksi charge yang dikembalikan oleh sistem Xendit. Lihat [Status pada charge] (#status-status-pada-Charge).
failure_reason
optional
string Bila status charge adalah FAILED, lihat Status-status pada Charge untuk keterangan lebih lanjut.
approval_code
optional
string Suatu kode berisikan angka yang berurutan (biasanya 6 digit) yang mengindikasikan bahwa proses otorisasi telah disetujui oleh penerbit kartu.
cvn_code
optional
string Respon yang didapatkan dari validasi CVN (3 digit kode keamanan yang terdapat dibalik kartu). Parameter ini tidak akan tertera pada respon apabila CVN tidak disertakan pada saat permintaan pembuatan charge atau pembuatan token. Lihat Kode CVN.
merchant_reference_code
required
string Kode merchant yang digunakan untuk melakukan rekonsiliasi transaksi dengan bank.
descriptor
optional
string Deskriptor khusus untuk menentukan identitas merchant.
Catatan:
Untuk aggregator merchant, nilai yang akan dikembalikan adalah 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.
REVERSED Otorisasi telah berhasil dikembalikan. Pada tahap ini, nominal transaksi dikembalikan ke pemilik kartu.
AUTHORIZED Charge telah berhasil diotorisasi.
FAILED Charge gagal. Lihat Alasan Kegagalan Charge

Kode CVN

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

Alasan Kegagalan Pembuatan Charge

Alasan Gagal Deskripsi
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)

    Pembuatan Safe Acceptance

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

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

    Penjelasan Metode Integrasi dari Pemrosesan Pembayaran pada Safe Acceptance

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

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

    Definis: Pembuatan Transaksi Safe Acceptance

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

    Contoh Permintaan Safe Acceptance

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

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

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

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

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

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

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

    Parameter Permintaan

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

    Response Parameters

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

    Status status pada Charge

    Status Deskripsi
    CAPTURED Charge telah berhasil di-captured dan dana tersebut akan dikirimkan ke rekening sesuai dengan jadwal settlement yang ditentukan.
    AUTHORIZED Charge telah berhasil diotorisasi.
    FAILED Charge gagal. Lihat Alasan Kegagalan Charge

    Kode CVN

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

    Alasan Kegagalan Pembuatan Charge

    Alasan Gagal Deskripsi
    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.
    ISSUING_BANK_UNAVAILABLE Kartu yang digunakan tidak valid.

    Error Codes

    Error Code Description
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
    INVALID_JSON_FORMAT
    400
    Isi dari request bukan format JSON yang benar.
    INVALID_API_KEY
    400
    Mohon gunakan Public API key untuk transaksi ini.
    SIGNATURE_VALIDATION_ERROR
    400
    Signature yang digunakan tidak valid. Mohon lakukan permintaan dengan signature yang valid.

    Capture Charge

    Definisi: Capture Charge

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

    Contoh Permintaan Capture Charge

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

    Contoh Respon Capture Charge

    {
      "created": "2020-01-08T04:49:08.815Z",
      "status": "CAPTURED",
      "business_id": "5848fdf860053555135587e7",
      "authorized_amount": 10000,
      "external_id": "test-pre-auth",
      "merchant_id": "xendit",
      "merchant_reference_code": "598942aabb91a4ec309e9a35",
      "card_type": "CREDIT",
      "masked_card_number": "400000XXXXXX0002",
      "charge_type": "SINGLE_USE_TOKEN",
      "card_brand": "VISA",
      "bank_reconciliation_id": "5132390610356134503009",
      "capture_amount": 9900,
      "id": "598942c4bb91a4ec309e9a37"
    }

    Capture pada charge hanya perlu dilakukan apabila Anda melakukan pra-otentikasi dengan menentukan parameter capture dengan nilai false pada request Pembuatan Charge. Anda dapat melakukan capture dengan nominal yang berbeda dengan nominal yang terotorisasi selama nominal tersebut tidak melampaui nominal yang terotorisasi. Respon dari endpoint sama dengan respon charge

    Parameter Request (Money-in write permission)

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

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

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

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
    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.

    Pembuatan Refund

    Definisi: Pembuatan Refund

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

    Contoh Permintaan Pembuatan Refund

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

    Contoh Respon Pembuatan Refund

    {
      "updated": "2020-01-21T04:05:09.755Z",
      "created": "2020-01-21T04:05:04.936Z",
      "credit_card_charge_id": "58f89041780d51ed097896c5",
      "user_id": "57c5aa7a36e3b6a709b6e148",
      "amount": 15000,
      "external_id": "unique-external-id",
      "status": "REQUESTED",
      "fee_refund_amount": 150,
      "id": "58f984f09d1b74bc08506c34"
    }

    API refund menerima dua parameter, amount dan external_id. ID charge yang dikembalikan setelah charge yang berhasil harus digunakan pada request URL per definisi. Beberapa refund dapat dibuat selama total nominal uang yang akan refund tidak melebihi dari total nominal charge. Beberapa refund parsial dapat dilakukan selama nilai dari dari total jumlah refund tidak lebih besar dari jumlah nilai transaksi.

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

    Parameter Request (Money-in write permission)

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

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

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

    Parameter Respon

    Parameter Tipe Deskripsi
    updated
    required
    string Cap waktu ISO yang mencatat kapan terakhir refund tersebut mendapatkan pengkinian.
    created
    required
    string Cap waktu ISO yang mencatat kapan refund tersebut dibuat
    Timezone: GMT+0
    .
    credit_card_charge_id
    required
    string ID charge yang digunakan untuk mengidentifikasi charge yang akan digunakan.
    user_id
    required
    string ID bisnis akun Xendit Anda.
    amount
    required
    number Nominal uang yang akan di-refund.
    external_id
    required
    string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
    status
    required
    string Status dari refund tersebut. Lihat Status-status Refund
    failure_reason
    required
    string Keterangan yang diberikan apabila permintaan refund gagal. lihat Alasan Refund Gagal.
    fee_refund_amount
    required
    number Nilai nominal dari biaya transaksi yang dikembalikan (nilai ini diproporsikan sesuai dengan jumlah nilai refund yang diminta).
    id
    required
    string ID unik yang digunakan sebagai referensi dari permintaan refund.

    Status status Refund

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

    Kode Error

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

    Alasan Refund Gagal

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

    Mendapatkan Charge

    Definisi: Mendapatkan Charge

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

    Contoh Melakukan Permintaan Mendapatkan Charge Request Menggunakan External ID

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

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

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

    Contoh Respon Charge Response

    {
      "created": "2020-08-08T04:49:08.815Z",
      "status": "CAPTURED",
      "business_id": "5848fdf860053555135587e7",
      "authorized_amount": 10000,
      "external_id": "test-pre-auth",
      "merchant_id": "xendit",
      "merchant_reference_code": "598942aabb91a4ec309e9a35",
      "card_type": "CREDIT",
      "masked_card_number": "400000XXXXXX0002",
      "charge_type": "SINGLE_USE_TOKEN",
      "card_brand": "VISA",
      "bank_reconciliation_id": "5132390610356134503009",
      "capture_amount": 9900,
      "id": "598942c4bb91a4ec309e9a37"
    }

    Ini adalah endpoint untuk mengambil suatu objek charge. Anda perlu menentukan nilai dari charge_id. Respon dari endpoint sama dengan respon pembuatan charge

    Parameter Request (Money-in read permission)

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

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

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

    Tipe ID

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

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Masukan mengalami kesalahan pada proses validasi. Parameter kesalahan mengandung detil tentang kesalahan yang menyalahi validasi.
    CREDIT_CARD_CHARGE_NOT_FOUND_ERROR
    404
    credit_card_charge_id tidak ditemukan

    Permintaan Opsi Charge

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

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

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

    Definisi: Permintaan Opsi Charge

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

    Contoh Permintaan Opsi Charge

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

    Contoh Respon dari Permintaan Opsi Charge

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

    Permintaan Untuk Mendapatkan Opsi Charge

    Parameter Deskripsi
    amount
    required
    number Nominal original dari transaksi (Sebelum diberlakukan pemotongan).
    bin
    optional
    array of strings BIN 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.
    card_cvn
    optional
    number 3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Direkomendasikan untuk menyertakan parameter ini jika menggunakan token_id pada permintaan.

    Respon Permintaan Opsi Charge

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

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

    Pembuatan Promo

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

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

    Definisi: Pembuatan Promo

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

    Contoh Membuat Permintaan Pembuatan Promo

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

    Contoh Response Permintaan Pembuatan Promo

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

    Permintaan Pembuatan Promo

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

    Response Pembuatan Promo

    Objek Promo

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

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

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

    Status Promo

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

    Kesalahan Pembuatan Promo

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

    Mendapatkan Promo

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

    Definisi: Mendapatkan Promo

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

    Contoh Permintaan Untuk Mendapatkan Promo

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

    Contoh Respon Permintaan Untuk Mendapatkan Promo

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

    Parameter Yang dapat Digunakan

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

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

    Respon Permintaan Mendapatkan Promo

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

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

    Mendapatkan Perhitungan Promo

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

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

    Definisi: Mendapatkan Perhitungan Promo

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

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

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

    Contoh Permintaan Perhitungan Promo Menggunakan Token ID

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

    Contoh Respon dari Permintaan Penghitungan Promo

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

    Permintaan Mendapatkan Perhitungan Promo

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

    Response Perhitungan Promo

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

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

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

    Pembaruan Promo

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

    Definisi: Pembaruan Promo

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

    Contoh Permintaan Pembaruan Promotion

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

    Contoh Respon Pembaruan Promotion

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

    Parameter Permintaan Pembaruan Promo

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

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

    Respon Pembaruan Promo

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

    Error Codes

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

    Menghapus Promo

    Gunakan fitur ini untuk menghapus promo yang telah dibuat.

    Definition: Menghapus Promo

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

    Contoh Permintaan Menghapus Promo

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

    Contoh Respon Permintaan Menghapus Promo

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

    Parameter Permintaan Menghapus Promo

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

    Respon Permintaan Menghapus Promo

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

    Error Codes

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

    eWallet

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

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

    Versi API

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

    Versi Changelog
    2021-01-25
    Terbaru
    API eWallet baru yang mendukung top eWallet provider di Indonesia dan Filipina. API versioning tidak butuhkan. Anda dapat mengakses API eWallet baru dengan memanggil POST /ewallets/charges
    2020-02-01
    akan berhenti beroperasional pada 31 Maret 2022
    Mengimplementasikan flow asynchronous untuk callback pembayaran OVO .
    2019-02-04
    akan berhenti beroperasional pada 31 Maret 2022
    Mengembalikan reseponse segera tanpa callback.

    Pembuatan Charge eWallet

    Endpoint: Pembuatan Request Charge eWallet

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

    eWallet

    Parameter Request

    Contoh: Pembuatan Request Charge eWallet

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

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform . Silakan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    reference_id
    wajib
    string Reference ID yang disediakan oleh merchant(255 karakter)
    Note: Wajib unik untuk setiap charge request
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    amount
    wajib
    number Nominal yang harus dibayarkan
    Minimal - 100 IDR atau 1 PHP
    Maksimal - berdasarkan saldo maksimal eWallet
    checkout_method
    wajib
    string Metode checkout yang menentukan alur pembayaran untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    TOKENIZED_PAYMENT dapat digunakan untuk transaksi berulang
    channel_code
    wajib saat checkout_method = ONE_TIME_PAYMENT, opsional saat checkout_method = TOKENIZED_PAYMENT
    string Channel Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY
    channel_properties
    diperlukan berdasarkan pasangan checkout_method dan channel_code
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    parameter wajib OVO - one time payment
    Key Value
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164(Contoh. +628123123123)
    parameter wajib OVO - tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" - tidak ada poin yang akan digunakan atau "REDEEM_ALL" - poin akan digunakan untuk mengimbangi jumlah pembayaran sebelum saldo tunai digunakan. REDEEM_ALL hanya dapat digunakan jika disetujui oleh OVO untuk promosi.
    parameter wajib DANA, LINKAJA, SHOPEEPAY, SAKUKU
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    parameter wajib OVO - tokenized payment
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    redeem_points
    opsional
    enum, default = "REDEEM_NONE" - tidak ada poin yang akan digunakan atau "REDEEM_ALL" - poin akan digunakan untuk mengimbangi jumlah pembayaran sebelum saldo tunai digunakan. Hanya 50% dari jumlah transaksi (dibulatkan ke bawah) yang dapat dibayar menggunakan koin SHOPEEPAY
    parameter wajib GCASH, GRABPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    parameter wajib PAYMAYA
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End user dapat mencoba kembali pembayaran di tautan yang sama dalam waktu 15 menit.
    payment_method_id
    wajib saat checkout_method = TOKENIZED_PAYMENT, opsional saat checkout_method = ONE_TIME_PAYMENT
    string ID dari Payment Method. Payment Method digunakan untuk pembayaran ewallet tokenisasi dan akan mengabstraksi ewallet nasabah anda untuk digunakan sebagai metode pembayaran
    customer_id
    opsional
    string ID dari customer dimana Payment Method akan terhubung. Gunakan Pembuatan Customer API untuk membuat customer Anda
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail parameter objek
    Key Value
    reference_id
    wajib
    string Pengidentifikasi dari merchant untuk suatu produk tertentu<= 255 karakter
    name
    wajib
    string Nama product
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah unit
    type
    required
    string Tipe produk - PRODUCT atau SERVICE
    url
    optional
    string URL ke halaman item e-commerce
    description
    optional
    string Deskripsi produk
    sub_category
    optional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Parameter Respon

    Contoh: Respon Sukses Pembuatan Charge eWallet API

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

    Kode Error

    Contoh: Respon Error Pembuatan Request Charge eWallet API

    {
        "error_code": "UNSUPPORTED_CURRENCY",
        "message": "The payment currency request is not supported for this payment channel. Please refer to our API reference or docs to pick available currencies"
    }
    Kode Eror Deskripsi
    DUPLICATE_PAYMENT_REQUEST_ERROR
    400
    Charge request dengan reference_id yang sama telah dibuat sebelumnya
    API_VALIDATION_ERROR
    400
    Terdapat invalid input pada salah satu parameter
    UNSUPPORTED_CURRENCY
    400
    Mata uang pembayaran pada request tidak mendukung untuk channel pembayaran ini. Silakan merujuk pada API reference atau docs untuk melihat mata uang yang tersedia
    INVALID_API_KEY
    401
    Format API key tidak valid
    INVALID_MERCHANT_CREDENTIALS
    401
    Terdapat eror dengan kredensial merchant yang disediakan oleh provider eWallet. Silakan hubungi customer support Xendit untuk penyelesaian
    INVALID_TOKEN
    401
    Token penautan akun untuk pengguna akhir ini telah kedaluwarsa. Harap mulai ulang penautan akun sebelum mencoba lagi
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperbolehkan untuk melakukan request
    CHANNEL_NOT_ACTIVATED
    403
    Request pembayaran gagal dikarenakan channel pembayaran yang direquest belum diaktifkan di Xendit. Silakan melakukan aktivasi melalui dashboard atau menghubungi customer support Xendit
    CALLBACK_URL_NOT_FOUND
    404
    Request pembayaran gagal dikarenakan tidak ditemukan callback url pada dashboard Xendit atau pada request header. Silakan masukkan callback url pada dashboard Xendit
    UNSUPPORTED_CONTENT_TYPE
    403
    Tidak mendukung tipe konten yang di request
    SERVER_ERROR
    500
    Eror tidak terduga telah terjadi, team kami telah diberitahukan untuk melakukan penyelesaian isu
    CHANNEL_UNAVAILABLE
    503
    Channel pembayaran yang direquest mengalami kendala yang tidak terduga. Provider eWallet akan diberitahukan untuk penyelesaian isu

    Notifikasi Pembayaran

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

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

    Kami harap sistem Anda dapat merespon callback dengan status 200 secepatnya. Xendit mengganggap callback gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik.

    Version

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

    Contoh Status Callback Pembayaran

    Callback Payload

    Contoh: Payload Callback Pembayaran Sukses

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


    Parameter Body Tipe Deskripsi
    event
    wajib
    string Mengidentifikasi event yang memantik pengiriman notifikasi ke merchant. ewallet.capture terjadi ketika provider eWallet mengkonfirmasi status transaksi pembayaran
    business_id
    wajib
    string Business ID merchant
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0.
    data
    opsional
    object Objek charge eWallet akan dikumpulkan pada parameter ini. Silakan lihat bagian [ini] (#create-ewallet-charge) untuk informasi lengkapnya
    Data fields
    Key Value
    id
    wajib
    string Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4
    business_id
    wajib
    string Business ID merchant
    reference_id
    wajib
    string Reference ID yang dibuat oleh merchant
    Catatan: Harus unik per request pembayaran.
    status
    wajib
    Status request charge - SUCCEEDED, FAILED, VOIDED
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest dari merchant
    capture_amount
    opsional
    number Nominal capture yang direquest oleh merrchant. Pada request dimana checkout_method = ONE_TIME_PAYMENT, capture_amount akan selalu sama dengan charge_amount
    checkout_method
    wajib
    string Metode checkout menentukan alur pembayaran yang digunakan untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    channel_code
    wajib
    string Channel Channel code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY
    channel_properties
    opsional
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    Parameter wajib OVO
    Key Value
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164(Contoh. +628123123123)
    DANA, LINKAJA, SHOPEEPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    GCASH, GRABPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    PAYMAYA
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End user dapat mencoba kembali pembayaran di tautan yang sama dalam waktu 15 menit.
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_required yang dikembalikan dalam respon adalah true. Merchant harus memilih opsi yang tersedia berdasarkan pengalaman ideal untuk alur pembayaran merchant
    is_redirect_required
    wajib
    boolean Menandakan apakah redirection/pengalihan wajib dilakukan untuk menyelesaikan pembayaran
    Ketika True, merchants mengalihkan end user ke url yang diberikan pada bagian “actions”. Ketika False, tidak diperlukan adanya redirection untuk melanjutkan pembayaran
    callback_url
    wajib
    string Callback URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp for charge object creation. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    voided_at
    opsional
    string ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0
    capture_now
    wajib
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi
    payment_method_id
    opsional
    string Pengidentifikasi dari Xendit untuk token pembayaran yang terhubung dengan merchant. Hanya dapat digunakan untuk channel yang mendukung tokenisasi pembayaran
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user maupun dari provider eWallet. Kode kegagalan akan diberitahukan kepada merchant pada callback pembayaran atau melalui GET payment status setelah transaksi dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Value
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    wajib
    string Kategori item - Contoh. Elektronik
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    wajib
    number Harga per unit
    quantity
    wajib
    number Jumlah unit
    type
    wajib
    string Tipe produk - PRODUCT atau SERVICE
    url
    opsional
    string URL ke halaman item e-commerce
    description
    opsional
    string Deskripsi produk
    sub_category
    opsional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Kode Kegagalan

    Contoh: Payload Callback Pembayaran yang Gagal

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

    Get eWallet Charge Status

    Endpoint: Get eWallet Charge Status

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

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

    Version

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

    Request Parameters

    Contoh: Check eWallet Charge Status Request

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

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

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

    Contoh: Respon Sukses Cek Status Charge eWallet

    Respon Sukses Cek Status Charge eWallet

    {
      "id": "ewc_bb8c3po-c3po-r2d2-c3po-r2d2c3por2d2",
      "business_id": "5f218745736e619164dc8608",
      "reference_id": "test-reference-id",
      "status": "PENDING",
      "currency": "IDR",
      "charge_amount": 1000,
      "capture_amount": 1000,
      "checkout_method": "ONE_TIME_PAYMENT",
      "channel_code": "ID_SHOPEEPAY",
      "channel_properties": {
        "success_redirect_url": "https://dashboard.xendit.co/register/1"
      },
      "actions": {
        "desktop_web_checkout_url": null,
        "mobile_web_checkout_url": null,
        "mobile_deeplink_checkout_url": "https://deeplinkcheckout.this/",
        "qr_checkout_string": "ID123XenditQRTest321DI"
      },
      "is_redirect_required": true,
      "callback_url": "https://calling-back.com/xendit/shopeepay",
      "created": "2017-07-21T17:32:28Z",
      "updated": "2017-07-21T17:32:28Z",
      "voided_at": null,
      "capture_now": true,
      "customer_id": null,
      "payment_method_id": null,
      "failure_code": null,
      "basket": null,
      "metadata": {
        "branch_code": "tree_branch"
      }
    }
    Parameter Body Tipe Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari setiap request charge transaksi. Akan selalu di awali dengan 'ewc_', diikuti dengan UUDv4
    business_id
    wajib
    string Business ID merchant
    reference_id
    wajib
    string Reference ID yang dibuat oleh merchant
    Catatan: Harus unik per request pembayaran.
    status
    wajib
    string Status request charge
    Key Value
    SUCCEEDED
    Transaksi pembayaran untuk spesifik charge_id sukses dilakukan
    PENDING
    Transaksi pembayaran untuk spesifik charge_id menunggu pembayaran dilakukan oleh end user
    FAILED
    Transaksi pembayaran untuk spesifik charge_id telah gagal, silakan lihat failure codes untuk alasan kegagalan
    VOIDED
    Transaksi pembayaran untuk spesifik charge_id telah dilakukan void
    currency
    wajib
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    charge_amount
    wajib
    number Nominal charge yang direquest dari merchant
    capture_amount
    opsional
    number Nominal capture yang direquest oleh merrchant. Pada request dimana checkout_method = ONE_TIME_PAYMENT, capture_amount akan selalu sama dengan charge_amount
    checkout_method
    wajib
    string Metode checkout yang menentukan alur pembayaran untuk memproses transaksi
    ONE_TIME_PAYMENT digunakan untuk checkout sekali pakai
    TOKENIZED_PAYMENT dapat digunakan untuk transaksi berulang
    channel_code
    wajib
    string Channel Code menunjukkan eWallet yang digunakan untuk memproses transaksi - ID_OVO, ID_DANA, ID_LINKAJA, ID_SHOPEEPAY, ID_SAKUKU, PH_PAYMAYA, PH_GCASH, PH_GRABPAY
    channel_properties
    opsional
    object Channel properties menunjukkan informasi yang dibutuhkan untuk memulai transaksi
    Parameter wajib OVO
    Key Value
    mobile_number
    wajib
    string Format Nomor handphone customer dalam format E.164(Contoh. +628123123123)
    DANA, LINKAJA, SHOPEEPAY
    Key Value
    success_redirect_url
    wajib
    string UURL dimana end user akan diarahkan jika proses otorisasi berhasil
    GCASH, GRABPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    PAYMAYA
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi dibatalkan. End user dapat mencoba kembali pembayaran di tautan yang sama dalam waktu 15 menit.
    actions
    opsional
    string Langkah pengalihan yang harus diambil ketika is_redirect_required yang dikembalikan dalam respon adalah true. Merchant harus memilih opsi yang tersedia berdasarkan pengalaman ideal untuk alur pembayaran merchant
    Key Value
    desktop_web_checkout_url
    Penyedia layanan eWallet menampilakn URL untuk web checkout yang diakses menggunakan desktop
    mobile_web_checkout_url
    Penyedia layanan eWallet menampilakn URL untuk web checkout yang diakses menggunakan perangkat mobile
    mobile_deeplink_checkout_url
    Penyedia layanan eWallet membuat URL untuk deeplink checkout pada perangkat mobile (transaksi langsung masuk ke eWallet app untuk konfirmasi pembayaran)
    qr_checkout_string
    Provider eWallet membuat qr string untuk checkout yang harus digunakan dengan cara melakukan scanning pada layar perangkat
    is_redirect_required
    wajib
    boolean Menandakan apakah redirection/pengalihan wajib dilakukan untuk menyelesaikan pembayaran
    Ketika True, merchants mengalihkan end user ke url yang diberikan pada bagian “actions”. Ketika False, tidak diperlukan adanya redirection utnuk melanjutkan pembayaran
    callback_url
    wajib
    string Callback URL dimana notifikasi pembayaran akan dikirimkan
    created
    wajib
    string ISO 8601 Timestamp untuk pembuatan object charge. Timezone UTC+0
    updated
    wajib
    string ISO 8601 Timestamp untuk update object charge. Timezone UTC+0
    voided_at
    opsional
    string ISO 8601 Timestamp ketika transaksi dilakukan void. Timezone UTC+0
    capture_now
    wajib
    string Default: true. Parameter tidak digunakan saat ini
    customer_id
    opsional
    string ID dari customer object yang dibuat dengan Xendit. ID untuk dihubungkan dengan transaksi
    payment_method_id
    opsional
    string ID dari metode pembayaran. Hanya dapat digunakan untuk channel yang mendukung tokenisasi pembayaran
    failure_code
    opsional
    string Alasan kegagalan pembayaran oleh end user maupun dari provider eWallet. Kode kegagalan akan diberitahukan kepada merchant pada callback pembayaran atau melalui GET payment status setelah transaksi dilakukan oleh end user
    basket
    opsional
    array Himpunan objek yang mendeskripsikan item yang dibeli
    Detail objek parameter
    Key Value
    reference_id
    wajib
    string Identifier produk yang dibuat oleh merchant <= 255 karakter
    name
    wajib
    string Nama produk
    category
    required
    string Kategori item - Contoh. Elektronik
    currency
    required
    string Mata uang yang digunakan untuk transaksi dalam format ISO4217 - IDR, PHP
    price
    required
    number Harga per unit
    quantity
    required
    number Jumlah unit
    type
    required
    string Tipe produk - PRODUCT atau SERVICE
    url
    optional
    string URL ke halaman item e-commerce
    description
    optional
    string Deskripsi produk
    sub_category
    optional
    string Sub kategori produk- Contoh. Mobile Phone
    metadata
    optional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    Nilai ini hanya akan digunakan oleh user dan tidak digunakan oleh Xendit.

    Kode Error

    Contoh: Create eWallet Charge Request API Error Response Eror Respon Request Pembuatan Charge eWallet

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

    Tokenized - Pembuatan Customer Object

    Terdapat 3 langkah yang diperlukan untuk melakukan penghubungan akun menggunakan flow tokenisasi Xendit - dimulai dengan pembuatan customer object dan diakhiri dengan payment method object (digunakan pada tahap pembayaran).

    Langkah 1 - Pembuatan customer object melalui /customers endpoint wajib dilakukan sebagai langkah pertama sebelum memulai account linking untuk proses tokenisasi eWallet. customer_id yang telah dibuat akan digunakan pada request API selanjutnya sebagai identifikasi end user yang melakukan account linking. bergantung kepada persyaratan setiap kanal pembayaran, terdapat kemungkinan parameter wajib pada customer object (contoh, OVO mewajibkan nama dan nomor handphone). Pada kasus tersebut, kami merekomendasikan merchant untuk membuat UI untuk end user agar dapat melakukan input informasi yang dibutuhkan. Silakan merujuk pada persyaratan setiap kanal pembayaran dan bagian Customer untuk membuat customer object.

    OVO tokenisasi - parameter wajib pada Customer Object

    Contoh Customer Object - OVO tokenisasi

    curl https://api.xendit.co/customers -X POST \
      --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
      --header 'content-type: application/json' \
      --data '{
        "reference_id": "demo_1475801962607",
        "given_names": "John",
        "mobile_number": "+6287774441111",
        "email": "customer@website.com"
        }' \
    Parameter Request Body Tipe Deskripsi
    reference_id
    wajib
    string ID untuk identifikasi customer (255 karakter)
    mobile_number
    wajib
    string Pengidentifikasi kunci yang digunakan oleh OVO untuk penautan akun. Nomor ponsel customer dalam standar format internasional E.164 Nomor harus sesuai dengan database OVO.
    Format: +(country code)(subscriber number)
    given_names
    wajib
    string Nama depan customer (255 karakter)

    Tokenized - Account Linking

    Langkah 2 - Account linking pada tokenisasi eWallet merujuk pada pemberian otorisasi kepada merchant untuk melakukan transaksi melalui token (penghubungan) dari end user eWallet (akun). Endpoint ini memulai proses otorisasi dan akan menciptakan linked account token sebagai hasil. End user harus diarahkan ke halaman provider eWallet untuk melakukan otorisasi penghubungan akun. Setelah penghubungungan akun selesai, notifikasi penghubungan akun akan dikirimkan ke spesifik callback url. Id linked account (prefix la-) dari notifikasi yang dikirimkan harus disimpan karena id ini akan digunakan kembali ketika melakukan pembuatan payment method object pada langkah selanjutnya.

    Endpoint: Inisiasi Tokenisasi Linked Account

    POST https://api.xendit.co/linked_account_tokens/auth

    Inisiasi Tokenisasi Linked Account - Request

    Contoh Request Inisiasi Tokenisasi Linked Account Tokenization

    curl https://api.xendit.co/linked_account_tokens/auth -X POST \
       --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
       --header 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "PH_GRABPAY",
        "properties": {
            "success_redirect_url": "https://www.my-shop.co/auth/success",
            "failure_redirect_url": "https://www.my-shop.co/auth/failed",
            "cancel_redirect_url": "https://www.my-shop.co/auth/cancel"
        }
    }'\
    Request Body Parameter Tipe Deskripsi
    customer_id
    wajib
    string ID dari customer object yang akan dilakukan penghubungan akun. Panggil Tokenized - Create Customer untuk menghasilkan customer ID
    channel_code
    wajib
    string Pengidentifikasi untuk kanal spesifik dari akun yang dihubungkan. Kode harus menggunakan huruf besar.

    eWallet yang tersedia beserta dengan masing-masing channel code.:
    • OVO (ID) - ID_OVO
    • SHOPEEPAY (ID) - ID_SHOPEEPAY
    • GRABPAY (PH) - PH_GRABPAY
    • PAYMAYA (PH) - PH_PAYMAYA
    properties
    wajib
    object JSON yang berisikan informasi yang dibutuhkan untuk memproses otorisasi. Nilai di dalam properties berubah mengikuti eWallet provider :

    Parameter wajib OVO, SHOPEEPAY, GRABPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan setelah proses otorisasi sukses
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan setelah proses otorisasi gagal dilakukan
    callback_url
    wajib
    string URL dimana notifikasi sukses penghubungan akun akan dikirimkan
    Parameter wajib PAYMAYA
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan setelah proses otorisasi sukses dilakukan
    failure_redirect_url
    wajib
    string URL dimana end user akan diarahkan setelah proses otorisasi gagal dilakukan
    cancel_redirect_url
    wajib
    string UURL dimana end user akan diarahkan setelah proses otorisasi dibatalkan. End user dapat mencoba melakukan pembayaran kembali dalam waktu 15 menit.
    callback_url
    wajib
    string URL dimana notifikasi sukses penghubungan akun akan dikirimkan
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Respon Inisiasi Tokenisasi Linked Account

    Contoh Response Sukses Inisiasi Tokenisasi Linked Account

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "PH_GRABPAY",
        "authorizer_url": "https://link-web.xendit.co/oauth/lat-4ec01c8d-0326-4a35-bc11-b64c85f7408e/confirm",
        "status": "PENDING",
        "metadata": null
    }
    Parameter Tipe Deskripsi
    id string Pengidentifikasi unik dari Xendit untuk setiap otorisasi linked account token
    customer_id string ID Customer object
    channel_code string Kode pengidentifikasi kanal pembayaran
    authorizer_url string URL dari provider eWallet untuk end user melakukan otorisasi penghubungan akun. End user harus diarahkan ke halaman URL ini agar tokenisasi dapat diproses.
    status string Status otorisasi. Request API yang sukses akan menghasilkan PENDING status. Setelah sukses melakukan penghubungan akun, status akan diupdate menjadi COMPLETED. Jika penghubungan akun gagal, status akan diupdate menjadi FAILED.
    metadata object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama account linking.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Inisiasi Tokenisasi Linked Account - Eror

    Lihat eror pada umumnya di sini.

    Kode eror Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang disediakan tidak tersedia atau belum diaktifkan untuk akun ini.
    CUSTOMER_NOT_FOUND_ERROR
    404
    customer_id yang disediakan pada request tidak ada atau request tidak diotorisasi
    CHANNEL_UNAVAILABLE
    503
    Target kanal pembayaran saat ini tidak tersedia. Hal ini disebabkan partner mengalami downtime atau eror.
    INVALID_ACCOUNT_DETAILS
    400
    Nilai yang disediakan dalam request properties tidak cocok dengan record yang ada di sisi partner
    ACCOUNT_ACCESS_BLOCKED
    400
    Provider eWallet menolak penghubungan akun. Hal ini dapat dikarenakan eWallet account tidak dapat diakses atau tidak diaktifkan untuk layanan ini.

    Tokenized - Account Linking Status Callback

    ID linked account token (accounts parameter - prefix la-) pada notifikasi harus disimpan karena akan digunakan kembali untuk melakukan pembuatan payment method object pada langkah selanjutnya.

    Callback Payload

    Example: Linked Account Tokenization Callback Payload

    {
      "event": "linked_account_token.successful",
      "timestamp": "2021-05-21T12:28:49.019Z",
      "id": "lat-d6876bf1-9722-47e3-8757-f74c7d7772b5",
      "channel_code": "PH_GRABPAY",
      "type": "EWALLET",
      "accounts": [
        {
          "id": "la-eddf88b1-312a-4f78-aca1-96e5ff4161b4",
          "account_details": null,
          "account_type": "EWALLET",
          "balance": 1000000,
          "currency": "PHP",
          "description": null,
          "name": null,
          "point_balance": null
        }
      ]
    }
    Parameter Tipe Deskripsi
    event string Pengidentifikasi event - "linked_account_token.successful"
    timestamp string ISO 8601 timestamp dari event. Timezone: UTC+0
    id string Pengidentifikasi unik dari Xendit untuk setiap otorisasi linked account token - prefix lat-.
    channel_code string Kode pengidentifikasi untuk channel - ID_OVO, ID_SHOPEEPAY, PH_PAYMAYA, PH_GRABPAY
    type enum Tipe akun. Nilai yang diharapkan: EWALLET
    accounts array
    Key Value
    id string Pengidentifikasi unik untuk akun ewallet. Memliki prefix la-.
    account_details string Pengidentifikasi dari penyedia eWallet, contoh: nomor ponsel. Nilai akan menjadi null jika tidak tersedia
    account_type string Tipe akun. Nilai yang diharapkan: EWALLET
    balance number Jumlah saldo utama pada akun eWallet yang tersedia yang diperoleh dari penyedia eWallet. Nilai akan menjadi null jika tidak tersedia
    currency string Mata uang dari akun eWallet dalam ISO 4217 - IDR, PHP
    description string Deskripsi akun dari penyedia eWallet. Nilai akan menjadi null jika tidak tersedia
    name string Nama pemilik akun eWallet. Nilai akan menjadi null jika tidak tersedia
    point_balance number Jumlah saldo poin pada akun eWallet. Hanya tersedia pada penyedia eWallet tertentu yang memiliki sistem poin. Nilai akan menjadi null jika tidak tersedia

    Tokenized - Create Payment Method

    Langkah 3 - Payment method object digunakan untuk mewakili linked account (dari notifikasi account linking - prefix la-) untuk melakukan transaksi pembayaran. Untuk membuat payment method object, customer id dan linked account token id harus dimasukkan pada request ke endpoint ini.

    Dengan payment_method_id (prefix pm-) dikembalikan pada respon dari endpoint ini, Anda dapat memasukkan payment_method_id pada endpoint eWallet charge untuk melakukan tokenisasi pembayaran.

    Endpoint: Pembuatan Payment Method

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

    Pembuatan Payment Method - Request

    Contoh Request Pembuatan Payment Method

    curl https://api.xendit.co/payment_methods -X POST \
       --user xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman: \
       --header 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "type": "EWALLET",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a"
        }
    }'\
    Request Body Parameter Tipe Description
    customer_id
    wajib
    string ID of the customer object to which the account token will be linked to
    type
    wajib
    string Type of payment method

    Nilai yang didukung: EWALLET
    properties
    wajib
    object JSON yang berisi informasi pengidentifikasi payment method:

    Key Value
    id
    wajib
    ID dari linked account (prefix la-)
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user. User dapat mendefinisikan parameter JSON dan properti yang akan ditambahkan.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Pembuatan Payment Method - Respon

    Contoh Respon Sukses Pembuatan Payment Method

    {
        "id": "pm-fea3b000-f9dc-41c5-9bfc-fd37c2b0d84d",
        "type": "EWALLET",
        "properties": {
            "id": "la-f8b41ad0-180a-44d5-bad5-3291cd7262ac"
        },
        "customer_id": "f0ac5e6f-436b-4228-ac56-7324a2aec6f4",
        "status": "ACTIVE",
        "created": "2021-04-01T10:12:03.564Z",
        "updated": "2021-04-01T10:12:03.564Z",
        "metadata": {},
    }
    
    Parameter Tipe Deskripsi
    id string Pengidentifikasi unik dari payment method. Memiliki prefix pm-.
    type string Tipe account yang dihubungkan.
    Nilai yang diekspektasi: EWALLET
    properties object Objek berisi informasi akun.

    Key Value
    id stringID dari linked account.
    customer_id string ID dari customer object yang telah terhubung dengan metode pembayaran
    status string Status dari metode pembayaran.
    Akan menjadi ACTIVE setelah pembuatan.
    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 diperbarui
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan metode pembayaran.
    OObjek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Pembuatan Payment Method - Eror

    Lihat eror pada umumnya di sini.

    Kode Eror Deskripsi
    LIINKED_ACCOUNT_NOT_FOUND_ERROR
    400
    properties yang disediakan dan kombinasi type pada request tidak ada atau akses tidak terotorisasi
    CUSTOMER_NOT_FOUND_ERROR
    400
    customer_id yang diisi saat request tidak ada atau akses tidak terotorisasi
    DUPLICATE_ERROR
    409
    Sudah ada metode pembayaran yang ACTIVE yang terhubung dengan akun yang sama

    Tokenized - Get Account Balance

    Endpoint ini mengembalikan daftar akun eWallet dan dapat menampilkan saldo yang dapat diakses oleh linked account token (prefix lat-).

    Endpoint: Get Account Balance

    GET https://api.xendit.co/linked_account_tokens/{linked_account_token_id}/accounts

    Get Account Balance - Request

    Contoh Get Account Balance melalui Request Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/accounts -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Path Parameter Tipe Deskripsi
    linked_account_token_id
    wajib
    string id Linked account token yang diterima dari proses inisiasi otorisasi akun. Memiliki prefix lat-.

    Get Account Balance - Respon

    Endpoint ini mengembalikan objek array dengan properti sebagai berikut:

    Contoh Respon Sukses Get Account Balance melalui Linked Account Token

    [
        {
            "id": "la-f8b41ad0-180a-44d5-bad5-3291cd7262ac",
            "channel_code": "PH_GRABPAY",
            "type": "EWALLET",
            "properties": {
                "account_details": null,
                "account_type": "EWALLET",
                "balance": 1000000,
                "currency": "PHP",
                "description": null,
                "name": null,
                "point_balance": null
            }
        }
    ]
    Parameter Tipe Deskripsi
    id string Pengidentifikasi unik untuk akun ewallet. Memliki prefix la-.
    channel_code string Kode pengidentifikasi untuk channel - ID_OVO, ID_SHOPEEPAY, PH_PAYMAYA, PH_GRABPAY
    type string Tipe akun yang telah terhubung.
    Nilai yang diharapkan: EWALLET
    properties object Objek yang berisi informasi terkait dengan akun.

    Key Value
    account_details stringPengidentifikasi dari penyedia eWallet, contoh: nomor ponsel. Nilai akan menjadi null jika tidak tersedia
    account_type stringTipe akun. Nilai yang diharapkan: EWALLET
    balance numberJumlah saldo utama pada akun eWallet yang tersedia yang diperoleh dari penyedia eWallet. Nilai akan menjadi null jika tidak tersedia
    currency stringMata uang dari akun eWallet dalam ISO 4217 - IDR, PHP
    description stringDeskripsi akun dari penyedia eWallet. Nilai akan menjadi null jika tidak tersedia
    name stringNama pemilik akun eWallet. Nilai akan menjadi null jika tidak tersedia
    point_balance numberJumlah saldo poin pada akun eWallet. Hanya tersedia pada penyedia eWallet tertentu yang memiliki sistem poin. Nilai akan menjadi null jika tidak tersedia

    Get Account Balance melalui Linked Account Token - Eror

    Lihat eror pada umumnya di sini.

    Kode Eror Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang diberikan saat request tidak tersedia atau belum diaktifkan untuk akun ini.

    Tokenized - Unlinking

    Melepaskan tautan Linked Account Token yang sukses sebelumnya.

    Endpoint: Melepaskan Tautan Linked Account Token

    DELETE https://api.xendit.co/linked_account_tokens/{linked_account_token_id}

    Permintaan Melepaskan Linked Account Token

    Contoh: Permintaan Melepaskan Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/validate_otp -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
      $linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
      $url = "https://api.xendit.co/linked_account_tokens/" . $linkedAccountTokenId;
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    let linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
    let url = "https://api.xendit.co/linked_account_tokens/" + linkedAccountTokenId;
    
    var headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
    
    var requestOptions = {
      method: 'DELETE',
      headers: headers,
      redirect: 'follow'
    };
    
    fetch(url, requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    try {
      Xendit.apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    
      UnbindedLinkedAccount linkedAccount = UnbindedLinkedAccount.unbindLinkedAccountToken ("lat-a08fba1b-100c-445b-b788-aaeaf8215e8f");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    Path Parameter Type Description
    linked_account_token_id
    required
    string Linked account token id diterima dari Inisiasi Linked Account Tokenization. Ini mempunyai prefix lat-

    Respon Melepaskan Linked Account Token

    Contoh: Respon Melepaskan Linked Account Token

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "is_deleted": true
    }
    Parameter Tipe Deskripsi
    id string ID unik yang dihasilkan oleh Xendit untuk linked account token authorization tertentu
    is_deleted boolean Mendeskripsikan apakah tautan linked account token sudah sukses dilepaskan/dihapuskan

    Error Saat Melepaskan Linked Account Token

    Lihat error lain yang umum disini.

    Kode Kesalahan Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disediakan tidak dapat diakses untuk akun ini.

    Tokenized - Expiry Callbacks

    Expired Payment Method Callback

    Ini akan dikirim ketika payment method tertentu telah kadaluarsa atau telah dibatalkan. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk menautkan kembali. Untuk menerima panggilan balik ini, harap siapkan callback url di halaman pengaturan dasbor Xendit > Callbacks > Direct Debit > Expiring/Expired Payment Method.

    Example: Callback Payload

    {
        "event": "payment_method.expiry.expired",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "customer_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "business_id": "5f21361959ef2b788cbbe97f"
    }
    Parameter Deskripsi
    event string payment_method.expiry.expired
    timestamp string ISO 8601 Event timestamp
    id string ID untuk otorisasi tertentu (payment method). Akan memiliki pm- sebagai prefix.
    customer_id string Customer ID dari Xendit
    business_id string Internal Business ID Xendit yang mengidentifikasi merchant

    PayLater

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

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

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

    Inisiasi PayLater Plans

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

    Endpoint: Inisiasi PayLater Plans

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

    Versi

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

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

    API Versioning tidak dibutuhkan. Anda dapat mengakses API baru dengan memanggil POST /paylater/plans dan POST /paylater/charges
    2019-02-04 Cardless credit API yang mendukung Kredivo /cardless-credit

    Parameter Rekues

    Contoh: Inisiasi PayLater Plans - Request

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

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

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

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency
    wajib
    string Kode mata uang ISO 4217 transaksi PayLater

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

    Batas transaksi per channel
    Kode Channel Min Maks
    ID_KREDIVO (IDR) 1,000 30,000,000
    ID_AKULAKU (IDR) 1,000 25,000,000
    PH_BILLEASE (PHP) 50 150,000
    order_items
    wajib
    array Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater

    Parameter objek
    Key Value
    type
    wajib
    string Tipe item

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

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

    Format Special dan alphanumeric
    Max length 255 karakter
    net_unit_amount
    wajib
    number Jumlah net untuk di-charge per unit
    quantity
    wajib
    number Jumlah unit item ini pada basket

    Min 1
    url
    wajib
    string URL item

    Wajib HTTPS atau HTTP
    category
    wajib
    string Kategori merchant untuk item

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

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

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

    Parameter Respon

    Contoh: Inisiasi PayLater Plans - Respon Sukses

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

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

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency string Kode mata uang ISO 4217 untuk transaksi PayLater

    Mata uang yang didukung: IDR, PHP
    amount number Jumlah transaksi total yang sama dengan jumlah net_unit_amount dikali dengan quantity pada array order_items
    order_items array Array objek yang mendeskripsikan item-item yang dibeli menggunakan PayLater
    options array Payment plan tersedia yang dapat dilihat oleh user untuk membeli produk/jasa Anda. Langsung disediakan oleh penyedia PayLater.

    Detil opsi PayLater
    Key Value
    downpayment_amount number Jumlah nominal uang muka.
    installment_amount number Jumlah nominal yang harus dibayar pada setiap periode tagihan cicilan.
    interest_rate number Suku bunga yang akan ditagih

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

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

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

    Kode Error

    Contoh: Inisiasi PayLater Charge Request API - Respon Error

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

    Membuat Charge Paylater

    Membuat Transaksi Paylater / Membuat URL Checkout

    Versi

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

    Endpoint: Create PayLater Charges

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

    Parameter Request

    Contoh: Membuat Payment Request

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

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

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

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

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

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

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

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

    Parameter Respon

    Contoh Respon Sukses Membuat PayLater Charge

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

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

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

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

    Kode Error

    Contoh: Respon Error API Membuat PayLater Charge Request

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

    Payment Status Callback

    Anda harus mempersiapkan endpoint dari sistem Anda untuk menerima seluruh notifikasi callback pembayaran dari sistem kami. Anda akan menerima callback ketika end-customer mencoba melakukan pembayaran dengan PayLater. Silakan menentukan endpoint ini pada halaman URL callback dashboard Xendit callback di bawah PayLater paid.

    Notifikasi pembayaran callback akan dikirim sebagai POST request kepada callback_url yang ditentukan di dashboard. Catatan: Mohon berikan respon balik dengan status 200 agar kami tahu bahwa notifikasi telah diterima dan tidak perlu mengulang notifikasi.

    POST callback-url

    Versi

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

    Callback Payload

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

    Contoh: PayLater Callback Pembayaran Callback Payload

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

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

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

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

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

    Cek PayLater Charge melalui ID

    Cek detil pembayaran Paylater melalui Charge ID

    Endpoint: Cek PayLater Charge melalui ID

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

    Paramter Request

    Contoh: Cek PayLater Charge Status melalui ID - Request

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

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

    Parameter Respon

    Contoh: Cek Status PayLater Charge melalui ID - Respon

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

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

    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency string ISO 4217 Kode mata uang transaksi PayLater

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

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

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

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

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

    Kode Error

    Contoh: Cek PayLater Charge Status melalui ID - Respon Error

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

    Refund Paylater Charge

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

    Endpoint: Membuat Refund Paylater

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

    Parameter Request

    Contoh: Request - Membuat Refund Paylater

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds -X POST \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
       -H 'Content-Type: application/json' \
       --data-raw '{
        "amount": "1000",
        "reason": "DEFECTIVE_ITEM"
    }'

    Contoh: Sampel JSON request

    {
        "amount": 1000,
        "reason": "DEFECTIVE_ITEM"
    }
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    id
    Wajib
    string Pengidentifikasi unik untuk transaksi charge request (dikembalikan sebagai id pada request charge paylater)
    Parameter Body Tipe Deskripsi
    amount
    opsional
    number Nominal yang akan di refund kepada customer. Total nominal refund tidak boleh melebihi nominal transaksi asli. Refund hanya akan bisa dilakukan untuk nominal charge yang belum di refund.
    Jika parameter amount tidak ada, sisa nominal yang belum di refund akan diproses.
    reason
    opsional
    enum Salah satu nilai berikut dapat digunakan sebagai alasan refund - DUPLICATE, FRAUDULENT, CHANGE_OF_MIND, CHANGE_PAYMENT_METHOD, UNFULFILLED_ITEM, DEFECTIVE_ITEM, OTHERS

    Parameter Respon

    Contoh: Respon - Membuat Refund Paylater

    {
        "id" : "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
        "charge_id" : "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "channel_code" : "PH_BILLEASE",
        "currency" : "PHP",
        "amount" : 1234.56,
        "reason" : "UNFULFILLED_ITEM",
        "status" : "PENDING",
        "created" : "2021-04-20T16:23:52Z",
        "updated" : null
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi refund
    Akan selalu diawali dengan plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge request
    Akan selalu diawali dengan plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency string ISO 4217 kode mata uang untuk transaksi PayLater
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp dalam ISO 8601 untuk request refund
    updated number Timestamp dalam ISO 8601 untuk refund objek terbaru

    Kode Error

    Contoh: Respon Error - Membuat Refund Paylater

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskripsi
    API_VALIDATION_ERROR
    400
    Terdapat input yang tidak valid pada salah satu field yang diminta.
    REFUND_NOT_SUPPORTED
    400
    Request refund gagal karena refund tidak tersedia pada penyedia Paylater.
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Request refund gagal karena refudn sebagian tidak tersedia pada penyedia Paylater.
    INSUFFICIENT_BALANCE
    400
    Saldo Xendit tidak cukup untuk melakukan refund. Silakan top up saldo Xendit Anda atau menunggu transaksi lainnya settled.
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Refund request gagal karena refund dengan nominal penuh telah dilakukan sebelumnya.
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi.
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera.
    CHANNEL_UNAVAILABLE
    503
    Saluran pembayaran saat ini sedang mengalami kendala tak terduga. Penyedia paylater akan diifnormasikan untuk menyelesaikan isu.

    Get Refund dengan Refund ID

    Dapatkan status refund melalui endpoint /paylater/charges.

    Endpoint: Get PayLater Refund dengan ID

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

    Parameter Request

    Contoh: Request - GET PayLater Refund dengan ID

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds/plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silakan buka xenPlatform untuk informasi lebih lanjut.
    Path Parameter Tipe Deskripsi
    charge_id
    wajib
    string ID dari Paylater charge
    refund_id
    wajib
    string ID dari Paylater Refund

    Parameter Respon

    Contoh: Respon - GET PayLater Refund by ID

    {
        "id" : "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
        "charge_id" : "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
        "channel_code" : "PH_BILLEASE",
        "currency" : "PHP",
        "amount" : 1234.56,
        "reason" : "UNFULFILLED_ITEM",
        "status" : "PENDING",
        "created" : "2021-04-20T16:23:52Z",
        "updated" : null
    }
    Parameter Body Tipe Deskripsi
    id string Pengidentifikasi unik untuk transaksi
    Akan selalu diawali oleh plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge paylater
    Akan selalu diawali oleh plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater.
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency string ISO 4217 kode mata uang untuk transaksi PayLater.
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp dalam ISO 8601 untuk request refund
    updated number Timestamp dalam ISO 8601 untuk refund objek terbaru

    Kode Eror

    Contoh: Respon Error - GET PayLater Refund dengan ID

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskeripsi
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera

    Daftar Refund Paylater

    Dapatkan seluruh status refund yang telah dibuat. Endpoint ini hanya berlaku untuk Paylater charge yang dibuat dari endpoint /paylater/charges.

    Endpoint: Daftar Paylater Refunds

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

    Parameter Request

    Contoh: Request - Daftar Refund Paylater

    curl https://api.xendit.co/paylater/charges/plc_8cb12305-9bcf-4441-a087-ee0d446e297b/refunds?limit=10&status=SUCCEEDED -X GET \
       -u xnd_development_LoReMIPman+ZPGT+ZZ9b3ooF4w3Dn+R1k+LoReMIPman:
    Header Tipe Deskripsi
    for-user-id
    optional
    string Sub-account user-id yang Anda ingin gunakan untuk membuat transaksi.

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

    Parameter Respon

    Example: Respon - Daftar Refund Paylater

    {
      "data": [
        {
          "id": "plr_2f2aa47f-2764-4b42-8712-c3fb1270b09e",
          "charge_id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
          "channel_code": "PH_BILLEASE",
          "currency": "PHP",
          "amount": 1234.56,
          "reason": "UNFULFILLED_ITEM",
          "status": "SUCCEEDED",
          "created": "2021-04-20T16:23:52Z",
          "updated": "2021-04-20T16:23:52Z"
        },
        {
          "id": "plr_a351fd9a-90da-459a-b479-9b34e8be6009",
          "charge_id": "plc_8cb12305-9bcf-4441-a087-ee0d446e297b",
          "channel_code": "PH_BILLEASE",
          "currency": "PHP",
          "amount": 1000,
          "reason": "UNFULFILLED_ITEM",
          "status": "SUCCEEDED",
          "created": "2021-04-20T16:23:52Z",
          "updated": "2021-04-20T16:23:52Z"
        }
      ],
      "has_more": false
    }
    Parameter Body Tipe Deskripsi
    data array Himpunan data dari objek refund paylater yang terikat pada charge id tertentu
    Parameter objek refund
    Key Nilai
    id string Pengidentifikasi unik dari transaksi refund.
    Akan selalu diawali oleh plr_, diikuti dengan UUIDv4
    charge_id string Pengidentifikasi unik untuk transaksi charge paylater.
    Akan selalu diawali oleh plc_, diikuti dengan UUIDv4
    channel_code string Channel code untuk penyedia PayLater.
    Channel yang didukung: ID_KREDIVO, ID_AKULAKU, PH_BILLEASE
    currency string ISO 4217 kode mata uang untuk transaksi PayLater
    Mata uang yang didukung: IDR, PHP
    amount number Nominal untuk di refund
    reason string Alasan Refund
    status enum Status refund request, nilai yang tersedia - SUCCEEDED, FAILED, PENDING
    created string Timestamp UTC+0 dalam ISO 8601 untuk request refund
    updated string Timestamp UTC+0 dalam ISO 8601 untuk objek refund request terbaru
    has_more boolean Mengindikasikan apakah terdapat item lebih untuk di-query berdasarkan filter query dari hasil saat ini. Jika hasil kosong, has_more akan mengembalikan false.

    Kode Eror

    Contoh: Respon Error - Daftar Refund Paylater

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "Refund resource was not found. Please check your query again"
    }
    Kode Eror Deskripsi
    INVALID_API_KEY
    401
    Format API key tidak sah
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak diperkenankan untuk melakukan request
    DATA_NOT_FOUND
    404
    Sumber data tidak ditemukan. Silakan cek query Anda lagi
    SERVER_ERROR
    500
    Eror tidak terduga terjadi. Team kami telah diinformasikan dan akan melakukan perbaikan segera

    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, Shopeepay, lihat lebih banyak).

    Buat Kode QR

    Endpoint: Buat Kode QR

    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);
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { QrCode } = x;
    const qrcodeSpecificOptions = {};
    const q = new QrCode(qrcodeSpecificOptions);
    
    const resp = await q.createCode({
      externalID: "testing_id_123",
      type: "DYNAMIC",
      callbackURL: "https://yourwebsite.com/callback",
      amount: 1500,
    });
    console.log(resp);
    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.
    with-fee-rule
    optional
    string ID Fee Rule yang ingin Anda aplikasikan ke transaksi yang dilakukan.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API. Hanya dapat digunakan untuk jenis QR Code dynamic.

    Header ini hanya dapat digunakan untuk akun yang sudah memiliki xenPlatform. Lihat xenPlatform untuk informasi lebih lanjut.
    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 satu-kali, transaksi selanjutnya akan dikembalikan
    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 5,000,000
    metadata
    opsional
    object Objek dari informasi tambahan yang mungkin digunakan oleh user.
    Anda dapat menambahkan hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    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",
        "metadata": {
            "branch_code": "senayan_372",
        }
    }
    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)
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    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

    Cek Kode QR

    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);
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { QrCode } = x;
    const qrcodeSpecificOptions = {};
    const q = new QrCode(qrcodeSpecificOptions);
    
    const resp = await q.getCode({
      externalID: "testing_id_123",
    });
    console.log(resp);
    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",
        "metadata": {
            "branch_code": "senayan_372",
        }
    }
    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)
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    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

    Daftar Pembayaran

    GET https://api.xendit.co/qr_codes/payments?external_id={external_id}&from={created}&to={created}&limit={number}

    Get Array of Payments menggunakan external_id

    Contoh: Get Array of Payments menggunakan external_id

    curl 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2' -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    
    curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { QrCode } = x;
    const qrcodeSpecificOptions = {};
    const q = new QrCode(qrcodeSpecificOptions);
    
    const resp = await q.getPayments({
      externalID: "testing_id_123",
      from: "2021-01-04T08:09:30.000Z",
      to: "2021-02-04T07:44:20.332Z",
      limit: 10,
    });
    console.log(resp);
    Path Parameter Type Description
    external_id
    wajib
    string ID transaksi unik dari merchant untuk membuat QR code
    limit
    optional
    number Default = 10. Jumlah transaksi pembayaran yang dikembalikan pada response
    from
    optional
    string Timestamp awal untuk filter berdasarkan waktu menggunakancreated, timestamp seharusnya lebih awal dari parameter to
    to
    optional
    string Timestamp akhir untuk filter berdasarkan waktu menggunakan created, timestamp harus lebih dari parameter from

    Respon Get Array of Payments menggunakan external_id

    Contoh: Respon Sukses Get Array of Payments menggunakan external_id

    [
          {
      "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
      "amount": 1500,
      "created": "2020-01-08T18:18:18.857Z",
      "qr_code": {
        "id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
        "external_id": "testing_id_123",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "type": "DYNAMIC",
        "metadata": {
            "branch_code": "senayan_372",
        }
      },
      "status": "COMPLETED"
         },
         {
      "id": "qrpy_8182837te-87st-49ing-8696-1229bd22222",
      "amount": 1500,
      "created": "2020-01-08T18:18:20.857Z",
      "qr_code": {
        "id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
        "external_id": "testing_id_123",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "type": "DYNAMIC",
        "metadata": {
            "branch_code": "senayan_372",
        }
      },
      "status": "COMPLETED"
         }
    ]
    Parameter Deskripsi
    id
    wajib
    string Pengidentifikasi unik dari sebuah transaksi
    nominal
    wajib
    number nominal yang dibayarkan oleh customer
    created
    wajib
    string Timestamp ISO 8601 ketika QR Code telah dibayarkan (dalam UTC)
    qr_code
    wajib
    object Objek QR code yang diasosiasikan dengan pembayaran QR code
    parameter QR code
    Key Value
    id
    wajib
    string Pengidentifikasi unik untuk pembuatan transaksi QR code
    external_id
    wajib
    string Pengidentifikasi unik untuk request pembayaran spesifik dari merchant
    qr_string
    wajib
    string QR string yang akan ditampilkan untuk user
    type
    wajib
    string Tipe QR code - DYNAMIC atau STATIC
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    status
    wajib
    string Status pembayaran. Nilai yang mungkin muncul: COMPLETED

    API Respon Eror

    Contoh: Respon Error API Get Array of Payments menggunakan external_id

    {
        "error_code": "DATA_NOT_FOUND",
        "message": "QR code with external_id testing_id_123 not found"
    }
    Kode Eror Deskripsi
    DATA_NOT_FOUND
    404
    QR code external_id spesifik tersebut 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

    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);
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { QrCode } = x;
    const qrcodeSpecificOptions = {};
    const q = new QrCode(qrcodeSpecificOptions);
    
    const resp = await q.simulate({
      externalID: "testing_id_123",
    });
    console.log(resp);
    
    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 Rp 1,500
    Catatan: Max nominal is Rp 5,000,000

    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",
        "metadata": {
            "branch_code": "senayan_372",
        }
      },
      "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
    object Objeck QR code yang diasosiasikan dengan pembayaran QR code
    parameter QR code
    Key Value
    id
    wajib
    string Pengidentifikasi unik untuk pembuatan transaksi QR Code
    external_id
    wajib
    string Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code
    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)
    type
    wajib
    string Tipe QR code - DYNAMIC or STATIC
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    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.

    Notifikasi Pembayaran

    Xendit mengirim notifikasi pembayaran ke sistem Anda melalui callback. Anda perlu mempersiapkan URL untuk menerima callback.

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

    Kami harap sistem Anda dapat merespon callback dengan status 200 secepatnya. Xendit mengganggap callback gagal ketika kami tidak menerima respon dari sistem Anda selama 30 detik.

    Pelajari lebih lanjut mengenai Callback.

    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",
        "metadata": {
            "branch_code": "senayan_372",
        }
      },
      "status": "COMPLETED"
    }
    Header Parameter Tipe Description
    x-callback-token
    required
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    Body 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 dibayarkan (dalam UTC)
    qr_code
    wajib
    object Objeck QR code yang diasosiasikan dengan pembayaran QR code
    parameter QR code
    Key Value
    id
    wajib
    string Pengidentifikasi unik untuk pembuatan transaksi QR Code
    external_id
    wajib
    string Pengidentifikasi unik yang secara spesifik dibuat oleh merchant untuk pembuatan QR Code
    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)
    type
    wajib
    string Tipe QR code - DYNAMIC or STATIC
    metadata
    opsional
    object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama pembuatan charge.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.
    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.

    Buat Linked Account Token

    Fitur Linked Account Token memungkinkan Anda untuk melakukan otorisasi terhadap akun pembayaran customer. Endpoint ini digunakan untuk melakukan proses otorisasi akun dan akan menghasilkan token yang dapat digunakan untuk melakukan pembayaran menggunakan Direct Debit bila kanal Direct Debit mendukung fitur Linked Account Token

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

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

    Endpoint: Initialize Linked Account Tokenization

    POST https://api.xendit.co/linked_account_tokens/auth

    Request Inisiasi Linked Account Tokenization

    Contoh Request Inisiasi Linked Account Tokenization

    curl https://api.xendit.co/linked_account_tokens/auth -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "DC_BRI",
        "properties": {
            "account_mobile_number": "+62818555988",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "account_email": "email@email.com"
        }
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $linkedAccountTokenizationParams = [
        'customer_id' => '4b7b6050-0830-440a-903b-37d527dbbaa9',
        'channel_code' => 'DC_BRI',
        'properties' => [
          'account_mobile_number' => '+62818555988',
          'card_last_four' => '8888',
          'card_expiry' => '06/24',
          'account_email' => 'test.email@xendit.co'
        ],
        'metadata' => [
          'meta' => 'data'
        ]
      ];
    
      $initializeTokenization = \Xendit\DirectDebit::initializeLinkedAccountTokenization(
        $linkedAccountTokenizationParams
      );
      var_dump($initializeTokenization);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.initializeTokenization({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
      channelCode: 'DC_BRI',
      properties: {
        accountMobileNumber: '+62818555988',
        cardLastFour: '1234',
        cardExpiry: '06/24',
        accountEmail: 'email@email.com',
      },
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    properties := map[string]interface{}{
      "account_mobile_number": "+62818555988",
      "card_last_four": "8888",
      "card_expiry": "06/24",
      "account_email": "test.email@xendit.co",
    }
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := linkedaccount.InitializeLinkedAccountTokenizationParams{
      CustomerID:   "791ac956-397a-400f-9fda-4958894e61b5",
      ChannelCode:  xendit.DC_BRI,
      Properties:   properties,
      Metadata:     metadata,
    }
    
    resp, err := linkedaccount.InitializeLinkedAccountTokenization(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("initialized linked account tokenization: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> properties = new HashMap<>();
      properties.put("account_mobile_number", "+62818555988");
      properties.put("card_last_four", "8888");
      properties.put("card_expiry", "06/24");
      properties.put("account_email", "test.email@xendit.co");
    
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("tes", "123");
    
      Map<String, Object> params = new HashMap<>();
      params.put("customer_id", "791ac956-397a-400f-9fda-4958894e61b5");
      params.put("channel_code", "DC_BRI");
      params.put("properties", properties);
      params.put("metadata", metadata);
    
      InitializedLinkedAccount linkedAccount = InitializedLinkedAccount.initializeLinkedAccountTokenization(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    card_linking = DirectDebit.helper_create_card_link(
        account_mobile_number="+62818555988",
        card_last_four="8888",
        card_expiry="06/24",
        account_email="test.email@xendit.co",
    )
    linked_account = DirectDebit.initialize_tokenization(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        channel_code="DC_BRI",
        properties=card_linking,   
    )
    print(linked_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    InitializedLinkedAccountTokenParameter parameter = new InitializedLinkedAccountTokenParameter
    {
        CustomerId = "customer-id",
        ChannelCode = LinkedAccountEnum.ChannelCode.DcBri,
        Properties = new LinkedAccountProperties
        {
            AccountMobileNumber = "+62818555988",
            CardLastFour = "4444",
            CardExpiry = "06/24",
            AccountEmail = "test@email.com",
        },
        Metadata = new Dictionary<string, object>()
        {
            { "example-metadata", "here is the example" },
        },
    };
    
    InitializedLinkedAccountToken initializedLinkedAccountToken = await linkedAccountToken.Initialize(parameter);
    Request Body Parameter Deskripsi
    customer_id
    required
    string ID dari objek customer yang akun tokennya akan dihubungkan. Panggil Customer API untuk membuat Customer ID
    channel_code
    required
    string Identifikasi penyelenggara jasa pembayaran. Kode harus ditulis dengan huruf besar.


    Kode Channel yang tersedia: DC_BRI
    properties
    optional
    object Informasi dalam format JSON yang dibutuhkan untuk melakukan otorisasi akun. Nilai di dalam properties berubah berdasarkan kanal pembayaran:

    Untuk Debit Card (BRI):
    Key Value
    account_mobile_number
    required
    Nomor handphone yang terdaftar pada penyelenggara jasa atau kanal pembayaran. Format: +(country code)(subscriber number)
    card_last_four
    required
    Empat digit terakhir kartu debit
    card_expiry
    required
    Bulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    account_email
    required
    Alamat email customer yang terdaftar di penyelenggara jasa atau kanal pembayaran
    Untuk Debit Card (BCA OneKlik):
    Key Value
    account_mobile_number
    required
    Nomor handphone pelanggan yang terdaftar pada penyelenggara jasa standar internasional E.164. Format: +(kode negara)(nomor terdaftar)
    success_redirect_url
    required
    URL dimana end user akan diarahkan jika proses otorisasi berhasil. Linked account token ID akan disertakan dalam URL sebagai parameter query.
    failure_redirect_url
    optional
    URL dimana end user akan diarahkan jika proses otorisasi gagal.
    callback_url
    optional
    URL untuk dapat menerima notifikasi pembayaran setelah pembayaran sukses dilakukan oleh customer. Jika tidak ada URL yang disediakan, notifikasi akan dikirim ke setelan tetap yang diinformasikan pada saat proses onboarding.
    device
    optional
    Wajib untuk BCA OneKlik.
    Informasi sidik jari perangkat end-customer. Ini digunakan untuk mendeteksi penipuan.
    Key Value
    id
    required
    Pengidentifikasi perangkat unik untuk end-customer Android atau iOS.

    Jika diakses melalui web, masukkan string WEB.
    ip_address
    required
    Alamat IPv4 atau IPv6 end-customer pada titik permintaan.
    user_agent
    required
    String user-agent end-customer yang diekstraksi dari perangkat.
    ad_id
    optional
    Android Advertising ID (AAID) atau iOS Identifier for Advertisers (IDFA).
    imei
    optional
    International Mobile Equipment Identity (IMEI) perangkat end-customer.
    metadata
    optional
    object Format JSON bebas untuk informasi tambahan yang disediakan pada saat request.

    Response Inisiasi Linked Account Tokenization -

    Contoh Response Sukses Inisiasi Linked Account Tokenization

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "DC_BRI",
        "authorizer_url": null,
        "status": "PENDING",
        "metadata": null
    }
    Parameter Deskripsi
    id string ID unik hasil otorisasi akun dari Xendit
    customer_id string ID Customer Objek
    channel_code string Kode penyelenggara jasa pembayaran
    authorizer_url string Untuk debit card (BRI), parameter ini akan selalu null; lanjut ke langkah "Validate OTP for Linked Account Token".
    status string Status otorisasi akun. Status akan selalu PENDING untuk pada saat inisiasi
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat request.

    Initialize Linked Account Tokenization - Errors

    See other common errors here.

    Initialize Linked Account Tokenization - Errors

    See other common errors here.

    Kode Kesalahan Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang direquest belum tersedia atau belum diaktifkan untuk akun ini.
    CUSTOMER_NOT_FOUND_ERROR
    400
    customer_id yang direquest tidak ada atau tidak terdapat akses.
    INVALID_ACCOUNT_DETAILS
    400
    Value di parameter properties tidak cocok dengan data yang ada di bank
    ACCOUNT_ACCESS_BLOCKED
    400
    Request linking ditolak oleh bank. Kemungkinan terjadi karena akun bank tidak dapat diakses atau belum mengaktivasikan servis ini.
    MAX_ACCOUNT_LINKING
    400
    Gagal menghubungkan akun karena sudah mencapai batas maksimum penghubungan akun yang diperbolehkan oleh Bank. Silahkan hapus penghubungan yang sebelumnya sudah tersedia untuk akun ini
    OTP_DELIVERY_ERROR
    400
    Bank gagal mengirimkan OTP ke pihak customer. Silahkan coba lagi.
    CHANNEL_UNAVAILABLE
    503
    Target channel saat ini tidak tersedia. Hal ini disebabkan channel partner sedang error atau downtime.

    Validasi OTP untuk Linked Account Token

    Penghubungan akun untuk kartu debit akan membutuhkan OTP untuk melanjutkan proses. Setelah proses inisiasi selesai, bank akan mengirimkan OTP ke nomor handphone yang telah terhubung dengan akun bank customer. Endpoint ini akan memvalidasi OTP dengan bank.

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

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

    Endpoint: Validasi OTP untuk Linked Account Token

    POST https://api.xendit.co/linked_account_tokens/{linked_account_token_id}/validate_otp

    Request Validasi OTP untuk Linked Account Token

    Contoh Request Validasi OTP untuk Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/validate_otp -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "otp_code":"123456"
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $validateOTPForLinkedAccountParams = [
        'otp_code' => '333000'
      ];
    
      $validateOTPForLinkedAccount = \Xendit\DirectDebit::validateOTPForLinkedAccount(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f',
        $validateOTPForLinkedAccountParams
      );
      var_dump($validateOTPForLinkedAccount);
    
    ?>
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.ValidateOTPForLinkedAccountParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
      OTPCode:              "333000",
    }
    
    resp, err := linkedaccount.ValidateOTPForLinkedAccount(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("validated linked account: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> params = new HashMap<>();
      params.put("otp_code", "333000");
    
      String tokenId = "lat-ba3c5645-f134-432a-b4f4-f8972685aa03";
    
      ValidatedLinkedAccount linkedAccount = ValidatedLinkedAccount.validateOTP(tokenId, params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    linked_account = DirectDebit.validate_token_otp(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
        otp_code="333000",
    )
    print(linked_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string otpCode = "333000";
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    
    ValidatedLinkedAccountToken validatedLinkedAccountToken = await linkedAccountToken.ValidateOtp(otpCode, linkedAccountTokenId);
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Inisiasi Account Authorization. Memiliki prefiks lat-.
    Parameter Request Deskripsi
    otp_code
    required
    string OTP yang diterima oleh customer dari bank partner untuk penghubungan akun

    Validate OTP for Linked Account Token - Response

    Example Validate OTP for Linked Account Token Success Response

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "customer_id": "239c16f4-866d-43e8-9341-7badafbc019f",
        "channel_code": "DC_BRI",
        "status": "SUCCESS"
    }
    Parameter Respon Deskripsi
    id string ID unik dari Xendit untuk otorisasi linked account token ini
    customer_id string ID dari object Customer
    channel_code string Kode identifikasi untuk kanal pembayaran
    status string Status otorisasi, akan selalu SUCCESS jika validasi berhasil. Jika tidak, kesalahan akan terjadi

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disediakan tidak tersedia atau belum diaktifkan untuk akun ini.
    INVALID_OTP_ERROR
    400
    otp_code yang dimasukkan salah.
    EXPIRED_OTP_ERROR
    400
    otp_code yang disediakan telah kedaluwarsa.
    MAX_OTP_ATTEMPTS_ERROR
    400
    Telah mencapai percobaan maksimum verifikasi OTP yang diperbolehkan untuk channel ini
    ACCOUNT_LINKING_ALREADY_COMPLETED
    409
    Request untuk melakukan linked account token duplikat. Ini terjadi karena request yang sama telah diproses sebelumnya dengan status sukses
    ACCOUNT_LINKING_ALREADY_FAILED
    409
    Request untuk melakukan linked account token duplikasi. Ini terjadi karena request yang sama telah diproses sebelumnya dengan status gagal.

    Cek Akses Akun

    Endpoint ini akan mengembalikan akun bank yang dapat diakses oleh linked account token

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

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

    Endpoint: Get Accessible Accounts by Linked Account Token

    GET https://api.xendit.co/linked_account_tokens/{linked_account_token_id}/accounts

    Request Mendapatkan Access Account menggunakan Linked Account Token

    Contoh Request Get Accessible Accounts menggunakan Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/accounts -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $retrieveLinkedAccounts = \Xendit\DirectDebit::retrieveAccessibleLinkedAccounts(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f'
      );
      var_dump($retrieveLinkedAccounts);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.retrieveAccountsByTokenID({
      tokenID: 'lat-aa620619-124f-41db-995b-66a52abe036a',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.RetrieveAccessibleLinkedAccountParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
    }
    
    resp, err := linkedaccount.RetrieveAccessibleLinkedAccounts(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved accessible linked accounts: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      AccessibleLinkedAccount[] linkedAccounts = AccessibleLinkedAccount.retrieveAccessibleLinkedAccounts(
          "lat-960e709c-bdd6-4b4a-a361-243186379c45");
      System.out.println(Arrays.toString(linkedAccounts));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    accessible_accounts = DirectDebit.get_accessible_accounts_by_token(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
    )
    print(accessible_accounts)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    AccessibleLinkedAccountToken[] accessibleLinkedAccountTokens = await linkedAccountToken.Get(linkedAccountTokenId);
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Initialize Account Authorization. Memiliki lat- prefix.

    Mendapatkan Respon Akeses Akun dengan Linked Account Token

    Endpoint ini akan mengembalikan himpunan objel dengan properties berikut:

    Contoh Respon Sukses Get Accessible Accounts menggunakan Linked Account Token

    [{
        "id": "la-aa620619-124f-41db-995b-66a52abe036a",
        "channel_code": "DC_BRI",
        "type": "DEBIT_CARD",
        "properties": {
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "currency": "IDR",
            "description": ""
        }
    }]
    Parameter Deskripsi
    id string Pengidentifikasi unik dari akun bank. Memiliki prefix la-.
    channel_code string Pengidentifikasi Kode dari channel
    type string Tipe akun yang telah terhubung

    For BRI: DEBIT_CARD
    For BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties object Objek yang mengandung informasi berhubungan dengan akun. Nilai di dalam properties berubah berdasarkan tipe akun:


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringMasa kadaluarsa bulan dan tahun kartu (dalam MM/YY format)
    currency stringMata uang akunISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    Untuk tipe DEBIT_CARD (BCA OneKlik):
    Key Value
    account_mobile_number stringNomor handphone end-customer yang terdaftar di penyedia jasa
    card_last_four string4 digit terakhir kartu debit
    card_expiry stringKadaluarsa kartu debit (null untuk BCA OneKlik)
    currency stringKode mata uang dengan ISO 4217
    description stringDeskripsi akun (disediakan oleh kanal pembayaran)
    Untuk tipe BANK_REDIRECT (BCA KlikPay):
    Key Value
    channel_code stringKode kanal pembayaran untuk account (BCA_KLIKPAY)

    Error dari Mendapatkan Accessible Accounts by Linked Account Token

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disegunakan tidak tersedia atau belum diaktifkan untuk akun ini.

    Melepaskan Tautan Linked Account Token

    Melepaskan tautan Linked Account Token yang sukses sebelumnya.

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

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

    Endpoint: Melepaskan Tautan Linked Account Token

    DELETE https://api.xendit.co/linked_account_tokens/{linked_account_token_id}

    Permintaan Melepaskan Linked Account Token

    Contoh: Permintaan Melepaskan Linked Account Token

    curl https://api.xendit.co/linked_account_tokens/lat-aa620619-124f-41db-995b-66a52abe036a/validate_otp -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $unbindLinkedAccountToken = \Xendit\DirectDebit::unbindLinkedAccountToken(
        'lat-a08fba1b-100c-445b-b788-aaeaf8215e8f'
      );
      var_dump($unbindLinkedAccountToken);
    
    ?>
    let apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    let linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
    let url = "https://api.xendit.co/linked_account_tokens/" + linkedAccountTokenId;
    
    var headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(apiKey + ":"));
    
    var requestOptions = {
      method: 'DELETE',
      headers: headers,
      redirect: 'follow'
    };
    
    fetch(url, requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := linkedaccount.UnbindLinkedAccountTokenParams{
      LinkedAccountTokenID: "lat-f9dc34e7-153a-444e-b337-cd2599e7f670",
    }
    
    resp, err := linkedaccount.UnbindLinkedAccountToken(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("unbinded linked account: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
    
      UnbindedLinkedAccount linkedAccount = UnbindedLinkedAccount.unbindLinkedAccountToken ("lat-a08fba1b-100c-445b-b788-aaeaf8215e8f");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    string apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==";
    
    XenditClient xendit = new XenditClient(apiKey);
    LinkedAccountTokenClient linkedAccountToken = xendit.LinkedAccountToken;
    
    string linkedAccountTokenId = "lat-f325b757-0aae-4c24-92c5-3661e299e154";
    UnbindedLinkedAccountToken unbindedLinkedAccountToken = await linkedAccountToken.Unbind(linkedAccountTokenId);
    Path Parameter Type Description
    linked_account_token_id
    required
    string Linked account token id diterima dari Inisiasi Linked Account Tokenization. Ini mempunyai prefix lat-

    Respon Melepaskan Linked Account Token

    Contoh: Respon Melepaskan Linked Account Token

    {
        "id": "lat-aa620619-124f-41db-995b-66a52abe036a",
        "is_deleted": true
    }
    Parameter Tipe Deskripsi
    id string ID unik yang dihasilkan oleh Xendit untuk linked account token authorization tertentu
    is_deleted boolean Mendeskripsikan apakah tautan linked account token sudah sukses dilepaskan/dihapuskan

    Error Saat Melepaskan Linked Account Token

    Lihat error lain yang umum disini.

    Kode Kesalahan Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    linked_account_token_id yang disediakan tidak dapat diakses untuk akun ini.

    Buat Payment Method

    Payment method memungkinkan Anda untuk menarik sumber dana customer dan menggunakannya untuk melakukan pembayaran direct debit atau pembayaran berulang (recurring payment). Saat ini, hanya tersedia linked accounts.

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

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

    Endpoint: Membuat Payment Method

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

    Membuat Payment Method

    Contoh Request Membuat Payment Method

    curl https://api.xendit.co/payment_methods -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       --data-raw '{
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a"
        }
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $createPaymentMethodParams = [
        'customer_id' => '4b7b6050-0830-440a-903b-37d527dbbaa9',
        'type' => 'DEBIT_CARD',
        'properties' => [
          'id' => 'la-052d3e2d-bc4d-4c98-8072-8d232a552299'
        ],
        'metadata' => [
          'meta' => 'data'
        ]
      ];
    
      $createPaymentMethod = \Xendit\DirectDebit::createPaymentMethod(
        $createPaymentMethodParams
      );
      var_dump($createPaymentMethod);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.createPaymentMethod({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
      type: 'DEBIT_CARD',
      properties: {
        id: 'la-aa620619-124f-41db-995b-66a52abe036a',
      },
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    properties := map[string]interface{}{
      "id": "la-55048b41-a7ab-4799-9f33-6ec5cc078db0",
    }
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := paymentmethod.CreatePaymentMethodParams{
      CustomerID:  "4b7b6050-0830-440a-903b-37d527dbbaa9",
      Type:        xendit.DEBIT_CARD,
      Properties:  properties,
      Metadata:    metadata,
    }
    
    resp, err := paymentmethod.CreatePaymentMethod(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created payment method: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> properties = new HashMap<>();
      properties.put("id", "la-052d3e2d-bc4d-4c98-8072-8d232a552299");
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("halo", "hello");
      metadata.put("tes", "123");
      Map<String, Object> params = new HashMap<>();
      params.put("customer_id", "4b7b6050-0830-440a-903b-37d527dbbaa9");
      params.put("type", "DEBIT_CARD");
      params.put("properties", properties);
      params.put("metadata", metadata);
    
      PaymentMethod paymentMethod = PaymentMethod.createPaymentMethod(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit, DirectDebitPaymentMethodType
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_method = DirectDebit.create_payment_method(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        type=DirectDebitPaymentMethodType.DEBIT_CARD,
        properties={'id': 'la-fac7e744-ab40-4100-a447-cbbb16f29ded'},
    )
    
    print(payment_method)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    PaymentMethodClient paymentMethod = xendit.PaymentMethod;
    
    PaymentMethodParameter parameter = new PaymentMethodParameter
    {
      Type = PaymentMethodEnum.AccountType.DebitCard,
      Properties = new PaymentMethodProperties
      {
        Id = "la-052d3e2d-bc4d-4c98-8072-8d232a552299",
        ChannelCode = PaymentMethodEnum.ChannelCode.DcBri,
        Currency = Currency.IDR,
        CardLastFour = "1234",
        CardExpiry = "06/24",
        Description = "Payment Debit Card",
      },
      CustomerId = "4b7b6050-0830-440a-903b-37d527dbbaa9",
    };
    
    PaymentMethodResponse paymentMethodResponse = await paymentMethod.Create(parameter);
    Parameter Request Deskripsi
    customer_id
    required
    string ID dari customer. Anda dapat membuat Customer dengan menggunakan API Pembuatan Customer
    type
    required
    string Tipe payment method


    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties
    required
    object Informasi tambahan untuk identifikasi metode pembayaran:

    Untuk Debit Card Linking (BRI, BCA OneKlik):
    Key Value
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    Untuk Bank Redirect Linking (BCA KlikPay):
    Key Value
    channel_code
    required
    Kode kanal pembayaran untuk account (BCA_KLIKPAY)
    For BCA KlikPay: BCA_KLIKPAY

    metadata
    optional
    object Format JSON bebas untuk tambahan informasi yang bisa Anda gunakan.

    Parameter Respon

    Example Create Payment Method Success Response

    {    
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "description": null,
        },
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "status": "ACTIVE",
        "created": "2020-03-19T05:34:55+0800",
        "updated": "2020-03-19T05:24:55+0800",
        "metadata": null  
    }
    Parameter Deskripsi
    id string ID untuk identifikasi metode pembayaran yang telah disambungkan ke akun pembayaran. Memiliki prefiks pm-.
    type string Tipe akun yang telah dihubungkan.

    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties object Informasi tambahan terkait dengan metode pembayaran. Nilai di dalam properties dapat berubah sesuai dengan tipe akun:


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu debit
    card_expiry stringBulan dan tahun kedaluwarsa kartu debit. Format: MM/YY
    currency stringMata uang yang digunakan akun dalam ISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    For BCA OneKlik:
    Key Value
    channel_code Kode kanal pembayaran untuk akun (BCA_ONEKLIK):
    • BCA OneKlik (ID) - BCA_ONEKLIK
    account_mobile_number stringNomor handphone end-customer yang terdaftar di penyedia jasa
    card_last_four string4 digit terakhir kartu debit
    card_expiry stringKadaluarsa kartu debit (null untuk BCA OneKlik)
    currency stringKode mata uang dengan ISO 4217
    description stringDeskripsi akun (disediakan oleh kanal pembayaran)
    For BCA KlikPay:
    Key Value
    channel_code Kode kanal pembayaran untuk account (BCA_KLIKPAY):
    • BCA KlikPay (ID) - BCA_KLIKPAY
    customer_id string ID dari customer yang metode pembayarannya telah dihubungkan
    status
    required
    string Status dari payment method.
    Status akan ACTIVE sesaat setelah metode pembayaran dibuat.
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object JSON format bebas untuk informasi tambahan yang disediakan dalam request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Error Code Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang disediakan tidak ada
    LIINKED_ACCOUNT_NOT_FOUND_ERROR
    400
    properties and type yang disediakan, kombinasinya dalam request tidak tersedia atau tidak memiliki akses
    CUSTOMER_NOT_FOUND_ERROR
    400
    customer_id yang disediakan di request tidak ada atau tidak memiliki akses
    DUPLICATE_ERROR
    409
    Request ini telah memiliki payment method dengan status ACTIVE

    Buat 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 Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Request

    Contoh: 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);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := recurringpayment.CreateParams{
      ExternalID:    "recurringpayment-" + time.Now().String(),
      Amount:        200000,
      PayerEmail:    "customer@customer.com",
      Description:   "recurringpayment #1",
      Interval:      xendit.RecurringPaymentIntervalDay,
      IntervalCount: 3,
    }
    
    resp, err := recurringpayment.Create(&createData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created recurring payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      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", "Test desc");
      params.put("amount", 100000);
      params.put("currency", "IDR");
    
      RecurringPayment recurringPayment = RecurringPayment.create(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    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

    Buat Direct Debit

    Buat pendebitan untuk menarik dana dari akun customer dengan menggunakan payment method yang aktif

    Endpoint: Create Direct Debit Payment

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

    Membuat Request Pembayaran

    Contoh Membuat Request Pembayaran

    curl https://api.xendit.co/direct_debits -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -H 'Idempotency-key: Test_Idempotent_Key'\
       --data-raw '{
        "reference_id": "customer_test_reference_id",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": 1500,
        "enable_otp": true,
        "callback_url": "https://payment-callback-listener/"
    }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $createDirectDebitPaymentParams = [
        'reference_id' => 'test-direct-debit-ref',
        'payment_method_id' => 'pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef',
        'currency' => 'IDR',
        'amount' => 15000,
        'callback_url' => 'http://webhook.site/',
        'enable_otp' => true,
        'description' => 'test description',
        'basket' => [
          [
            'reference_id' => 'basket-product-ref-id',
            'name' => 'product name',
            'category' => 'mechanics',
            'market' => 'ID',
            'price' => 50000,
            'quantity' => 5,
            'type' => 'product type',
            'sub_category' => 'product sub category',
            'description' => 'product description',
            'url' => 'https://product.url'
          ]
        ],
        'device' => [
          'id' => 'device_id',
          'ip_address' => '0.0.0.0',
          'ad_id' => 'ad-id',
          'imei' => '123a456b789c'
        ],
        'success_redirect_url' => 'https://success-redirect.url',
        'failure_redirect_url' => 'https://failure-redirect.url',
        'metadata' => [
          'meta' => 'data'
        ],
        'Idempotency-key' => '' . time()
      ];
    
      $createDirectDebitPayment = \Xendit\DirectDebit::createDirectDebitPayment(
        $createDirectDebitPaymentParams
      );
      var_dump($createDirectDebitPayment);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.createDirectDebitPayment({
      idempotencyKey: 'Test_Idempotent_Key',
      referenceID: 'customer_test_reference_id',
      paymentMethodID: 'pm-c30d4800-afe4-4e58-ad5f-cc006d169139',
      currency: 'IDR',
      amount: 10000,
      callbackURL: 'https://payment-callback-listener/',
      enableOTP: true,
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    metadata := map[string]interface{}{
      "meta": "data",
    }
    
    data := directdebitpayment.CreateDirectDebitPaymentParams{
      ReferenceID:      "test-direct-debit-ref-0100",
      PaymentMethodID:  "pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef",
      Currency:         "IDR",
      Amount:           15000,
      CallbackURL:      "http://webhook.site/",
      EnableOTP:        true,
      Description:      "test description",
      Basket:           []xendit.DirectDebitBasketItem{
        {
          ReferenceID:  "basket-product-ref-id",
          Name:         "product-name",
          Category:     "mechanics",
          Market:       "ID",
          Price:        50000,
          Quantity:     5,
          Type:         "product type",
          SubCategory:  "product sub category",
          Description:  "product description",
          URL:          "https://product.url",
        },
      },
      Device:           xendit.DirectDebitDevice{
        ID:         "device-id",
        IPAddress:  "0.0.0.0",
        UserAgent:  "user-agent",
        ADID:       "ad-id",
        Imei:       "123a456b789c",
      },
      SuccessRedirectURL: "https://success-redirect.url",
      FailureRedirectURL: "https://failure-redirect.url",
      Metadata:           metadata,
      IdempotencyKey:     time.Now().String(),
    }
    
    resp, err := directdebitpayment.CreateDirectDebitPayment(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitBasketItem basketItem =  DirectDebitBasketItem.builder()
          .referenceId("basket-product-ref-id")
          .name("product-name")
          .category("mechanics")
          .market("ID")
          .price(50000)
          .quantity(5)
          .type("product type")
          .subCategory("product sub category")
          .description("product description")
          .url("https://product.url")
          .build();
      DirectDebitBasketItem[] basketItemArray = new DirectDebitBasketItem[]{basketItem};
    
      DirectDebitDevice device = DirectDebitDevice.builder()
          .id("device-id")
          .ipAddress("0.0.0.0")
          .userAgent("user-agent")
          .adId("ad-id")
          .imei("123a456b789c")
          .build();
    
      Map<String, Object> metadata = new HashMap<>();
      metadata.put("halo", "hello");
      metadata.put("tes", "123");
    
      Map<String, Object> params = new HashMap<>();
      params.put("reference_id", "test-direct-debit-ref-4");
      params.put("payment_method_id", "pm-ebb1c863-c7b5-4f20-b116-b3071b1d3aef");
      params.put("currency", "IDR");
      params.put("amount", 15000);
      params.put("callback_url", "http://webhook.site/");
      params.put("enable_otp", true);
      params.put("description", "test description");
      params.put("basket", basketItemArray);
      params.put("success_redirect_url", "https://success-redirect.url");
      params.put("failure_redirect_url", "https://failure-redirect.url");
      params.put("device", device);
      params.put("metadata", metadata);
    
      String idempotencyKey = "idempotency-key-4";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.createDirectDebitPayment(params, idempotencyKey);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.create_payment(
      reference_id="direct-debit-ref-1594718940",
      payment_method_id="pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
      currency="IDR",
      amount="60000",
      callback_url="http://webhook.site/",
      enable_otp=True,
      idempotency_key="idemp_key-1594718940",
    )ß
    
    print(payment)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentParameter directDebitPaymentParameter = new DirectDebitPaymentParameter
    {
      ReferenceId = "reference-id",
      PaymentMethodId = "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
      Currency = Currency.IDR,
      Amount = 10000,
      CallbackUrl = "https://callback-url.com/",
      EnableOtp = true,
      Description = "Example Description",
      SuccessRedirectUrl = "https://success-url.com/",
      FailureRedirectUrl = "https://failure-url.com/",
      Device = new LinkedAccountDevice
      {
        Id = "device-id",
        IpAddress = "255.255.255.255",
        UserAgent = "App",
        Imei = "imei-example",
        AdId = "ad-id",
      },
      Metadata = null,
      Basket = new BasketItem[]
      {
        new BasketItem { Name = "Black shoes", Type = "goods", Price = 2000, Quantity = 1 },
        new BasketItem { Name = "Blue shirt", Type = "apparel", Price = 2000, Quantity = 1 },
      },
    };
    
    string idempotencyKey = "fa9b53a1-f81a-47ff-8fde-b2eec3546b66";
    
    DirectDebitPaymentResponse directDebitPaymentResponse = await directDebitPayment.Create(directDebitPaymentParameter, idempotencyKey);
    Header Deskripsi
    Idempotency-key
    required
    string Disediakan oleh merchant untuk mencegah duplikasi request. Bisa sama dengan reference_id atau GUID.
    Note: Max 100 karakter
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Request Body Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi yang disediakan merchant untuk transaksi ini
    Note: Max 255 karakter
    payment_method_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik payment method. Anda dapat membuatnya menggunakan Create Payment Method API jika Anda belum membuatnya.
    currency
    required
    string Mata uang dari nominal yang di debit dalam ISO 4217. e.g. "IDR"
    amount
    required
    number Nominal untuk di debit dari akun end-customer
    Note: Maximum nominal yang dapat di charge tanpa OTP adalah 999,999
    callback_url
    required
    string URL dimana notifikasi pembayaran akan dikirimkan setelah transaksi diproses
    Note: Maksimal 255 karakter
    enable_otp
    optional
    boolean Nilai yang diterima: true, false
    Note untuk BCA OneKlik:
    Jika disetel ke true, transaksi akan memerlukan OTP untuk divalidasi terlepas dari objek perangkatnya.
    Jika tidak disediakan, maka akan mengikuti logika validasi objek perangkat yang ditetapkan oleh BCA.
    description
    optional
    string Deskripsi untuk transaksi direct debit
    device
    conditional
    object Diperlukan untuk BCA OneKlik.

    Informasi sidik jari perangkat end-customer. Ini digunakan untuk mendeteksi fraud.
    Key Value
    id
    required
    stringPengidentifikasi perangkat unik untuk end-customer Android atau iOS.

    Jika diakses melalui web, masukkan string “WEB”.
    ip_address
    required
    stringAlamat IPv4 atau IPv6 end-customer pada titik permintaan.
    user_agent
    required
    stringString user-agent end-customer yang diekstraksi dari perangkat.
    ad_id
    optional
    stringAndroid Advertising ID (AAID) atau iOS Identifier for Advertisers (IDFA).
    imei
    optional
    stringInternational Mobile Equipment Identity (IMEI) perangkat end-customer.
    basket
    optional
    array Himpunan objek yang mendeskripsikan item yang dibeli menggunakan direct debit
    Key Nilai
    reference_id required stringPengidentifikasi dari merchant untuk spesifik produk(ie. SKU)
    name required stringNama produk
    market required string2 huruf dalam format ISO 3166-2, kode negara yang mengindikasikan target negara dimana merchant beroperasi
    type required stringTipe produk
    description optional stringDeskripsi produk
    category optional stringKategori item
    sub-category optional stringSub kategori dari item
    price optional stringHarga per unit
    url optional stringURL produk dengan detil produk
    metadata optional stringObjek tambahan yang dapat digunakan untuk atribut tamabahan dari produk
    quantity optional stringJumlah unit dari item dalam keranjang
    success_redirect_url
    conditional
    string Diperlukan untuk BCA OneKlik, BCA KlikPay

    End-customer akan diarahkan ke URL ini pada transaksi yang berhasil.
    Jika OTP tidak diperlukan dan transaksi berhasil, end-customer akan segera dialihkan ke ini.
    failure_redirect_url
    conditional
    string Diperlukan untuk BCA OneKlik, BCA KlikPay

    End-customer akan dialihkan ke URL ini pada transaksi yang gagal atau dibatalkan.
    Jika OTP tidak diperlukan dan transaksi gagal, end-customer akan dialihkan ke ini setelah menampilkan pesan kesalahan.
    metadata
    optional
    object Object of additional information the user may use. User defines the JSON properties and values. You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long

    Respon Membuat Pembayaran

    Contoh Respon Sukses Membuat Pembayaran

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": null,
        "status": "PENDING",
        "basket": null,
        "failure_code": null,
        "is_otp_required": true,
        "otp_mobile_number": "+6287774441111",
        "otp_expiration_timestamp": null,
        "required_action": "VALIDATE_OTP",
        "checkout_url": null,
        "success_redirect_url": null,
        "failure_redirect_url": null, 
        "refunded_amount": null,
        "refunds": null,
        "created": "2020-03-26T05:44:26+0800",
        "updated": null,
        "metadata": null
    }

    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID disediakan oleh merchant
    channel_code string Pengidentifikasi kode untuk channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    required_action string Menjelaskan tindakan yang diperlukan untuk menyelesaikan penautan.

    Jika VALIDATE_ON_REDIRECT, end-customer harus diarahkan ke url_checkout yang disediakan untuk menyelesaikan pembayaran direct debit.

    Jika VALIDATE_OTP, OTP akan dikirimkan ke end-customer dan harus divalidasi melalui endpoint /direct_debits/:id/validate_otp untuk menyelesaikan pembayaran direct debit.

    Jika null, fetch sudah berlangsung.
    checkout_url string Jika required_action adalah VALIDATE_ON_REDIRECT, end customer harus diarahkan ke URL ini untuk menyelesaikan pembayaran.

    Untuk BCA OneKlik, ini akan menjadi page dimana end-customer akan memilih nomor handphone mereka dan memasukkan OTP. URL akan dikirim secara tidak sinkron melalui Payment Initialized Callback.
    success_redirect_url string Hanya untuk BCA OneKlik, BCA KlikPay
    End-customer akan diarahkan ke URL ini untuk transaksi yang berhasil.
    failure_redirect_url string Hanya untuk BCA OneKlik, BCA KlikPay
    End-customer dialihkan ke URL ini untuk transaksi yang gagal atau dibatalkan.

    failure_redirect_url akan memiliki failure-code sebagai bagian dari string kueri. Ini menjelaskan alasan mengapa transaksi gagal. Anda dapat menggunakan ini untuk memperbarui failure_redirect_url page Anda secara dinamis berdasarkan failure-code.
    refunded_amount number Jumlah yang berhasil dikembalikan dari transaksi.
    refunds object Objek yang berisi hal-hal berikut:

    Key Description
    data array Array refund IDs yang PENDING, COMPLETED, dan FAILED
    Hanya maksimal 10 yang akan dikembalikan.
    has_more boolean Nilai akan menjadi true jika jumlah refund ID lebih dari 10. Gunakan List of Refunds API untuk mendapatkan daftar
    url array Buat permintaan GET ke titik akhir ini untuk mendapatkan informasi lebih lanjut tentang refunds
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Membuat Pembayaran

    Contoh Respon Error dalam Membuat Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DUPLICATE_ERROR
    409
    Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali.
    PAYMENT_METHOD_NOT_FOUND_ERROR
    400
    payment_method_id yang disediakan tidak sesuai, tidak ditemukan atau akses tidak tersedia.
    INVALID_PAYMENT_METHOD_ERROR
    400
    Payment method telah expire atau tidak tersedia.
    INSUFFICIENT_BALANCE
    400
    Sumber dana pembayaran tidak memiliki saldo yang cukup untuk menyelesaikan transaksi.
    ACCOUNT_ACCESS_BLOCKED
    400
    Sumber dana pembayaran terblokir dan tidak bisa diakses.
    MAX_AMOUNT_LIMIT_ERROR
    400
    Jumlah transaksi melebihi jumlah yang telah ditetapkan oleh pihak bank.
    PAYMENT_STATUS_FAILED
    400
    Bank partner tidak berhasil memproses transaksi karena batas waktu atau kesalahan tak terduga di pihak bank partner.

    Validasi OTP Direct Debit

    Validasi OTP yang disediakan oleh end customer melalui endpoint ini untuk menyelesakan transaksi jika transaksi tersebut parameter is otp adalah enabled.

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

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

    Endpoint: Validate OTP for Direct Debit Payment

    POST https://api.xendit.co/direct_debits/:direct_debit_id/validate_otp/

    Request Validasi OTP Pembayaran

    Contoh Request Validasi Pembayaran

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-test/validate_otp/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       --data-raw '{
        "otp_code": "111222"
        }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $validateOTPForDirectDebitPaymentParams = [
        'otp_code' => '222000'
      ];
    
      $validateOTPForDirectDebitPayment = \Xendit\DirectDebit::validateOTPForDirectDebitPayment(
        'ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c',
        $validateOTPForDirectDebitPaymentParams
      );
      var_dump($validateOTPForDirectDebitPayment);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.validateOTPforPayment({
      directDebitID: 'ddpy-623dca10-5dad-4916-test',
      otpCode: '111222',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.ValidateOTPForDirectDebitPaymentParams{
      DirectDebitID:  "ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c",
      OTPCode:        "222000",
    }
    
    resp, err := directdebitpayment.ValidateOTPForDirectDebitPayment(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("validated direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      Map<String, Object> params = new HashMap<>();
      params.put("otp_code", "222000");
    
      String directDebitPaymentId = "ddpy-b150da90-2121-44a6-a836-5eebf0d7ab55";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.validateOTP(directDebitPaymentId, params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.validate_payment_otp(
        direct_debit_id="ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
        otp_code="222000",
    )
    
    print(payment)
    XenditConfiguration.ApiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    string otpCode = "123456";
    
    DirectDebitPayment directDebitPayment = await DirectDebitPayment.ValidateOtp(otpCode, "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14");
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit
    Request Body Parameter Deskripsi
    otp_code
    required
    string One-time-password yang diinput oleh customer dan dikirimkan oleh bank

    Response Validasi OTP Pembayaran

    Contoh Response Sukses Get Payment Status by ID

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "+63907XXXX123",
        "otp_expiration_timestamp": "2020-03-26T05:45:06+0800",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "2020-03-26T05:44:46+0800",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentikasi untuk channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Error dalam Validasi OTP pembayaran

    Contoh Respon Error dalam Validasi OTP Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    direct_debit_id yang disediakan tidak ada atau tidak memiliki akses
    INVALID_OTP_ERROR
    400
    OTP yang disediakan invalid
    EXPIRED_OTP_ERROR
    400
    OTP yang disediakan telah kadaluarsa expired
    MAX_OTP_ATTEMPTS_ERROR
    400
    Payment method telah mencapai maksimum percobaan verifikasi OTP yang diperbolehkan
    INSUFFICIENT_BALANCE
    400
    Sumber dana pembayaran tidak memiliki saldo yang cukup untuk menyelesaikan transaksi
    ACCOUNT_ACCESS_BLOCKED
    400
    Sumber dana pembayaran terblokir dan tidak bisa diakses
    MAX_AMOUNT_LIMIT_ERROR
    400
    Jumlah transaksi melebihi jumlah yang telah ditetapkan oleh pihak bank
    DIRECT_DEBIT_ALREADY_COMPLETED
    409
    Permintaan adalah duplikat dari token akun tertaut yang sudah diproses yang telah berhasil diselesaikan.
    DIRECT_DEBIT_ALREADY_FAILED
    409
    Permintaan adalah duplikat dari token akun tertaut yang sudah diproses yang gagal.

    Cek Payment Method

    Endpoint ini mengembalikan himpunan payment method yang terhubung dengan customer_id yang tersedia

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

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

    Endpoint: Get Payment Methods menggunakan Customer ID

    GET https://api.xendit.co/payment_methods?customer_id={customer_id}

    Parameter Request

    Example Get Payment Methods by Customer ID Request

    curl https://api.xendit.co/payment_methods?customer_id=ba830b92-4177-476e-b097-2ad5ae4d3e55 -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getPaymentMethods = \Xendit\DirectDebit::getPaymentMethodsByCustomerID('4b7b6050-0830-440a-903b-37d527dbbaa9');
      var_dump($getPaymentMethods);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getPaymentMethodsByCustomerID({
      customerID: 'ba830b92-4177-476e-b097-2ad5ae4d3e55',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := paymentmethod.GetPaymentMethodsByCustomerIDParams{
      CustomerID: "4b7b6050-0830-440a-903b-37d527dbbaa9",
    }
    
    resp, err := paymentmethod.CreatePaymentMethod(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved payment method: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      PaymentMethod[] paymentMethods = PaymentMethod.getPaymentMethodsByCustomerId("4b7b6050-0830-440a-903b-37d527dbbaa9");
      System.out.println(Arrays.toString(paymentMethods));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_methods = DirectDebit.get_payment_methods_by_customer_id(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
    )
    
    print(payment_methods)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    PaymentMethodClient paymentMethod = xendit.PaymentMethod;
    
    PaymentMethodResponse[] paymentMethodResponses = await paymentMethod.Get("ed20b5db-df04-41fc-8018-8ea4ac4d1030");
    Query String Parameter Deskripsi
    customer_id
    required
    string ID dari customer objek

    Parameter Respon

    Contoh Respon Sukses Get Payment Methods menggunakan Customer ID

    [{    
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "type": "DEBIT_CARD",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "card_last_four": "1234",
            "card_expiry": "06/24",
            "description": null,
        },
        "customer_id": "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "status": "ACTIVE",
        "created": "2020-03-19T05:34:55+0800",
        "updated": "2020-03-19T05:24:55+0800",
        "metadata": null  
    }]
    Parameter Deskripsi
    id string ID untuk identifikasi metode pembayaran yang telah disambungkan ke akun pembayaran. Memiliki prefiks pm-
    type
    required
    string Tipe payment method


    For BRI, BCA OneKlik: DEBIT_CARD
    For BCA KlikPay: BANK_REDIRECT
    properties
    required
    object Informasi tambahan untuk identifikasi metode pembayaran:

    Untuk Debit Card Linking (BRI, BCA OneKlik):
    Key Value
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    Untuk Bank Redirect Linking (BCA KlikPay):
    Key Value
    channel_code
    required
    Kode kanal pembayaran untuk account (BCA_KLIKPAY)
    For BCA KlikPay: BCA_KLIKPAY

    customer_id string ID dari customer objek yang dalam hal ini payment method dihubungkan
    status string Status dari payment method.
    Akan berstatus ACTIVE setelah dibuat
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat melakukan request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Cek Direct Debit Dengan ID

    Mendapatkan detail dari pembayaran direct debit dengan transaksi ID dari Xendit

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

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

    Endpoint: Get Payment Status by ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/

    Get Payment Status by ID - Request

    Contoh Request Payment Status by ID

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-test/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getDirectDebitPaymentByID = \Xendit\DirectDebit::getDirectDebitPaymentByID(
        'ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c'
      );
      var_dump($getDirectDebitPaymentByID);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getDirectDebitPaymentStatusByID({
      directDebitID: 'ddpy-623dca10-5dad-4916-test',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.GetDirectDebitPaymentStatusByIDParams{
      ID: "ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c",
    }
    
    resp, err := directdebitpayment.GetDirectDebitPaymentStatusByIDParams(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved direct debit payment: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitPayment directDebitPayment = DirectDebitPayment.getDirectDebitPaymentStatusById("ddpy-7e61b0a7-92f9-4762-a994-c2936306f44c");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    `
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.get_payment_status(
        direct_debit_id="ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
    )
    
    print(payment)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentResponse directDebitPaymentResponse = await directDebitPayment.GetById("ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14");
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit

    Get Payment Status by ID - Response

    Example Get Payment Status by ID Success Response

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "",
        "otp_expiration_timestamp": "",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentikasi dari channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Cek Direct Debit Dengan Reference ID

    Mendapatkan detail dari pembayaran direct debit dengan menggunakan reference ID

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

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

    Endpoint: Get Payment Status by Reference ID

    POST https://api.xendit.co/direct_debits?reference_id={reference_id}

    Get Payment Status by Reference ID - Request

    Contoh Request Payment Status by Reference ID

    Query String Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi unik dari merchant untuk spesifik transaksi direct debit ini
    curl https://api.xendit.co/direct_debits?reference_id=test_merchant_reference_id/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getDirectDebitPaymentByReferenceID = \Xendit\DirectDebit::getDirectDebitPaymentByReferenceID(
        'test-direct-debit-ref'
      );
      var_dump($getDirectDebitPaymentByReferenceID);
    
    ?>
    const x = new require("xendit-node")({
      secretKey:
        "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==",
    });
    
    const { DirectDebit } = x;
    const directDebitSpecificOptions = {};
    const dd = new DirectDebit(directDebitSpecificOptions);
    
    const resp = await dd.getDirectDebitPaymentStatusByReferenceID({
      referenceID: 'test_merchant_reference_id',
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := directdebitpayment.GetDirectDebitPaymentStatusByReferenceIDParams{
      ReferenceID: "direct-debit-ref-id",
    }
    
    resp, err := directdebitpayment.GetDirectDebitPaymentStatusByReferenceIDParams(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved direct debit payments: %+v\n", resp)
    try {
      Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
      DirectDebitPayment[] directDebitPayments = DirectDebitPayment.getDirectDebitPaymentStatusByReferenceId("test-direct-debit-ref-4");
      System.out.println(Arrays.toString(directDebitPayments));
    } catch (XenditException e) {
      e.printStackTrace();
    }
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payments = DirectDebit.get_payment_status_by_ref_id(
        reference_id="direct-debit-ref-1594717458",
    )
    
    print(payments)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    DirectDebitPaymentClient directDebitPayment = xendit.DirectDebitPayment;
    
    DirectDebitPaymentResponse[] directDebitPayments = await directDebitPayment.GetById("direct-debit-ref-1594717458");
    Query String Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi unik dari merchant untuk spesifik transaksi direct debit ini

    Get Payment Status by ID - Response

    Contoh Respon Sukses Get Payment Status by ID

    {
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "DC_BRI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": "10000",
        "description": "",
        "status": "PENDING",
        "basket": [],
        "failure_code": "",
        "is_otp_required": true,
        "otp_mobile_number": "",
        "otp_expiration_timestamp": "",
        "created": "2020-03-26T05:44:26+0800",
        "updated": "",
        "metadata": {}
    }
    Parameter Deskripsi
    id string Pengidentifikasi unik dari transaksi
    reference_id string Reference ID yang disediakan oleh merchant
    channel_code string Kode pengidentifikasi dari channel
    payment_method_id string Payment method ID dari sumber dana end customer
    currency string Mata uang pembayaran
    amount number Nilai yang di debit dari akun end customer
    description string Deskripsi yang disediakan oleh merchant
    status string Status dari pembayaran
    failure_code string Alasan jika direct debit gagal
    is_otp_required boolean Penanda untuk merchant jika OTP sudah diaktifkan untuk spesifik transaksi direct debit ini
    otp_mobile_number string Nomor handphone yang disamarkan dari penerima OTP. String kosong jika OTP tidak diaktifkan.
    otp_expiration_timestamp string Timestamp hingga kapan OTP valid. String kosong jika OTP tidak diaktifkan.
    created string Timestamp dalam ISO 8601 ketika request dibuat
    updated string Timestamp dalam ISO 8601 ketika informasi transaksi di update
    basket array Himpunan keranjang objek yang disediakan oleh merchant
    metadata object Metadata yang disediakan oleh merchant

    Refund Objek

    Refund API memungkinkan Anda untuk sepenuhnya atau sebagian mengembalikan pembayaran direct debit yang berhasil diselesaikan. Refunds dapat dilakukan berkali-kali untuk satu transaksi selama jumlahnya tidak melebihi jumlah transaksi awal.

    Callback akan dikirim ketika refund telah ditentukan berhasil atau gagal.

    Note: Biaya transaksi tidak akan dikembalikan.

    Example Refund a Direct Debit Payment Success Response

    {
        "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
        "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "channel_code": "DC_BRI",
        "currency": "IDR",
        "amount": "1500",
        "status": "PENDING",
        "failure_code": null,
        "reason": "REQUESTED_BY_CUSTOMER",
        "created": "2020-03-26T05:44:26+0800",
        "updated": null,
        "metadata": null
    }
    Parameter Type Description
    id string Pengidentifikasi unik untuk refund yang dihasilkan oleh Xendit.Dimulai dengan ddrfd-
    direct_debit_id string ID transaksi pembayaran asli
    channel_code string Pengidentifikasi kode untuk saluran
    currency string Mata uang refund dalam format ISO4217
    amount string Jumlah yang akan dikembalikan
    status string Refund status. Nilai yang mungkin: PENDING, COMPLETED, FAILED
    failure_code string Berisi error code jika refund gagal. null secara default. Kemungkinan failure codes.
    reason string Alasan mengapa refund dilakukan

    Nilai yang mungkin:
    • FRAUDULENT
    • DUPLICATE
    • REQUESTED_BY_CUSTOMER
    • CANCELLATION
    • OTHER
    created string Timestamp ISO 8601 saat refund request dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string Timestamp in ISO 8601 saat refund request diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object JSON free-format untuk informasi tambahan yang Anda berikan selama permintaan. Default: null.
    Limits:
    • Max 50 keys
    • Max key name length: 40 characters
    • Max value length: 500
    • Max depth: 3

    Mengembalikan Pembayaran Direct Debit - Failure Codes

    Failure Code Description
    REFUND_FAILED
    Bank tidak berhasil memproses refund.
    ACCOUNT_ACCESS_BLOCKED
    Akses ke rekening bank telah diblokir oleh bank. Rekening bank dapat dibekukan, ditutup, atau diblokir.
    ACCOUNT_NOT_FOUND
    Refund gagal karena rekening bank menemukan rekening bank.
    INSUFFICIENT_BALANCE
    Rekening bank sumber tidak memiliki cukup saldo untuk melakukan refund.

    Buat Refund

    API ini membantu Anda untuk melakukan refund transaksi BRI Direct Debit ke customer Anda. Saat ini, refund yang didukung adalah refund penuh atau full refund. Refund sebagian belum didukung oleh API ini.

    API akan menerima informasi direct_debit_id dan opsional parameter reason untuk melakukan refund, yang selanjutnya akan mengirimkan respon refund dengan status PENDING. Status PENDING melambangkan bahwa refund sedang diproses oleh pihak bank atau partner Xendit.

    Webhook atau callback akan dikirimkan ke sistem Anda ketika refund telah berhasil diproses dengan status SUCCEEDED atau FAILED.

    Endpoint: Mengembalikan Pembayaran Direct Debit

    POST https://api.xendit.co/direct_debits/:direct_debit_id/refunds

    Request Parameters

    Example Refund a Direct Debit Payment Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -H 'Idempotency-key: Test_Idempotent_Key'\
       --data-raw '{
        "currency": "IDR",
        "amount": 1500,
        "reason": "REQUESTED_BY_CUSTOMER"
    }'
    <?php
      $url = "https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = $headers = [
        "Content-Type: application/json",
        "Idempotency-key: Test_Idempotent_Key",
        ];
      $data = [
        "currency" => "IDR",
        "amount" => 1500,
        "reason" => "REQUESTED_BY_CUSTOMER",
        ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Tipe Deskripsi
    direct_debit_id
    wajib
    string ID transaksi direct debit yang dihasilkan pada titik transaksi. Prefix: ddpy-.
    Header Parameter Tipe Deskripsi
    Idempotency-key
    wajib
    string Disediakan oleh merchant untuk mencegah permintaan duplikat. Mungkin sama dengan GUID apa pun. Note: Max 100 karakter
    Body Parameter Tipe Deskripsi
    reason
    wajib
    string Alasan mengapa pengembalian dana dilakukan.

    Nilai yang diterima:
    • FRAUDULENT
    • DUPLICATE
    • REQUESTED_BY_CUSTOMER
    • CANCELLATION<
    • OTHER
    amount
    opsional
    number Jumlah yang akan dikembalikan.
    Jika tidak ada yang diberikan, akan otomatis disetel ke jumlah maksimum yang mungkin untuk dikembalikan.
    currency
    opsional
    string Mata uang refund. Harus dalam format ISO 4217.
    Jika tidak ada yang disediakan, akan mengikuti mata uang transaksi direct debit.
    Hanya mendukung IDR.
    metadata
    opsional
    object JSON free-format untuk informasi tambahan yang Anda berikan selama permintaan. Default: null.
    Limits:
    • Max 50 keys
    • Max key name length: 40 characters
    • Max value length: 500
    • Max depth: 3

    Response Parameter

    Mengembalikan Refund Objek dengan status 200

    Eror

    Contoh eror atau pesan kesalahan

    {
        "error_code" : "IDEMPOTENCY_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Kode Eror Deskripsi
    IDEMPOTENCY_ERROR
    409
    Idempotency-key yang disediakan sudah ada tetapi body request yang diberikan tidak sesuai dengan request asli.
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan pembayaran valid yang cocok dengan payment ID yang diberikan.
    MAXIMUM_REFUND_AMOUNT_REACHED
    400
    Jumlah refund yang Anda masukkan lebih besar dari jumlah yang dapat dikembalikan.
    REFUND_NOT_SUPPORTED
    400
    Permintaan refund gagal karena refund tidak didukung oleh penyedia layanan.
    INELIGIBLE_TRANSACTION
    400
    Permintaan refund gagal karena transaksi awal tidak berhasil diselesaikan atau periode refund telah berlalu.
    PARTIAL_REFUND_NOT_SUPPORTED
    400
    Permintaan refund gagal karena refund sebagian tidak didukung oleh penyedia layanan.
    INSUFFICIENT_BALANCE
    400
    Saldo Xendit tidak cukup untuk melakukan refund.

    Get Refund dengan ID

    Anda dapat menggunakan endpoint ini untuk mengambil informasi mengenai permintaan refund tertentu dengan refund ID.

    Endpoint: Dapatkan refund dengan ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/refunds/:refund_id

    Dapatkan refund dengan ID - Request

    Example Get Direct Debit Refund by ID Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds/ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    }'
    <?php
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $refund_id = "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/refunds" . $refund_id;
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Type Description
    direct_debit_id
    required
    string ID transaksi direct debit yang dihasilkan pada titik transaksi. Prefix: ddpy-.
    refund_id
    required
    string Pengidentifikasi unik untuk refund yang dihasilkan oleh Xendit. Dimulai dengan ddrfd-.

    Dapatkan refund dengan ID - Response

    Mengembalikan Refund Objek dengan status 200

    Dapatkan refund dengan ID - Errors

    Example Get Direct Debit Refund by ID Error Response

    {
        "error_code" : "DATA_NOT_FOUND",
        "message" : "We couldn’t find a valid payment matching the payment id given."
    }
    Error Code Deskripsi
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan objek pengembalian dana yang valid yang cocok dengan id yang diberikan.

    List Refund

    Anda dapat menggunakan endpoint ini untuk mengambil semua permintaan pengembalian dana terkait untuk pembayaran debit langsung tertentu.

    Endpoint: List Refunds dengan ID

    GET https://api.xendit.co/direct_debits/:direct_debit_id/refunds

    List Refunds dengan ID - Request

    Example List Refunds by Direct Debit ID Request

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14/refunds -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    }'
    <?php
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/refunds";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    Path Parameter Type Deskripsi
    direct_debit_id
    required
    string Direct Debit Payment object id. Prefix: ddpy-.

    List Refunds dengan ID - Response

    Example List Refunds by Direct Debit ID Success Response

    [
        {
            "data": [
                {
                    "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
                    "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
                    "channel_code": "DC_BRI",
                    "currency": "IDR",
                    "amount": "1500",
                    "status": "PENDING",
                    "failure_code": null,
                    "reason": "REQUESTED_BY_CUSTOMER",
                    "created": "2020-03-26T05:44:26+0800",
                    "updated": null,
                    "metadata": null
                }
            ],
            "has_more": false,
            "links": null
        }
    ]
    Parameter Type Deskripsi
    data array Array yang berisi Refund objek yang cocok dengan kueri yang disediakan
    has_more boolean Menunjukkan apakah ada lebih banyak item yang akan ditanyakan dengan last_id dari item terakhir dari hasil saat in
    links object Larik yang berisi tautan target untuk mengakses sisa data. Akan menjadi null jika tidak ada data lebih lanjut yang tersedia.

    Parameter Deskripsi
    href string Representasi tautan yang berisi kumpulan data berikutnya
    ref string Jenis relasi tautan menjelaskan bagaimana data saat ini terkait dengan href target.
    Akan selalu next.
    method string Akan selalu "GET".

    List Refunds dengan ID - Errors

    Example List Refunds by Direct Debit ID Error Response

    {
        "error_code" : "DATA_NOT_FOUND",
        "message" : "We couldn’t find a valid payment matching the payment id given."
    }
    Error Code Description
    DATA_NOT_FOUND
    404
    Kami tidak dapat menemukan pembayaran valid yang cocok dengan id pembayaran yang diberikan.

    Notifikasi Callback

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

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

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

    Pelajari lebih lanjut mengenai Callback.

    Linked Account Tokenization Callback

    Payload

    Linked Account Tokenization Callback hanya didukung untuk OneKlik BCA, BPI, dan Unionbank. Merchant dapat melewati alur ini jika hanya mengintegrasikan BRI atau BCA KlikPay.

    Example: Linked Account Tokenization Callback Payload (BCA OneKlik)

    {
        "event": "linked_account_token.successful",
        "timestamp": "2020-03-19T05:34:55+0800",
        "id": "lat-aa620619-4177-476e-b097-2ad5ae4d3e55",
        "channel_code": "BCA_ONEKLIK",
        "type": "DEBIT_CARD",
        "accounts": [
            {
                "id": "la-aa620619-124f-41db-995b-66a52abe036a",
                "card_last_four": "1234",
                "card_expiry": "06/24",
                "account_mobile_number": "+62818555988",
                "currency": "IDR",
                "description": null
            }
        ]
    }
    Parameter Deskripsi
    event string "linked_account_token.successful"
    timestamp string ISO 8601 Event timestamp
    id string Pengidentifikasi unik untuk linked account token. Akan memiliki prefix lat-.
    channel_code string Channel code (BCA_ONEKLIK)
    type string DEBIT_CARD
    accounts array Array objek dengan properties yang terhubung dengan akun:

    Key Value
    id string Pengidentifikasi untuk akun tertentu. Akan memiliki prefix la-.
    card_last_four string Empat digit terakhir dari debit card yang ditautkan
    card_expiry string null untuk BCA OneKlik
    account_mobile_number string Nomor handphone tersamarkan yang terdaftar di bank.

    Memungkinkan apabila objek akun memiliki card_last_four yang sama tetapi memiliki nomor handphone yang berbeda.

    Nomor handphone digunakan untuk memungkinkan pengguna akhir memilih nomor handphone yang akan dikirimi OTP untuk mengonfirmasi transaksi.

    currency string Kode mata uang ISO 4217 Currency Code
    description string Deskripsi akun (disediakan oleh penyedia layanan)

    Expiring Payment Method Callback

    Ini akan dikirim ketika payment method tertentu kadaluarsa. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk menautkan kembali. Fitur ini hanya didukung untuk BPI dan Unionbank.

    Payload

    Example: Payload

    {
        "event": "payment_method.expiry.expiring",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "customer_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "expiration_timestamp": "2021-03-26T05:44:26+0800",
        "business_id": "5f21361959ef2b788cbbe97f"
    }
    Parameter Deskripsi
    event string payment_method.expiry.expiring
    timestamp string ISO 8601 Event timestamp
    id string ID untuk otorisasi tertentu (payment method)
    expiration_timestamp string ISO 8601 Waktu kadaluarsa token
    customer_id string Customer ID dari Xendit
    business_id string Internal Business ID Xendit yang mengidentifikasi merchant

    Expired Payment Method Callback

    Ini akan dikirim ketika payment method tertentu telah kadaluarsa atau telah dibatalkan. Anda dapat menggunakan ini untuk memberi tahu pelanggan Anda untuk menautkan kembali.

    Payload

    Example: Payload

    {
        "event": "payment_method.expiry.expired",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "customer_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "business_id": "5f21361959ef2b788cbbe97f"
    }
    Parameter Deskripsi
    event string payment_method.expiry.expired
    timestamp string ISO 8601 Event timestamp
    id string ID untuk otorisasi tertentu (payment method). Akan memiliki pm- sebagai prefix.
    customer_id string Customer ID dari Xendit
    business_id string Internal Business ID Xendit yang mengidentifikasi merchant

    Callback Payload Status Pembayaran

    Header Parameter Tipe Deskripsi
    x-callback-token
    required
    string Token unik akun Anda yang dapat digunakan untuk mengecek keaslian pesan

    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.
    MAX_OTP_ATTEMPTS_ERROR
    Transaksi digagalkan karena telah melewati batas maksimum untuk memvalidasi OTP
    INVALID_PAYMENT_METHOD_ERROR
    payment_method_id tidak ditemukan atau telah kadaluarsa
    SERVER_ERROR
    Terjadi kesalahan saat memproses permintaan ke pihak bank.

    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": null,
      "adjusted_received_amount": 15000,
      "fees_paid_amount": 0,
      "created": "2020-05-14T16:03:00.154Z",
      "updated": "2020-05-14T16:03:02.765Z",
      "recurring_payment_id": "5ebd6bb37d674631dda4ef72",
      "currency": "IDR",
      "payment_channel": "DC_BRI"
    }
    Parameter Tipe Deskripsi
    id string ID invoice yang didapatkan dari Xendit
    user_id string ID bisnis Xendit Anda
    external_id string ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    merchant_name string Nama perusahaan atau situs Anda
    amount number Jumlah tagihan invoice (tanpa pajak, biaya)
    status string PAID the recurring direct debit has successfully been paid or
    EXPIRED pembayaran direct debut untuk transaksi recurring telah gagal
    payer_email string Email pembayar, didapatkan dari permintaan API Anda
    description string Deskripsi invoice, didapatkan dari permintaan API Anda
    fees_paid_amount number Xendit fees that was directly paid from this invoice - thanks for supporting a better world of payments :)
    adjusted_received_amount number umlah netto uang yang masuk ke saldo Anda setelah dipotong biaya.
    recurring_payment_id string ID dari recurring yang dibuat dari invoice ini
    paid_amount number Total Total nilai yang dibayarkan untuk invoice
    updated string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recurring dibuat. Timezone adalah UTC+0
    created string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recuriing di update. Timezone adalah UTC+0
    currency string (ISO 4217) Nilai mata uang dari nominal yang dibuat
    paid_at string (ISO 8601) Waktu dan tanggal customer Anda melakukan pembayaran invoice. Anda akan menerima respon ini ketika invoice telah dibayar.
    payment_method string Metode pembayaran yang digunakan ketika customer melakukan pembayaran invoice. Anda akan menerima response ini ketika invoice dibayar - DIRECT_DEBIT
    payment_channel string Kanal pembayaran yang digunakan ketika customer melakukan pembayaran invoice ice.Anda akan menerima response ini ketika invoice dibayar
    Contoh : DC_BRI

    Callback Pembayaran Refund

    Example: Direct Debit Refund Callback

    {
        "event": "“direct_debit.refund",
        "created": "2020-03-26T05:44:26+0800",
        "business_id": "5f21361959ef2b788cbbe97f",
        "data": {
            "id": "ddrfd-c3970211-f73a-49c4-a3e5-7e93ea49b85f",
            "direct_debit_id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
            "channel_code": "DC_BRI",
            "currency": "IDR",
            "amount": "1500",
            "status": "COMPLETED",
            "failure_code": null,
            "reason": "REQUESTED_BY_CUSTOMER",
            "created": "2020-03-26T05:44:26+0800",
            "updated": null,
            "metadata": null
        }
    }


    Parameter Deskripsi
    event string "direct_debit.refund"
    created string ISO 8601 Created timestamp
    busines_id string Internal Business ID Xendit yang mengidentifikasi merchant
    data object Memiliki Refund Objek dengan status COMPLETED atau FAILED

    Virtual Accounts

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

    Buat Virtual Account

    Endpoint: Pembuatan Virtual Accounts (VA)

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

    Untuk lingkungan produksi, aktifkan Virtual Account dari dasbor dengan masuk ke Dasbor > Pengaturan > Terima Uang > Metode pembayaran > Virtual accounts dan klik tombol "Aktifkan!". Rentang VA akan diatur dan diaktifkan secara instan. Dalam lingkungan pengembangan, pengembangan rentang VA akan ditugaskan segera. Baca lebih lanjut tentang virtual accounts.

    Apakah anda ingin menggunakan virtual akun yang terikat dengan transaksi daripada pengguna? Gunakan invoices API kita.

    Parameter Request

    Contoh Permintaan Virtual Accounts

    curl https://api.xendit.co/callback_virtual_accounts -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id=demo_virtual_account_1475459775872 \
       -d bank_code=BNI \
       -d name='Rika Sutanto'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [ 
        "external_id" => "demo-1475804036622",
        "bank_code" => "BNI",
        "name" => "Rika Sutanto"
      ];
    
      $createVA = \Xendit\VirtualAccounts::create($params);
      var_dump($createVA);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.createFixedVA({
      externalID: 'demo_1475459775872',
      bankCode: 'BNI',
      name: 'Rika Sutanto',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_virtual_account_1475459775872");
      params.put("bank_code", BankCode.BNI.getText());
      params.put("expected_amount", 100000);
      params.put("name", "Rika Sutanto");
    
      //For closed virtual account
      FixedVirtualAccount closedVirtualAccount = FixedVirtualAccount.createClosed(params);
    
      //For open virtual account
      FixedVirtualAccount openVirtualAccount = FixedVirtualAccount.createOpen(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := virtualaccount.CreateFixedVAParams{
      ExternalID: "demo-1475804036622",
      BankCode:   "BNI",
      Name:       "Rika Sutanto",
    }
    
    resp, err := virtualaccount.CreateFixedVA(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.create(
        external_id="demo_1475459775872",
        bank_code="BNI",
        name="Rika Sutanto",
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    CreateVirtualAccountParameter parameter = new CreateVirtualAccountParameter
    {
      ExternalId = "va-1475804036622",
      BankCode = VirtualAccountEnum.BankCode.Bni,
      Name = "John Doe",
      ExpectedAmount = 200000,
    };
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Create(parameter);

    JSON

    {
       "external_id": "demo-1475804036622",
       "bank_code": "BNI",
       "name": "Rika Sutanto"
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    with-fee-rule
    optional
    string ID Fee Rule yang ingin Anda aplikasikan ke transaksi yang dilakukan.

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API. Hanya dapat digunakan untuk jenis VA is_closed, is_single_use.

    Header ini hanya dapat digunakan untuk akun yang sudah memiliki xenPlatform. Lihat 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, khusus untuk BCA panjang minimal adalah 3 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: BCA, BNI, BRI, BJB, BSI, CIMB, MANDIRI, PERMATA, SAHABAT_SAMPOERNA
    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 memiliki batasan tergantung pada bank yang dipilih. Dan juga Anda tidak dapat menggunakan nama bank/institusi/lembaga pemerintahan.

    Karakter Hanya huruf
    Panjang minimal 1 karakter
    Catatan: Nama pada VA BNI akan terdapat prefix "XDT-" pada badan respon. Prefix ini adalah wajib dari BNI.
    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

    Untuk MANDIRI, BNI,BRI, BSI, BJB, and SAHABAT_SAMPOERNA:
  • Nominal minimum: Rp 1
  • Nominal Maksimum: Rp 50,000,000,000

  • Untuk PERMATA:
  • Nominal Minimum: Rp 1
  • Nominal Maksimum: Rp 9,999,999,999

  • Untuk BCA:
  • Nominal Minimum: Rp 10,000
  • Nominal Maksimum: Rp 999,999,999,999
  • 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 dan BSI

    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": false,
       "currency" : "IDR",
       "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.
    currency
    required
    string Mata uang dari virtual account. Tersedia untuk API versi 2018-12-21.

    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 minimum Rp. 1 untuk BNI, BRI, PERMATA, MANDIRI, BSI, BJB, dan SAHABAT_SAMPOERNA
  • Nominal minimum Rp. 10,000 untuk BCA
  • MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal maksimum Rp. 50,000,000,000 untuk BNI, BRI, MANDIRI, BSI, BJB, dan SAHABAT_SAMPOERNA
  • Nominal maksimum Rp. 9,999,999,999 untuk PERMATA
  • Nominal maksimum Rp. 999,999,999,999 untuk BCA
  • 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.

    Cek Virtual Account

    Endpoint: Mendapatkan Informasi Virtual Account

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

    Contoh Permintaan Mendapatkan Informasi Virtual Account

    curl https://api.xendit.co/callback_virtual_accounts/:id -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '59e03a976fab8b1850fdf347';
      $getVA = \Xendit\VirtualAccounts::retrieve($id);
      var_dump($getVA);
    
    ?>

    Terkadang, anda perlu mengetahui detail dari virtual account anda. Endpoint ini dapat digunakan untuk mendapatkan detail informasi terbaru dari virtual account anda.

    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.getFixedVA({ id: '59e03a976fab8b1850fdf347' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedVirtualAccount fpa = FixedVirtualAccount.getFixedVA("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := virtualaccount.GetFixedVAParams{
      ID: "59e03a976fab8b1850fdf347",
    }
    
    resp, err := virtualaccount.GetFixedVA(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.get(
        id="5eec3a3e8dd9ea2fc97d6728",
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Get("5eec3a3e8dd9ea2fc97d6728");

    Terkadang, anda perlu mengetahui detail dari fixed virtual account anda. Endpoint ini dapat digunakan untuk mendapatkan detail informasi terbaru dari fixed virtual account anda.

    Parameter Request

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

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Informasi Virtual Account

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

    Ubah Virtual Account

    Endpoint: Pembaruan Virtual Account (VA)

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

    Virtual Account sangat mudah digunakan, dan itu tergantung kebutuhan anda. Oleh karena itu, kami menyediakan endpoint yang sangat mudah digunakan untuk memperbarui virtual account sesuai yang anda mau.

    Note: Closed virtual accounts tidak dapat di ubah menjadi open virtual accounts begitu pula sebaliknya.

    Parameter Request

    Contoh Permntaan Pembaruan Fixed Virtual Account

    curl https://api.xendit.co/callback_virtual_accounts/57f6fbf26b9f064272622aa6 -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=100000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = 'VA-id';
      $updateParams = ["suggested_amount" => 6000];
    
      $updateVA = \Xendit\VirtualAccounts::update($id, $updateParams);
      var_dump($updateVA);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.updateFixedVA({
      id: '57f6fbf26b9f064272622aa6',
      expectedAmt: 1000000,
    })
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("is_single_use", true);
    
      FixedVirtualAccount fixedVirtualAccount = FixedVirtualAccount.update("EXAMPLE_ID", params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    expirationDate := time.Now().AddDate(0, 0, 1)
    
    updateFixedVAData := virtualaccount.UpdateFixedVAParams{
      ID:             "5df745b92b50911700f37e86",
      ExpirationDate: &expirationDate,
      ExpectedAmount: 6000,
    }
    
    resp, err := virtualaccount.UpdateFixedVA(&updateFixedVAData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("updated fixed va: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account = VirtualAccount.update(
        id="5eec3a3e8dd9ea2fc97d6728",
        is_single_use=True,
    )
    print(virtual_account)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    UpdateVirtualAccountParameter parameter = new UpdateVirtualAccountParameter
    {
      IsSingleUse = true,
      ExpectedAmount = 20000,
    };
    
    VirtualAccountResponse virtualAccountResponse = await virtualAccount.Update(parameter, "57f6fbf26b9f064272622aa6");
    {
        "expiration_date": "2019-11-12T23:46:00.000Z",
        "expected_amount": 6000
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

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

    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 minimum Rp. 1 untuk BNI, BRI, PERMATA, MANDIRI, BSI, BJB, dan SAHABAT_SAMPOERNA
  • Nominal minimum Rp. 10,000 untuk BCA
  • MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
  • Nominal maksimum Rp. 50,000,000,000 untuk BNI, BRI, MANDIRI, BSI, BJB, dan SAHABAT_SAMPOERNA
  • Nominal maksimum Rp. 9,999,999,999 untuk PERMATA
  • Nominal maksimum Rp. 999,999,999,999 untuk BCA
  • REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Cek Ketersediaan Bank

    Endpoint: Mendapatkan bank yang tersedia untuk virtual accounts

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

    Contoh Permintaan mendapatkan bank yang tersedia untuk virtual accounts

    curl https://api.xendit.co/available_virtual_account_banks -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $getVABanks = \Xendit\VirtualAccounts::getVABanks();
      var_dump($getVABanks);
    
    ?>
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      AvailableBank[] availableBanks = FixedVirtualAccount.getAvailableBanks();
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    availableBanks, err := virtualaccount.GetAvailableBanks()
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("available va banks: %+v\n", availableBanks)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account_banks = VirtualAccount.get_banks()
    print(virtual_account_banks)
    string apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    
    XenditClient xendit = new XenditClient(apiKey);
    VirtualAccountClient virtualAccount = xendit.VirtualAccount;
    
    AvailableBank[] availableBanks = await virtualAccount.GetAvailableBanks();

    Parameter Respon

    Contoh respon saat mendapatkan bank yang tersediua untuk virtual accounts

    [
        {
            "name": "Bank Central Asia",
            "code": "BCA",
            "is_activated": false
        },
        {
            "name": "Bank Negara Indonesia",
            "code": "BNI",
            "is_activated": true
        },
        {
            "name": "Bank Mandiri",
            "code": "MANDIRI",
            "is_activated": true
        },
        {
            "name": "Bank Permata",
            "code": "PERMATA",
            "is_activated": true
        },
        {
            "name": "Bank Sahabat Sampoerna",
            "code": "SAHABAT_SAMPOERNA",
            "is_activated": false
        },
        {
            "name": "Bank Rakyat Indonesia",
            "code": "BRI",
            "is_activated": true
        },
        {
            "name": "Bank CIMB Niaga",
            "code": "CIMB",
            "is_activated": false
        },
        {
            "name": "Bank Syariah Indonesia",
            "code": "BSI",
            "is_activated": false
        },
        {
            "name": "Bank Jabar Banten",
            "code": "BJB",
            "is_activated": true
        }
    ]
    Parameter Deskripsi
    name
    required
    Nama bank
    code
    required
    Kode bank, yang berkaitan saat pembuatan virtual account
    is_activated
    required
    Status aktivasi bank, yang berkaitan saat pembuatan virtual account

    Cek Pembayaran

    Endpoint: Permintaan Mendapatkan Pembayaran Virtual Account

    GET https://api.xendit.co/callback_virtual_account_payments/payment_id={payment_id}

    Contoh Permintaan Mendapatkan Pembayaran Virtual Account

    curl https://api.xendit.co/callback_virtual_account_payments/payment_id={payment_id} -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $paymentID = '1502450097080';
      $getFVAPayment = \Xendit\VirtualAccounts::getFVAPayment($paymentID);
      var_dump($getFVAPayment);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.getVAPayment({
      paymentID: '598d91b1191029596846047f',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedVirtualAccountPayment payment = FixedVirtualAccount.getPayment("EXAMPLE_PAYMENT_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }</