Qrisy API mendukung dua metode autentikasi: JWT (dashboard) dan API License Key (SDK/server).
Gunakan header x-license-key untuk autentikasi server-to-server. Key berformat qs_live_xxx (production) atau qs_test_xxx (sandbox).
# cURL
curl -H "x-license-key: qs_live_xxx" https://api.qrisy.id/api/profile// Node.js
const qrisy = new Qrisy({ licenseKey: 'qs_live_xxx' });# Python
qrisy = Qrisy(license_key="qs_live_xxx")// PHP
$qrisy = new Qrisy(licenseKey: 'qs_live_xxx');API key dapat dibatasi dengan scopes. Default: semua scopes.
| Scope | Akses |
|---|---|
generate | POST /api/generate/qris, /v2/qris |
check | POST /api/generate/check-status |
list | GET /api/generate/list |
cancel | POST /api/generate/cancel-status |
webhook | CRUD /api/webhook/* |
profile | GET /api/profile |
API key hanya ditampilkan SEKALI saat dibuat. Simpan di tempat aman (env variable / password manager). Key tidak bisa dilihat lagi — hanya prefix (qs_live_xxxx) yang tampil di dashboard.
Untuk dashboard web, Qrisy menggunakan JWT access token (15 menit TTL) + refresh token rotation (30 hari).
curl -H "Authorization: Bearer eyJhbG..." https://api.qrisy.id/api/profileToken didapat dari POST /api/auth/login atau POST /api/auth/register. Refresh via POST /api/auth/refresh.
Setiap refresh menghasilkan access token + refresh token BARU. Refresh token lama di-revoke. Ini mencegah replay attack bila refresh token intercept.
Default: 120 request/menit per identity (API key atau user). Public endpoints punya limit lebih ketat:
POST /api/public/transactions — 30/min per IPGET /api/public/transactions/:id/sse — 60/min per IPPOST /api/auth/register — 5/min per IPPOST /api/auth/login — 10/min per IPHeaders: x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset.