Flow Overview 💳
Step-by-Step Workflow
Step 1: Upload QRIS
On first setup, upload your QRIS image to the platform. This only needs to be done once.
Request:
POST /api/v1/qrisly/upload-qris
- File: QRIS image (PNG/JPG)
- Name: Identity of your QRIS
Response:
{
"qris_id": "9d6c9f9e-8c33-4f42-8b1f-0e6a3e2e7d10",
"name": "abc",
"merchant_name": "YZ Digital"
}
Step 2: Generate QRIS
Every time there's a new order, generate a QRIS with the appropriate amount.
Request:
POST /api/v1/qrisly/generate-qris
- qris_id: from step 1
- amount: Amount to be paid in Rupiah
- output_type: "string" or "image"
Response:
{
"history_id": 1758,
"qris_string": "00020101...",
"original_amount": 1000,
"final_amount": 1001,
"payment_status": "unpaid",
"expiry_time": "2026-03-03 11:03:27"
}
💡 Tip: Save this history_id for tracking payment status later.
Step 3: Setup Webhook & Wait for Payment
After generating the QRIS, the customer can scan and pay. You will receive webhook notifications automatically.
Webhook Event:
{
"qris_history_id": 1771,
"transaction_id": "TEST-177251866516",
"payment_status": "paid",
"amount": 1001,
"paid_amount": 1001,
"paid_at": "2026-03-03 13:17:47",
"expired_at": "2026-03-03 13:22:22"
}
Step 4: Verify Payment Status
Verify the payment using the status endpoint to ensure confirmation.
Request:
GET /api/v1/qrisly/payment-status/{history_id}
Response:
{
"history_id": 1770,
"payment_status": "paid",
"amount": 1001,
"name": "ABC",
"paid_at": null,
"created_at": "2026-03-03T13:14:13+07:00",
"updated_at": "2026-03-03T13:16:22+07:00"
}