Lompat ke konten

Pembayaran Langsung

Pembayaran langsung adalah payment untuk satu payment_method spesifik — QRIS atau virtual account bank — tanpa halaman hosting Baiyar yang terlibat. Gunakan ini saat Anda ingin menampilkan kode QR atau nomor virtual account di dalam aplikasi Anda sendiri, alih-alih mengirim pelanggan ke payment link.

POST /v1/payments
Idempotency-Key: order-2026-0002-attempt-1
{
"project_id": "018f1f29-7c00-73e4-a310-744d2167fc60",
"reference": "ORDER-2026-0002",
"amount": 15000,
"payment_method": { "type": "qris" }
}

Idempotency-Key wajib — string unik yang Anda buat sendiri per percobaan pembayaran (UUID cocok untuk ini). Mengulang request dengan key yang sama dan body identik akan mengembalikan payment yang sama (200) alih-alih membuat duplikat (201); mengulang dengan body berbeda ditolak dengan 409. Ini membuat retry aman saat terjadi timeout jaringan tanpa risiko double charge.

Response menyertakan instructions, bentuknya berbeda per metode:

  • QRISqr_string (payload QRIS mentah, jika Anda ingin menggambar QR code sendiri) dan qr_image_url (gambar QR code siap tampil sebagai data: URI).
  • Virtual accountbank_name, virtual_account_number, dan payment_steps (instruksi berbahasa manusia yang bisa Anda tampilkan apa adanya).
Response QRIS
{
"id": "018f1f29-9b21-73e4-a310-744d2167fca1",
"project_id": "018f1f29-7c00-73e4-a310-744d2167fc60",
"reference": "ORDER-2026-0002",
"amount": 15000,
"currency": "IDR",
"fee_bearer": "merchant",
"fee_amount": 105,
"merchant_net": 14895,
"status": "pending",
"checkout_url": "https://checkout.baiyar.id/sandbox/payments/sandbox_018f...",
"payment_method": { "type": "qris" },
"instructions": {
"qr_string": "BAIYAR-SANDBOX-QRIS|sandbox_018f...|15000|IDR",
"qr_image_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
},
"expires_at": "2026-09-02T09:15:00Z",
"created_at": "2026-09-02T09:00:00Z"
}
Response virtual account (bagian instructions saja)
{
"bank_name": "Bank BNI",
"virtual_account_number": "8808123456789",
"payment_steps": [
"Buka mobile banking.",
"Pilih transfer virtual account.",
"Masukkan nomor virtual account."
]
}

amount dalam IDR (rupiah utuh). Minimumnya tergantung metode:

Metode Minimum nominal
qris 100
virtual_account 10.000

expires_in_minutes opsional. Default-nya 15 menit untuk qris dan 24 jam untuk virtual_account, dan dibatasi maksimal 60 menit untuk qris dan 7 hari untuk virtual_account.

Polling GET /v1/payments/{paymentID} untuk status (pending, processing, succeeded, failed, expired), atau — lebih baik — atur webhook project supaya Baiyar memberi tahu Anda secara otomatis. Lihat Status Pembayaran untuk arti tiap nilainya dan Webhooks untuk notifikasi otomatis.