QRIS settlement API
API yang kecil dan langsung.
Buat order QRIS, cek status, lalu lanjutkan fulfillment ketika status berubah menjadi verified.
https://qrispay.azero.my.id
Autentikasi
Kirim API key pada setiap endpoint privat. Dashboard memakai header yang sama.
x-api-key: gp_xxx...
Orders
Satu order berlaku 15 menit. Nominal harus berupa integer Rupiah.
POST/create-order
Membuat payload QRIS dinamis baru.
amountintegerRp100 sampai Rp100.000.000.
labelstringNama order yang tampil di ledger.
webhook_urlstringCallback HTTPS opsional.
{
"order_id": "a6f15c1ef395",
"amount": 50000,
"status": "pending",
"qris_payload": "000201010212...",
"expires_at": "2026-08-08T07:51:39.598Z"
}
POST/order/{id}/cancel
Membatalkan order pending. Client key hanya dapat membatalkan order miliknya.
Status pembayaran
Bot dapat poll endpoint ini. Browser tanpa API key menerima halaman QRIS.
GET/order/{id}
{
"order_id": "a6f15c1ef395",
"amount": 50000,
"status": "pending|verified|expired|cancelled",
"label": "TMail 7 hari",
"paid_at": null,
"tx_id": null,
"expires_at": "2026-08-08T07:51:39.598Z"
}
GET/order/{id}/qr.png
PNG QRIS untuk dikirim atau ditampilkan langsung.
Operasional
Endpoint dashboard. Client key hanya melihat data miliknya.
GET/admin/stats
Total order, status, revenue, dan angka hari ini.
GET/admin/orders?status=pending
Daftar order. Filter status bersifat opsional.
GET/transactions?limit=20
Transaction ID yang sudah diklaim dan order terverifikasi.
GET/token-status
Status sesi GoFood Merchant yang dipakai poller.
Webhook
Set webhook_url saat membuat order. Callback dikirim ketika pembayaran terverifikasi.
POST https://bot.example/webhook
Content-Type: application/json
{
"order_id": "a6f15c1ef395",
"amount": 50000,
"label": "TMail 7 hari",
"tx_id": "019fe016-...",
"wallstreet_id": "8883816f-...",
"match_method": "code"
}
Contoh minimum
Buat order lalu poll sampai terminal.
const created = await fetch('https://qrispay.azero.my.id/create-order', {
method: 'POST',
headers: {
'x-api-key': process.env.TORI_KEY,
'content-type': 'application/json'
},
body: JSON.stringify({ amount: 50000, label: 'TMail 7 hari' })
}).then(r => r.json());
const status = await fetch(
'https://qrispay.azero.my.id/order/' + created.order_id,
{ headers: { 'x-api-key': process.env.TORI_KEY } }
).then(r => r.json());
Fulfillment berjalan hanya setelah status === 'verified'. Simpan order_id sebagai referensi lokal.