QR Status Polling
v3 GET api.console.bayar.cash/v3/transactions/{transaction_id}/duitnow-qr/status
Lightweight polling endpoint for a DuitNow QR transaction created via the Generate DuitNow QR endpoint (or generate_qr: true). Use it to update your payment page while the payer scans.
Tip: Webhooks to your payment intent
callback_urlremain the primary payment notification — treat this endpoint as a UI fallback only. Fulfil orders from the callback, not from polling.
Example of sending GET request with cURL.
curl -X GET https://api.console.bayar.cash/v3/transactions/trx_z88ymJ/duitnow-qr/status \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <Personal_Access_Token>'Example of JSON structured response.
{
"transaction_id": "trx_z88ymJ",
"status": 0,
"status_description": "New",
"is_terminal": false,
"qr_expired": false,
"qr_expires_at": "2026-08-20T14:05:12+08:00",
"next_poll_after_ms": 2000
}status
Transaction status code: 0 New, 1 Pending, 2 Unsuccessful, 3 Successful, 4 Cancelled, 5 Abandoned
is_terminal
true once the status is final — stop polling and show the result
qr_expired
true once qr_expires_at has passed — stop polling; the underlying transaction may stay non-terminal until housekeeping ages it out. Treat an expired QR as failed and generate a new one if the payer still wants to pay
next_poll_after_ms
Minimum delay before your next poll. null when the status is terminal or the QR has expired — stop polling
Polling Rules
Respect
next_poll_after_msbetween polls (default 2000 ms).Stop polling when
is_terminalistrueorqr_expiredistrue(next_poll_after_mswill benull).Requests are rate limited to 30 per minute per transaction, plus an overall per-merchant ceiling. A
429response includes aRetry-Afterheader — wait that many seconds before polling again.
Last updated