QR Payments

Accept QR-based payments in-store, on a counter, on a poster, or anywhere else a printed or displayed code makes sense.

QR Payments is the most common Scan to Pay acceptance pattern. Your backend creates a code, you display it as a QR (printed, on a screen, or on a POS terminal), and the customer scans it from the Scan to Pay app on their phone to authorise the payment.

This section covers everything QR-related: when to use static vs dynamic codes, how to create and manage them, how to render them, the code lifecycle, and the business rules that govern them.

📘

Other QR-driven flows live elsewhere. For e-commerce checkouts that render a QR on a web page, see Bluebox hosted checkout. For QR codes on invoices and statements, see Bill payment. For your own mobile app launching the Scan to Pay app on the same device, see App-to-app.


When to use which QR pattern

Pick the pattern that matches how the QR will be presented to the customer.

PatternWhen to usePage
Static QROne QR per merchant or per terminal, printed once. Customer enters the amount on their phone, or you update the amount on the same code before each purchase.Static QR
Dynamic QROne fresh QR per transaction, with the amount embedded. Typical for POS terminals, kiosks, and digital signage.Dynamic QR

Both use the same POST /code/create endpoint — the difference is whether useOnce is true and whether you reuse the code across transactions.


How a QR payment works

The flow is the same for every QR pattern:

  1. Your backend creates a payment code via POST /code/create. The platform returns a 10-digit code.
  2. You present the code as a QR — either render it yourself or use the Rendering the QR endpoint to fetch a styled PNG.
  3. The customer scans the QR from the Scan to Pay app and authorises the payment.
  4. Scan to Pay notifies your backend via webhook with the outcome.

Step 1 differs slightly between static and dynamic patterns — see the per-pattern pages for the exact request bodies.


In this section

What's next