Buat Payment
POST
/api/v1/payment/create
Header
Content-Type: application/json
Authorization: Bearer API_KEY
Request Body
{
"amount": 50000,
"description": "Order #123",
"customer_name": "John",
"customer_email": "j@x.co",
"callback_url": "https://...",
"metadata": { "order_id": "123" }
}
Response
{
"success": true,
"data": {
"invoice_id": "NVP-20260909-ABCD1234",
"amount": 50000,
"fee": 500,
"amount_charged": 50500,
"fee_mode": "buyer",
"status": "pending",
"payment_method": "QRIS",
"qr_url": "https://novpay.id/api/v1/qr/NVP-xxx.png",
"qr_string": "00020101021226...",
"qr_content": "00020101021226...",
"checkout_url": "https://novpay.id/pay/NVP-xxx",
"payment_url": "https://novpay.id/pay/NVP-xxx",
"expired_at": "2026-09-09 15:30:00",
"created_at": "2026-09-09 15:15:00"
}
}
Catatan:
• qr_url — URL gambar PNG QR code. Selalu tersedia untuk semua gateway. Bisa langsung di-download atau ditampilkan sebagai <img>.
• qr_string / qr_content — Raw payload QRIS (EMVCo string). Bisa dirender jadi QR code menggunakan library seperti qrcode (Node.js) atau QRious (browser). Bernilai null jika gateway return gambar saja.
• checkout_url / payment_url — Link halaman pembayaran NovPay (bisa dibuka di browser, sudah ada QR + countdown).
• Gunakan field yang paling cocok untuk kebutuhan kamu. Semua field selalu tersedia di setiap response.
Cek Status
GET
/api/v1/payment/status/{invoice_id}
Status: pending | success | expired | failed
Response
{
"success": true,
"data": {
"invoice_id": "NVP-20260909-ABCD1234",
"amount": 50000,
"fee": 500,
"amount_charged": 50500,
"net_amount": 50000,
"fee_mode": "buyer",
"status": "success",
"payment_method": "QRIS",
"qr_url": "https://novpay.id/api/v1/qr/NVP-xxx.png",
"qr_string": "00020101021226...",
"qr_content": "00020101021226...",
"checkout_url": "https://novpay.id/pay/NVP-xxx",
"payment_url": "https://novpay.id/pay/NVP-xxx",
"customer_name": "John Doe",
"customer_email": "john@example.com",
"description": "Order #123",
"metadata": { "order_id": "123" },
"paid_at": "2026-09-09 15:20:00",
"expired_at": "2026-09-09 15:30:00",
"created_at": "2026-09-09 15:15:00"
}
}
QR Code Image
GET
/api/v1/qr/{invoice_id}.png
Endpoint publik (tanpa auth) untuk mendapatkan gambar QR code dalam format PNG. Berguna jika kamu butuh URL gambar QR yang bisa langsung di-embed di <img> tag atau di-download.
Parameter
invoice_id
size
Contoh
<img src="https://novpay.id/api/v1/qr/NVP-20260909-ABCD1234.png" />
<img src="https://novpay.id/api/v1/qr/NVP-20260909-ABCD1234.png?size=300" />
curl -o qr.png https://novpay.id/api/v1/qr/NVP-20260909-ABCD1234.png
Webhook
Event: payment.success — POST ke webhook URL kamu saat pembayaran berhasil.
Header: X-Signature (HMAC dengan webhook secret)
Payload
{
"event": "payment.success",
"data": {
"invoice_id": "NVP-20260909-ABCD1234",
"amount": 50000,
"fee": 500,
"net_amount": 50000,
"status": "success",
"payment_method": "QRIS",
"paid_at": "2026-09-09 15:20:00",
"customer_name": "John Doe"
}
}
Verifikasi Signature
const hash = crypto.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody).digest('hex');
if (hash !== req.headers['x-signature']) reject();
$hash = hash_hmac('sha256', $rawBody, $webhookSecret);
if ($hash !== $_SERVER['HTTP_X_SIGNATURE']) reject();
import hmac, hashlib
expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
if expected != headers['X-Signature']: reject()
Mau Docs Lebih Lengkap?
Login ke dashboard buat akses contoh kode (Node.js, Python, PHP), API Key, dan dokumentasi lengkap lainnya.
Masuk ke Dashboard