Terima pembayaran QRIS dan Virtual Account tanpa menghubungkan akun e-wallet sendiri.
Semua endpoint membutuhkan header x-api-key. Lihat Authentication.
Payment Gateway memungkinkan Anda menerima pembayaran tanpa punya akun e-wallet atau merchant sendiri. Pembayaran ditampung di akun milik platform, hasilnya masuk ke saldo gateway Anda, dan dicairkan ke rekening bank Anda.
Bedanya dengan Payments API biasa:
| Akun sendiri | Payment Gateway | |
|---|---|---|
| Akun penerima | Akun Anda, dihubungkan via Accounts API | Akun platform, dipilih otomatis |
walletAccountId | UUID akun Anda | "GATEWAY" |
| Uang masuk | Langsung ke akun Anda | Ke saldo gateway, cair H+1 hari kerja |
| Biaya | Tidak ada biaya gateway | VA Rp 3.000, QRIS 0,7% + Rp 200 |
| Perlu persetujuan | Tidak | Ya, diajukan lewat dashboard |
Aktivasi
Payment Gateway harus disetujui admin sebelum bisa dipakai. Ajukan lewat dashboard → Payment Gateway → Ajukan Akses, isi data usaha Anda, lalu tunggu peninjauan.
Status pengajuan bisa dibaca lewat API:
| Status | Keterangan |
|---|---|
NONE | Belum pernah mengajukan |
PENDING | Pengajuan sedang ditinjau admin |
APPROVED | Aktif, gateway siap dipakai |
REJECTED | Ditolak atau dinonaktifkan — alasannya ada di field note |
GET /api/v1/gateway
Status akses, metode yang tersedia, saldo, dan tarif — dalam satu request.
Response 200
Penjelasan Field Respons
| Field | Keterangan |
|---|---|
access.status | Status pengajuan Anda (lihat tabel di atas) |
access.feeToCustomer | true = biaya ditambahkan ke tagihan pembeli, false = biaya dipotong dari nominal Anda. Diatur di dashboard |
walletAccountId | Nilai yang dipakai saat membuat pembayaran. Selalu "GATEWAY" |
methods | Metode yang bisa dilayani gateway saat ini. Kosong jika belum disetujui |
balance.settled | Sudah melewati H+1 hari kerja, siap ditarik |
balance.pending | Sudah dibayar, masih menunggu settlement |
balance.onHold | Terkunci oleh penarikan yang sedang diproses |
balance.available | Yang benar-benar bisa ditarik sekarang (settled − onHold) |
fee | Biaya flat per transaksi Virtual Account, dalam rupiah |
qrisFee | Biaya QRIS: rate × nominal + flat, dibulatkan ke rupiah |
minWithdrawal | Minimum penarikan |
Endpoint ini sengaja tidak mengembalikan ID akun penampung. Akun mana yang menerima sebuah pembayaran ditentukan server saat pembayaran dibuat, jadi tidak ada yang perlu Anda pilih.
Contoh
Membuat Pembayaran Gateway
Sama persis dengan POST /api/v1/payments, hanya walletAccountId yang diisi "GATEWAY".
Metode dipilih pembeli
Perhatikan contoh di atas tidak mengirim type. Untuk gateway ini cara yang dianjurkan: metode dipilih pembeli sendiri di halaman pembayaran, dari daftar yang benar-benar bisa dilayani saat itu.
Responsnya belum punya nominal akhir maupun QR, karena belum ada yang dipilih:
Arahkan pembeli ke paymentUrl. Begitu mereka memilih metode, server menentukan akun penampung, kode unik, dan QR-nya. Anda tahu hasil akhirnya lewat Webhooks event payment.completed, atau dengan polling status pembayaran.
Menentukan metode sendiri
Kirim type kalau Anda memang ingin mengunci satu metode. Responsnya lengkap seperti pembayaran biasa — termasuk totalAmount, accountNumber, dan qrisImage.
DIRECT tidak tersedia di gateway dan akan ditolak dengan 400. Transfer langsung tidak membawa identitas pembayaran apa pun selain nominalnya, sementara akun penampung dipakai bersama banyak merchant.
Biaya
| Metode | Biaya |
|---|---|
VA-BCA, VA-MANDIRI, VA-PERMATA | Rp 3.000 per transaksi |
QRIS, QRIS-DYNAMIC | 0,7% × nominal + Rp 200 |
Biaya hanya berlaku untuk pembayaran gateway. Kalau Anda memakai akun sendiri, tidak ada biaya gateway sama sekali.
Siapa yang menanggung
Diatur di dashboard → Payment Gateway → Pengaturan → Biaya, dan terbaca di access.feeToCustomer.
Ditanggung merchant (feeToCustomer: false, default) — pembeli membayar persis nominal yang Anda minta, biaya dipotong dari saldo Anda:
Dibebankan ke pembeli (feeToCustomer: true) — tagihan dinaikkan sebesar biaya, saldo Anda bertambah persis sebesar nominal yang Anda minta:
Saat feeToCustomer: true, field amount pada respons dan webhook adalah nominal setelah dinaikkan, bukan angka yang Anda kirim. Nominal asli Anda tersimpan di metadata.baseAmount. Cocokkan order dengan orderId, bukan dengan nominal.
Kenaikannya bukan sekadar nominal + biaya: biaya QRIS dihitung dari total yang ditagihkan, sementara total itu sudah termasuk biaya. Server menaikkan sampai bagian Anda utuh — untuk Rp 1.000.000 kenaikannya Rp 7.251, bukan Rp 7.200.
Karena tiap metode punya biaya berbeda, tagihan akhir baru pasti setelah pembeli memilih metode. Halaman pembayaran menampilkan total per metode sebelum pembeli menentukan pilihannya.
Saldo dan Pencairan
Uang dari pembayaran gateway tidak langsung bisa ditarik. Alurnya:
Pembayaran selesai
Nominal masuk ke balance.pending.
Melewati H+1 hari kerja
Pindah ke balance.settled dan ikut terhitung di balance.available. Pembayaran hari Jumat, Sabtu, dan Minggu sama-sama cair hari Senin.
Ajukan penarikan
Lewat dashboard → Payment Gateway → Tarik Dana, minimum Rp 50.000. Nominalnya pindah ke balance.onHold sampai admin mentransfernya.
Penarikan hanya lewat dashboard, belum ada endpoint API-nya. Saldonya sendiri bisa dipantau kapan saja lewat GET /api/v1/gateway.
Errors
| Status | Keterangan |
|---|---|
400 | DIRECT dipakai di gateway, nominal di bawah minimum metode, atau nominal lebih kecil dari biaya |
401 | API key tidak valid atau tidak ada |
403 | Akses gateway Anda belum disetujui |
503 | Tidak ada akun penampung yang bisa melayani metode tersebut saat ini |
© 2026 PT. Cobra Code Indonesia. All rights reserved.
Last updated: 8/31/2026