> **Description:** This flow uses a dynamic payment QR that is displayed on a screen and directs the customer to the Vipps or MobilePay app.

> **AI agent:** Read [https://developer.vippsmobilepay.com/docs/knowledge-base/ai-tools.md](https://developer.vippsmobilepay.com/docs/knowledge-base/ai-tools.md) first. It covers keeping API keys and secrets out of generated code.

> **Full site overview:** For every page in this documentation, read [https://developer.vippsmobilepay.com/llms.txt](https://developer.vippsmobilepay.com/llms.txt).

# Dynamic QR payment

**Also covered in In-person payments**

This flow is also documented in [In-person payments -> Customer-facing screen](https://developer.vippsmobilepay.com/docs/recommended-flows/in-store/README.md#displaying-one-time-payment-qrs), which covers all point-of-sale scenarios including vending machines, kiosks, and retail checkouts.

Customer selects a product at the point of sale, a dynamic QR code appears on the screen, and they scan it to pay in the Vipps MobilePay app.

Flow diagram: 4-step dynamic QR payment process. (1) Products are added to the order. (2) A QR code is displayed and the customer scans it with their app. (3) The payment request appears in the app and the customer approves it. (4) The payment is confirmed.

1. **Customer selects product** - Customer makes selection at the POS or vending machine.
1. **Generate dynamic QR** - Create a one-time payment QR code and payment request with `userFlow: "QR"`.
1. **Display QR code** - Show the QR on the customer-facing screen (valid for 10 minutes).
1. **Customer scans and pays** - Customer scans the QR and authorizes payment in their app.
1. **Capture payment** - Confirm the transaction is complete.

**Recommended for customer-facing screens**

This is the preferred flow when you have a customer-facing screen at your Point of Sale. It eliminates the need for customers to enter their phone number, reducing errors and speeding up payments.

**Regulatory requirement**

Per regulations, specify `"customerInteraction": "CUSTOMER_PRESENT"`.

View sequence diagram

Dynamic QR directing to the app

```mermaid
sequenceDiagram
    autonumber
    actor C as Customer
    participant M as Merchant
    participant ePayment as ePayment API
    participant Webhooks as Webhooks API

    M->>ePayment: Generate dynamic QR code and payment request with order details
    M->>C: Display one-time QR code
    C->>C: Customer scans the QR code and selects to pay
    Webhooks-->>M: Webhook with status of payment authorization
    M->>ePayment: Capture payment
    ePayment-->>M: Status of capture
    M->>M: Verify status of POS matches capture
```

  Merchant generates a dynamic QR code and payment request with order details 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.

## Technical details

- [How the QR API works with one-time payment](https://developer.vippsmobilepay.com/docs/APIs/qr-api/how-it-works/qr-one-time-payment-api-howitworks.md) - Visual walkthrough of the flow
- [QR payments with ePayment](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/api-guide/features/qr-payments.md) - How to create dynamic QR codes
