Skip to main content

Personal QR

View as Markdown (opens in a new tab)
Install AI tools

Give your assistant up-to-date guidance for our APIs, with our plugin or without it.

The plugin is still under development. See the AI tools page for details.

Run both commands, in order.

claude plugin marketplace add vippsas/agent-toolkit
claude plugin install vipps-developer@agent-toolkit

For troubleshooting, see the full instructions.

Tip

For a visual walkthrough of the personal QR flow, see How the QR API works with personal QR.

Every user has a personal QR code available in their Vipps or MobilePay app. Customers can scan their own personal QR codes at your point of sale to quickly identify themselves for payment, without needing to provide their phone number.

Personal QR

Screenshot: Personal QR code screen in the Vipps app, showing the user's unique QR code for in-store payment or identification.

Scanner setup​

Provide customers with a QR scanner at your checkout where they can scan their personal QR codes. This can be:

  • Customer-facing scanner - Permanent scanner for self-service
  • Cashier scanner - Handheld or wired scanner operated by staff

The scanner reads the QR code and passes its content to your system as text: a URL that starts with https://qr.vipps.no/, such as https://qr.vipps.no/p/qwjhewqhueheuqwhuqwhe. Send this URL to the API exactly as you received it. Don't shorten it or pick values out of it.

POS hand scanner with Vipps button

Screenshot: A hand scanner at a point-of-sale terminal used to scan a customer's personal QR code from the app (Vipps or MobilePay).

Personal QR exchange endpoint​

Use the POST:/v1/exchange endpoint to convert the scanned QR code into the customer's phone number.

Example request​

curl -X POST https://apitest.vipps.no/qr/v1/exchange \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR-ACCESS-TOKEN" \
-H "Ocp-Apim-Subscription-Key: YOUR-SUBSCRIPTION-KEY" \
-H "Merchant-Serial-Number: YOUR-MSN" \
-H "Vipps-System-Name: acme" \
-H "Vipps-System-Version: 3.1.2" \
-H "Vipps-System-Plugin-Name: acme-webshop" \
-H "Vipps-System-Plugin-Version: 4.5.6" \
-d '{
"qrCode": "https://qr.vipps.no/p/qwjhewqhueheuqwhuqwhe"
}'

Example response​

{
"msisdn": "4712345678",
"timestamp": 1634025600,
"version": "2.0"
}

API specification​

Request parameters:

ParameterDescriptionRequired
qrCodeThe URL the scanner read from the QR code, unchangedYes
requestedDataArray of data types to return. Currently, only supports ["MSISDN"]. Optional, as it's the default.No

Response parameters:

ParameterDescription
msisdnThe customer's phone number
versionQR code version: 2.0 (tokenized, current) or 1.0 (clear-text, deprecated)
timestampUTC timestamp (in seconds) when the QR code was generated. Only available in version 2.0

Creating the payment​

You don't need the phone number to create a payment. The ePayment API takes the scanned content directly in customer.personalQr, so use the exchange endpoint only when you need the phone number for something else, such as a loyalty program. See Personal QR feature for complete implementation details.