API NusaPay
Bangun sistem pembayaran dan pencairan dana tak terbatas dengan REST API yang dirancang untuk kecepatan dan keandalan. Dokumentasi ini memberikan panduan lengkap untuk berintegrasi dengan ekosistem kami.
Satu Endpoint Universal
Seluruh request API dipusatkan melalui satu endpoint (Gateway). Sistem mendeteksi tujuan request Anda berdasarkan parameter "action" di dalam body JSON.
https://yangcepatx.com/api
Otentikasi & Kredensial
Setiap request ke API wajib menyertakan otentikasi menggunakan metode Bearer Token. Anda dapat menemukan kunci API Anda di menu "Kunci API" pada Dasbor Merchant.
Server Key (Secret)
Gunakan kunci ini (sk_live_...) pada Header Authorization untuk memanggil endpoint Charge, Check Status, dan Withdraw. Wajib dijaga kerahasiaannya.
Client Key (Public)
Kunci ini (ck_live_...) digunakan untuk integrasi sisi frontend (JS/Mobile). Saat ini hanya sebagai identifier publik, tidak untuk eksekusi API.
Hati-hati: Jangan pernah meng-hardcode Server Key di dalam kode aplikasi mobile (Android/iOS) atau browser Javascript. Jika kunci ini bocor, pihak lain dapat menarik dana Anda.
Authorization: Bearer sk_live_a1b2c3d4e5f6...
Content-Type: application/json
Accept: application/json
Buat Tagihan (Charge)
Endpoint ini akan men-generate kode QRIS dinamis. Anda akan menerima string QR mentah yang bisa Anda olah sendiri, maupun URL gambar QR yang sudah siap ditampilkan ke pelanggan Anda.
Body Parameter (JSON)
actionRequired
"charge".gross_amountRequired
Integer
payment_typeRequired
String
"qris".curl -X POST https://yangcepatx.com/api \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "charge",
"payment_type": "qris",
"gross_amount": 150000
}'
{
"status_code": "201",
"status_message": "Berhasil membuat transaksi",
"transaction_id": "NUSA-A1B2C3",
"gross_amount": 150000,
"net_amount_estimated": 147750, // Uang bersih yang akan masuk saldo
"payment_type": "qris",
"currency": "IDR",
"qris_data": {
"reference": "UPAY-998877",
"qr_string": "00020101021126620014ID.CO.NMS...",
"qr_image_url": "https://api.qrserver.com/v1/create-qr-code/..."
}
}
Cek Status Transaksi
Jika server Anda melewatkan notifikasi Webhook, Anda dapat secara aktif (polling) memanggil endpoint ini untuk mengetahui status pembayaran terkini.
Body Parameter (JSON)
actionRequired
"check_status".transaction_idRequired
curl -X POST https://yangcepatx.com/api \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "check_status",
"transaction_id": "NUSA-A1B2C3"
}'
{
"status_code": "200",
"transaction_id": "NUSA-A1B2C3",
"payment_status": "PAID", // PENDING, PAID, FAILED
"gross_amount": 150000,
"net_amount": 147750
}
Penarikan Dana (Withdrawal)
Endpoint tingkat lanjut bagi mitra B2B (Aggregator/Platform) yang ingin mengotomatisasi pengiriman uang / pencairan dana (*disbursement*) langsung ke rekening pelanggan mereka tanpa harus login ke dashboard.
Penarikan via API akan mengurangi Saldo Settled Anda dan diproses secara langsung oleh sistem perbankan. Pastikan server Anda aman saat memanggil perintah ini.
Body Parameter (JSON)
actionRequired
"withdraw".amountRequired
bank_codeRequired
"BCA", "MANDIRI", "DANA").account_numberRequired
account_nameRequired
<?php
use Illuminate\Support\Facades\Http;
// Lakukan validasi saldo user Anda sebelum memanggil API ini
$response = Http::withToken('sk_live_YOUR_KEY')
->post('https://yangcepatx.com/api', [
'action' => 'withdraw',
'amount' => 500000,
'bank_code' => 'BCA',
'account_number' => '8912345678',
'account_name' => 'PT MAJU JAYA'
]);
return $response->json();
{
"status_code": "200",
"status_message": "Permintaan penarikan diproses oleh pusat.",
"transaction_id": "WD-API-8F9A",
"amount_sent_to_bank": 500000,
"admin_fee": 5000,
"total_deducted": 505000, // Saldo Settled yang terpotong total
"status": "PROCESSING" // Tunggu Webhook untuk status akhir
}
Menerima Webhook (Callbacks)
Daripada melakukan *polling* terus-menerus, NusaPay akan mengirimkan HTTP POST Request secara asinkron ke server Anda (*Callback URL*) segera setelah pembayaran pelanggan masuk, atau setelah penarikan dana berhasil diproses oleh bank.
Verifikasi Signature (Anti-Hacker)
Untuk memvalidasi bahwa Webhook benar-benar sah dikirim oleh server NusaPay (dan bukan peretas), kami menyisipkan HTTP Header khusus: X-NusaPay-Signature.
Anda WAJIB mencocokkan signature tersebut dengan menghitungnya sendiri menggunakan algoritma HMAC-SHA256 dari gabungan:
hash('sha256', RAW_JSON_BODY + SERVER_KEY)
Sistem Webhook kami memiliki Auto-Retry Engine. Jika server Anda membalas selain HTTP 200 (misalnya Error 500 atau Timeout), kami akan mencoba mengirim ulang secara eksponensial (1 menit, 3 menit, 5 menit, dst) hingga batas maksimal.
{
"event": "payment.success", // atau "withdrawal.success" / "withdrawal.failed"
"data": {
"transaction_id": "NUSA-A1B2C3",
"provider_reference": "UPAY-998877",
"gross_amount": 150000,
"fee": 2250,
"net_amount": 147750,
"status": "success",
"timestamp": "2026-06-25 15:30:00"
}
}
<?php
// 1. Ambil Signature dari Header
$signature_header = $_SERVER['HTTP_X_NUSAPAY_SIGNATURE'];
// 2. Ambil Body JSON mentah persis apa adanya
$raw_payload = file_get_contents('php://input');
$my_server_key = 'sk_live_YOUR_KEY';
// 3. Hitung Hash secara lokal
$calculated = hash('sha256', $raw_payload . $my_server_key);
// 4. Bandingkan!
if ($calculated === $signature_header) {
// SAH! Proses transaksi ke database Anda
http_response_code(200);
echo "OK";
} else {
// PALSU! Jangan diproses.
http_response_code(403);
}