Dokumentasi API

Overview

API QRISPAY memungkinkan Anda untuk menerima pembayaran QRIS secara programatis. API kami menggunakan RESTful architecture dengan response berformat JSON. Semua endpoint menggunakan HTTPS dan memerlukan autentikasi API Key.

Base URL API Semua request harus diarahkan ke: https://qrispay.site/api/v1
Fitur Utama API QRISPAY
  • Pembayaran QRIS dinamis (one-time)
  • Callback real-time ke URL Anda
  • Fee transparan 1.5% per transaksi sukses
  • Settlement cepat & otomatis
  • Autentikasi API Key yang aman
  • Endpoint cek saldo & riwayat

Autentikasi

Semua request ke API QRISPAY harus menyertakan API Key untuk autentikasi. API Key dapat dilihat dan di-generate ulang di halaman Pengaturan.

Header Authorization

Sertakan API Key di header setiap request dengan format Bearer:

HTTP Header
Authorization: Bearer QRPAY-your_api_key_here Content-Type: application/json
Keamanan API Key
  • Jangan pernah commit API Key ke repository publik
  • Simpan di environment variable (misal: QRISPAY_API_KEY)
  • Regenerate key segera jika bocor

Buat Pembayaran

Endpoint untuk membuat invoice pembayaran QRIS baru. Response akan berisi QR string yang bisa ditampilkan ke customer.

POST /create

Request Parameters

Parameter Tipe Deskripsi
api_key
string
API Key merchant (required)
amountRequired
integer
Nominal pembayaran dalam Rupiah. Minimum Rp 1.000.
merchant_refRequired
string
Referensi unik dari sistem Anda (max 50 karakter). Gunakan sebagai invoice ID.
nameOptional
string
Nama customer untuk ditampilkan di invoice.
emailOptional
string
Email customer untuk notifikasi.
phoneOptional
string
Nomor WhatsApp customer (format 62xxx).
callback_urlOptional
string
URL untuk menerima callback ketika status transaksi berubah. Override URL default.

Contoh Request

cURL
PHP
JavaScript
cURL Request
curl -X POST https://qrispay.site/api/v1/create \ -H "Content-Type: application/json" \ -d '{ "api_key": "QRPAY-your_api_key", "amount": 50000, "merchant_ref": "ORDER-001", "name": "John Doe", "email": "john@example.com", "phone": "628123456789", "callback_url": "https://yourdomain.com/callback" }'
PHP (cURL)
<?php $data = [ 'api_key' => 'QRPAY-your_api_key', 'amount' => 50000, 'merchant_ref' => 'ORDER-001', 'name' => 'John Doe', 'email' => 'john@example.com', 'phone' => '628123456789' ]; $ch = curl_init('https://qrispay.site/api/v1/create'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); $response = curl_exec($ch); $result = json_decode($response, true); curl_close($ch); // Tampilkan QR string ke customer echo $result['data']['qr_string']; ?>
JavaScript (Fetch)
const data = { api_key: 'QRPAY-your_api_key', amount: 50000, merchant_ref: 'ORDER-001', name: 'John Doe', email: 'john@example.com', phone: '628123456789' }; fetch('https://qrispay.site/api/v1/create', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(r => r.json()) .then(data => { // Tampilkan QR string console.log(data.data.qr_string); }) .catch(err => console.error(err));

Response Success 200 OK

JSON Response
{ "status": "200", "message": "Invoice created successfully", "data": { "qrpay_trx_id": "QR20260911123456789", "merchant_ref": "ORDER-001", "amount": 50000, "fee": 750, "total_payment": 50750, "qr_string": "00020101021126670016COM...", "qr_image_url": "https://qrispay.site/assets/qr/qr_xxx.png", "expired_at": "2026-09-11 23:59:59", "payment_method": "QRIS" } }

Cek Status Transaksi

Endpoint untuk mengecek status pembayaran berdasarkan QRISPAY Transaction ID. Gunakan untuk polling atau verifikasi manual.

POST /status

Request Parameters

ParameterTipeDeskripsi
api_key
string
API Key merchant (required)
qrpay_trx_idRequired
string
ID transaksi dari QRISPAY (didapat dari response /create).

Contoh Request

cURL
PHP
JavaScript
cURL
curl -X POST https://qrispay.site/api/v1/status \ -H "Content-Type: application/json" \ -d '{ "api_key": "QRPAY-your_api_key", "qrpay_trx_id": "QR20260911123456789" }'
PHP
<?php $data = [ 'api_key' => 'QRPAY-your_api_key', 'qrpay_trx_id' => 'QR20260911123456789' ]; $ch = curl_init('https://qrispay.site/api/v1/status'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); $result = json_decode($response, true); curl_close($ch); // Status: pending / berhasil / expired / failed echo $result['data']['status']; ?>
JavaScript
fetch('https://qrispay.site/api/v1/status', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ api_key: 'QRPAY-your_api_key', qrpay_trx_id: 'QR20260911123456789' }) }) .then(r => r.json()) .then(d => console.log('Status:', d.data.status));

