How to make one-time payment QRs
Install AI tools
Our plugin gives your assistant up-to-date guidance for payments and login. Full instructions
- Claude Code
- Cursor
- Codex
- Any editor
Run both commands, in order.
claude plugin marketplace add vippsas/agent-toolkit
claude plugin install vipps@agent-toolkit
Open Settings, then Plugins.
Add vippsas/agent-toolkit as a plugin marketplace, then install the "vipps" plugin.
See the Codex plugin docs at developers.openai.com/codex.
Add vippsas/agent-toolkit as a plugin marketplace, then install the "vipps" plugin.
No plugin needed. Paste this into your assistant.
Read https://developer.vippsmobilepay.com/llms.txt for the Vipps MobilePay developer documentation.
This flow uses a one-time payment QR (i.e., a dynamic QR) that is shown on a screen.

Flow diagram: A one-time payment QR code displayed on a screen. The customer scans the QR code with the Vipps or MobilePay app to authorize the payment.
The QR directs the customer to the Vipps or MobilePay app, where they authorize the payment.
Details​
A one-time payment QR code is presented on the vending machine. The QR code is a dynamic representation of the payment URL, and the customer needs to scan the QR code and pay within 10 minutes.
Step 1: Generate a dynamic QR code and payment request​
When the customer selects a product, generate the payment request with a dynamic QR code.
Per regulations, specify "customerInteraction": "CUSTOMER_PRESENT".
Detailed example
To generate the dynamic QR code and associated payment request, specify "userFlow": "QR".
You may also specify the qrFormat and size for the QR.
Specify "customerInteraction": "CUSTOMER_PRESENT".
You may also include a summary of the order details.
Since the customer will scan from their phone, you don't need their phone number. This payment command can do an app-switch and open their Vipps or MobilePay app with the payment request.
Here is an example HTTP POST:
With body:
{
"amount": {
"value": 42924,
"currency": "NOK"
},
"paymentMethod": {
"type": "WALLET"
},
"customerInteraction": "CUSTOMER_PRESENT",
"receipt":{
"orderLines": [
{
"name": "Ear buds",
"id": "21231211",
"totalAmount": 42924,
"totalAmountExcludingTax": 34339,
"totalTaxAmount": 8585,
"taxRate": 2500,
},
],
"bottomLine": {
"currency": "NOK",
"posId": "vending_machine_12345",
"receiptNumber": "0527013501"
},
},
"reference": 2486791679658155992,
"userFlow": "QR",
"returnUrl": "http://example.com/redirect?reference=2486791679658155992",
"paymentDescription": "Ear buds",
"qrFormat": {
"format": "IMAGE/SVG+XML",
"size": 1024
}
}
Step 2: Display the QR on the screen​
Display the one-time QR on a screen facing the customer.
Step 3: The customer authorizes the payment​
The customer scans the QR code and is directed to the Vipps or MobilePay app. The payment screen is presented and they click Pay.
To determine that the user has authorized the payment, you can get notifications via the Webhooks API and/or poll for the status.
Once the payment is approved, update the status in your system.
Step 4: Capture the payment​
Capture the payment and confirm that it was successful.
Sequence diagram​
View sequence diagram
Dynamic QR directing to the app
- Merchant generates a dynamic QR code and payment request via the ePayment API.
- Merchant displays the one-time QR code to the customer.
- Customer scans the QR code and selects to pay.
- Webhooks API sends the merchant a webhook with the payment authorization status.
- Merchant captures the payment via the ePayment API.
- ePayment API returns the status of the capture.
- Merchant verifies that the POS status matches the capture.
More details​
For more details, see ePayment Features: Payment through a QR.
or MobilePay
app, where they authorize the payment.