PAYKASIR API
Home Dashboard Merchant
STATUS: ONLINE (v2)
STATUS API: BEROPERASI (0% POTONGAN)

PayKasir Developer Docs

Panduan lengkap integrasi Payment Gateway Mandiri berbasis PayHook Android. Buat QRIS dinamis otomatis dengan verifikasi kode unik nominal, tanpa potongan biaya perantara, dan dana masuk 100% langsung ke rekening Anda.

Base URL API

http://localhost:3000

Gunakan URL di atas sebagai endpoint utama untuk memanggil seluruh API PayKasir.

API v2 Wajib Digunakan

Semua endpoint pembayaran PayKasir mewajibkan header X-API-Version: v2. Request tanpa header versi ini akan menerima respon penolakan HTTP 426 API_VERSION_REQUIRED.

Mulai Cepat (Quickstart)

1
Dapatkan Kredensial API Key Anda Gunakan API Key default sandbox: pk_live_paykasir_7f9b82c10a4e3 untuk pengujian integrasi.
2
Autentikasi Setiap Request Sertakan header x-api-key dan X-API-Version: v2 pada setiap panggilan API pembayaran.
3
Sambungkan PayHook Android Listener Pasang aplikasi PayHook di HP Android Anda untuk membaca mutasi uang masuk dan memicu callback otomatis.
Otomatisasi 100% Pencocokan nominal unik 3 digit mendeteksi pembayaran lunas seketika tanpa upload bukti transfer.
Keamanan HMAC-SHA256 Anti-spoofing dan anti-replay attack dengan toleransi selisih waktu 300 detik.
0% Fee / Tanpa Potongan Pembayaran masuk langsung ke rekening bank atau e-wallet Anda tanpa dipotong pihak perantara.
QRIS Dinamis Asli Menghasilkan string EMVCo dan gambar QRIS PNG yang dapat discan langsung dari seluruh aplikasi perbankan.

Autentikasi (Authentication)

Semua permintaan endpoint pembayaran mewajibkan pengiriman API Key dan versi API pada Header HTTP:

HTTP HEADERS
Content-Type: application/json x-api-key: pk_live_paykasir_7f9b82c10a4e3 X-API-Version: v2
Wajib Login untuk Mendapatkan API Key:

Setiap merchant wajib memiliki akun dan login ke Dashboard Merchant untuk menerbitkan, melihat, dan me-regenerate kunci x-api-key pribadi.

Buka Dashboard Merchant & Ambil API Key →

Create Payment (Buat Tagihan QRIS)

POST
/api/payment/create

Parameter Body (JSON)

Parameter Tipe Wajib Keterangan
amount Integer Ya Nominal transaksi dasar (minimal Rp 1.000). Total bayar akhir akan ditambahkan kode unik.
order_id String Ya ID unik pesanan dari toko/aplikasi Anda (1–64 karakter alfanumerik, misal INV-202611-001).
callback_url String Opsional URL webhook toko Anda untuk menerima callback otomatis saat pembayaran terverifikasi lunas.

Contoh Request

JSON REQUEST
{ "amount": 10000, "order_id": "INV001", "callback_url": "https://website-anda.com/api/payment/callback" }

Contoh Response

JSON RESPONSE (200 OK)
{ "success": true, "transaction_id": "PK-1774495560001", "order_id": "INV001", "amount": 10070, "nominal": 10000, "admin_fee": 0, "unique_code": 70, "total": 10070, "status": "pending", "qr_string": "00020101021226650014ID.LINKAJA.WWW01189360091800000000000215PK-1774495560001...", "qr_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAU...", "created_at": "2026-11-14T05:30:00.000Z", "expires_at": "2026-11-14T06:30:00.000Z", "branding": { "provider": "paykasir.id", "label": "Powered by paykasir.id", "badge_text": "PayKasir x PayHook", "caption_text": "QRIS disediakan & diamankan oleh PayKasir & PayHook", "logo_url": "" } }
Rumus Total Pembayaran:
total = nominal + admin_fee + unique_code

QRIS dinamis dibentuk menggunakan nilai total persis. Pembeli wajib mentransfer jumlah pas (termasuk kode unik) agar pembayaran lunas secara otomatis tanpa campur tangan admin.

Check Status (Pengecekan Status Transaksi)

POST
/api/payment/status

Parameter Body

Parameter Tipe Keterangan
transaction_id String ID transaksi dari PayKasir (contoh: PK-1774495560001).

Contoh Request

JSON REQUEST
{ "transaction_id": "PK-1774495560001" }

Contoh Response

JSON RESPONSE (200 OK)
{ "success": true, "transaction_id": "PK-1774495560001", "order_id": "INV001", "status": "paid", "amount": 10070, "paid_at": "2026-11-14T05:45:10.000Z" }

PayHook Engine (Konfigurasi Android)

PayHook adalah mesin notifikasi Android yang bertindak sebagai jembatan pembaca dana masuk. PayHook membaca notifikasi mutasi rekening (BCA, Mandiri, BRI, BNI, DANA, GoPay) dari HP toko Anda dan meneruskannya seketika ke webhook PayKasir.

