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.

amountinteger

Rp100 sampai Rp100.000.000.

labelstring

Nama order yang tampil di ledger.

webhook_urlstring

Callback 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.