Paymenku Docs

Mulai cepat

Transaksi pertama Anda dalam empat langkah.

Halaman ini memakai kunci sandbox (sk_test_), sehingga tidak ada dana nyata yang berpindah.

1. Ambil kunci API

Masuk ke Dashboard Merchant, buka Settings lalu API Keys. Mulailah dengan kunci sandbox — tanpa dana nyata dan tanpa syarat KYC.

Authorization: Bearer sk_test_xxxxxxxxxxxxxxxx
Content-Type: application/json
Accept: application/json

2. Lihat kanal yang aktif

Jangan menuliskan kode kanal secara tetap di dalam kode Anda. Ambil dari API, karena kanal aktif dan fee-nya bisa berubah per merchant:

curl https://paymenku.com/api/v1/payment-channels \
  --header 'Authorization: Bearer sk_test_xxxxxxxxxxxxxxxx'

Respons memuat code, fee_mode, fee_flat, fee_percent, min_amount, dan max_amount untuk tiap kanal.

3. Buat transaksi

curl https://paymenku.com/api/v1/transaction/create \
  --request POST \
  --header 'Authorization: Bearer sk_test_xxxxxxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data '{
    "channel_code": "qris",
    "amount": 15000,
    "reference_id": "INV-20261027-001",
    "customer_name": "Budi Santoso",
    "customer_email": "budi@example.com",
    "return_url": "https://tokoanda.com/selesai"
  }'

Respons sukses berisi trx_id, pay_url, dan payment_info:

{
  "status": "success",
  "data": {
    "trx_id": "SBOX202610271005522956",
    "reference_id": "INV-20261027-001",
    "amount": "15305.00",
    "status": "pending",
    "pay_url": "https://paymenku.com/pay/SBOX202610271005522956",
    "payment_info": {
      "transaction_id": "SANDBOX-QRIS-o4fH8BHfTObhwNrG",
      "transaction_status": "pending",
      "qr_url": "https://paymenku.com/api/qris/SBOX202610271005522956",
      "qr_string": "SANDBOX-QRIS-SBOX202610271005522956-15305-ZyyCBJkg",
      "expiration_date": "2026-10-27T10:20:40+07:00"
    }
  }
}

Arahkan pelanggan ke pay_url, atau pakai payment_info untuk membangun halaman pembayaran sendiri.

4. Terima webhook

Status resmi datang lewat webhook, bukan dari polling. Daftarkan URL callback di dashboard, verifikasi tanda tangannya, lalu balas 2xx.

{
  "event": "payment.status_updated",
  "trx_id": "IDP202610271040123456",
  "reference_id": "INV-20261027-002",
  "status": "paid",
  "amount": "250000.00",
  "total_fee": "4940.00",
  "amount_received": "245060.00",
  "payment_channel": "bca_va",
  "paid_at": "2026-10-27T10:45:12+07:00",
  "is_sandbox": false
}

Rumus tanda tangan dan contoh kodenya ada di Webhook.

Menguji pembayaran di sandbox

Transaksi sandbox tidak pernah dibayar sungguhan. Respons memuat simulator_url — buka tautan itu untuk menandai transaksi sebagai lunas dan memicu webhook.

Jangan menanamkan kode kanal

Kanal aktif berbeda per merchant. Selalu ambil daftarnya dari GET /payment-channels saat menyusun halaman checkout.

Langkah berikutnya

On this page