Pengaturan di Aplikasi PayHook Nilai Konfigurasi
URL Webhook http://localhost:3000/api/webhook/payhook (atau domain publik HTTPS Anda)
Tipe Autentikasi Bearer
Token Rahasia paykasir_secret_token_2026
Secret Key (HMAC) paykasir_hmac_secret_key_8899
Aplikasi Dipantau Centang BCA Mobile, Livin' Mandiri, BRImo, BNI, DANA, GoPay, OVO
Tips Performa Android:

Beri izin Notification Access pada PayHook, nonaktifkan Battery Optimization, dan kunci aplikasi PayHook di Recent Apps agar listener tidak mati saat layar HP mati.

Webhook Callback ke Server Toko

Ketika notifikasi uang masuk tertangkap oleh PayHook dan nominalnya cocok dengan tagihan, PayKasir secara otomatis menembak webhook callback via HTTP POST ke callback_url toko Anda.

POST
/callback/payment

Payload Callback yang Diterima Toko

JSON WEBHOOK BODY
{ "transaction_id": "PK-1774495560001", "order_id": "INV001", "status": "paid", "amount": 10070, "paid_at": "2026-11-14T05:45:10.000Z" }

Server toko Anda wajib merespons status HTTP 200 OK dengan body {"status":"ok"} sebagai konfirmasi penerimaan callback.

Watermark & Branding API

Ambil konfigurasi label dan branding QRIS publik tanpa memerlukan otentikasi API Key:

GET
/api/watermark

Contoh Response

JSON RESPONSE
{ "success": true, "watermark": { "enabled": true, "providerName": "paykasir.id", "badgeText": "PayKasir x PayHook", "captionText": "QRIS disediakan & diamankan oleh PayKasir & PayHook", "logoUrl": "" } }

Daftar Kode Kesalahan (Error Codes)

400
BAD_REQUEST / INVALID_PARAMETER
Parameter amount kurang dari Rp 1.000 atau order_id kosong.
401
UNAUTHORIZED
API Key tidak disertakan di header x-api-key atau Bearer token PayHook salah.
404
TRANSACTION_NOT_FOUND
ID transaksi tidak ditemukan pada sistem database PayKasir.
408
TIMESTAMP_EXPIRED
Header X-Payhook-Timestamp berselisih lebih dari 300 detik (Anti-Replay).
422
UNPROCESSABLE_ENTITY
Payload JSON tidak dapat di-parse atau field wajib event_id tidak ada.
426
API_VERSION_REQUIRED
Header X-API-Version: v2 wajib disertakan pada permintaan.

Contoh Kode Implementasi

cURL (Create Payment)

BASH / CURL
curl -X POST http://localhost:3000/api/payment/create \ -H "Content-Type: application/json" \ -H "x-api-key: pk_live_paykasir_7f9b82c10a4e3" \ -H "X-API-Version: v2" \ -d '{"amount": 10000, "order_id": "INV001", "callback_url": "https://website-anda.com/callback"}'

Node.js (Axios)

JAVASCRIPT / NODE.JS
const axios = require('axios'); async function createPayment() { try { const response = await axios.post('http://localhost:3000/api/payment/create', { amount: 10000, order_id: 'INV001' }, { headers: { 'Content-Type': 'application/json', 'x-api-key': 'pk_live_paykasir_7f9b82c10a4e3', 'X-API-Version': 'v2' } }); console.log('QRIS Berhasil Dibuat:', response.data.total); console.log('Gambar QRIS (Data URL):', response.data.qr_image); } catch (err) { console.error('API Error:', err.response?.data || err.message); } } createPayment();

PHP Native (cURL)

PHP
<?php $payload = json_encode([ 'amount' => 10000, 'order_id' => 'INV001' ]); $ch = curl_init('http://localhost:3000/api/payment/create'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'x-api-key: pk_live_paykasir_7f9b82c10a4e3', 'X-API-Version: v2' ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); echo "Total Bayar: Rp " . number_format($data['total'], 0, ',', '.'); ?>

Interactive API Playground & QRIS Simulator

Uji langsung pemanggilan POST /api/payment/create secara interaktif di bawah ini. Kode QRIS asli akan di-render secara live beserta tombol simulasi transfer PayHook!

Sistem akan otomatis menghitung kode unik acak.

Klik tombol "Panggil API /api/payment/create" untuk melihat QRIS yang dihasilkan dan respon JSON asli.

Live Monitor Transaksi & Mutasi Masuk

Tabel di bawah diperbarui secara otomatis secara real-time via Server-Sent Events (SSE) tanpa refresh halaman saat notifikasi bank masuk dari aplikasi PayHook.

Daftar Transaksi Pembayaran

Transaction ID Order ID Total Tagihan Status Sumber Waktu

Riwayat Mutasi Masuk PayHook

Event ID Nominal Masuk Sumber & Payer ID Transaksi Waktu Deteksi

Versi API

Current Version : v2 Engine : PayHook Notification Listener v1.11 Status : Required / Stable Protocol : HTTPS POST (JSON) Branding : PayKasir Gateway x PayHook Engine