In person
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.
- Claude Code
- Cursor
- Codex
- Without installing
Run both commands, in order.
claude plugin marketplace add vippsas/agent-toolkit
claude plugin install vipps-developer@agent-toolkit
Open Settings, then Plugins.
Add vippsas/agent-toolkit as a plugin marketplace, then install the "vipps-developer" plugin.
For the app, add the marketplace "vippsas/agent-toolkit" and then install "vipps-developer". For the CLI, run the following commands.
codex plugin marketplace add vippsas/agent-toolkit
codex plugin add vipps-developer@agent-toolkit
Paste this into any assistant.
Read https://github.com/vippsas/agent-toolkit/blob/main/plugins/vipps-developer/README.md for Vipps MobilePay integration guidance.
For troubleshooting, see the full instructions.
The in-person flow. The customer pays at a physical point of sale (e.g., a store, a restaurant, or a consultation) and approves the payment in the Vipps or MobilePay app, without touching a terminal.
For a visual walkthrough of the customer's experience with in-person payments, see How ePayment works in person.
Scenario​
Since the customer is in front of you, you send the payment request straight to their app instead of redirecting them in a browser. You need to identify the customer first, and there are three ways to do that:
- Enter the customer's phone number in the point of sale, as described on this page.
- Scan the customer's Personal QR code, if you have a scanner.
- Display a One-time payment QR for the customer to scan, if you have a screen but no phone number.
With a phone number, the merchant rings up the sale, sends the payment request, and the customer confirms it in their app. The merchant then registers the sale and captures the payment. For the full step-by-step flow with screenshots, see How ePayment works in person, or see the sequence diagram below.
If you have the customer's phone number and their consent to send payment requests through Vipps MobilePay, you can send payment requests directly to their app. When the customer selects Show details in the payment confirmation screen, they are presented with the order information you provided, without leaving the app. The order details are also available afterwards in the app under Activities.
Specify customer present​
When using the ePayment API to process payments in a physical setting, you must specify
"customerInteraction": "CUSTOMER_PRESENT" in the create payment endpoint,
POST:/epayment/v1/payments.
The CUSTOMER_PRESENT parameter is required for compliance and reporting reasons, as the risk is lower when the
customer is physically present than when the customer is paying remotely over the net.
Authorization​
All ePayment API requests must include a valid Bearer token in the Authorization header.
See Authorization for how to obtain one.
Request​
Create the payment with
POST:/epayment/v1/payments.
Specify "customerInteraction": "CUSTOMER_PRESENT", "userFlow": "PUSH_MESSAGE", and the customer's phone
number, so the request is sent straight to their app.
For example:
curl -X POST https://apitest.vipps.no/epayment/v1/payments \
-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 'Idempotency-Key: YOUR-IDEMPOTENCY-KEY' \
-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 '{
"customerInteraction": "CUSTOMER_PRESENT",
"amount": {
"currency": "EUR",
"value": 12900
},
"customer":{
"phoneNumber":"3589123456"
},
"paymentMethod": {
"type": "WALLET"
},
"receipt":{
"orderLines": [
{
"name": "Service or product name",
"id": "line_item_1",
"totalAmount": 12900,
"totalAmountExcludingTax": 10320,
"totalTaxAmount": 2580,
"taxRate": 2500
}
],
"bottomLine": {
"currency": "EUR",
"receiptNumber": "20260514-00123"
}
},
"reference": "acme-shop-123-order123abc",
"userFlow": "PUSH_MESSAGE",
"paymentDescription": "Consultation",
"returnUrl": "https://example.com/redirect?reference=acme-shop-123-order123abc"
}'
Note that you can specify orderlines or a receipt URL, as described in the Order details section.
To determine that the customer has authorized the payment, get notifications via the Webhooks API and/or poll for the status, according to the polling guidelines.
Once the customer has the goods, capture the payment.
Sequence diagram​
POS manual entry payment flow
- Customer provides their phone number to the merchant.
- Merchant adds products to the sale.
- Merchant initiates a payment request with receipt via the ePayment API.
- ePayment API requests payment from the customer.
- Customer selects a card and clicks pay.
- Webhooks API sends the merchant an authorized, aborted, or expired event.
- Merchant gets the payment from the ePayment API, as a backup if the webhook is delayed or missed.
- ePayment API returns the current state of the payment.
- If the payment was aborted or expired, the merchant releases the sale in the POS and the flow ends.
- If the payment was authorized, the 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.
or MobilePay
app, without
touching a terminal.