Choosing the right QR type
Pick the QR type that matches your hardware setup:
| QR Type | Best For | What You Need |
|---|---|---|
| One-time payment QR | Self-service kiosk | Customer-facing screen |
| Merchant redirect QR | Marketing materials | Just print it! |
| Merchant callback QR | Vending machine, unmanned | Webhook endpoint |
| Personal QR | Staffed checkout | QR scanner |
Payment flows involving QR codesβ
Different solutions for different setupsβ
Depending on the merchant setup, there can be multiple ways to implement the payment flow. This section tries to sketch an overview of what is possible, and what might be the best approach depending on the merchant setup today.
In all cases, the ePayment API will be used for integrating payments. The main differences are with pairing the customer that wants to pay, with the given checkout that wants to issue the payment.
The next sections will contain the recommended approaches based on what capabilities the merchant has available at their checkouts.
The developer documentation in Vipps MobilePay describes using webhooks instead of polling for payment statuses in the ePayment API. Polling however, is still possible and a valid way to follow the payment status. However, it will not be possible to detect user check-in with polling.
Checkout has QR scanning capabilitiesβ
This is our recommended flow. If the merchant has the possibility to scan a QR code at their checkouts, they can use the 'Merchant Scan' approach. Before the payment is initiated the merchant scans a QR on the customer phone which will contain the customer info needed to initiate the payment. The payment is then initiated with the userFlow parameter set to "PUSH_MESSAGE" together with the personalQr parameter set to the full content of the QR scanned. See the In-store payments example.
Checkout has customer facing screensβ
In this scenario, there is one solution simpler than all others. Here, the merchant doesn't need the customer information before they initiate the payment. They simply initiate the payment where the userFlow parameter is set to QR. Then, the response will contain a link to a dynamic QR code, which the checkout then downloads and shows on their customer facing screen. The user scans the QR and completes the payment flow. This flow is described in more detail in the ePayment API guide, where it also is shown how to specify the image format and size of the QR being created.
Checkout neither has QR scanners nor customer facing screensβ
In these scenarios, the PoS merchants must use static QR codes as stickers. These QRs can work in two different ways.
The first option is where the QR code contains a link to a merchant website where the merchant will then ask for the customer info needed. This QR is referred to as a Merchant Redirect QR. See the Static QR directing to the merchant site for payment example.
The second option is called Merchant Callback QRs. When the QR is scanned by a customer, Vipps MobilePay will send a callback to an endpoint that is hosted by the merchant. The callback will contain a customerToken that is used to initiate the payment towards the customer.
See the In-store using Merchant Callback QR example.
One-time payment QRβ
Use when: You have a screen where customers can see a QR code (terminal, kiosk, display).
You display a QR on your screen β Customer scans it β They approve payment. Each QR is unique to that transaction.
Quick start:
- Create payment with ePayment API, set
userFlow: "QR" - Display the returned QR image on your screen
- Get payment status via webhook or polling
See implementation details β
Merchant redirect QRβ
Use when: Marketing materials, posters, product packagingβanywhere you want to direct people to your website.
Print a QR code β Customer scans with any camera β Your website opens. Works with any phone, not just Vipps/MobilePay.
Quick start:
- Via API: Generate with
POST:/v1/merchant-redirect - No code: Create in the portal (how to)
See implementation details β
Merchant callback QRβ
Use when: Unmanned locations like vending machines, parking meters, or self-checkout.
Print a QR sticker β Customer scans it β You get a notification β You send them a payment request. The same QR can be used repeatedly.
Quick start:
- Generate QR:
POST:/v1/merchant-callback - Set up webhook to receive scan notifications
- When scanned, create payment with the
customerTokenfrom the callback
See implementation details β
Personal QRβ
Use when: You have a scanner at checkout (handheld or customer-facing).
Customer shows their QR code from the Vipps or MobilePay app β You scan it β They approve payment in their app. No phone number needed.
Quick start:
- Scan the QR code
- Exchange it for a phone number:
POST:/v1/exchange - Create payment with the ePayment API