Lewati ke konten utama

Bagaimana membuat tagihan pembayaran?

Kirim POST /payment berisi nominal, kode metode, dan data pembeli. Balasan 201 Created memuat invoice, payment_link ke halaman bayar SekaliPay, dan detail bayar sesuai metode. Tagihan berlaku 30 menit.

Isi halaman ini dicocokkan dengan kode API per 16 Oktober 2026.

Ke mana permintaan dikirim?#

POST/api/v1/gateway/payment
Batas per menit:
5 permintaan per menit per API key
Tanda tangan:
Wajib di kedua mode

Field apa saja yang dikirim?#

merchant_ref_idstringWajib
ID pesanan dari sistem Anda, maksimal 191 karakter, unik per akun (akun lain boleh memakai ref yang sama). Pakai huruf, angka, -, dan _ saja supaya aman di URL cek status.
amountintegerWajib
Nominal yang Anda terima, dalam rupiah. Minimal 100 dan harus di antara min_amount dan max_amount metode.
payment_codestringWajib
Kode metode dari GET /payment-methods. Metode harus aktif di akun Anda.
customer_namestringWajib
Nama pembeli, maksimal 100 karakter.
customer_emailstringWajib
Email pembeli yang valid, maksimal 100 karakter.
customer_phonestringWajib
Nomor HP pembeli, maksimal 20 karakter.
callback_urlstringOpsional
URL webhook khusus transaksi ini, maksimal 500 karakter. Harus alamat publik; localhost dan IP privat ditolak. Kosong berarti URL di dasbor.
return_urlstringOpsional
Tujuan browser pembeli setelah membayar, maksimal 500 karakter. Kosong berarti URL di dasbor. Lihat Pengalihan pembeli.
metadataobjectOpsional
Data bebas untuk keperluan Anda. Disimpan bersama transaksi, tetapi tidak dikirim balik di respons API maupun webhook.

Berapa yang dibayar pembeli?#

amount adalah yang Anda terima. Biaya metode ditambahkan di atasnya, jadi pembeli membayar total = amount + fee. Pada contoh di bawah, Anda menerima Rp 150.000 dan pembeli membayar Rp 151.500. Biaya tiap metode ada di halaman biaya.

Seperti apa contoh permintaannya?#

BODY='{"merchant_ref_id":"ORDER-2026-00184","amount":150000,"payment_code":"QRIS","customer_name":"Budi Santoso","customer_email":"[email protected]","customer_phone":"081234567890","callback_url":"https://toko-anda.id/webhook/sekalipay","return_url":"https://toko-anda.id/checkout/selesai"}'
SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SEKALIPAY_SECRET_KEY" | sed 's/^.* //')

curl -X POST https://sekalipay.com/api/v1/gateway/payment \
  -H "X-API-Key: $SEKALIPAY_API_KEY" \
  -H "X-Signature: $SIGNATURE" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data-raw "$BODY"

Contoh di atas untuk mode IP Whitelist. Untuk Enhanced HMAC, pakai helper di Autentikasi.

Apa isi respons sukses?#

201 Created
{
  "status": true,
  "message": "OK",
  "data": {
    "merchant_ref_id": "ORDER-2026-00184",
    "invoice": "SPY1791446400K3QZ",
    "amount": 150000,
    "fee": 1500,
    "total": 151500,
    "payment_code": "QRIS",
    "payment_link": "https://sekalipay.com/payment/SPY1791446400K3QZ",
    "qr_link": "https://sekalipay.com/payment/SPY1791446400K3QZ/qris",
    "virtual_account": null,
    "checkout_url": null,
    "payment_guide": null,
    "expired_at": "2026-10-08T08:30:00.000000Z",
    "status": "pending",
    "is_sandbox": false
  }
}
invoicestring
Nomor invoice SekaliPay, mis. SPY1791446400K3QZ. Simpan untuk pencocokan dan saat menghubungi dukungan.
amountinteger
Nominal yang Anda terima.
feeinteger
Biaya transaksi, dibayar pembeli.
totalinteger
Yang harus dibayar pembeli.
payment_linkstring
Halaman bayar SekaliPay. Selalu terisi; cara termudah adalah mengarahkan pembeli ke sini.
qr_linkstring | null
Gambar QR untuk metode QRIS.
virtual_accountstring | null
Nomor VA untuk metode virtual account.
checkout_urlstring | null
Tautan ke aplikasi atau halaman e-wallet.
payment_guidestring | null
Petunjuk bayar dalam HTML bila mitra menyediakannya. Sanitasi sebelum ditampilkan.
expired_atstring
Batas bayar, ISO 8601 UTC, 30 menit setelah tagihan dibuat.
statusstring
Selalu pending saat dibuat.
is_sandboxboolean
true bila dibuat dalam mode sandbox.

Detail bayar yang terisi bergantung metodenya; yang tidak relevan bernilai null.

Bagaimana mengulang permintaan dengan aman?#

merchant_ref_id adalah kunci idempotensi. Bila permintaan Anda timeout dan hasilnya tidak diketahui, kirim ulang dengan ref yang sama. Kalau tagihannya sudah terbuat, balasannya 409 PAYMENT_ALREADY_EXISTS berisi data tagihan itu, bukan tagihan kedua.

409 Conflict
{
  "status": false,
  "message": "PAYMENT_ALREADY_EXISTS",
  "data": {
    "merchant_ref_id": "ORDER-2026-00184",
    "invoice": "SPY1791446400K3QZ",
    "amount": 150000,
    "fee": 1500,
    "total": 151500,
    "payment_code": "QRIS",
    "payment_link": "https://sekalipay.com/payment/SPY1791446400K3QZ",
    "qr_link": "https://sekalipay.com/payment/SPY1791446400K3QZ/qris",
    "expired_at": "2026-10-08T08:30:00.000000Z",
    "status": "pending"
  }
}

Permintaan yang ditolak dengan galat lain (4xx selain 409, atau 5xx) tidak menyimpan apa pun, jadi ref yang sama boleh dipakai lagi.

Galat apa yang khusus endpoint ini?#

HTTPKodeArti
403MERCHANT_KYC_INCOMPLETEVerifikasi merchant belum lengkap. data.onboarding_url menunjuk halaman untuk melengkapinya.
400PAYMENT_METHOD_NOT_AVAILABLEKode metode tidak dikenal, atau metodenya sedang nonaktif.
403PAYMENT_METHOD_NOT_ENABLEDMetode ada tetapi belum diaktifkan di akun Anda.
400AMOUNT_OUT_OF_RANGENominal di luar rentang metode; data memuat min_amount dan max_amount.
409PAYMENT_ALREADY_EXISTSmerchant_ref_id ini sudah punya tagihan; data berisi tagihan tersebut.
409DUPLICATE_REF_IDDua permintaan dengan ref yang sama tiba bersamaan dan yang ini kalah. Cek status ref tersebut.
500PAYMENT_GATEWAY_ERRORMitra pembayaran menolak atau tidak menjawab. Tidak ada yang tersimpan; coba lagi dengan ref yang sama atau metode lain.
500INTERNAL_SERVER_ERRORKesalahan di sisi kami; detailnya tidak dikirim. Coba lagi, atau hubungi dukungan dengan waktu kejadian dan merchant_ref_id.

Ditambah galat validasi 422 dan galat autentikasi; lihat Kode galat.

Siap memakai kunci Anda sendiri?

Masuk ke dasbor merchant untuk mengambil API key dan secret key, mengatur mode akses dan URL webhook, serta mengunduh koleksi Postman berisi kunci akun Anda.

Masuk ke dasbor