QRISIFY turns your static QRIS into a dynamic, amount-locked QR for every order. One REST endpoint, a hosted checkout page, signed webhooks and a fully auditable wallet ledger.
Pay-as-you-go · 0.50% per transaction · no monthly fee
{
"amount": 100000,
"order_id": "ORDER-12345",
"description": "Pembelian Produk",
"customer": { "name": "Ahmad" }
}
{
"success": true,
"payment": {
"id": "PAY-20260812-000001",
"amount": 100000,
"fee": 500,
"total": 100500,
"status": "PENDING",
"payment_url": "https://msqris.mkz.biz.id/pay/PAY-20260812-000001"
}
}
Wallet ledger, API keys, webhooks, analytics and a hosted checkout page.
We parse your QRIS payload, inject the amount, switch to dynamic mode and recompute the CRC16 checksum.
Available, reserved and total balance. Every movement writes a ledger row with balance before and after.
Bearer API keys, predictable error codes, rate limiting and request logs for every call.
HMAC SHA256 signatures with automatic retries at 1m, 5m, 15m, 30m and 1h.
Daily transactions, revenue, fees, success rate and balance history charts.
CSRF, prepared statements, hashed API keys, audit logs and login throttling.
Paste the payload of your merchant static QRIS. We validate the CRC before storing it.
Call POST /api/v1/payments with the amount and order id. We reserve the fee from your wallet.
Redirect the customer to the hosted checkout page with a dynamic, amount-locked QR.
The payment only becomes PAID after your licensed provider verifies it, then we fire your webhook.
Example: Rp100.000 transaction = Rp500 fee, Rp99.500 net.
QRISIFY is payment software, not a licensed payment institution. Dynamic QR generation is never treated as proof of payment: a transaction stays PENDING until a licensed provider confirms settlement through the verification layer.
// Verify a QRISIFY webhook (PHP)
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_QRISIFY_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, $webhookSecret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('invalid signature');
}
Create an account, add your QRIS, generate an API key and go live.
Get started Explore the API