NAV undefined
bash php javascript java go python

Pengantar

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

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

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>1.0.0</version>
  <type>pom</type>
</dependency>

Gradle

compile 'com.xendit:xendit-java-lib:1.0.0'

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

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

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

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

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)

Parameter Request (Money-out read permission)

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

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

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

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

Parameter Respon

Contoh Respon Permintaan Pengecekan Saldo

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

Kanal Pembayaran

Mendapatkan Kanal Pembayaran

Endpoint: Mendapatkan Kanal Pembayaran API

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

Contoh Mendapatkan Kanal Pembayaran

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

Parameter Request

Menghasilkan daftar objek kanal pembayaran. Gunakan ini untuk mengetahui kanal pembayaran yang tersedia untuk bisnis anda.

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

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

Parameter Respon

Contoh Respon Mendapatkan Kanal Pembayaran

[
  {
    "business_id": "xxxxxxxx",
    "is_livemode": true, 
    "channel_code": "BRI",
    "name": "BRI Virtual account",
    "currency": "IDR",
    "channel_category": "VIRTUAL_ACCOUNT",
    "is_enabled": false
  },
  {
    "business_id": "xxxxxxxx",
    "is_livemode": true, 
    "channel_code": "MASTERCARD",    
    "name": "Mastercard credit and debit cards",
    "currency": "IDR",
    "channel_category": "CREDIT_CARD",
    "is_enabled": true     
  },
  {
    "business_id": "xxxxxxxx",
    "is_livemode": true, 
    "channel_code": "MASTERCARD",    
    "name": "Mastercard credit and debit cards",
    "currency": "USD",
    "channel_category": "CREDIT_CARD",
    "is_enabled": true     
  }
  ...
]
Parameter Tipe Deskripsi
business_id
required
string ID bisnis anda
is_livemode
required
boolean Bernilai true saat membuat permintaan menggunakan live API key.
false saat membuat perminataan menggunakan test API key.
channel_code
required
string Kode kanal pembayaran
name
required
string Nama kanal pembayaran
currency
required
Mata uang yang diproses oleh kanal pembayaran. Hal ini berdasarkan kode mata uang ISO 4217
channel_category
required
string Kategori kanal pembayaran.
Nilai yang tersedia: VIRTUAL_ACCOUNT, RETAIL_OUTLET, EWALLET,CREDIT_CARD
is_enabled
required
boolean Saat bernilai true, permintaan API dapat berhasil dibuat untuk bisnis tersebut dengan kanal pembayaran. Saat bernilai false, permintaan API akan gagal. Anda harus mengaktifkan kanal pembayaran di pengaturan dashboard agar dapat membuatnya berhasil.

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==: \
   -d reference_id=demo_1475801962607 \
   -d given_names="John" \
   -d mobile_number="+6287774441111" \
   -d email="customer@website.com" \
<?php
  $url = "https://api.xendit.co/customers";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";
  $data = [
    "given_names" => "John",
    "reference_id" => "demo_1475801962607",
    "mobile_number" => "+6287774441111",
    "email" => "customer@website.com"
  ];

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
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);
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)
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
  $url = "https://api.xendit.co/customers";
  $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
  $headers = [];
  $headers[] = "Content-Type: application/json";

  $queryString = "?reference_id=demo_1475801962607";

  $curl = curl_init();

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

  $result = curl_exec($curl);
  echo $result;
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);
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

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",
          "suburb": "Kebayoran",
          "city": "Jakarta Selatan",
          "province": "DKI Jakarta",
          "postal_code": "993448",
          "country": "Indonesia"
        }
      },
      "promotion": {
          "reference_id": "BCA_10",
          "original_amount": 1000000
      },
      "installment": {
          "count": 3,
          "interval": "month"
      }
    }'
<?php

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

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

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

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

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

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

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

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

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

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

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

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

Parameter Request (Money-in write permission)

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

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


Parameter Body Tipe Deskripsi
token_id
required
string ID Token yang digunakan untuk melakukan Charge.
external_id
required
string Pengindentifikasi unik sesuai dengan pilihan Anda. Maksimal 64 karakter.
amount
required
number Jumlah biaya yang akan di-charge.
authentication_id
optional
string ID Otentikasi untuk mengotentikasi charge. Tidak wajib diisi hanya bila sudah diotentikasi dengan Token Sekali Pakai, atau setingan tidak wajib otentikasi sudah diaktifkan pada akun Anda.
card_cvn
optional
string 3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Wajib diisi untuk kartu kredit yang diterbitkan dari Eropa.
amount
required
number Jumlah biaya yang akan di-charge.
authentication_id
optional
string ID Otentikasi untuk mengotentikasi charge. Tidak wajib diisi hanya bila sudah diotentikasi dengan Token Sekali Pakai, atau setingan tidak wajib otentikasi sudah diaktifkan pada akun Anda.
card_cvn
optional
string 3 atau 4 angka kode CVN (CVC). Tidak wajib diisi namun kami sangat merekomendasikan untuk mengisi nilai tersebut. Wajib diisi untuk kartu kredit yang diterbitkan dari Eropa.
capture
optional

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

default: IDR
string Mata uang yang akan digunakan saat melakukan transaksi. Gunakan tiga huruf kode mata uang sesuai standar ISO.Jika tidak disertakan bersamaan dengan request, maka akan diisi dengan IDR
mid_label
optional
string Karakter spesifik yang digunakan untuk memberi tanda pada Merchant ID (MID) yang sudah di daftarkan di akun Xendit dan akan digunakan untuk bertransaksi. Parameter tersebut dan dikonfigurasi pada daftar MID yang terdapat di pengaturan dashbor Anda. (Jika tidak ada input pada parameter ini dan jika Anda memiliki lebih dari 1 MID, maka transaksi akan menggunakan MID yang tertera paling atas / prioritas pertama pada pengaturan dasbor Anda.
Note:
Hanya dapat digunakan untuk pelanggan dengan mode switcher
billing_details
optional
object Rincian tagihan dari pemegang kartu. Jika dimasukkan pada input, data data ini harus sesuai dengan data yang dimiliki oleh penerbit kartu kredit. Parameter ini dibutuhkan untuk menunjang sistem verifikasi alamat (AVS) - hanya untuk kartu yang diterbitkan di negara USA / Canada / Ingrris Raya.
parameter pada detil data tagihan
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

    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.

    Pembuatan Charge eWallet

    Endpoint: Pembuatan Request Charge eWallet

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

    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.

    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 Mengimplementasikan flow asynchronous untuk callback pembayaran OVO .
    2019-02-04 Mengembalikan reseponse segera tanpa callback.

    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);
    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string User-id sub-account yang Anda ingin gunakan untuk membuat transaksi.

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

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

    Header parameter ini hanya anda gunakan apabila 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, PH_PAYMAYA, PH_GCASH, PH_GRABPAY
    channel_properties
    wajib saat checkout_method = ONE_TIME_PAYMENT, opsional saat checkout_method = TOKENIZED_PAYMENT
    object Channel specific information required for the transaction to be initiated 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)
    parameter wajib DANA, LINKAJA, SHOPEEPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana end user akan diarahkan jika proses otorisasi berhasil
    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 metode pembayaran
    customer_id
    opsional
    string ID dari customer dimana token akun akan terhubung
    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, 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
    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
    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
    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

    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);
    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, 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

    Tokenisasi - Membuat Customer

    Ada 4 langkah wajib untuk menghubungkan akun dan membuat transaksi menggunakan alur tokenisasi kami, dimulai dengan pembuatan objek customer dan diakhiri dengan pembuatan charge.

    Langkah 1 - pertama, dibutuhkan objek customer untuk memulai penghubungan akun untuk tokenisasi eWallet. customer_id yang dibuat akan digunakan pada saat memanggil API selanjutnya untukl mengidentifikasi pengguna akhir yang melakukan penghubungan akun. customer_id juga memungkinkan Anda untuk dengan mudah menghubungkan dan menelusuri transaksi dan metode pembayaran lainnya. Harap merujuk bagian Customer untuk membuat objek customer

    Tokenisasi - Inisiasi Penghubungan Akun

    Langkah 2 - Penghubungan akun pada tokenisasi eWallet berarti pengguna akhir mengotorisasi merchant untuk melakukan transaksi melalui (penghubungan) token pada (akun) eWallet pengguna akhir. Endpoint ini mengawali proses otorisasi dan akun token yang terhubung akan dibuat dari proses ini. Pengguna akhir harus dialihkan ke halaman penyedia eWallet untuk mengotorisasi penghubungan akun.

    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-akun dari id-user yang Anda ingin buatkan transaksinya.

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

    Endpoint: Inisiasi Penghubungan Akun

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

    Request - Inisiasi Penghubungan Akun

    Contoh Request Inisiasi Penghubungan Akun

    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": "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"
        }
    }'
    Parameter Body Request Tipe Deskripsi
    customer_id
    wajib
    string ID dari objek customer yang akun tokennya akan dihubungkan. Gunakan Tokenisasi - Membuat Customer untuk mendapatkan Customer ID
    channel_code
    wajib
    string Pengidentifikasi untuk channel spesifik dari akun yang akan dihubungkan. Kode wajib menggunakan huruf kapital.

    eWallet yang tersedia dan kode channelnya:
    • GRABPAY (PH) - PH_GRABPAY
    • PAYMAYA (PH) - PH_PAYMAYA
    properties
    wajib
    object JSON yang berisi informasi yang dibutuhkan untuk melakukan otorisasi. Nilai dalam properties berubah sesuai penyedia eWallet:

    data wajib GRABPAY
    Key Value
    success_redirect_url
    wajib
    string URL dimana pengguna akhir akan dialihkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana pengguna akhir akan dialihkan jika proses otorisasi gagal
    data wajib PAYMAYA
    Key Value
    success_redirect_url
    wajib
    string URL dimana pengguna akhir akan dialihkan jika proses otorisasi berhasil
    failure_redirect_url
    wajib
    string URL dimana pengguna akhir akan dialihkan jika proses otorisasi gagal
    cancel_redirect_url
    wajib
    string URL dimana pengguna akhir akan dialihkan jika proses otorisasi dibatalkan. Pengguna akhir dapat mencoba kembali pada tautan yang sama dalam 15 menit.
    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.

    Response - Inisiasi Penghubungan Akun

    Contoh Response Sukses Inisiasi Penghubungan Akun

    {
        "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 ID unik yang dibuat Xendit untuk otorisasi linked account token
    customer_id string ID objek customer
    channel_code string Kode pengidentifikasi untuk channel
    authorizer_url string URL yang diperoleh dari penyedia eWallet yang digunakan pengguna akhir dalam melakukan otorisasi penghubungan akun. Pengguna akhir sebaiknya dialihkan ke URL ini untuk menyelesaikan proses tokenisasi.
    status string Status otorisasi. Request API yang berhasil akan memberi respon dengan status PENDING. Ketika penghubungan akun berhasil, status akan diperbarui menjadi COMPLETED. Jika penghubungan akun gagal, status akan diperbarui menjadi FAILED
    metadata object Objek yang ditentukan pengguna dengan properti dan nilai JSON yang diteruskan selama penghubungan akun.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Error - Inisiasi Penghubungan Akun

    Lihat error umum lainnya disini.

    Kode Error Deskripsi
    CHANNEL_CODE_NOT_SUPPORTED_ERROR
    400
    channel_code yang diisi tidak didukung atau belum diaktifkan untuk akun ini.
    CUSTOMER_NOT_FOUND_ERROR
    404
    customer_id yang diisi saat request tidak ada atau akses tidak terotorisasi
    CHANNEL_UNAVAILABLE
    503
    Channel tujuan sedang tidak tersedia. Hal ini mungkin dikarenakan channel partner sedang error atau dalam perbaikan.
    INVALID_ACCOUNT_DETAILS
    400
    Nilai properties yang diisi pada request tidak sesuai dengan data pada penyedia eWallet
    ACCOUNT_ACCESS_BLOCKED
    400
    Penyedia eWallet telah menolak proses penghubungan akun. Hal ini mungkin dikarenakan akun tidak dapat diakses atau belum aktif.

    Tokenisasi - Memperoleh Akun yang Dapat Diakses oleh Linked Account Token

    Langkah 3 - Endpoint ini akan memberikan daftar eWallets yang dapat diakses oleh linked account token. ID linked account (dengan prefix la-) diberikan dalam respon endpoint ini dibutuhkan pada langkah berikutnya; pembuatan metode pembayaran.

    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-akun dari id-user yang Anda ingin buatkan transaksinya.

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

    Endpoint: Memperoleh Akun yang Dapat Diakses oleh Linked Account Token

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

    Request - Memperoleh Akun yang Dapat Diakses oleh Linked Account Token

    Contoh Memperoleh Akun yang Dapat Diakses oleh 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==:
    Parameter Path Tipe Deskripsi
    linked_account_token_id
    wajib
    string id dari linked account token yang diperoleh dari Inisialisasi Otorisasi Akun. Memiliki prefix lat- .

    Response - Memperoleh Akun yang Dapat Diakses oleh Linked Account Token

    Endpoint ini mengembalikan objek array dengan properti sebagai berikut:

    Contoh Response Sukses Memperoleh Akun yang Dapat Diakses oleh 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
    type string Tipe akun yang telah terhubung.
    Nilai yang diharapkan: EWALLET
    properties object Object 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
    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

    Error - Memperoleh Akun yang Dapat Diakses oleh Linked Account Token

    Lihat error umum lainnya disini.

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

    Tokenisasi - Membuat Metode Pembayaran

    Langkah 4 - Objek metode pembayaran digunakan sebagai token (dibuat dari langkah penghubungan akun) untuk membuat transaksi pembayaran. Untuk membuat metode pembayaran, objek customer dan linked account harus dibuat terlebih dahulu dan dimasukkan dalam request di endpoint ini.

    Dengan payment_method_id (prefix pm-) yang diberikan dalam respon endpoint ini, Anda dapat menentukan payment_method_id pada endpoint pembuatan charge eWallet untuk memulai pembayaran tokenisasi.

    Parameter Header Tipe Deskripsi
    for-user-id
    opsional
    string Sub-akun dari id-user yang Anda ingin buatkan transaksinya.

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

    Endpoint: Membuat Metode Pembayaran

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

    Request - Membuat Metode Pembayaran

    Contoh Request Membuat Metode Pembayaran

    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": "EWALLET",
        "properties": {
            "id": "la-aa620619-124f-41db-995b-66a52abe036a"
        }
    }'
    Parameter Request Body Tipe Deskripsi
    customer_id
    wajib
    string ID dari customer object yang akan dihubungkan dengan akun token
    type
    wajib
    string Tipe dari metode pembayaran

    Nilai yang didukung: EWALLET
    properties
    wajib
    object JSON yang memiliki informasi untuk mengidentifikasi metode pembayaran:

    Key Value
    id
    wajib
    IDdari Linked Account Token
    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.

    Response - Membuat Metode Pembayaran

    Contoh Response Sukses Membuat Metode Pembayaran

    {
        "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 untuk metode pembayaran. Memiliki prefix pm-.
    type string Tipe akun yang telah terhubung.
    Nilai yang diharapkan: EWALLET
    properties object Object yang memiliki informasi terkait dengan akun yang terhubung.

    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.
    Objek dapat terdiri hingga 50 keys, dengan masing-masing key hingga 40 karakter dan nilai hingga 500 karakter.

    Error - Membuat Metode Pembayaran

    Lihat error umum lainnya disini.

    Kode Error Deskripsi
    LIINKED_ACCOUNT_NOT_FOUND_ERROR
    400
    Kombinasi properties dan type yang diisi saat 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

    Payment Status Callback

    Anda perlu menyediakan endpoint untuk sistem Anda agar dapat menerima seluruh notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika end user menyelesaikan pembayaran untuk eWallet yang tersedia. Silakan memasukkan endpoint di dashboard Xendit pada bagian eWallets paid
    Callback pembayaran akan dikirimkan sebagai POST request ke "callback_url" yang telah Anda set di dashboard Catatan: Silakan memberikan respon kembali dengan status 200 atas callback yang dikirimkan, sehingga kami mengetahui bahwa callback telah diterima dan kami tidak akan mencoba melakukan pengiriman ulang.

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

    Cardless Credit

    Pembayaran kredit tanpa kartu memungkinkan Anda untuk menerima pembayaran uang muka dari penyedia jasa kredit. Nasabah Anda juga mendapatkan pilihan untuk melakukan cicilan dengan tenor yang sesuai dengan kebutuhan nasabah.

    Pembuatan Pembayaran / Generate Checkout URL

    Endpoint: Generate Checkout URL

    POST https://api.xendit.co/cardless-credit

    Parameter Request

    Contoh: Generate Checkout URL

    curl https://api.xendit.co/cardless-credit -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
      --header 'content-type: application/json' \
      --data '{
        "cardless_credit_type": "KREDIVO",
        "external_id": "test-cardless-credit-01",
        "amount": 800000,
        "payment_type": "3_months",
        "items": [
          {
            "id": "123123",
            "name": "Phone Case",
            "price": 200000,
            "type": "Smartphone",
            "url": "http://example.com/phone/phone_case",
            "quantity": 2
          },
          {
            "id": "234567",
            "name": "Bluetooth Headset",
            "price": 400000,
            "type": "Audio",
            "url": "http://example.com/phone/bluetooth_headset",
            "quantity": 1
          }
        ],
        "customer_details": {
          "first_name": "customer first name",
          "last_name": "customer last name",
          "email": "customer@yourwebsite.com",
          "phone": "081513114262"
        },
        "shipping_address": {
          "first_name": "first name",
          "last_name": "last name",
          "address": "Jalan Teknologi No. 12",
          "city": "Jakarta",
          "postal_code": "12345",
          "phone": "081513114262",
          "country_code": "IDN"
        },
        "redirect_url": "https://example.com",
        "callback_url": "http://example.com/callback-cardless-credit"
      }'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'cardless_credit_type' => 'KREDIVO',
        'external_id' => 'test-cardless-credit-01',
        'amount' => 800000,
        'payment_type' => '3_months',
        'items' => [
          [
            'id' => '123123',
            'name' => 'Phone Case',
            'price' => 200000,
            'type' => 'Smartphone',
            'url' => 'http=>//example.com/phone/phone_case',
            'quantity' => 2
          ],
          [
            'id' => '234567',
            'name' => 'Bluetooth Headset',
            'price' => 400000,
            'type' => 'Audio',
            'url' => 'http=>//example.com/phone/bluetooth_headset',
            'quantity' => 1
          ]
        ],
        'customer_details' => [
          'first_name' => 'customer first name',
          'last_name' => 'customer last name',
          'email' => 'customer@yourwebsite.com',
          'phone' => '081513114262'
        ],
        'shipping_address' => [
          'first_name' => 'first name',
          'last_name' => 'last name',
          'address' => 'Jalan Teknologi No. 12',
          'city' => 'Jakarta',
          'postal_code' => '12345',
          'phone' => '081513114262',
          'country_code' => 'IDN'
        ],
        'redirect_url' => 'https://example.com',
        'callback_url' => 'http://example.com/callback-cardless-credit'
      ];
    
      $createPayment = \Xendit\CardlessCredit::create($params);
      var_dump($createPayment);
    
    ?>
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      //items
      CardlessCreditItem items[] = new CardlessCreditItem[1];
      items[0] =
        CardlessCreditItem.builder()
            .id("123")
            .name("Phone Case")
            .price(200000)
            .type("Smartphone")
            .url("https://www.example.org")
            .quantity(1)
            .build();
    
      //address
      CardlessCreditShippingAddress address =
          CardlessCreditShippingAddress.builder()
              .firstName("Lorem")
              .lastName("Ipsum")
              .address("Jalan teknologi")
              .city("Jakarta")
              .postalCode("12345")
              .countryCode("IDN")
              .phone("08129748247684")
              .build();
    
      //Customer
      CardlessCreditCustomer customer =
          CardlessCreditCustomer.builder()
              .firstName("Lorem")
              .lastName("Ipsum")
              .email("email@example.com")
              .phone("08129748247684")
              .build();
    
      CardlessCredit cardlessCredit = CardlessCredit.create(
        "KREDIVO",
        "external_id",
        200000,
        CardlessCredit.PaymentType.THREE_MONTHS.getVal(),
        items,
        customer,
        address,
        "www.example.com",
        "www.example.com"
      );
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createPaymentData := cardlesscredit.CreatePaymentParams{
      CardlessCreditType: xendit.CardlessCreditTypeEnumKREDIVO,
      ExternalID:         "test-cardless-credit-01",
      Amount:             200000,
      PaymentType:        xendit.PaymentTypeEnum3Months,
      Items: []cardlesscredit.Item{
        {
          ID:       "123",
          Name:     "Laptop Asus Ila",
          Price:    200000,
          Type:     "Laptop",
          URL:      "http://asus-ila.com",
          Quantity: 1,
        },
      },
      CustomerDetails: cardlesscredit.CustomerDetails{
        FirstName: "Michael",
        LastName:  "Belajarrock",
        Email:     "michaelbelajarrock@mail.com",
        Phone:     "08123123123",
      },
      ShippingAddress: cardlesscredit.ShippingAddress{
        FirstName:   "Michael",
        LastName:    "Belajarjazz",
        Address:     "Jalan Teknologi No. 12",
        City:        "Jakarta",
        PostalCode:  "40000",
        Phone:       "08123123123",
        CountryCode: "IDN",
      },
      RedirectURL: "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
      CallbackURL: "https://google.com",
    }
    
    resp, err := cardlesscredit.CreatePayment(&createPaymentData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created payment: %+v\n", resp)
    from xendit import Xendit, CardlessCreditType
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CardlessCredit = xendit_instance.CardlessCredit
    
    cardless_credit_items = []
    cardless_credit_items.append(
        CardlessCredit.helper_create_item(
            id="item-123",
            name="Phone Case",
            price=200000,
            type="Smartphone",
            url="http://example.com/phone/phone_case",
            quantity=2,
        )
    )
    customer_details = CardlessCredit.helper_create_customer_details(
        first_name="customer first name",
        last_name="customer last name",
        email="customer@email.com",
        phone="0812332145",
    )
    shipping_address = CardlessCredit.helper_create_shipping_address(
        first_name="first name",
        last_name="last name",
        address="Jl Teknologi No. 12",
        city="Jakarta",
        postal_code="12345",
        phone="081513114262",
        country_code="IDN",
    )
    cardless_credit_payment = CardlessCredit.create_payment(
        cardless_credit_type=CardlessCreditType.KREDIVO,
        external_id="id-1595923113",
        amount=10000,
        payment_type="3_months",
        items=cardless_credit_items,
        customer_details=customer_details,
        shipping_address=shipping_address,
        redirect_url="https://my-shop.com/home",
        callback_url="https://my-shop.com/callback",
    )
    print(cardless_credit_payment)

    Contoh: Respon Sukses dari Generate Checkout URL

    {
      "redirect_url": "https://sandbox.kredivo.com/kredivo/v2/signin?tk=fKhTeBntLW3Zyu23+GQ6s+RQaMMRtQ6YdZA1bnbTszt9WXcph/B4+j8nuPlV599Rfkv85FAYuE21Suajpm45tEMZqjZIdqnSgIPlt7T5gJk=",
      "transaction_id": "66403e84-c8da-4af4-8d30-d17e95522f43",
      "order_id": "123456-test-cardless-credit-01",
      "external_id": "test-cardless-credit-01",
      "cardless_credit_type": "KREDIVO"
    }
    Parameter Body Tipe Deskripsi
    cardless_credit_type
    required
    string Tipe dari Cardless Credit yang akan digunakan. Harus dalam huruf kapital.
    Tipe eWallet yang tersedia: OVO
    external_id
    required
    string Sebuah ID pilihan Anda. Seringkali ini adalah indentifikasi unik seperti nomor telepon, email atau ID transaksi. Panjang maksimum yang diperbolehkan adalah 1000 karakter.
    amount
    required
    number Jumlah yang pelanggan Anda harus bayarkan.
    Note: jumlah minimum adalah Rp 1.
    payment_type
    required
    string Tipe cicilan pembayaran, Anda bisa memilih antara: "30_days", "3_months", "6_months" and "12_months".
    items
    required
    array of item object Daftar barang / produk.
    item object
    required
    item object Informasi dari barang atau produk, harus mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
    customer_details
    required
    object Informasi pembeli, harus mengandung: first_name [string], last_name [string], email [string], phone [string]
    shipping_address
    required
    object Informasi dari alamat pengiriman, harus mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string]
    redirect_url
    required
    string Setelah pembeli melakukan pembayaran di halaman checkout mitra Cardless Credit, mereka akan diarahkan ke redirect_url. Anda bisa memasukkan alamat dari halaman transaksi di website Anda ataupun halaman home website Anda.
    callback_url
    required
    string Kami akan mengirimkan callback ke alamat ini setelah pembeli melakukan selesai melakukan pembayaran.

    Kode Error

    Contoh: Respon Error dari Generate Checkout URL

    {
      "error_code": "API_VALIDATION_ERROR",
      "message": "[fieldName] is required"
    }
    {
      "error_code": "DUPLICATE_PAYMENT_ERROR",
      "message": "Checkout URL with the same external_id has been created before."
    }
    Kode Error Deskripsi
    MERCHANT_NOT_FOUND
    422
    Anda belum terdaftar untuk menggunakan cardless credit dengan tipe ini..
    GENERATE_CHECKOUT_URL_ERROR
    422
    Request Anda tidak memenuhi syarat atau ada masalah di sistem partner Cardless Credit kami.
    DUPLICATE_PAYMENT_ERROR
    422
    Anda sudah pernah membuat Generate Checkout Request dengan external_id yang sama sebelumnya.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki izin untuk melakukan request. Mohon berikan izin yang sesuai terhadap API key yang digunakan. Pelajari lebih lanjut disini

    Menghitung Tipe Pembayaran

    Fitur Perhitungan Tipe Pembayaran membantu Anda untuk menentukan cicilan yang terbaik yang akan ditawarkan ke nasabah Anda oleh penyedia jasa Kredit Tanpa Kartu. Anda dapat menggunakan API ini untuk menghitung serta menampilkan paket cicilan sebelum nasabah Anda melakukan otentikasi

    Endpoint: Menghitung Tipe Pembayaran

    POST https://api.xendit.co/cardless-credit/payment-types

    Parameter Request

    Contoh: Menghitung Tipe Pembayaran Request

    curl https://api.xendit.co/cardless-credit/payment-types -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
      --header 'content-type: application/json' \
      --data '{
        "cardless_credit_type": "KREDIVO",
        "amount": 2000000,
        "items": [
          {
            "id": "123123",
            "name": "Phone Case",
            "price": 1000000,
            "type": "Smartphone",
            "url": "http://example.com/phone/phone_case",
            "quantity": 1
          }
        ]
      }'
    <?php
      $url = 'https://api.xendit.co/cardless-credit/payment-types';
      $apiKey = 'xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:';
      $headers = [];
      $headers[] = 'Content-Type: application/json';
      $item_1 = new stdClass();
      $item_1->id = "123123";
      $item_1->name = "Phone Case";
      $item_1->price = 200000;
      $item_1->type = "Smartphone";
      $item_1->url = "http://example.com/phone/phone_case";
      $item_1->quantity = 2;
      $data = [
          "cardless_credit_type" => "KREDIVO",
          "amount" => 800000,
          "items" => [ $item_1 ],
      ];
      $curl = curl_init();
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      $result = curl_exec($curl);
      echo $result;
    from xendit import Xendit, CardlessCreditType
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    CardlessCredit = xendit_instance.CardlessCredit
    
    cardless_credit_items = []
    cardless_credit_items.append(
        CardlessCredit.helper_create_item(
            id="item-123",
            name="Phone Case",
            price=200000,
            type="Smartphone",
            url="http://example.com/phone/phone_case",
            quantity=2,
        )
    )
    cardless_credit_payment_types = CardlessCredit.calculate_payment_type(
        cardless_credit_type=CardlessCreditType.KREDIVO,
        amount=10000,
        items=cardless_credit_items,
    )
    print(cardless_credit_payment_types)
    Parameter Body Tipe Deskripsi
    cardless_credit_type
    required
    string Tipe cardless-credit yang akan dibayarkan. Harus dalam huruf kapital.
    Tipe Cardless credit yang didukung: KREDIVO
    amount
    required
    number Nominal yang akan dibayarkan oleh end customer.
    Note: nilai minimum adalah Rp 1
    items
    required
    array of item object Daftar barang / produk.
    items.id
    required
    string Produk ID merchant dari produk spesifik dalam transaksi.
    items.name
    required
    string Nama spesifik produk dalam transaksi.
    items.price
    required
    number Harga per unit dari produk spesifik dalam transaksi.
    items.type
    required
    string Kategori dari produk spesifik dalam transaksi
    items.url
    required
    string Web url dari produk spesifik dalam transaksi.
    items.quantity
    required
    number Kuantitas dari produk spesifik dalam transaksi.

    Parameter Respon

    Contoh: Respons dari Menghitung Tipe Pembayaran

    {
        "message": "Available payment types are listed.",
        "payments": [
            {
                "raw_monthly_installment": 187534.6668043921,
                "name": "Bayar dalam 6 bulan",
                "amount": 1000000,
                "installment_amount": 1125240,
                "raw_amount": 1000000,
                "rate": 2.95,
                "down_payment": 0,
                "monthly_installment": 187540,
                "discounted_monthly_installment": 0,
                "tenure": 6,
                "id": "6_months"
            },
            {
                "raw_monthly_installment": 1020000,
                "name": "Bayar dalam 30 hari",
                "amount": 1020000,
                "installment_amount": 1020000,
                "raw_amount": 1020000,
                "rate": 0,
                "down_payment": 0,
                "monthly_installment": 1020000,
                "discounted_monthly_installment": 0,
                "tenure": 1,
                "id": "30_days"
            },
            {
                "raw_monthly_installment": 356786.46273702476,
                "name": "Bayar dalam 3 bulan",
                "amount": 1000000,
                "installment_amount": 1070370,
                "raw_amount": 1000000,
                "rate": 2.95,
                "down_payment": 0,
                "monthly_installment": 356790,
                "discounted_monthly_installment": 0,
                "tenure": 3,
                "id": "3_months"
            }
        ]
    }
    Parameter Tipe Deskripsi
    message
    required
    string Tipe pembayaran yang tersedia.
    payments
    required
    array Daftar tipe pembayaran yang dikalkulasi.
    payments.raw_monthly_installment
    required
    number Cicilan bulanan sebelum pembulatan.
    payments.name
    required
    string Nama cicilan.
    payments.amount
    required
    number Total pembayaran sebelum bunga.
    payments.installment_amount
    required
    number Total pembayaran setelah bunga.
    payments.raw_amount
    required
    number Nominal pembayaran sebelum bunga dan pembulatan.
    payments.rate
    required
    number Tarif bunga yang dikenakan pada transaksi.
    payments.down_payment
    required
    number Nilai pembayaran dimuak.
    payments.monthly_installment
    required
    number Cicilan bulanan yang ditawakan Kredivo pada end user.
    payments.discounted_monthly_installment
    required
    number Cicilan bulanan yang ditawakan Kredivo pada end user setelah diskon.(Jika ada)
    payments.tenure
    required
    number Pembayaran cicilan per bulan.
    payments.id
    required
    string ID dari tipe cicilan.

    Notifikasi Pembayaran / Callback

    Anda perlu menyediakan sebuah endpoint di sistem Anda untuk menerima notifikasi pembayaran / callback dari sistem kami. Kami akan mengirim notifikasi pembayaran / callback ketika pembeli sudah melakukan pembayaran di halaman Checkout partner kami (Kredivo).

    Notifikasi Pembayaran / Callback akan dikirim sebagai POST request ke "callback_url" yang telah Anda isi ketika mengirimkan Generate Checkout URL request.

    Data Callback

    Contoh: Request Notifikasi Pembayaran / Callback

    {
      "external_id": "test-cardless-credit-01",
      "order_id": "75191237c81273jajsh7291c-test-cardless-credit-01",
      "transaction_id": "ashd7129-sh82-a9ks-js82-asj82912bajs",
      "amount": 800000,
      "transaction_status": "settlement",
      "payment_type": "3_months",
      "items": [
        {
          "id": "123123",
          "name": "Phone Case",
          "price": 200000,
          "type": "Smartphone",
          "url": "http://example.com/phone/phone_case",
          "quantity": 2
        },
        {
          "id": "234567",
          "name": "Bluetooth Headset",
          "price": 400000,
          "type": "Audio",
          "url": "http://example.com/audio/bluetooth_headset",
          "quantity": 1
        }
      ],
      "customer_details": {
          "first_name": "customer first name",
          "last_name": "customer last name",
          "email": "customer@yourwebsite.com",
          "phone": "081513114262"
        },
        "shipping_address": {
          "first_name": "first name",
          "last_name": "last name",
          "address": "Jalan Teknologi No. 12",
          "city": "Jakarta",
          "postal_code": "12345",
          "phone": "081513114262",
          "country_code": "IDN"
        },
      "cardless_credit_type": "KREDIVO",
      "callback_authentication_token": "MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n=="
    }
    Parameter Tipe Deskripsi
    external_id string Identifikasi dari pembayaran Anda, yang ada isi ketika mengirimkan Generate Checkout URL request.
    order_id string Identifikasi unik yang kami berikan kepada mitra Cardless Credit kami.
    transaction_id string ID transaksi yang diberikan oleh mitra Cardless Credit.
    transaction_status string Status Transaksi, yang berisi:
    settlement: Transaksi berhasil
    pending: Pembeli belum melakukan pembayaran
    deny: Transaksi ditolak oleh mitra Cardless Credit kami
    cancel: Transaksi sudah dibatalkan
    expire: Pembeli tidak melakukan pembayaran dalam 24 jam, maka transaksi dinyatakan kadaluarsa
    payment_type string Tipe cicilan.
    amount number Jumlah pembayaran yang telah Anda isi ketika melakukan Generate Checkout URL request.
    items array of item Daftar dari barang / produk yang ada isi ketika mengirimkan Generate Checkout URL request.
    item object
    item detail Informasi dari barang / produk, akan mengandung: id [string], name [string], price [number], type [string], url [string], quantity [number]
    customer_details object Informasi pembeli, akan mengandung: first_name [string], last_name [string], email [string], phone [string]
    shipping_address object Informasi alamat pengiriman, akan mengandung: first_name [string], last_name [string], address [string], city [string], postal_code [string], phone [string], country_code [string]
    cardless_credit_type string Tipe Cardless Credit.
    Tipe Cardless Credit yang tersedia: KREDIVO
    callback_authentication_token string Berisi Callback Verification API Key yang Anda bisa temukan di Dashboard Xendit. Anda perlu verifikasi kembali apakah ini memiliki isi yang sama

    QR Codes

    Pembayaran QR codes memungkinkan Anda untuk menerima pembayaran langsung dari saldo aplikasi mobile banking atau saldo eWallet milik customer. Di Indonesia, Anda dapat menerima pembayaran dari penyedia layanan manapun yang terkoneksi dengan jaringan QRIS (misal, OVO, Gopay, Dana, LinkAja, BCA, CIMB, Shopeepay).

    Pembuatan QR Code

    Endpoint: Pembuatan QR Code

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

    Parameter Request

    Contoh: Pembuatan QRIS QR Code

    curl https://api.xendit.co/qr_codes -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id='testing_id_123' \
       -d type='DYNAMIC' \
       -d callback_url='https://yourwebsite.com/callback'\
       -d nominal=1500
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "external_id=testing_id_123&type=DYNAMIC&callback_url=https://yourwebsite.com/callback&nominal=1500");
    curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
    
    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    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.
    Parameter Body Tipe Deskripsi
    external_id
    wajib
    string ID transaksi unik yang dibuat oleh merchant
    Catatan: ID transaksi harus unik
    type
    wajib
    string DYNAMIC or STATIC
    Catatan: QR Code DYNAMIC mengandung nilai pembayaran ketika dilakukan pemindaian dan dapat dibayarkan berkali-kali
    Catatan: QR code STATIC membutuhkan customer untuk memasukkan nilai pembayaran dan dapat dibayarkan berkali-kali
    callback_url
    wajib
    string URL untuk dapat menerima notifikasi pembayaran setelah pembayaran dilakukan oleh customer
    amount
    opsional
    number Nilai pembayaran yang tercantum pada QR Code, customer hanya dapat melakukan pembayaran sesuai dengan nilai yang tertera setelah pemindaian QR Code. Untuk QR Code STATIC, parameter nominal akan diabaikan.
    Catatan: Minimum nominal adalah Rp 1,500
    Catatan: Maximum nominal adalah Rp 2,000,000
    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

    Get QR Code menggunakan External ID

    GET https://api.xendit.co/qr_codes/:external_id

    Parameter Request

    Contoh: Get QR Code by external_id

    curl https://api.xendit.co/qr_codes/external_id -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/external_id');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    
    curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    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

    Get Array of Payments menggunakan External ID

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

    Get Array of Payments menggunakan external_id

    Contoh: Get Array of Payments menggunakan external_id

    curl 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2' -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/payments?external_id=testing_qr&from=2021-01-04T08:09:30.000Z&to=2021-01-04T08:22:29.000Z&limit=2');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    
    curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    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 (mode tes)

    Parameter Request

    Contoh: Simulasi pembayaran pada mode test

    curl https://api.xendit.co/qr_codes/:external_id/payments/simulate -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==: \
       -d nominal=1500
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://api.xendit.co/qr_codes/:external_id/payments/simulate');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "nominal=1500");
    curl_setopt($ch, CURLOPT_USERPWD, 'xnd_development_O46JfOtygef9kMNsK+ZPGT+TeStIngw3Dn+R1k+2fT/7GlCAN3jg==' . ':' . '');
    
    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    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 1,500 IDR
    Catatan: Max nominal is 2,000,000 IDR

    Parameter Respon

    Contoh: Respon Sukses Simulasi Pembayaran (mode test)

    {
      "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
      "nominal": 1500,
      "created": "2020-01-08T18:18:18.857Z",
      "qr_code": {
        "id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
        "external_id": "testing_id_123",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "type": "DYNAMIC",
        "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.

    Callback Status Pembayaran

    Anda butuh menyediakan endpoint pada sistem anda untuk menerima callback notifikasi pembayaran dari sistem kami. Anda akan menerima callback ketika pelanggan anda menyelesaikan pembayaran.
    Catatan: Mohon berikan respon kembali dengan status 200 agar kami tahu bahwa notifkasi telah diterima.

    Data Callback

    {
      "event": "qr.payment",
      "id": "qrpy_8182837te-87st-49ing-8696-1239bd4d759c",
      "nominal": 1500,
      "created": "2020-01-08T18:18:18.857Z",
      "qr_code": {
        "id": "qr_8182837te-87st-49ing-8696-1239bd4d759c",
        "external_id": "testing_id_123",
        "qr_string": "0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73h6v53033605401163040BDB",
        "type": "DYNAMIC",
        "metadata": {
            "branch_code": "senayan_372",
        }
      },
      "status": "COMPLETED"
    }
    Parameter Tipe Deskripsi
    event
    wajib
    string Nilai yang tersedia: "qr.payment"
    id
    wajib
    string Pengidentifikasi unik dari sebuah transaksi
    nominal
    wajib
    number nominal yang dibayarkan oleh customer
    Catatan: nilai akan NULL jika tipe yang dimaksud adalah STATIC
    created
    wajib
    string Timestamp ISO 8601 ketika QR code telah 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.

    Inisiasi Linked Account Tokenization

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

    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
      $url = "https://api.xendit.co/linked_account_tokens/auth";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
      $data = [
        "customer_id" => "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "channel_code" => "DC_BRI",
        "properties" => [
          "account_mobile_number" => "+62818555988",
          "card_last_four" => "1234",
          "card_expiry" => "06/24",
          "account_email" => "email@email.com"
        ]
      ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    card_linking = DirectDebit.helper_create_card_link(
        account_mobile_number="+62818555988",
        card_last_four="8888",
        card_expiry="06/24",
        account_email="test.email@xendit.co",
    )
    linked_account = DirectDebit.initialize_tokenization(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        channel_code="DC_BRI",
        properties=card_linking,   
    )
    print(linked_account)
    Request Body Parameter Deskripsi
    customer_id
    required
    string ID dari objek customer yang akun tokennya akan dihubungkan. 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
    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
      $linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
      $url = "https://api.xendit.co/linked_account_tokens/" . $linkedAccountTokenId . "/validate_otp";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
      $data = [
        "otp_code" => "123456"
      ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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.validateOTPforLinkedAccount({
      tokenID: 'lat-aa620619-124f-41db-995b-66a52abe036a',
      otpCode: '123456',
    });
    console.log(resp);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    linked_account = DirectDebit.validate_token_otp(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
        otp_code="333000",
    )
    print(linked_account)
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Inisiasi Account Authorization. Memiliki prefiks lat-.
    Parameter Request Deskripsi
    otp_code
    required
    string OTP yang diterima oleh customer dari bank partner untuk penghubungan akun

    Validate OTP for Linked Account Token - Response

    Example Validate OTP for Linked Account Token Success Response

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

    Kode Error

    Lihat lainnya error pada umumnya di sini.

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

    Mendapatkan Access Account menggunakan Linked Account Token

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

    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
      $linkedAccountTokenId = "lat-aa620619-124f-41db-995b-66a52abe036a";
      $url = "https://api.xendit.co/linked_account_tokens/" . $linkedAccountTokenId . "/accounts";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    accessible_accounts = DirectDebit.get_accessible_account_by_token(
        linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
    )
    print(accessible_accounts)
    Path Parameter Deskripsi
    linked_account_token_id
    required
    string Linked account token id yang didapatkan dari Initialize Account Authorization. Memiliki lat- prefix.

    Mendapatkan Respon Akeses Akun dengan Linked Account Token

    Endpoint ini akan mengembalikan himpunan objel dengan properties berikut:

    Contoh Respon Sukses Get Accessible Accounts menggunakan Linked Account Token

    [{
        "id": "la-aa620619-124f-41db-995b-66a52abe036a",
        "channel_code": "DC_BRI",
        "type": "DEBIT_CARD",
        "properties": {
            "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
    Nilai yang diekspektasi: DEBIT_CARD
    properties object Objek yang mengandung informasi berhubungan dengan akun. Nilai di dalam properties berubah berdasarkan tipe akun:


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringMasa kadaluarsa bulan dan tahun kartu (dalam MM/YY format)
    currency stringMata uang akunISO 4217
    description stringDeskripsi akun (disediakan oleh bank)

    Error dari Mendapatkan Accessible Accounts by Linked Account Token

    Lihat lainnya error pada umumnya di sini.

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

    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
      $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));
    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.

    Membuat Payment Method

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

    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
      $url = "https://api.xendit.co/payment_methods";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
      $data = [
        "customer_id" => "ba830b92-4177-476e-b097-2ad5ae4d3e55",
        "type" => "DEBIT_CARD",
        "properties" => [
          "id" => "la-aa620619-124f-41db-995b-66a52abe036a"
        ]
      ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit, DirectDebitPaymentMethodType
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_method = DirectDebit.create_payment_method(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
        type=DirectDebitPaymentMethodType.DEBIT_CARD,
        properties={'id': 'la-fac7e744-ab40-4100-a447-cbbb16f29ded'},
    )
    
    print(payment_method)
    Parameter Request Deskripsi
    customer_id
    required
    string ID dari customer. Anda dapat membuat Customer dengan menggunakan API Pembuatan Customer
    type
    required
    string Tipe payment method

    Nilai yang tersedia: DEBIT_CARD, BANK_ACCOUNT
    properties
    required
    object Informasi tambahan untuk identifikasi metode pembayaran:

    Untuk Debit Card Linking (BRI):
    Key Nilai
    id required ID Akun yang sudah diotorisasi untuk kemudian ditarik dana untuk melakukan pembayaran
    metadata
    optional
    object Format JSON bebas untuk tambahan informasi yang bisa Anda gunakan.

    Parameter Respon

    Example Create Payment Method Success Response

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


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

    Kode Error

    Lihat lainnya error pada umumnya di sini.

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

    Membuat Pembayaran Recurring dengan Direct Debit

    Endpoint: Membuat Pembayaran Recurring

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

    Recurring payment memungkinkan Anda untuk menggunakan fitur auto debet pada direct debut untuk menarik dana dari akun bank customer Anda untuk pembayaran berulang atau terjadwal.

    Parameter 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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.create_recurring_payment(
        external_id="recurring_12345",
        payer_email="test@x.co",
        description="Test Curring Payment",
        amount=100000,
        interval="MONTH",
        interval_count=1,
        payment_method_id="pm_testing_id_123",
    )
    print(recurring_payment)
    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID yang merupakan identifikasi unik (tipikal pengidentifikasi unik untik identifier recurring payment di sstem Anda)
    payment_method_id
    optional
    string Silakan isi dengan payment method id yang telah dibuat untuk customer pada create payment method
    payer_email
    required
    string Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    description
    required
    string Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    number Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000 untuk direct debit
    interval
    required
    string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antara DAY, WEEK, MONTH.
    interval_count
    required
    number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    invoice_duration
    required
    number Pastikan Anda mengisi nilai parameter ini dengan 300 durasi waktu yang tersedia untuk customer Anda melakukan pembayarn sebelum kadaluarsa dalam Second).
    total_recurrence
    optional
    number Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    should_send_email
    optional
    boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
    default: false
    missed_payment_action
    optional
    string Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu
    default: IGNORE
    start_date
    optional
    string (ISO 8601) Tanggal dimana penagihan Recurring pertama kali ditagihkan ke pelanggan Anda.
    charge_immediately
    optional

    boolean Silakan isi dengan nilai true jika pembayaran pertama dilakukan segera setelah pembayaran recurring dibuat dengan start_date yang valid,
    Invoice berikutnya akan dibuat padastart_date dan kalkulasi untuk invoice recurring berikutnya adalah
    interval*interval_count + start_date

    Parameter Respon

    Contoh: Respon Pembuatan Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "ACTIVE",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": false,
        "missed_payment_action": "IGNORE",
        "last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5dddeea6bdb99f4b23e5eef7",
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2017-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z",
        "recharge": true,
        "payment_method_id": "pm_testing_id_123"
    }
    Parameter Tipe Deskripsi
    id string ID dari Recurring Anda yang diberikan dari Xendit
    user_id string Xendit Business ID Anda
    external_id string ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
    status string ACTIVE Tagihan Recurring Anda ber-status aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    amount number Nominal harga per Invoice per interval.
    payer_email string Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    description string Deskripsi pembayaran atau tagihan Recurring Anda
    should_send_email boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
    interval string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antara DAY, WEEK, MONTH.
    interval_count number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH dan interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    recurrence_progress number Siklus saat ini dari pembayaran recurring. Jika customer Anda ada pada siklus ke-4 dari pembayaraan recurring, makan Anda akan melihat 4 pada response recurrence_progress
    last_created_invoice_url string url yang mengarahkan ke invoice terakhir yang dibuat oleh pembayaran recurring ini
    invoice_duration number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    created string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recurring dibuat. Timezone adalah UTC+0
    updated string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recuriing di update. Timezone adalah UTC+0
    charge_immediately
    optional

    boolean Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date
    recharge boolean Parameter ini akan memiliki nilai true untuk pembayaran direct debit
    payment_method_id string payment_method_id untuk pembayaran recurring ini

    Kode Eror

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    Bukan format JSON yang valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id invalid
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini here

    Perasi Recurring Lainnya

    Untuk melakukan request pembayaran recurring lainnya sepertiget, edit, pause, resume, stop - refer to recurring payments

    Membuat Pembayaran Direct Debit

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

    Endpoint: Create Direct Debit Payment

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

    Membuat Request Pembayaran

    Contoh Membuat Request Pembayaran

    curl https://api.xendit.co/direct_debits -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H 'Content-Type: application/json' \
       -H 'Idempotency-key: Test_Idempotent_Key'\
       --data-raw '{
        "reference_id": "customer_test_reference_id",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "IDR",
        "amount": 1500,
        "enable_otp": true,
        "callback_url": "https://payment-callback-listener/"
    }'
    <?php
      $url = "https://api.xendit.co/direct_debits";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [
        "Content-Type : application/json",
        "Idempotency-key: Test_Idempotent_Key",
        ];
      $data = [
        "reference_id" => "customer_test_reference_id",
        "payment_method_id" => "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency" => "IDR",
        "amount" => 1500,
        "enable_otp" => true,
        "callback_url" => "https://payment-callback-listener/"
        ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.create_payment(
        reference_id="direct-debit-ref-1594718940",
        payment_method_id="pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
        currency="IDR",
        amount="60000",
        callback_url="http://webhook.site/",
        enable_otp=True,
        idempotency_key="idemp_key-1594718940",
    )ß
    
    print(payment)
    Header Deskripsi
    Idempotency-key
    required
    string Disediakan oleh merchant untuk mencegah duplikasi request. Bisa sama dengan reference_id atau GUID.
    Note: Max 100 karakter
    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
    true untuk charge akun customer dengan OTP
    false untuk charge akun end customer tanpa OTP
    description
    optional
    string Deskripsi untuk transaksi direct debit
    basket
    optional
    array Himpunan objek yang mendeskripsikan item yang dibeli menggunakan direct debit
    Key Nilai
    reference_id required stringPengidentifikasi dari merchant untuk spesifik produk(ie. SKU)
    name required stringNama produk
    market required string2 huruf dalam format ISO 3166-2, kode negara yang mengindikasikan target negara dimana merchant beroperasi
    type required stringTipe produk
    description optional stringDeskripsi produk
    category optional stringKategori item
    sub-category optional stringSub kategori dari item
    price optional stringHarga per unit
    url optional stringURL produk dengan detil produk
    metadata optional stringObjek tambahan yang dapat digunakan untuk atribut tamabahan dari produk
    quantity optional stringJumlah unit dari item dalam keranjang
    metadata
    optional
    object Object of additional information the user may use. User defines the JSON properties and values. You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long

    Respon Membuat Pembayaran

    Contoh Respon Sukses Membuat Pembayaran

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

    Error dalam Membuat Pembayaran

    Contoh Respon Error dalam Membuat Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DUPLICATE_ERROR
    409
    Idempotency key telah digunakan sebelumnya. Gunakan idempotency key yang unik dan coba kembali.
    PAYMENT_METHOD_NOT_FOUND_ERROR
    400
    payment_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

    Validasi OTP untuk Pembayaran Direct Debit

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

    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
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/validate_otp";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
      $data = [
        "otp_code" => "111222"
      ];
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.validate_payment_otp(
        direct_debit_id="ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
        otp_code="222000",
    )
    
    print(payment)
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit
    Request Body Parameter Deskripsi
    otp_code
    required
    string One-time-password yang diinput oleh customer dan dikirimkan oleh bank

    Response Validasi OTP Pembayaran

    Contoh Response Sukses Get Payment Status by ID

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

    Error dalam Validasi OTP pembayaran

    Contoh Respon Error dalam Validasi OTP Pembayaran

    {
        "error_code" : "DUPLICATE_ERROR",
        "message" : "Idempotency key has been used before. Use a unique idempotency key and try again"
    }
    Error Code Deskripsi
    DATA_NOT_FOUND_ERROR
    404
    direct_debit_id yang disediakan tidak ada atau tidak memiliki akses
    INVALID_OTP_ERROR
    400
    OTP yang disediakan invalid
    EXPIRED_OTP_ERROR
    400
    OTP yang disediakan telah kadaluarsa expired
    MAX_OTP_ATTEMPTS_ERROR
    400
    Payment method telah mencapai maksimum percobaan verifikasi OTP yang diperbolehkan
    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.

    Get Payment Methods menggunakan Customer ID

    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
      $url = "https://api.xendit.co/payment_methods";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $queryString = "?customer_id=ba830b92-4177-476e-b097-2ad5ae4d3e55";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url.$queryString);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment_methods = DirectDebit.get_payment_methods_by_customer_id(
        customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
    )
    
    print(payment_methods)
    Query String Parameter Deskripsi
    customer_id
    required
    string ID dari customer objek

    Parameter Respon

    Contoh Respon Sukses Get Payment Methods menggunakan Customer ID

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


    Untuk tipe DEBIT_CARD (BRI):
    Key Nilai
    card_last_four stringEmpat digit terakhir kartu
    card_expiry stringBulan dan tahun kadaluarsa kartu debit (dalam MM/YY format)
    currency stringCurrency akun dalam ISO 4217
    description stringDeskripsi akun (disediakan oleh bank)
    customer_id string ID dari customer objek yang dalam hal ini payment method dihubungkan
    status string Status dari payment method.
    Akan berstatus ACTIVE setelah dibuat
    created string ISO 8601 timestamp ketika payment method dibuat
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    updated string ISO 8601 timestamp ketika informasi payment method diupdate
    Format: YYYY-MM-DDTHH:mm:ssZ
    Timezone: UTC+0
    metadata object Format JSON bebas untuk informasi tambahan yang disediakan pada saat melakukan request.

    Kode Error

    Lihat lainnya error pada umumnya di sini.

    Get Direct Debit Payment Status by ID

    Mendapatkan detail dari pembayaran direct debit dengan transaksi ID dari Xendit

    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

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

    Get Payment Status by ID - Request

    Contoh Request Payment Status by ID

    curl https://api.xendit.co/direct_debits/ddpy-623dca10-5dad-4916-test/ -X GET \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: 
    <?php
      $direct_debit_id = "ddpy-623dca10-5dad-4916-test";
      $url = "https://api.xendit.co/direct_debits/" . $direct_debit_id . "/";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payment = DirectDebit.get_payment_status(
        direct_debit_id="ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
    )
    
    print(payment)
    Path Parameter Deskripsi
    direct_debit_id
    required
    string Pengidentifikasi dari Xendit untuk spesifik transaksi direct debit

    Get Payment Status by ID - Response

    Example Get Payment Status by ID Success Response

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

    Get Payment Status menggunakan Reference ID

    Mendapatkan detail dari pembayaran direct debit dengan menggunakan reference ID

    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
      $url = "https://api.xendit.co/direct_debits/";
      $apiKey = "xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:";
      $headers = [];
      $headers[] = "Content-Type: application/json";
    
      $queryString = "?reference_id=test_merchant_reference_id";
    
      $curl = curl_init();
    
      $payload = json_encode($data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_USERPWD, $apiKey.":");
      curl_setopt($curl, CURLOPT_URL, $url.$queryString);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
      $result = curl_exec($curl);
      echo $result;
    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);
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    DirectDebit = xendit_instance.DirectDebit
    
    payments = DirectDebit.get_payment_status_by_ref_id(
        reference_id="direct-debit-ref-1594717458",
    )
    
    print(payments)
    Query String Parameter Deskripsi
    reference_id
    required
    string Pengidentifikasi unik dari merchant untuk spesifik transaksi direct debit ini

    Get Payment Status by ID - Response

    Contoh Respon Sukses Get Payment Status by ID

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

    Callback Notifications

    Merchants harus menyediakan endpoint di sistem Anda untuk dapat menerima notifikasi callback dari sistem kami. Notifikasi callback akan dikirimkan ke endpoint yang disediakan pada saat request pembayaran direct debit.

    Callback Payload Status Pembayaran

    Payload

    Contoh: Callback Payload Status Pembayaran

    {
        "event": "direct_debit.payment",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": null,
        "status": "COMPLETED",
        "failure_code": null,
        "metadata": null
    }
    Parameter Deskripsi
    event string Pengidentifikasi event - "direct_debit.payment"
    timestamp string ISO 8601 timestamp of the event. Timezone is UTC+0
    id string Pengidentifikasi unik dari transaksi. Prefix of lat-.
    reference_id string Reference ID yang disediakan oleh Merchant
    channel_code string Pengidentifikasi kode dari channel
    payment_method_id string Payment Method ID dari sumber dana end user
    currency string Mata uang pembayaran
    amount number Nominal yang akan di debit dari akun bank end user
    description string yang disediakan merchant
    status string Status pembayaran - "PENDING", "COMPLETED", "FAILED"
    failure_code string Alasan apabila direct debit mengalami kegagalan
    metadata object Metadata yang disediakan oleh merchant

    Payment Status Callback - Failure Reasons Status Callback Pembayaran - Alasan Kegagalan

    Contoh: Status Pembayaran Gagal

    {
        "event": "direct_debit.payment",
        "timestamp": "2020-03-26T05:44:26+0800",
        "id": "ddpy-623dca10-5dad-4916-b14d-81aaa76b5d14",
        "reference_id": "e17a0ac8-6fed-11ea-bc55-0242ac130003",
        "channel_code": "BA_BPI",
        "payment_method_id": "pm-c30d4800-afe4-4e58-ad5f-cc006d169139",
        "currency": "PHP",
        "amount": "1000.00",
        "description": "",
        "status": "FAILED",
        "failure_code": "INSUFFICIENT_BALANCE",
        "metadata": {}
    }
    Failure Code Deskripsi
    MAX_AMOUNT_LIMIT_ERROR
    Limit harian end user telah mencapai maksimum, tidak dapat memproses request pendebitan.
    INSUFFICIENT_BALANCE
    Saldo end user tidak mencukupi, tidak dapat memproses pendebitan.
    CHANNEL_UNAVAILABLE
    Service bank untuk direct debit saat ini tidak tersedia, tidak dapat memproses pendebitan.
    ACCOUNT_ACCESS_BLOCKED
    Akun bank end user telah diblok, silakan hubungi bank untuk penyelesaian.
    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": "description",
      "adjusted_received_amount": 15000,
      "fees_paid_amount": 0,
      "created": "2020-05-14T16:03:00.154Z",
      "updated": "2020-05-14T16:03:02.765Z",
      "recurring_payment_id": "5ebd6bb37d674631dda4ef72",
      "currency": "IDR",
      "payment_channel": "DC_BRI"
    }
    Parameter Tipe Deskripsi
    id string ID invoice yang didapatkan dari Xendit
    user_id string ID bisnis Xendit Anda
    external_id string ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    merchant_name string Nama perusahaan atau situs Anda
    amount number Jumlah tagihan invoice (tanpa pajak, biaya)
    status string PAID the recurring direct debit has successfully been paid or
    EXPIRED pembayaran direct debut untuk transaksi recurring telah gagal
    payer_email string Email pembayar, didapatkan dari permintaan API Anda
    description string Deskripsi invoice, didapatkan dari permintaan API Anda
    fees_paid_amount number Xendit fees that was directly paid from this invoice - thanks for supporting a better world of payments :)
    adjusted_received_amount number umlah netto uang yang masuk ke saldo Anda setelah dipotong biaya.
    recurring_payment_id string ID dari recurring yang dibuat dari invoice ini
    paid_amount number Total Total nilai yang dibayarkan untuk invoice
    updated string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recurring dibuat. Timezone adalah UTC+0
    created string (ISO 8601) ISO timestamp sebagai penanda kapan pembayaran recuriing di update. Timezone adalah UTC+0
    currency string (ISO 4217) Nilai mata uang dari nominal yang dibuat
    paid_at string (ISO 8601) Waktu dan tanggal customer Anda melakukan pembayaran invoice. Anda akan menerima respon ini ketika invoice telah dibayar.
    payment_method string Metode pembayaran yang digunakan ketika customer melakukan pembayaran invoice. Anda akan menerima response ini ketika invoice dibayar - DIRECT_DEBIT
    payment_channel string Kanal pembayaran yang digunakan ketika customer melakukan pembayaran invoice ice.Anda akan menerima response ini ketika invoice dibayar
    Contoh : DC_BRI

    Virtual Accounts

    Virtual accounts adalah akun virtual dari bank yang dibuat dan diperuntukan kepada pelanggan yang berfungsi sebagai media untuk menerima pembayaran yang akan di bayarkan pelanggan terhadap bank.

    Pembuatan Virtual Account

    Endpoint: Pembuatan Virtual Accounts (VA)

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

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

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

    Parameter Request

    Contoh Permintaan Virtual Accounts

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

    JSON

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

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

    Karakter Spesial dan alfanumerik
    Panjang minimal 1 karakter, 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: MANDIRI, BNI, BNI_SYARIAH, BRI, PERMATA, BCA, 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
    virtual_account_number
    optional
    string Nomor virtual akun yang ingin anda tetapkan. Jika anda tidak menetapkan nomor virtual account yang ingin anda buat, sistem kami akan memilih secara acak.
    Note: Jangan sertakan merchat code (4 atau 5 digit pertama pada yang ada di keseluruhan nomor virtual account)

    standar: string acak
    suggested_amount
    optional
    integer positive Nominal yang disarankan yang ingin anda tetapkan.
    Note:Pengguna dapat melihat nominal yang di sarankan akan tetapi tetap dapat memasukan nominal diluar dari yang di sarankan (Untuk nominal yang disarankan hanya tersedia pada Mandiri dan BRI)

    standar: tidak ada
    is_closed
    optional
    boolean Ketika diatur menjadi *true*, virtual account hanya akan menerima pembayaran sesuai nominal yang ditentukan dalam expected_amount

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

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

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

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

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

    Parameter Respon

    Contoh Respon Pembuatan Virtual Accounts

    {
       "owner_id":"57b4e5181473eeb61c11f9b9",
       "external_id":"demo-1475804036622",
       "bank_code":"BNI",
       "merchant_code":"8808",
       "name":"Rika Sutanto",
       "account_number":"8808999939380502",
       "is_closed": false,
       "expiration_date": "2051-09-27T17:00:00.000Z",
       "id":"57f6fbf26b9f064272622aa6",
       "is_single_use": 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 yang diharapkan The expected amount hanya bisa lebih dari nol
    MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
    CALLBACK_VIRTUAL_ACCOUNT_NAME_NOT_ALLOWED_ERROR
    400
    Nama virtual account tidak boleh mengandung nama bank atau institusi
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Bank yang tersedia untuk Virtual Account

    Endpoint: Mendapatkan bank yang tersedia untuk virtual accounts

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

    Contoh Permintaan mendapatkan bank yang tersedia untuk virtual accounts

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

    Parameter Respon

    Contoh respon saat mendapatkan bank yang tersediua untuk virtual accounts

    {
      "name": "Bank Negara Indonesia",
      "code": "BNI"
    }
    Parameter Deskripsi
    name
    required
    Nama bank
    code
    required
    Kode bank, yang berkaitan saat pembuatan virtual account

    Mendapatkan Virtual Account

    Endpoint: Mendapatkan Informasi Virtual Account

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

    Contoh Permintaan Mendapatkan Informasi Virtual Account

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

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

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

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

    Parameter Request

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

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Informasi Virtual Account

    {
        "owner_id": "58cd618ba0464eb64acdb246",
        "external_id": "va-1507867286",
        "bank_code": "BRI",
        "merchant_code": "26215",
        "name": "Steve Wozniak",
        "account_number": "262151000393993",
        "is_single_use": false,
        "status": "ACTIVE",
        "expiration_date": "2048-10-12T17:00:00.000Z",
        "is_closed": false,
        "id": "59e03a976fab8b1850fdf347"
    }
    Parameter Tipe Deskripsi
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat pembuatan virtual account
    bank_code
    required
    string Kode bank dari nomor virtual account
    merchant_code
    required
    string 4 atau 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor akun dari virtual account
    expiration_date
    required
    string Tanggal kedaluwarsa virtual account
    is_closed
    required
    boolean Nilai yang mendifinisikan virtual account harus dibayar sesuai nominal yang diharapkan atau tidak
    id
    required
    string ID virtual account
    is_single_use
    required
    boolean Nilai yang mendefinisikan virtual account hanya bisa digunakan satu kali atau berulang-ulang
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • Kode Error

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

    Pembaruan Virtual Accounts

    Endpoint: Pembaruan Virtual Account (VA)

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

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

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

    Parameter Request

    Contoh Permntaan Pembaruan Fixed Virtual Account

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

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

    Parameter Body Tipe Deskripsi
    suggested_amount
    optional
    integer positive Nominal yang disarankan yang ingin anda tetapkan.
    expected_amount
    optional
    integer positive Nominal yang diharapkan saat is_closed diubah menjadi true
    expiration_date
    optional
    ISO 8601 Date Waktu ketika virtual account akan kedaluwarsa. Anda dapat mengaturnya ke hari-hari sebelumnya untuk segera mengubah virtual account itu menjadi kedaluwarsa

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

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

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

    Parameter Respon

    Contoh Respon Pembaruan Virtual Accounts

    {
        "owner_id": "5de8d83cafcf47000f8e76bc",
        "external_id": "demo_virtual_account_1475459775872",
        "bank_code": "BNI",
        "merchant_code": "8808",
        "name": "Rika Sutanto",
        "account_number": "8808999947012640",
        "is_single_use": false,
        "expected_amount": 6000,
        "currency": "IDR",
        "status": "PENDING",
        "expiration_date": "2019-11-12T23:46:00.000Z",
        "is_closed": false,
        "id": "5df745b92b50911700f37e86"
    }
    Parameter Tipe Deskripsi
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    required
    string 4 atau 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
    id
    required
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_closed
    required
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    is_single_use
    required
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • suggested_amount
    optional
    string Nominal yang diharapkan dari virtual account yang diperbarui
    expected_amount
    optional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    description
    optional
    string deskripsi dari virtual account yang mana akan di tampilkan ketika melakukan pembayaran. Hanya tersedia untuk bank BRI.

    Kode Error

    Kode Error Deskripsi
    API_VALIDATION_ERROR
    400
    Input menggagalkan validasi. Terdapat detail kolom yang menggagalkan validasi pada kolom error.
    INVALID_JSON_FORMAT
    400
    Bukan format JSON yang valid.
    VIRTUAL_ACCOUNT_NUMBER_OUTSIDE_RANGE
    400
    Nomor virtual account yang anda mau tidak tersedia. Anda bisa cek panjang VA yang bisa dibuat disini Virtual Accounts Settings
    BANK_NOT_SUPPORTED_ERROR
    400
    Kode bank ini tidak tersedia. Anda bisa melihat bank apa yang tersedia di Bank yang tersedia untuk Virtual Account.
    SUGGESTED_AMOUNT_NOT_SUPPORTED_ERROR
    400
    Nominal yang diharapkan untuk virtual saat ini tidak dapat digunakan
    EXPECTED_AMOUNT_REQUIRED_ERROR
    400
    Nominal yang diharapkan wajib diisi ketika is_closed diubah menjadi *true*.
    CLOSED_VA_NOT_SUPPORTED_ERROR
    400
    Nilai is_closeduntuk pilihan ini tidak tersedia untuk virtual account..
    INACTIVE_VIRTUAL_ACCOUNT_ERROR
    400
    Nomor virtual account yang anda mau perbarui inactive.
    MINIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan The expected amount hanya bisa lebih dari nol
    MAXIMUM_EXPECTED_AMOUNT_ERROR
    400
    Nominal yang diharapkan hanya bisa kurang dari Rp.1000000000
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.

    Notifikasi / Callback Pembayaran Virtual Account

    Endpoint: Notifikasi Pembayaran Virtual Account

    POST https://yourcompany.com/virtual_account_paid_callback_url

    Ketika seseorang membayar ke virtual account anda, API untuk notifikasi kami akan mengirimkan notifikasi URL anda yang telah ada atur dalam dashboard. API notifikasi kami juga akan mengirimkan notifikasi ke URL anda untuk pembuatan virtual account dan pembaruan virtual account. Silahkan liatPembuatan Virtual Accounts untuk lebih detail. Untuk informasi lebih lanjut mengenai notikasi silahhkan bacadocs.

    Contoh ini hanya digunakan untuk menampilkan isi parameter yang dikirimkan dari API Xendit ke URL notifikasi anda dan tidak dapat dicoba disini. Jika anda menginginkan untuk mencoba permintaan notifikasi ini, gunakan fitur di dashboard dan pilih Callbacks settings.

    Data Callback terkait Pembayaran

    Parameter Header Tipe Description
    x-callback-token
    required
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    Contoh Permintaan Notifikasi Pembayaran Virtual Account Payment

    curl --include \
         --request POST \
         --header "Content-Type: application/json" \
         --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --data-binary "{
        id: \"57fb4e076fa3fa296b7f5a97\",
        payment_id: \"demo-1476087608948_1476087303080\",
        callback_virtual_account_id: \"57fb4df9af86ce19778ad359\",
        owner_id: \"57b4e5181473eeb61c11f9b9\",
        external_id: \"demo-1476087608948\",
        account_number: \"8808999939380502\",
        bank_code: \"BNI\",
        amount: 99000,
        transaction_timestamp: \"2016-10-10T08:15:03.080Z\",
        merchant_code: \"8808\",
        sender_name: \"JOHN DOE\",
        updated: \"2016-10-10T08:15:03.404Z\",
        created: \"2016-10-10T08:15:03.404Z\"
    }" \
    'https://api.xendit.co/virtual_account_paid_callback_url'

    JSON

    {
      "amount": 50000,
      "callback_virtual_account_id": "5f8e658568ed5f402a1faadb",
      "payment_id": "5f8e658f8d65ab385241f17a",
      "external_id": "demo-va-callback",
      "account_number": "9999624535",
      "merchant_code": "88608",
      "bank_code": "MANDIRI",
      "transaction_timestamp": "2020-10-20T04:20:31.000Z",
      "currency": "IDR",
      "created": "2020-10-20T04:20:31.937Z",
      "updated": "2020-10-20T04:20:33.074Z",
      "id": "5f8e658fc5710a7ae00f75db",
      "owner_id": "5c2323c67d6d305ac433ba20"
    }
    Parameter Body Tipe Description
    payment_id
    required
    string Dalam sistem internal kami disebut dengan payment ID
    callback_virtual_account_id
    required
    string Nilai kolom id didapatkan dari respon saat virtual account berhasil dibuat. Lihat Pembuatan Virtual Accounts
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    account_number
    required
    string Nomor lengkap virtual account (tanpa 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    amount
    required
    integer positive Jumlah yang dibayar
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account, e.g 01234 your_number
    id
    required
    string ID dari pembayaran virtual account
    transaction_timestamp
    required
    string Tanggal dan waktu pembayaran virtual account
    sender_name
    string Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account

    Data Callback terkait Pembuatan / Pembaruan Virtual Acccount

    Contoh Permintaan Notifikasi untuk Pembuatan Virtual Account / Pembaruan Virtual Acccount

    curl --include \
         --request POST \
         --header "Content-Type: application/json" \
         --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --data-binary "{
        id: \"57fb4e076fa3fa296b7f5a97\",
        owner_id: \"5824128aa6f9f9b648be9d76\",
        external_id: \"va-1487156410\",
        merchant_code: \"88608\",
        account_number: \"886081000123456\",
        bank_code: \"MANDIRI\",
        name: \"John Doe\",
        is_closed: false,
        is_single_use: false,
        status: \"ACTIVE\",
        expiration_date: \"2048-02-15T11:01:52.722Z\",
        updated: \"2016-10-10T08:15:03.404Z\",
        created: \"2016-10-10T08:15:03.404Z\"
    }" \
    'https://api.xendit.co/virtual_account_created_callback_url'

    JSON

    {
        "id": "57fb4e076fa3fa296b7f5a97",
        "owner_id": "5824128aa6f9f9b648be9d76",
        "external_id": "va-1487156410",
        "merchant_code": "88608",
        "account_number": "886081000123456",
        "bank_code": "MANDIRI",
        "name": "John Doe",
        "is_closed": false,
        "is_single_use": false,
        "status": "ACTIVE",
        "expiration_date": "2048-02-15T11:01:52.722Z",
        "updated": "2016-10-10T08:15:03.404Z",
        "created": "2016-10-10T08:15:03.404Z"
    }
    Parameter Body Tipe Description
    owner_id
    required
    string ID pengguna anda
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    bank_code
    required
    string Kode bank yang bersangkutan, misal, BNI.
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account
    name
    required
    string Nama virtual account
    account_number
    required
    string Nomor lengkap virtual account (termasuk 5 angka didepan). Nomor ini yang perlu pengguna gunakan saat melakukan pembayaran melaluin ATM atau Internet/mobile banking.
    suggested_amount
    optional
    string Nominal yang disarankan untuk membuat virtual account
    is_closed
    required
    boolean Nilai yang menentukan apakah virtual account hanya dapat dibayarkan sesuai nominal yang telah ditentukan pada expected_amount atau tidak.
    expected_amount
    optional
    string Nominal yang diharapkan saat is_closed diubah menjadi true
    id
    required
    string ID unik untuk virtual account. ID ini dapat digunakan untuk membuat invoice agar terhubung dengan virtual account.
    is_single_use
    required
    boolean Nilai yang menentukan apakah virtual account akan menjadi inactive setelah dibayar.
    status
    required
    string Status virtual account yang menentukan apakah itu PENDING, ACTIVE atau *INACTIVE*.
  • Status PENDING jika pembuatan virtual account sedang di proses oleh bank.
  • Status INACTIVE dikarenakan virtual account adalah virtual account sekali bayar atau virtual account telah expired.
  • Dan jika status ACTIVE virtual account dapat di gunakan oleh pengguna.
  • Error Notifikasi Virtual Account

    Perlu diperhatikan pada kasus ini kita tidak mendapatkan respon sukses dari server anda pada percobaan pertama, kami akan mencoba lagi sebanyak 2 kali dengan jeda 30 detik disetiap percobaan. Setelah 3 kali mendapatkan respon gagal, kami akan mendapatkan peringatan bahwa notifikasi itu telah gagal. Tim kami akan menghubungin anda untuk menyelesaikan masalah ini.

    Mendapatkan Pembayaran Virtual Account

    Endpoint: Permintaan Mendapatkan Pembayaran Virtual Account

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

    Contoh Permintaan Mendapatkan Pembayaran Virtual Account

    curl https://api.xendit.co/callback_virtual_account_payments/payment_id={payment_id} -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $paymentID = '1502450097080';
      $getFVAPayment = \Xendit\VirtualAccounts::getFVAPayment($paymentID);
      var_dump($getFVAPayment);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { VirtualAcc } = x;
    const vaSpecificOptions = {};
    const va = new VirtualAcc(vaSpecificOptions);
    
    const resp = await va.getVAPayment({
      paymentID: '598d91b1191029596846047f',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedVirtualAccountPayment payment = FixedVirtualAccount.getPayment("EXAMPLE_PAYMENT_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    payment, err := virtualaccount.GetPayment(&virtualaccount.GetPaymentParams{
      PaymentID: "1502450097080",
    })
    
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved va payment: %+v\n", payment)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    VirtualAccount = xendit_instance.VirtualAccount
    
    virtual_account_payment = VirtualAccount.get_payment(
        payment_id="5ef18efca7d10d1b4d61fb52",
    )
    print(virtual_account_payment)

    Ketika anda menerima notifikasi di URL anda, anda dapat memverifikasi notifikasi yang anda terima berasal dari kami.

    Parameter Request

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

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

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

    Parameter Respon

    Contoh Respon Pembayaran Mendapatkan Virtual Account

    {
        "id": "598d91b1191029596846047f",
        "payment_id": "1502450097080",
        "callback_virtual_account_id": "598d5f71bf64853820c49a18",
        "external_id": "demo-1502437214715",
        "merchant_code": "77517",
        "account_number": "1000016980",
        "bank_code": "BNI",
        "amount": 5000,
        "sender_name": "JOHN DOE",
        "transaction_timestamp": "2017-08-11T11:14:57.080Z"
    }
    Parameter Tipe Description
    id
    required
    string ID pembayaran virtual account
    payment_id
    required
    string Dalam sistem internal kami disebut dengan payment ID
    callback_virtual_account_id
    required
    string ID dari virtual account yang telah dibayar
    external_id
    required
    string External ID pembayaran virtual account
    merchant_code
    required
    string 5 angka didepan sebelum nomor lengkap virtual account
    account_number
    required
    string Nomor akun dari virtual account
    bank_code
    required
    string Kode bank dari nomor virtual account
    amount
    required
    integer positive Jumlah yang dibayarkan ke virtual account ini
    transaction_timestamp
    required
    string Tanggal dan waktu bahwa virtual account telah dibayar
    sender_name
    string Nama dari pelanggan yang membayar va tersebut. Parameter ini hanya didukung oleh Sahabat Sampoerna Virtual Account

    Kode Error

    Kode Error Deskripsi
    REQUEST_FORBIDDEN_ERROR
    403
    API key tidak memiliki izin untuk mengakses endpoint ini. Silahkan menambahkan izin ke API key tersebut. Pelajari lebih lanjut caranya disini.
    CALLBACK_VIRTUAL_ACCOUNT_PAYMENT_NOT_FOUND_ERROR
    404
    Tidak dapat menemukan notofi kasi pembayaran virtual account berdasarkan payment id

    Retail Outlets

    Pembuatan Fixed Payment Code

    Endpoint: Pembuatan Fixed Payment Code (FPC)

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

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

    Parameter Request

    Contoh Permintaan Pembuatan Fixed Payment Code

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

    JSON

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

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

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

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

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

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

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

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

    standar: false

    Parameter Respon

    Contoh Respon Pembuatan Fixed Payment Code

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

    Kode Error

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

    Pembaruan Fixed Payment Code

    Endpoint: Pembaruan Fixed Payment Code

    PATCH https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id}

    Contoh Permintaan Pembaruan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=20000
       -d name='Joe Contini'
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '5b61881e6cc2770f00117f73';
      $updateParams = ['expected_amount' => 20000];
    
      $updateFPC = \Xendit\Retail::update($id, $updateParams);
      var_dump($updateFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.updateFixedPaymentCode({
      id: '5b61881e6cc2770f00117f73',
      name: 'Joe Contini',
      expectedAmt: 20000,
    });
    console.log(resp);
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    expirationDate := time.Now().AddDate(0, 0, 1)
    
    updateFixedPaymentCodeData := retailoutlet.UpdateFixedPaymentCodeParams{
      FixedPaymentCodeID: "5b61881e6cc2770f00117f73",
      Name:               "Joe Contini",
      ExpectedAmount:     20000,
      ExpirationDate:     &expirationDate,
    }
    
    resp, err := retailoutlet.UpdateFixedPaymentCode(&updateFixedPaymentCodeData)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    fmt.Printf("updated retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.update_fixed_payment_code(
        fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
        name="Joe Contini",
    )
    print(retail_outlet)

    Parameter Request (Money-in write permission)

    Fixed Payment Code sangat mudah disesuaikan, dan semuanya didasarkan pada kebutuhan Anda. Oleh karena itu, kami memberikan Anda endpoint ini untuk dengan mudah memperbarui Fixed Payment Code Anda yang Anda inginkan.

    Permintaan Pembaruan Fixed Payment Code

    Contoh Permintaan Pembaruan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d expected_amount=20000
       -d name='Joe Contini'
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("name", "Lorem Ipsum");
    
      FixedPaymentCode fpc = RetailOutlet.updateFixedPaymentCode("EXAMPLE_ID", params);
    } catch (XenditException e) {
      e.printStackTrace();
    }

    JSON

    {
      "expected_amount": 20000,
      "name": "Joe Contini"
    }
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

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

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

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

    Parameter Respon

    Contoh Respon Pembaruan Fixed Payment Code

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

    Kode Error

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

    Mendapatkan Fixed Payment Code

    Endpoint: Mendapatkan Fixed Payment Code

    GET https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id}

    Contoh Permintaan Mendapatkan Fixed Payment Code

    curl https://api.xendit.co/fixed_payment_code/{fixed_payment_code_id} -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '5b61881e6cc2770f00117f73';
    
      $getFPC = \Xendit\Retail::retrieve($id);
      var_dump($getFPC);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RetailOutlet } = x;
    const retailOutletSpecificOptions = {};
    const ro = new RetailOutlet(retailOutletSpecificOptions);
    
    const resp = await ro.getFixedPaymentCode({
      id: '5b61881e6cc2770f00117f73',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      FixedPaymentCode fpc = RetailOutlet.getFixedPaymentCode("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getFixedPaymentCodeData := retailoutlet.GetFixedPaymentCodeParams{
      FixedPaymentCodeID: "5b61881e6cc2770f00117f73",
    }
    
    resp, err := retailoutlet.GetFixedPaymentCode(&getFixedPaymentCodeData)
    if err != nil {
      log.Fatal(err.ErrorCode)
    }
    
    fmt.Printf("retrieved retail outlet fixed payment code: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RetailOutlet = xendit_instance.RetailOutlet
    
    retail_outlet = RetailOutlet.get_fixed_payment_code(
        fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
    )
    print(retail_outlet)

    Terkadang anda harus mengetahui detil dari Fixed Payment Code anda. Endpoint ini dapat digunakan untuk mendapatkan detil terakhir dari Fixed Payment Code anda.

    Parameter Request

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

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Fixed Payment Code

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

    Kode Error

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

    Notifikasi Pembayaran Fixed Payment Code (Callback)

    Endpoint: Notifikasi Pembayaran Fixed Payment Code

    POST https://yourcompany.com/fixed_payment_code_paid_callback_url

    Ketika seseorang membayar ke Fixed Payment Code Anda, API callback kami akan mengenai URL Anda yang sudah Anda setel di dasbor.

    Contoh ini hanya digunakan untuk menunjukkan parameter yang mengirim dari API Xendit ke URL callback Anda dan tidak dapat diuji di sini. Jika anda menginginkan untuk mencoba permintaan notifikasi ini, gunakan fitur di dashboard dan pilih Callbacks settings.

    Data Callback

    Parameter Header Tipe Deskripsi
    x-callback-token
    required
    string Token unik yang di dapat dari Xendit untuk memverifikasi asal dari panggilan balik tersebut

    Contoh Permintaan Notifikasi Pembayaran Fixed Payment Code

    curl --include \
        --request POST \
        --url https://yourcompany.com/fixed_payment_code_paid_callback_url \
        --header 'content-type: application/json' \
        --header 'x-callback-token: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==' \
        --data '{
      "id": "58a435201b6ce2a355f46070",
      "external_id": "fixed-payment-code-14876410",
      "prefix": "TEST",
      "payment_code": "TEST123",
      "retail_outlet_name": "ALFAMART",
      "name": "John Doe",
      "amount": 123456,
      "status": "SETTLING",
      "transaction_timestamp": "2019-11-08T11:51:28.613Z",
      "payment_id": "1573213888613",
      "fixed_payment_code_payment_id": "5dc556c07a58de7c114f0347",
      "fixed_payment_code_id": "5dc5567bdf120fd64988a79b",
      "owner_id": "5be9b2f03ef77262c2bd49e6"
    }'

    JSON

    {
      "id": "58a435201b6ce2a355f46070",
      "external_id": "fixed-payment-code-14876410",
      "prefix": "TEST",
      "payment_code": "TEST123",
      "retail_outlet_name": "ALFAMART",
      "name": "John Doe",
      "amount": 123456,
      "status": "SETTLING",
      "transaction_timestamp": "2019-11-08T11:51:28.613Z",
      "payment_id": "1573213888613",
      "fixed_payment_code_payment_id": "5dc556c07a58de7c114f0347",
      "fixed_payment_code_id": "5dc5567bdf120fd64988a79b",
      "owner_id": "5be9b2f03ef77262c2bd49e6"
    }
    Parameter Body Tipe Deskripsi
    id
    required
    string Pengidentifikasi unik dari sebuah transaksi
    external_id
    required
    string ID pilihan anda yang anda berikan saat melakukan permintaan
    prefix
    required
    string 3-6 karakter yang membedakan Fixed Payment Code Anda dari yang lain
    payment_code
    required
    string kode lengkap pembayaran tetap (termasuk prefix). Kode inilah yang harus digunakan pengguna untuk memberi tahu kepada kasir Outlet Ritel atau melalui halaman barcode. Lihat Pembayaran Melalui Barcode untuk info selengkapnya
    retail_outlet_name
    required
    string Nama Retail Outlet yang digunakan, misalnya ALFAMART atau INDOMARET
    name
    required
    string Nama untuk Fixed Payment Code
    amount
    required
    integer positive Nominal yang telah dibayarkan
    status
    required
    string Status pembayaran. Nilai yang mungkin muncul: SETTLING atau COMPLETED
    transaction_timestamp
    required
    ISO 8601 Date Tanggal saat Fixed Payment Code dibayarkan
    payment_id
    required
    string ID pembayaran sistem internal kami yang dapat digunakan sebagai referensi pembayaran
    fixed_payment_code_payment_id
    required
    string ID unik untuk pembayaran Fixed Payment Code
    fixed_payment_code_id
    required
    string ID unik untuk Fixed Payment Code
    owner_id
    required
    string ID pengguna anda

    Kesalahan Permintaan Notifikasi Pembayaran Fixed Payment Code

    Perhatikan bahwa dalam kasus di mana kami tidak mendapatkan respons yang berhasil dari server Anda pada percobaan pertama, kami akan mencoba lagi 2 kali lebih lama dengan penundaan 30 detik antara setiap percobaan. Setelah 3 kegagalan, kami mendapat peringatan internal bahwa callback telah gagal. Tim kami kemudian akan menghubungi Anda untuk menyelesaikan masalah.

    Invoice

    Pembuatan Invoice

    Endpoint: Pembuatan Invoice

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

    Invoice memungkinkan pengguna untuk membayar melalui berbagai macam metode pembayaran. Setelah pembayaran dilakukan, sebuah notifikasi akan dikirimkan tanpa memperhatikan metode pembayaran yang digunakan.

    Untuk mengetahui lebih lanjut tentang invoice, Anda dapat membuka tautan dokumentasi kami.

    Parameter Request (Money-in write permission)

    Contoh Permintaan Pembuatan Invoice

    curl https://api.xendit.co/v2/invoices -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id=demo_1475801962607 \
       -d payer_email=sample_email@xendit.co \
       -d description='Trip to Bali' \
       -d amount=230000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [ 
        'external_id' => 'demo_1475801962607',
        'payer_email' => 'alfina@xendit.co',
        'description' => 'Trip to Bali',
        'amount' => 50000
      ];
    
      $createInvoice = \Xendit\Invoice::create($params);
      var_dump($createInvoice);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Invoice } = x;
    const invoiceSpecificOptions = {};
    const i = new Invoice(invoiceSpecificOptions);
    
    const resp = await i.createInvoice({
      externalID: 'demo_1475801962607',
      amount: 230000,
      payerEmail: 'sample_email@xendit.co',
      description: 'Trip to Bali',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_1475801962607");
      params.put("amount", 50000);
      params.put("payer_email", "customer@domain.com");
      params.put("description", "Trip to Bali");
    
      Invoice invoice = Invoice.create(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    data := invoice.CreateParams{
      ExternalID:  "demo_1475801962607",
      Amount:      50000,
      PayerEmail:  "alfina@xendit.co",
      Description: "Trip to Bali",
    }
    
    resp, err := invoice.Create(&data)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created invoice: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Invoice = xendit_instance.Invoice
    
    invoice = Invoice.create(
        external_id="invoice-1593684000",
        amount=20000,
        payer_email="customer@domain.com",
        description="Invoice Demo #123",
    )
    print(invoice)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Catatan: Jika Anda memasukkan parameter ini, kami akan mengembalikan fee_rule_id dan fee_id pada header response API

    This header is only used if you have access to xenPlatform. See xenPlatform for more information
    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID unik yang berfungsi sebagai tanda pengenal sebuah invoice di dalam sistem Anda
    payer_email
    required
    string Email pengguna yang akan membayar
    description
    required
    string Deskripsi invoice
    amount
    required
    number Jumlah tagihan yang harus dibayar. Jumlah tagihan minimum untuk pembuatan invoice adalah 1.
    should_send_email
    optional

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

    default: false
    boolean Isi parameter ini dengan true untuk menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk pelanggan Anda.
    reminder_time
    optional
    integer positive Waktu pengingat invoice sebelum kedaluwarsa. Nilai yang diizinkan adalah 1, 3, 7, 15, atau 30 hari sebelum kedaluwarsa

    Parameter Respon

    Contoh Respon Pembuatan Invoice

    {
      "id": "579c8d61f23fa4ca35e52da4",
      "user_id": "5781d19b2e2385880609791c",
      "external_id": "invoice_123124123",
      "status": "PENDING",
      "merchant_name": "Xendit",
      "merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1493610897264_473.png",
      "amount": 50000,
      "payer_email": "albert@xendit.co",
      "description": "This is a description",
      "invoice_url": "https://invoice.xendit.co/web/invoices/595b6248c763ac05592e3eb4",
      "expiry_date": "2016-08-01T11:20:01.017Z",
      "available_banks": [
        {
          "bank_code": "BCA",
          "collection_type": "POOL",
          "bank_account_number": 1000008,
          "transfer_amount": 54000
        }
      ],
      "available_retail_outlets": [
          {
              "retail_outlet_name": "ALFAMART",
              "payment_code": "ALFA123456",
              "transfer_amount": 54000
          }
      ],
      "should_exclude_credit_card": false,
      "should_send_email": false,
      "created": "2017-06-12T14:00:00.306Z",
      "updated": "2017-06-12T14:00:00.306Z",
      "mid_label": "test-mid",
      "currency": "IDR",
      "fixed_va":true
    }
    Parameter Deskripsi
    id ID invoice yang didapatkan dari Xendit
    user_id ID bisnis Xendit Anda
    external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    status PENDING Invoice masih belum dibayar
    merchant_name Nama perusahaan atau situs Anda
    merchant_profile_picture_url Tautan ke gambar profil perusahaan Anda
    amount Jumlah tagihan invoice
    payer_email Email pembayar, didapatkan dari permintaan API Anda
    description Deskripsi invoice, didapatkan dari permintaan API Anda
    invoice_url Tautan untuk mengakses tampilan invoice, disediakan agar Anda dapat menggunakannya di laman situs Anda.
    expiry_date Tanggal dan waktu invoice kedaluwarsa dalam standar ISO dengan default 24 jam.
    available_banks Metode pembayaran melalui bank yang tersedia berdasarkan konfigurasi
    bank_code BCA / MANDIRI / BNI / BRI / PERMATA
    collection_type POOL Tipe nonfixed virtual account
    bank_account_number Akun bank tujuan pembayaran
    transfer_amount (DEPRECATED) Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    available_retail_outlets Metode pembayaran melalui outlet ritel berdasarkan konfigurasi
    retail_outlet_name Nama outlet ritel
    payment_code Kode unik identifikasi pembayaran
    bank_account_number Akun bank tujuan pembayaran
    transfer_amount (DEPRECATED) Jumlah tagihan yang harus dibayar
    bank_branch Tipe akun bank yang digunakan
    account_holder_name Nama pemegang akun
    should_exclude_credit_card Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice
    should_send_email Setingan untuk membuat pembayar dapat menerima email mengenai status invoice, apakah sudah dibuat, sudah dibayar, atau sudah kedaluwarsa
    created Waktu ISO yang tercatat saat invoice dibuat
    updated Waktu ISO yang tercatat saat invoice diperbarui
    mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    fixed_va Parameter ini akan bernilai true jika Anda menggunakan satu nomor VA yang sama untuk beberapa XenInvoice yang anda berikan untuk satu pelanggan yang sama.
    reminder_date
    optional
    ISO8601 Waktu yang ditentukan oleh merchant dalam format ISO untuk mengingatkan pelanggan terkait pembayaran invoice (saat pengguna mengirim reminder_time pada waktu pembuatan invoice).

    Timezone: GMT+0

    Kode Error

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

    Mendapatkan invoice

    Endpoint: Mendapatkan Invoice

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

    Parameter Request (Money-in read permission)

    Contoh Permintaan Mendapatkan Invoice

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

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

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

    Parameter Respon

    Contoh Respon Mendapatkan Invoice

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



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

    Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

    should_send_email

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

    updated

    Waktu ISO yang tercatat saat invoice diperbarui

    created

    Waktu ISO yang tercatat saat invoice dibuat

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

    Kode Error

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

    Penutupan invoice

    Endpoint: Penutupan Invoice

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

    Anda bisa menutup sebuah invoice secara langsung menggunakan endpoint ini.

    Catatan:

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

    Parameter Request (Money-in write permission)

    Contoh Permintaan Penutupan Invoice

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

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

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

    Respon Penutupan Invoice

    Contoh Respon Penutupan Invoice

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

    Setingan untuk menyertakan metode pembayaran kartu kredit di dalam invoice

    should_send_email

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

    updated

    Waktu ISO yang tercatat saat invoice diperbarui

    created

    Waktu ISO yang tercatat saat invoice dibuat

    Kode Error

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

    Notifikasi Invoice (Callback)

    Endpoint: Notifikasi Invoice

    POST https://yourcompany.com/invoice_callback_url

    Saat sebuah invoice dibayar, sistem kami akan mengirimkan notifikasi ke URL notifikasi yang sudah dikonfigurasi di dasbor. Untuk instruksi lebih lanjut mengenai notifikasi dapat dilihat dalam dokumentasi invoice.

    Contoh di bawah ini hanya digunakan untuk memperlihatkan parameter notifikasi yang dikirimkan oleh API Xendit ke URL notifikasi Anda. Jika Anda ingin mengetes notifikasi ini, dapat menggunakan fitur pengetesan di dasbor dengan pergi ke Pengaturan > Developer > Callbacks.

    Data Callback

    Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Bank

    curl --include \
         --request POST \
         --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --header "Content-Type: application/json" \
         --data-binary "{
          id: \"593f4ed1c3d3bb7f39733d83\",
          external_id: \"testing-invoice\",
          user_id: \"5848fdf860053555135587e7\",
          is_high: false,
          payment_method: \"BANK_TRANSFER\",
          status: \"PAID\",
          merchant_name: \"Xendit\",
          amount: 2000000,
          paid_amount: 2000000,
          bank_code: \"MANDIRI\",
          paid_at: \"2017-06-14T02:32:50.912Z\",
          payer_email: \"test@xendit.co\",
          description: \"Invoice callback test\",
          adjusted_received_amount: 1995000,
          fees_paid_amount: 5000,
          created: \"2017-06-13T02:32:49.827Z\",
          updated: \"2017-06-13T02:32:50.912Z\",
          currency: \"IDR\",
          payment_channel: \"MANDIRI\",
          payment_destination: \"8458478548758748\",
    }" \
    '{{your_company_domain}}/{{callback_url}}'

    Contoh Permintaan Notifikasi Invoice untuk Pembayaran Melalui Outlet Ritel

    curl --include \
         --request POST \
         --header "X-CALLBACK-TOKEN: MuaJALKJSDK12LASHD123kSAKSDHzjahwUWjkasJSDSA12KSNAK21n==" \
         --header "Content-Type: application/json" \
         --data-binary "{
          id: \"593f4ed1c3d3bb7f39733d83\",
          external_id: \"testing-invoice\",
          user_id: \"5848fdf860053555135587e7\",
          is_high: false,
          payment_method: \"RETAIL_OUTLET\",
          status: \"PAID\",
          merchant_name: \"Xendit\",
          amount: 2000000,
          paid_amount: 2000000,
          paid_at: \"2017-06-14T02:32:50.912Z\",
          payer_email: \"test@xendit.co\",
          description: \"Invoice callback test\",
          adjusted_received_amount: 1995000,
          fees_paid_amount: 5000,
          created: \"2017-06-13T02:32:49.827Z\",
          updated: \"2017-06-13T02:32:50.912Z\",
          currency: \"IDR\",
          payment_channel: \"ALFAMART\",
          payment_destination: \"TEST815\",
    }" \
    '{{your_company_domain}}/{{callback_url}}'
    Parameter Deskripsi
    id ID invoice yang didapatkan dari Xendit
    user_id ID bisnis Xendit Anda
    external_id ID invoice yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah invoice antara sistem kami dan sistem Anda
    merchant_name Nama perusahaan atau situs Anda
    amount Jumlah tagihan invoice
    fees_paid_amount Biaya Xendit diambil langsung dari pembayaran invoice - terima kasih karena sudah mendukung dunia pembayaran yang lebih baik :)
    status PAID invoice sudah dibayar
    EXPIRED invoice sudah kedaluwarsa. Notifikasi invoice kedaluwarsa secara umum tidak diaktifkan. Jika Anda ingin mengaktifkannya untuk bisnis Anda, Anda dapat melakukannya di Xendit Dashboard
    payer_email Email pembayar, didapatkan dari permintaan API Anda
    description Deskripsi invoice, didapatkan dari permintaan API Anda
    adjusted_received_amount Jumlah netto uang yang masuk ke saldo Anda setelah dipotong biaya. Terima kasih karena sudah menggunakan jasa kami :)
    payment_method Metode pembayaran yang dipakai
    POOL Tipe nonfixed virtual account
    CREDIT_CARD Tipe kartu kredit
    bank_code Kode bank yang digunakan untuk menerima pembayaran jika metode pembayaran yang dipakai adalah POOL
    retail_outlet_name Kode outlet ritel yang digunakan untuk menerima pembayaaran jika metode pembayaran yang dipakai adalah RETAIL_OUTLET
    paid_amount Jumlah tagihan yang dibayar
    updated Waktu ISO yang tercatat saat invoice diperbarui
    created Waktu ISO yang tercatat saat invoice dibuat
    mid_label MID label yang dapat anda gunakan saat anda menggunakan pembayaran kartu kredit dan menggunakan Xendit sebagai fasilitator. Anda akan mendapatkan response ini jika anda menggunakan mid_label sebagai parameter anda saat menggunakan API pembuatan invoice
    currency Mata uang yang anda gunakan untuk nominal penagihan invoice Anda. Anda akan mendapatkan response ini jika anda menggunakan currency sebagai parameter anda saat menggunakan API pembuatan invoice
    success_redirect_url Tautan yang diarahkan pengguna setelah pembayaran tagihan berhasil dibayarkan. Anda akan menerima response ini ketika anda menggunakan success_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API.
    failure_redirect_url Tautan yang diarahkan apabila tagihan telah kedaluwarsa. Anda akan menerima response ini ketika anda menggunakan failure_redirect_url sebagai salah satu optional parameter Anda dalam pembuatan invoice melalui API
    paid_at Data tanggal dan waktu ketika pelanggan Anda melakukan pembayaran. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    credit_card_charge_id Credit card charge ID ketika pelanggan Anda membayar invoice Anda degan kartu kredit. Anda akan mendapatkan response ini ketika invoice anda telah terbayar melalui kartu kredit.
    payment_method Metode pembayaran yang digunakan ketika pelanggan Anda membayar invoice Anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BANK_TRANSFER", "CREDIT_CARD", "RETAIL_OUTLET", "EWALLET"]
    payment_channel Channel pembayaran yang digunakan oleh pelanggan ketika membayar invoice anda. Anda akan mendapatkan response ini ketika invoice anda telah terbayar.
    Contoh : ["BCA", "BRI", "MANDIRI", "BNI", "PERMATA", "ALFAMART", "OVO", "CREDIT_CARD"]
    payment_destination Nomor Virtual Account atau kode pembayaran Retail Outlet yang digunakan untuk membayar invoice(tidak akan ditunjukkan saat pembayaran invoice menggunakan kartu kredit atau e-wallet). Anda akan mendapatkan response ini ketika invoice anda telah terbayar.

    Callback Error

    Jika kami tidak mendapat respon sukses dari server Anda, kami akan mencoba lagi untuk mengirimkan notifikasi sebanyak 2 kali dengan jeda waktu 30 detik untuk setiap percobaan. Setelah 3 kali gagal, kami akan mendapatkan peringatan internal mengenai pengiriman notifikasi yang gagal. Tim kami akan segera mengontak Anda untuk menyelesaikan isu ini.

    Pembayaran Recurring

    Membuat Pembayaran Recurring

    Endpoint: Membuat Pembayaran Recurring

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

    Pembayaran Recurring membantu Anda untuk menagih pelanggan Anda menggunakan sistem kami.

    Parameter Request

    Contoh: Request Pembuatan Recurring

    curl https://api.xendit.co/recurring_payments -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d external_id=recurring_31451441 \
       -d payer_email=sample_email@xendit.co \
       -d interval=MONTH \
       -d interval_count=1 \
       -d description='Monthly room cleaning service' \
       -d amount=125000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => 'recurring_31451441',
        'payer_email' => 'sample_email@xendit.co',
        'description' => 'Monthly room cleaning service',
        'amount' => 125000,
        'interval' => 'MONTH',
        'interval_count' => 1
      ];
    
      $createRecurring = \Xendit\Recurring::create($params);
      var_dump($createRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.createPayment({
      externalID: 'recurring_31451441',
      amount: 125000,
      payerEmail: 'sample_email@xendit.co',
      interval: RecurringPayment.Interval.Month,
      intervalCount: 1,
      description: 'Monthly room cleaning service',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String , Object> params = new HashMap<>();
      params.put("external_id", "recurring_31451441");
      params.put("payer_email", "sample_email@xendit.co");
      params.put("interval", "MONTH");
      params.put("interval_count", 1);
      params.put("description", "Monthly room cleaning service");
      params.put("amount", 125000);
    
      RecurringPayment recurringPayment = RecurringPayment.create(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createData := recurringpayment.CreateParams{
      ExternalID:    "recurring_31451441",
      Amount:        125000,
      PayerEmail:    "sample_email@xendit.co",
      Description:   "Monthly room cleaning service",
      Interval:      xendit.RecurringPaymentIntervalDay,
      IntervalCount: 1,
    }
    
    resp, err := recurringpayment.Create(&createData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.create(
        external_id="recurring_12345",
        payer_email="test@x.co",
        description="Test Curring Payment",
        amount=100000,
        interval="MONTH",
        interval_count=1,
    )
    print(recurring_payment)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

    Header ini hanya bisa digunakan jika Anda memiliki akses ke xenPlatform. Silahkan buka xenPlatform untuk informasi lebih lanjut.
    Parameter Body Tipe Deskripsi
    external_id
    required
    string ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
    payer_email
    required
    string Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    description
    required
    string Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    number Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 1. Nominal maksimum adalah IDR 1,000,000,000
    interval
    required
    string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    required
    number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    total_recurrence
    optional
    number Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    invoice_duration
    optional
    number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    should_send_email
    optional

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

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

    boolean Gunakan true jika Anda ingin melakukan penagihan pertama sebelum penagihan yang akan dilakukan pada start_date,
    Invoice selanjutnya yang akan ditagihkan ke pelanggan akan dibuat pada start_date. Dan waktu pembuatan untuk invoice selanjutnya lagi akan jatuh pada
    interval*interval_count + start_date
    payment_method_id
    optional
    string Isi parameter ini dengan id dari payment method yang sudah diaktifkan untuk sebuah pelanggan
    currency
    optional

    string Mata uang dari nominal yang Anda buat
    contoh : "IDR"

    Parameter Respon

    Contoh: Response Pembuatan Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "ACTIVE",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": false,
        "missed_payment_action": "IGNORE",
        "last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2017-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z",
        "recharge": true
    }
    Parameter Deskripsi
    id ID dari Recurring Anda yang diberikan dari Xendit
    user_id Xendit Business ID Anda
    external_id ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
    status ACTIVE Tagihan Recurring Anda ber-status aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    payer_email
    required
    Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    last_created_invoice_url URL yang disediakan oleh Xendit untuk penagihan recurring
    description
    required
    Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    Nominal harga per Invoice per interval.
    Nominal paling kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    interval
    required
    Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    required
    Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    total_recurrence
    optional
    Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    invoice_duration
    optional
    Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    should_send_email
    optional

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

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

    boolean Disaat nilai dari parameter ini adalah true, berarti invoice pertama telah dibuat sebelum pembuatan invoice pada start_date
    payment_method_id id dari payment method yang akan melakukan pembayaran berulang
    currency
    optional

    string Mata uang dari nominal yang Anda buat

    Kode Error

    Kode Error Description
    API_VALIDATION_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    bukan format JSON yang valid.
    INVALID_CREDIT_CARD_TOKEN_ERROR
    400
    Token kartu kredit tidak valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id tidak valid.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini
    UNSUPPORTED_CURRENCY
    400
    Mata uang tersebut belum dikonfigurasi pada pengaturan Anda, silakan hubungi kami.

    Mendapatkan Sebuah Data Pembayaran Recurring

    Endpoint: Mendapatkan Sebuah Data Pembayaran Recurring

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

    Parameter Request

    Contoh Request untuk Mendapatkan Sebuah Data Pembayaran Recurring

    curl https://api.xendit.co/recurring_payments/{id} \
      -X GET \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da3';
    
      $getRecurring = \Xendit\Recurring::retrieve($id);
      var_dump($getRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.getPayment({ id: '579c8d61f23fa4ca35e52da3' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      RecurringPayment recurringPayment = RecurringPayment.get("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    getData := recurringpayment.GetParams{
      ID: "579c8d61f23fa4ca35e52da3",
    }
    
    resp, err := recurringpayment.Get(&getData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.get(
        id="5f05825ff9f52d3ed204c687",
    )
    print(recurring_payment)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Deskripsi
    id ID dari Recurring Anda yang diberikan dari Xendit

    Parameter Respon

    Contoh Response dari Mendapatkan Sebuah Data Pembayaran Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "ACTIVE",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": true,
        "missed_payment_action": "IGNORE",
        "last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5d520f19f24af434094c9fa9",
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2018-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z",
        "recharge":true
    }
    Parameter Deskripsi
    id ID dari Recurring Anda yang diberikan dari Xendit
    user_id Xendit Business ID Anda
    external_id ID pilihan Anda yang berfungsi sebagai tanda pengenal sebuah Recurring dalam sistem Anda
    status ACTIVE Tagihan Recurring Anda ber-status aktif
    STOPPED Tagihan Recurring Anda telah dihentikan dari sistem Xendit
    PAUSED Tagihan Recurring Anda dihentikan untuk sementara waktu. Harap untuk melanjutkan tagihan Recurring Anda dengan Resume Recurring API
    payer_email
    required
    Email yang dimiliki oleh pelanggan yang Anda maksudkan untuk membayar tagihan Recurring Anda
    description
    required
    Deskripsi pembayaran atau tagihan Recurring Anda
    amount
    required
    Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    interval
    required
    Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    required
    Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    total_recurrence
    optional
    Total berapa kali anda akan menagih pelanggan Anda. Jika anda menginput angka 3, maka Xendit akan menagih pelanggan Anda sebanyak 3 kali. Jika anda menginput total_recurrence dengan angka 3, interval_count dengan angka 1 dan interval dengan DAY, Xendit akan menagih pelanggan Anda sebanyak 3 kali dalam 3 hari setelah Anda membuat Recurring melalui API.
    invoice_duration
    optional
    Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    next_scheduled_at
    tanggal penerbitan invoice berikutnya dalam standar ISO dengan default 24 jam
    should_send_email
    optional

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

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

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

    Kode Error

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

    Mengubah Pembayaran Recurring

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

    Endpoint: Mengubah Pembayaran Recurring

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

    Parameter Request

    Contoh: Request Mengubah Pembayaran Recurring

    curl https://api.xendit.co/recurring_payments/579c8d61f23fa4ca35e52da3 \
       -X PATCH \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -d amount=80000 \
       -d interval=WEEK \
       -d interval_count=2 \
       -d should_send_email=true \
       -d missed_payment_action=STOP \
       -d credit_card_token=522f0ba2ab70de5d2b409eee \
    
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da3';
      $params = ['amount' => 80000];
    
      $editRecurring = \Xendit\Recurring::update($id, $params);
      var_dump($editRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.editPayment({
      id: '579c8d61f23fa4ca35e52da3',
      amount: 80000,
      interval: RecurringPayment.Interval.Week,
      intervalCount: 2,
      shouldSendEmail: true,
      missedPaymentAction: RecurringPayment.Action.Stop,
      creditCardToken: '522f0ba2ab70de5d2b409eee',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("amount", 80000);
      params.put("interval", "WEEK");
    
      RecurringPayment recurringPayment = RecurringPayment.edit("EXAMPLE_ID", params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    editData := recurringpayment.EditParams{
      ID:            "579c8d61f23fa4ca35e52da3",
      Amount:        80000,
      Interval:      xendit.RecurringPaymentIntervalWeek,
      IntervalCount: 2,
    }
    
    resp, err := recurringpayment.Edit(&editData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("edited recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.edit(
        id="5f05825ff9f52d3ed204c687",
        interval_count=2,
    )
    print(recurring_payment)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID dari Recurring Anda yang diberikan dari Xendit
    Parameter Body Tipe Deskripsi
    amount
    optional
    number Nominal harga per Invoice per interval.
    Nominal paking kecil untuk membuat Recurring adalah IDR 10,0000. Nominal maksimum adalah IDR 1,000,000,000
    credit_card_token
    optional
    string Token ID yang Anda dapatkan setelah anda melakukan tokenisasi pada kartu kredit pelanggan Anda. Gunakan multiple_use dengan nilai true saat tokenisasi untuk mengaktifkan autocharge pada kartu kredit pelanggan Anda. Jika parameter ini kosong, autocharge tidak akan diaktifkan untuk Recurring ini. Harap mengikuti halaman tokenisasi kartu kredit untuk menggunakan multiple use token.
    interval
    optional
    string Frekuensi pembayaran Recurring Anda dimana datanya salah satu di antaraDAY, WEEK, MONTH.
    interval_count
    optional
    number Jarak antara pembayaran Recurring untuk pelanggan Anda. Sebagai contoh, interval=MONTH and interval_count=3 pelanggan Anda akan ditagihkan setiap 3 bulan sekali.
    should_send_email
    optional
    boolean Gunakan true agar pelanggan anda mendapatkan email notifikasi ketika invoice dibuat, dibayar dan kedaluwarsa
    invoice_duration
    optional
    number Jumlah detik yang dibutuhkan oleh pelanggan Anda untuk membayar invoice yang ditagihkan kepada pelanggan Anda. Jika tidak diisi, invoice_duration akan mengikuti durasi default yang disediakan oleh Xendit.
    reschedule_at
    optional
    string (ISO 8601) Jadwal saat invoice berikutnya akan diterbitkan. Jika dibiarkan kosong, invoice akan diterbitkan berdasarkan pembayaran recurring sebelumnya.
    missed_payment_action
    optional
    string Gunakan IGNORE, jika Anda ingin meneruskan penagihan Recurring Anda saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu. Gunakan STOP, jika Anda ingin menghentikan penagihan Recurring secara otomatis saat pelanggan Anda tidak membayar tagihan Recurring pada siklus pembayaran tertentu
    payment_method_id
    optional
    string Isi parameter ini dengan id dari payment method yang sudah diaktifkan untuk sebuah pelanggan
    customer_id
    optional

    string isi parameter ini dengan id pelanggan yang diinginkan

    Paramter Respon

    Contoh: Response Mengubah Pembayaran Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "ACTIVE",
        "amount": 80000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "WEEK",
        "interval_count": 2,
        "recurrence_progress": 1,
        "should_send_email": true,
        "missed_payment_action": "STOP",
        "recharge": true,
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2017-06-12T14:00:00.306Z",
        "start_date": "2017-06-19T14:00:00.306Z"
    }

    Semua response akan sama dengan Get Recurring

    Kode Error

    Kode Error Description
    NOT_FOUND_ERROR
    404
    Tidak dapat menemukan Recurring dengan ID.
    API_VALIDATION_ERROR
    400
    Data yang di berikan tidak melewati validasi kami dengan baik. Variabel yang mengalami kesalahan ditampilkan di pesan kesalahan yang dibalikkan oleh Xendit.
    INVALID_JSON_FORMAT
    400
    bukan format JSON yang valid.
    INVALID_CREDIT_CARD_TOKEN_ERROR
    400
    Token kartu kredit tidak valid.
    INVALID_PAYMENT_METHOD_ID_ERROR
    400
    Payment method id tidak valid.
    REQUEST_FORBIDDEN_ERROR
    403
    API key yang digunakan tidak memiliki hak akses untuk melakukan request ini. Dimohon untuk menggunakan hak akses yang tepat untuk key tersebut. Pelajari lebih dalam di sini

    Menghentikan Pembayaran Recurring

    Anda dapat menghentikan pembayaran Recurring Anda dengan API berikut.

    Endpoint: Menghentikan Pembayaran Recurring

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

    Parameter Request

    Contoh: Request Menghentikan Pembayaran Recurring

    curl https://api.xendit.co/recurring_payments/{id}/stop! -X POST \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da3';
    
      $stopRecurring = \Xendit\Recurring::stop($id);
      var_dump($stopRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.stopPayment({ id: '579c8d61f23fa4ca35e52da3' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      RecurringPayment recurringPayment = RecurringPayment.stop("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    stopData := recurringpayment.StopParams{
      ID: "579c8d61f23fa4ca35e52da3",
    }
    
    resp, err := recurringpayment.Stop(&stopData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("stopped recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.stop(
        id="5f05825ff9f52d3ed204c687",
    )
    print(recurring_payment)
    Parameter Path Tipe Deskripsi
    id
    required
    string ID dari Recurring Anda yang diberikan dari Xendit

    Response Menghentikan Pembayaran Recurring

    Contoh: Response Menghentikan Pembayaran Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "STOPPED",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": true,
        "missed_payment_action": "IGNORE",
        "recharge": true,
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2018-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z"
    }

    Semua response akan sama dengan Get Recurring

    Kode Error

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

    Menghentikan Sementara Pembayaran Recurring

    Endpoint: Menghentikan Sementara Pembayaran Recurring

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

    Parameter Request

    Contoh Request Menghentikan Sementara Pembayaran Recurring

    curl https://api.xendit.co/recurring_payments/{id}/pause!
      -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da3';
    
      $pauseRecurring = \Xendit\Recurring::pause($id);
      var_dump($pauseRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.pausePayment({ id: '579c8d61f23fa4ca35e52da3' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      RecurringPayment recurringPayment = RecurringPayment.pause("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    pauseData := recurringpayment.PauseParams{
      ID: "579c8d61f23fa4ca35e52da3",
    }
    
    resp, err := recurringpayment.Pause(&pauseData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("paused recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.pause(
        id="5f05825ff9f52d3ed204c687",
    )
    print(recurring_payment)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID dari Recurring Anda yang diberikan dari Xendit

    Parameter Respon

    Contoh: Response Menghentikan Sementara Pembayaran Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "PAUSED",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": true,
        "missed_payment_action": "IGNORE",
        "recharge": true,
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2018-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z"
    }

    Semua response akan sama dengan Get Recurring

    Kode Error

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

    Melanjutkan Pembayaran Recurring

    Endpoint: Melanjutkan Pembayaran Recurring

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

    Parameter Request

    Anda dapat melanjutkan pembayaran Recurring yang dihentikan sementara dengan API berikut.

    Contoh: Request Melanjutkan Pembayaran Recurring

    curl https://api.xendit.co/recurring_payments/{id}/resume!
      -X POST \
      -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '579c8d61f23fa4ca35e52da3';
    
      $resumeRecurring = \Xendit\Recurring::resume($id);
      var_dump($resumeRecurring);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { RecurringPayment } = x;
    const rpSpecificOptions = {};
    const rp = new RecurringPayment(rpSpecificOptions);
    
    const resp = await rp.resumePayment({ id: '579c8d61f23fa4ca35e52da3' });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      RecurringPayment recurringPayment = RecurringPayment.resume("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    resumeData := recurringpayment.ResumeParams{
      ID: "579c8d61f23fa4ca35e52da3",
    }
    
    resp, err := recurringpayment.Resume(&resumeData)
    if err != nil {
      log.Fatal(err)
    }
    fmt.Printf("resumed recurring payment: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    RecurringPayment = xendit_instance.RecurringPayment
    
    recurring_payment = RecurringPayment.resume(
        id="5f05825ff9f52d3ed204c687",
    )
    print(recurring_payment)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID dari Recurring Anda yang diberikan dari Xendit

    Parameter Respon

    Contoh: Response Melanjutkan Pembayaran Recurring

    {
        "id": "579c8d61f23fa4ca35e52da3",
        "user_id": "5781d19b2e2385880609791c",
        "external_id": "recurring_31451441",
        "status": "ACTIVE",
        "amount": 125000,
        "payer_email": "sample_email@xendit.co",
        "description": "Monthly room cleaning service",
        "interval": "MONTH",
        "interval_count": 1,
        "recurrence_progress": 1,
        "should_send_email": true,
        "missed_payment_action": "IGNORE",
        "recharge": true,
        "created": "2017-06-12T14:00:00.306Z",
        "updated": "2018-06-12T14:00:00.306Z",
        "start_date": "2017-07-12T14:00:00.306Z"
    }

    Semua response akan sama dengan Get Recurring

    Kode Error

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

    Recurring Callback

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

    Parameter Tipe Deskripsi
    recurring_payment_id string ID dari Recurring Anda yang diberikan dari Xendit

    Mendapatkan Daftar Pembayaran Recurring

    Untuk mendapatkan daftar pembayaran Recurring, Anda dapat melakukannya melalui List all invoices dan menggunakan parameter tambahan. Berikut parameter tambahan yang harus dimasukkan:

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

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

    Parameter Tipe Deskripsi
    recurring_payment_id string ID dari Recurring Anda yang diberikan dari Xendit

    Payouts

    Memudahkan pengiriman dana ke pelanggan Anda, menggunakan UI yang kami sediakan ke berbagai channel pembayaran.

    Pembuatan Payout

    Endpoint: Pembuatan Payouts

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

    Parameter Request

    Contoh Permintaan Pembuatan Payout

    curl https://api.xendit.co/payouts -X POST \
    -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
    -d external_id=demo_2392329329 \
    -d amount=23000 \
    -d email=demo@xendit.co
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => 'demo_2392329329',
        'amount' => 23000
      ];
    
      $createPayout = \Xendit\Payouts::create($params);
      var_dump($createPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.createPayout({
      externalID: 'demo_2392329329',
      amount: 23000,
      email: 'demo@xendit.co'
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_2392329329");
      params.put("amount", 23000);
      params.put("email", "demo@xendit.co");
    
      Payout payout = Payout.createPayout(params);
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    createData := payout.CreateParams{
      ExternalID: "demo_2392329329",
      Amount:     23000,
      Email: "test@email.com",
    }
    
    resp, err := payout.Create(&createData)
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("created payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.create(
        external_id="payout-1595405117",
        amount=50000,
        email="test@email.co",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id dari sub-akun yang ingin Anda buatlan tokennya.

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

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

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    email
    required
    string Alamat email yang ingin Anda kirimkan notifikasi.

    Parameter Respon

    Contoh Respon Pembuatan Payout

    {
      "id": "67f1b30c-0262-4955-8777-95aa0478c2fc",
      "external_id": "demo_2392329329",
      "amount": 23000,
      "merchant_name": "First Business",
      "status": "PENDING",
      "expiration_timestamp": "2019-12-12T06:13:21.637Z",
      "created": "2019-12-09T06:13:20.363Z",
      "payout_url": "https://payout.xendit.co/web/67f1b30c-0262-4955-8777-95aa0478c2fc"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout telah dibatalkan. Status ini muncul karena payout telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari.

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

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

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

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

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

    Kode Error

    Kode Error Deskripsi
    INSUFFICIENT_BALANCE
    400
    Saldo di akun Anda tidak cukup untuk membuat payout dengan jumlah yang diinginkan.
    DUPLICATE_PAYOUT_ERROR
    400
    Payout dengan external_id yang sama telah dibuat sebelumnya.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Mendapatkan Payout

    Endpoint: Mendapatkan Payout

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

    Parameter Request

    Contoh Permintaan Mendapatkan Payout

    curl https://api.xendit.co/payouts/:id -X GET \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '00754a09-ad00-4475-b874-1dd97f83fc24';
    
      $getPayout = \Xendit\Payouts::retrieve($id);
      var_dump($getPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.getPayout({
        id: '67f1b30c-0262-4955-8777-95aa0478c2fc',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Payout payout = Payout.getPayout("my_test_id");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    resp, err := payout.Get(&payout.GetParams{
      ID: "00754a09-ad00-4475-b874-1dd97f83fc24",
    })
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("retrieved payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.get(
        id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID payout yang ingin didapatkan

    Parameter Respon

    Contoh Respon Mendapatkan Payout

    {
      "id": "00754a09-ad00-4475-b874-1dd97f83fc24",
      "external_id": "ext-121313",
      "amount": 20000,
      "merchant_name": "First Business",
      "status": "PENDING",
      "expiration_timestamp": "2019-12-12T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z",
      "payout_url": "https://payout.xendit.co/web/00754a09-ad00-4475-b874-1dd97f83fc24"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout telah dibatalkan. Status ini muncul karena payout telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari.

    Timezone: GMT+0
    created
    optional

    ISO8601

    Tanggal dan waktu yang tercatat saat payout dibuat.

    Timezone: GMT+0

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

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

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

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

    Kode Error

    Kode Error Deskripsi
    PAYOUT_NOT_FOUND_ERROR
    404
    Payout tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Penutupan Payout

    Endpoint: Penutupan Payout

    POST https://api.xendit.co/payouts/:id/void

    Anda bisa menutup sebuah payout secara langsung menggunakan endpoint ini.

    Parameter Request

    Contoh Permintaan Penutupan Payout

    curl https://api.xendit.co/payouts/:id/void -X POST \
        -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==:
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $id = '00754a09-ad00-4475-b874-1dd97f83fc24';
    
      $voidPayout = \Xendit\Payouts::void($id);
      var_dump($voidPayout);
    
    ?>
    const x = new require('xendit-node')({ secretKey: 'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==' });
    
    const { Payout } = x;
    const payoutSpecificOptions = {};
    const p = new Payout(payoutSpecificOptions);
    
    const resp = await p.voidPayout({
        id: '67f1b30c-0262-4955-8777-95aa0478c2fc',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Payout payout = Payout.voidPayout("EXAMPLE_ID");
    } catch (XenditException e) {
      e.printStackTrace();
    }
    xendit.Opt.SecretKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    
    resp, err := payout.Void(&payout.VoidParams{
      ID: "00754a09-ad00-4475-b874-1dd97f83fc24",
    })
    if err != nil {
      log.Fatal(err)
    }
    
    fmt.Printf("voided payout: %+v\n", resp)
    from xendit import Xendit
    
    api_key = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw=="
    xendit_instance = Xendit(api_key=api_key)
    Payout = xendit_instance.Payout
    
    payout = Payout.void(
        id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
    )
    print(payout)
    Parameter Header Tipe Deskripsi
    for-user-id
    optional
    string User-id yang Anda inginkan untuk membuat transaksi.

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

    Parameter Path Tipe Deskripsi
    id
    required
    string ID of the payout to retrieve

    Parameter Respon

    Example Void Payout Response

    {
      "id": "00754a09-ad00-4475-b874-1dd97f83fc24",
      "external_id": "ext-121312",
      "amount": 20000,
      "merchant_name": "First Business",
      "status": "VOIDED",
      "expiration_timestamp": "2019-12-12T06:45:30.041Z",
      "created": "2019-12-09T06:45:28.628Z"
    }
    Parameter Tipe Deskripsi
    id
    required
    string ID payout yang didapatkan dari Xendit.
    external_id
    required
    string ID payout yang digunakan di sistem Anda, ID ini dapat digunakan sebagai penghubung sebuah payout antara sistem kami dan sistem Anda.

    Maksimal: 200 karakter
    amount
    required
    integer positive Jumlah tagihan yang akan dibayarkan. Jumlah tagihan maksimal tergantung pada saldo Anda.
    merchant_name
    optional
    string Nama perusahaan atau situs Anda.
    status
    required
    string PENDING Payout telah diisukan dan sedang menunggu respon dari pelanggan anda
    VOIDED Payout telah dibatalkan. Status ini muncul karena payout telah kedaluwarsa atau di-kedaluwarsa-kan secara manual dengan melakukan permintaan pada endpoint void.
    COMPLETED Payout telah selesai.
    FAILED Payout gagal. Daftar alasan kegagalan dijelaskan pada bagian failure_reason.
    expiration_timestamp
    optional
    ISO8601 Tanggal dan waktu payout kedaluwarsa dalam standar ISO dengan default 3 hari.

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

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

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

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

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

    Kode Error

    Kode Error Deskripsi
    PAYOUT_NOT_FOUND_ERROR
    404
    Payout tidak ditemukan di dalam sistem.
    UNAUTHORIZED_MERCHANT_ERROR
    403
    Merchant ini tidak diizinkan untuk melakukan permintaan tersebut.

    Disbursement

    Dengan Xendit, anda dapat untuk mengirim dana ke bank manapun diseluruh Indonesia.

    Pembuatan Disbursement

    Endpoint: Pembuatan Disbursement

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

    Permintaan Pembuatan Disbursement (Money-out write permission)

    Contoh Permintaan Pembuatan Disbursement

    curl https://api.xendit.co/disbursements -X POST \
       -u xnd_development_O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
       -H "X-IDEMPOTENCY-KEY: unique-id-12345" \
       -d external_id=demo_1475459775872 \
       -d bank_code=BCA \
       -d account_holder_name='Bob Jones' \
       -d account_number='1231241231' \
       -d description='Reimbursement untuk sepatu' \
       -d amount=17000
    <?php
    
      use Xendit\Xendit;
      require 'vendor/autoload.php';
    
      Xendit::setApiKey('xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==');
    
      $params = [
        'external_id' => '12345',
        'amount' => 1000,
        'bank_code' => 'BCA',
        'account_holder_name' => 'RAIDY WIJAYA',
        'account_number' => '1234567890',
        'description' => 'Disbursement from Example',
        'X-IDEMPOTENCY-KEY' => 'unique-id'
      ];
    
      $createDisbursements = \Xendit\Disbursements::create($params);
      var_dump($createDisbursements);
    
    ?>
    const x = new require('xendit-node')({
      secretKey:
        'xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==',
    });
    
    const { Disbursement } = x;
    const disbursementSpecificOptions = {};
    const d = new Disbursement(disbursementSpecificOptions);
    
    const resp = await d.create({
      externalID: 'demo_1475459775872',
      amount: 17000,
      bankCode: 'BCA',
      accountHolderName: 'Bob Jones',
      accountNumber: '123124231',
      description: 'Reimbursement for shoes',
    });
    console.log(resp);
    Xendit.apiKey = "xnd_development_P4qDfOss0OCpl8RtKrROHjaQYNCk9dN5lSfk+R1l9Wbe+rSiCwZ3jw==";
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("external_id", "demo_1475459775872");
      params.put(