Response Success

JSON Response
{ "status": "200", "message": "success", "data": { "qrpay_trx_id": "QR20260911123456789", "merchant_ref": "ORDER-001", "amount": 50000, "fee": 750, "total_payment": 50750, "payment_method": "QRIS", "status": "berhasil", "created_at": "2026-09-11 10:30:00", "updated_at": "2026-09-11 10:35:00" } }

Cek Saldo

Endpoint untuk mengecek saldo merchant dan statistik transaksi hari ini.

POST /balance

Contoh Request

cURL
PHP
cURL
curl -X POST https://qrispay.site/api/v1/balance \ -H "Content-Type: application/json" \ -d '{ "api_key": "QRPAY-your_api_key" }'
PHP
<?php $data = ['api_key' => 'QRPAY-your_api_key']; $ch = curl_init('https://qrispay.site/api/v1/balance'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); $result = json_decode($response, true); curl_close($ch); echo "Saldo: " . $result['data']['balance_formatted']; ?>

Response Success

JSON Response
{ "status": "200", "message": "success", "data": { "balance": 1500000, "balance_formatted": "Rp 1.500.000", "today_transactions": 25, "today_income": 1250000, "today_income_formatted": "Rp 1.250.000" } }

Riwayat Transaksi

Endpoint untuk mendapatkan riwayat transaksi dengan pagination dan filter status.

POST /history

Request Parameters

ParameterTipeDeskripsi
api_key
string
API Key merchant (required)
statusOptional
string
Filter: all, berhasil, pending, expired, failed. Default: all.
pageOptional
integer
Nomor halaman. Default: 1.
per_pageOptional
integer
Jumlah data per halaman. Default 20, max 100.

Contoh Request

cURL
curl -X POST https://qrispay.site/api/v1/history \ -H "Content-Type: application/json" \ -d '{ "api_key": "QRPAY-your_api_key", "status": "berhasil", "page": 1, "per_page": 20 }'

Callback / Webhook

QRISPAY akan mengirim callback ke URL yang Anda tentukan saat status transaksi berubah. Pastikan endpoint Anda dapat menerima POST request dan membalas dengan status 200 OK.

Syarat Callback URL
  • Dapat diakses dari internet (bukan localhost)
  • HTTPS sangat direkomendasikan
  • Mampu menangani POST request dengan body JSON
  • Wajib response HTTP 200 OK dalam waktu < 5 detik

Payload Callback

QRISPAY akan mengirim POST request dengan body JSON seperti berikut:

Callback Payload
{ "qrpay_trx_id": "QR20260911123456789", "merchant_ref": "ORDER-001", "status": "berhasil", "amount": 50000, "fee": 750, "timestamp": "2026-09-11 10:35:00" }

Handler Callback (PHP)

Contoh implementasi callback handler dengan verifikasi signature:

callback.php
<?php // callback.php - Terima POST dari QRISPAY $json = file_get_contents('php://input'); $data = json_decode($json, true); // Verifikasi signature (opsional tapi sangat direkomendasikan) $signature = $_SERVER['HTTP_X_QRISPAY_SIGNATURE'] ?? ''; $expected = hash_hmac('sha256', $json, 'YOUR_SECRET_KEY'); if (!hash_equals($expected, $signature)) { http_response_code(401); exit('Invalid signature'); } // Proses callback $trx_id = $data['qrpay_trx_id']; $status = $data['status']; $amount = $data['amount']; if ($status === 'berhasil') { // Update status order di database Anda // Kirim email/SMS konfirmasi ke customer // Aktifkan produk digital, dsb. } // WAJIB: balas 200 OK agar QRISPAY tidak retry http_response_code(200); echo json_encode(['success' => true]); ?>

Error Codes

Daftar kode HTTP error yang mungkin dikembalikan oleh API beserta penyebab umum dan solusinya.

Code Message Penyebab & Solusi
400 Bad Request Parameter tidak valid atau missing. Periksa kelengkapan & format field (min amount, max merchant_ref, dsb).
401 Unauthorized API Key tidak valid, expired, atau tidak aktif. Regenerate di Pengaturan.
404 Not Found Transaksi atau resource tidak ditemukan. Periksa qrpay_trx_id yang dikirim.
405 Method Not Allowed HTTP method tidak didukung. Semua endpoint QRISPAY wajib menggunakan POST.
429 Too Many Requests Rate limit terlampaui. Tunggu beberapa saat sebelum mencoba lagi (default: 60 req/menit).
500 Internal Server Error Kesalahan di server QRISPAY. Hubungi support jika persisten.
502 Bad Gateway Koneksi ke provider QRIS gagal. Coba lagi setelah beberapa saat.
Butuh bantuan lebih lanjut? Hubungi developer support kami via Telegram @CS_QRISPAY atau gunakan live chat di pojok kanan bawah.