Available Endpoints
Available Endpoints 🔗
1. Upload QRIS
Upload QRIS image with merchant details to be used in QRIS generation.
Endpoint:
Base URLs:
- Production:
https://api.collaborator.komerce.id/user - Sandbox:
https://api-sandbox.collaborator.komerce.id/user
Request Format:
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
name | String | Yes | QRIS identity name (max 100 chars) |
qris_image | File | Yes | QRIS image file (PNG/JPG, max 5MB) |
Request Example:
Success Response (200):
Error Response Examples:
Key Points:
- 📤 Upload once, reuse
qris_idfor multiple transactions - 🖼️ Supported formats: PNG, JPG
- 📊 Max file size: 5MB
- ✅ QRIS image will be validated automatically
2. Generate QRIS
Generate dynamic QRIS with custom amount for each transaction.
Endpoint:
Base URLs:
- Production:
https://api.collaborator.komerce.id/user - Sandbox:
https://api-sandbox.collaborator.komerce.id/user
Request Format:
Request Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
qris_id | Number | Yes | QRIS ID from upload step |
amount | Number | Yes | Amount in Rupiah (must be >= 1000) |
output_type | String | Yes | "string" or "image" |
unique_amount | Boolean | Yes | Add unique identifier to amount (default: true) |
Request Example:
Success Response (200):
Error Response Examples:
Understanding Unique Amount
When you enable unique_amount: true, QRISLY adds a unique decimal identifier to your amount. This helps your mobile
app listener distinguish between identical amounts.
Example:
Why This Matters: Your mobile banking app listener reads the payment amount to confirm transactions. Without unique identifiers, two identical payments would look the same. The decimal addition (0.001, 0.002, etc.) tells the listener app that these are separate transactions, enabling proper tracking even when amounts match.
Key Points:
- 💵 IDR 100 per generate - charged immediately
- 🎯 Use
unique_amount: trueto prevent duplicate payments with identical amounts - 📊 Each unique amount increment is tracked by QRISLY automatically
- ⏰ Default expiry: 15 minutes from generation
- 📱 Output can be string (for display in app) or image (for print)
- 🔔 Mobile app listener can distinguish transactions via the unique decimal identifier
3. Check Payment Status
Monitor real-time payment status for each generated QRIS.
Endpoint:
Base URLs:
- Production:
https://api.collaborator.komerce.id/user - Sandbox:
https://api-sandbox.collaborator.komerce.id/user
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
history_id | INT | Yes | History ID from generate-qris response |
Request Example:
Success Response (200):
Payment Status Values:
| Status | Description |
|---|---|
unpaid | QRIS has been generated, waiting for payment |
paid | Payment successfully received |
expired | QRIS has expired, need to generate new |
cancelled | Payment cancelled by user |
Error Response Example:
Key Points:
- ✅ Real-time status, updated instantly when payment is received
- 📞 Use this endpoint as fallback if webhook is not received
- 🔄 Safe to call multiple times without additional charges
- ⏰ Stored for 90 days after transaction
More Information
Need Help?
For questions about integration or the API, hit the live chat. Our team's on standby.

