Event
Webhook
Terima payment.paid bertanda tangan saat pembayaran terkonfirmasi.
Atur satu URL webhook di dashboard (menu Developer). Saat pembayaran terkonfirmasi, kami mengirim POST dengan payload:
{
"id": "evt_...",
"type": "payment.paid",
"created_at": "2026-08-11T12:05:00+07:00",
"data": {
"payment_request_id": "payreq_9b2f...",
"external_id": "ORD-1234",
"merchant_ref": "INV-2026-001",
"amount": 150000,
"currency": "IDR",
"customer": { "name": "Budi", "email": "budi@toko.dev" },
"paid_at": "2026-08-11T12:04:58+07:00"
}
}Pengiriman bersifat at-least-once: event yang sama bisa terkirim lebih dari sekali dan selalu membawa id yang sama — dedupe berdasarkan id. Endpoint Anda harus menjawab 2xx; selain itu kami mencoba ulang dengan exponential backoff hingga ±34 jam. URL webhook wajib https dan mengarah ke alamat publik.
Verifikasi signature
Setiap pengiriman ditandatangani HMAC-SHA256 atas body mentah, di header Kasera-Signature. Id event juga ada di Kasera-Event-Id.
// Node.js
const crypto = require("crypto");
function verify(rawBody, signatureHeader, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signatureHeader),
Buffer.from(expected)
);
}Verifikasi signature sebelum memproses payload. Gunakan body mentah, bukan hasil parse-ulang JSON.