Download OpenAPI specification:Download
The ePayment API enables you to create Vipps MobilePay payments for online and in-person payments. See the ePayment API Guide for more details.
Create a new payment
| Idempotency-Key required | string <= 50 characters Example: fb492b5e-7907-4d83-ba20-c7fb60ca35de A unique key that prevents duplicate requests from being processed more than once. See idempotency |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Vipps-System-Name | string <= 30 characters Example: WooCommerce The name of the ecommerce solution. One word in lowercase letters is good. See http-headers. |
| Vipps-System-Version | string <= 30 characters Example: 5.4.0 The version number of the ecommerce solution. See http-headers. |
| Vipps-System-Plugin-Name | string <= 30 characters Example: woocommerce-payment The name of the ecommerce plugin (if applicable). One word in lowercase letters is good. See http-headers. |
| Vipps-System-Plugin-Version | string <= 30 characters Example: 1.2.1 The version number of the ecommerce plugin (if applicable). See http-headers. |
New CreatePaymentRequest body.
required | object (Amount) Amount object, containing a |
Customer phone number (object) or Personal QR code (object) or Customer token (object) (Customer) The target customer if the identity is known. The customer can be specified either with phone number, the customer token or with the user's personal QR code Specifying more than one of these will result in an error. | |
| minimumUserAge | integer or null [ 0 .. 100 ] Minimum age in years required for the customer to make the purchase. |
| customerInteraction | string Default: "CUSTOMER_NOT_PRESENT" Enum: "CUSTOMER_PRESENT" "CUSTOMER_NOT_PRESENT" The type of customer interaction that triggers the purchase.
|
object (IndustryData) Additional compliance data related to the transaction. | |
required | object (PaymentMethod) |
object (Profile) | |
| reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ The |
| returnUrl | string <= 2500 characters The URL the user is returned to after the payment session.
The URL must use the |
| userFlow required | string Enum: "PUSH_MESSAGE" "NATIVE_REDIRECT" "WEB_REDIRECT" "QR" The flow for bringing the user to the Vipps or MobilePay app's payment confirmation screen.
If |
| expiresAt | string or null^((?:(\d{4}-\d{2}-\d{2})(T|t)(\d{2}:\d{2}:\d{... Only relevant for Long-living payment requests, which require special approval. The payment will expire at the given date and time. The format must adhere to RFC 3339. The value must be more than 10 minutes and less than 60 days in the future. If |
object or null Optional setting that is only applicable when | |
| paymentDescription | string [ 3 .. 100 ] characters The payment description summary that will be provided to the user through the Vipps MobilePay app, the business portal, and the settlement files. See the recommendations for description text. |
object (Receipt) | |
object or null (Metadata) <= 5 properties Metadata is a key-value map that can be used to store additional
information about the payment. The metadata is not used by Vipps
MobilePay, but is passed through in the | |
| receiptUrl | string or null The URL where a receipt can be viewed or downloaded.
The URL must use the |
object (Shipping) Shipping options used in Express. These can be either | |
object (CardPassthrough) PSPs only: Card passthrough details for PSP initiated card payments. |
{- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "customer": {
- "phoneNumber": "4712345678"
}, - "minimumUserAge": 16,
- "customerInteraction": "CUSTOMER_NOT_PRESENT",
- "industryData": {
- "airlineData": {
- "agencyInvoiceNumber": "string",
- "airlineCode": "074",
- "airlineDesignatorCode": "KL",
- "passengerName": "FLYER / MARY MS.",
- "ticketNumber": "123-1234567890"
}
}, - "paymentMethod": {
- "type": "WALLET",
- "blockedSources": [
- "COMMERCIAL_CARDS"
]
}, - "profile": {
- "scope": "name phoneNumber"
}, - "reference": "acme-shop-123-order123abc",
- "userFlow": "WEB_REDIRECT",
- "expiresAt": "2023-02-26T17:32:28Z",
- "qrFormat": {
- "format": "IMAGE/SVG+XML",
- "size": 1024
}, - "paymentDescription": "Temporary reservation of maximum amount. You will only be charged for the actual use.",
- "receipt": {
- "orderLines": [
- {
- "name": "socks",
- "id": "1234567890",
- "totalAmount": 1000,
- "totalAmountExcludingTax": 800,
- "totalTaxAmount": 250,
- "taxPercentage": 25,
- "taxRate": 2500,
- "unitInfo": {
- "unitPrice": 0,
- "quantity": "0.822",
- "quantityUnit": "PCS"
}, - "discount": 2000,
- "isReturn": false,
- "isShipping": false
}
], - "bottomLine": {
- "currency": "NOK",
- "tipAmount": 2000,
- "giftCardAmount": 20000,
- "posId": "string",
- "totalAmount": 0,
- "totalTax": 0,
- "totalDiscount": 0,
- "shippingAmount": 0,
- "shippingInfo": {
- "amount": 1000,
- "amountExcludingTax": 1000,
- "taxAmount": 250,
- "taxPercentage": 25
}, - "paymentSources": {
- "giftCard": 0,
- "card": 0,
- "voucher": 0,
- "cash": 0
}, - "barcode": {
- "format": "EAN-13",
- "data": "string"
}, - "receiptNumber": "string",
- "terminalId": "string"
}
}, - "metadata": {
- "key1": "value1",
- "key2": "value2",
- "key3": "value3"
}, - "shipping": {
- "dynamicOptions": {
- "callbackUrl": "string",
- "callbackAuthorizationToken": "string"
}, - "fixedOptions": [
- {
- "isDefault": true,
- "priority": 0,
- "type": "HOME_DELIVERY",
- "brand": "POSTEN",
- "options": [
- {
- "id": "pickup-123",
- "isDefault": true,
- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "name": "Pickup at Posten Store",
- "priority": 1,
- "meta": "Keybox code required",
- "estimatedDelivery": "string"
}
]
}
]
}, - "cardPassthrough": {
- "pspReference": "psp-reference",
- "allowedCardTypes": [
- "VISA_DEBIT"
], - "preferVisaPartOfVisaDankort": false,
- "publicEncryptionKeyId": "public-key-id"
}
}{- "reference": "acme-shop-123-order123abc"
}{- "reference": "acme-shop-123-order123abc",
- "AddressLine1": "Robert Levins gate 5",
- "AddressLine2": "Apt 3",
- "City": "Oslo",
- "PostCode": "0154",
- "Country": "NO"
}Get a payment object by its reference id.
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
{- "aggregate": {
- "authorizedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "cancelledAmount": {
- "currency": "NOK",
- "value": 49900
}, - "capturedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "refundedAmount": {
- "currency": "NOK",
- "value": 49900
}
}, - "amount": {
- "currency": "NOK",
- "value": 49900
}, - "state": [
- "AUTHORIZED"
], - "paymentMethod": {
- "type": "WALLET",
- "cardBin": "540185"
}, - "profile": {
- "sub": "string"
}, - "pspReference": "3343121302",
- "reference": "acme-shop-123-order123abc",
- "metadata": {
- "key1": "value1",
- "key2": "value2",
- "key3": "value3"
}, - "shippingDetails": {
- "address": {
- "addressLine1": "Robert Levins gate 5",
- "addressLine2": "Att: Rune Garborg",
- "city": "Oslo",
- "country": "NO",
- "postCode": "0154"
}, - "shippingCost": 9900,
- "shippingOptionId": "posten-servicepakke-1",
- "shippingOptionName": "A-post"
}, - "userDetails": {
- "email": "user@example.com",
- "firstName": "Ada",
- "lastName": "Lovelace",
- "mobileNumber": "4712345678",
- "dateOfBirth": "1988-12-31",
- "addresses": [
- {
- "addressLine1": "Robert Levins gate 5",
- "addressLine2": "Att: Rune Garborg",
- "city": "Oslo",
- "country": "NO",
- "postCode": "0154"
}
]
}
}Get event log for the specified payment's reference id.
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
[- {
- "reference": "acme-shop-123-order123abc",
- "pspReference": "3343121302",
- "name": "AUTHORIZED",
- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "timestamp": "2022-12-31T00:00:00Z",
- "idempotencyKey": "fb492b5e-7907-4d83-ba20-c7fb60ca35de",
- "success": true
}
]Cancel the payment with the specified reference id.
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
| Vipps-System-Name | string <= 30 characters Example: WooCommerce The name of the ecommerce solution. One word in lowercase letters is good. See http-headers. |
| Vipps-System-Version | string <= 30 characters Example: 5.4.0 The version number of the ecommerce solution. See http-headers. |
| Vipps-System-Plugin-Name | string <= 30 characters Example: woocommerce-payment The name of the ecommerce plugin (if applicable). One word in lowercase letters is good. See http-headers. |
| Vipps-System-Plugin-Version | string <= 30 characters Example: 1.2.1 The version number of the ecommerce plugin (if applicable). See http-headers. |
New CancelModificationRequest body.
| cancelTransactionOnly | boolean Only cancel transaction if it has not been authorized. If this flag is set and the transaction has been authorized, the reserved amount will not be canceled. |
{- "cancelTransactionOnly": true
}{- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "state": [
- "AUTHORIZED"
], - "aggregate": {
- "authorizedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "cancelledAmount": {
- "currency": "NOK",
- "value": 49900
}, - "capturedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "refundedAmount": {
- "currency": "NOK",
- "value": 49900
}
}, - "pspReference": "3343121302",
- "reference": "acme-shop-123-order123abc"
}Capture the given payment
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
| Idempotency-Key required | string <= 50 characters Example: fb492b5e-7907-4d83-ba20-c7fb60ca35de A unique key that prevents duplicate requests from being processed more than once. See idempotency |
| Vipps-System-Name | string <= 30 characters Example: WooCommerce The name of the ecommerce solution. One word in lowercase letters is good. See http-headers. |
| Vipps-System-Version | string <= 30 characters Example: 5.4.0 The version number of the ecommerce solution. See http-headers. |
| Vipps-System-Plugin-Name | string <= 30 characters Example: woocommerce-payment The name of the ecommerce plugin (if applicable). One word in lowercase letters is good. See http-headers. |
| Vipps-System-Plugin-Version | string <= 30 characters Example: 1.2.1 The version number of the ecommerce plugin (if applicable). See http-headers. |
Requested capture modification
required | object (Amount) Amount object, containing a | ||||
| |||||
{- "modificationAmount": {
- "currency": "NOK",
- "value": 49900
}
}{- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "state": [
- "AUTHORIZED"
], - "aggregate": {
- "authorizedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "cancelledAmount": {
- "currency": "NOK",
- "value": 49900
}, - "capturedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "refundedAmount": {
- "currency": "NOK",
- "value": 49900
}
}, - "pspReference": "3343121302",
- "reference": "acme-shop-123-order123abc"
}Refund the given payment
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
| Idempotency-Key required | string <= 50 characters Example: fb492b5e-7907-4d83-ba20-c7fb60ca35de A unique key that prevents duplicate requests from being processed more than once. See idempotency |
| Vipps-System-Name | string <= 30 characters Example: WooCommerce The name of the ecommerce solution. One word in lowercase letters is good. See http-headers. |
| Vipps-System-Version | string <= 30 characters Example: 5.4.0 The version number of the ecommerce solution. See http-headers. |
| Vipps-System-Plugin-Name | string <= 30 characters Example: woocommerce-payment The name of the ecommerce plugin (if applicable). One word in lowercase letters is good. See http-headers. |
| Vipps-System-Plugin-Version | string <= 30 characters Example: 1.2.1 The version number of the ecommerce plugin (if applicable). See http-headers. |
Requested refund modification
required | object (Amount) Amount object, containing a | ||||
| |||||
{- "modificationAmount": {
- "currency": "NOK",
- "value": 49900
}
}{- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "state": [
- "AUTHORIZED"
], - "aggregate": {
- "authorizedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "cancelledAmount": {
- "currency": "NOK",
- "value": 49900
}, - "capturedAmount": {
- "currency": "NOK",
- "value": 49900
}, - "refundedAmount": {
- "currency": "NOK",
- "value": 49900
}
}, - "pspReference": "3343121302",
- "reference": "acme-shop-123-order123abc"
}This endpoint is only available in the test environment. It allows developers to approve a payment through the ePayment API without the use of the Vipps or MobilePay app. This is useful for automated testing. Express checkout is not supported for this endpoint. Attempted use in production is not allowed, and will fail. Important: All test users must manually approve at least one payment in the Vipps or MobilePay app before this endpoint can be used for that user.
| Reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ Example: acme-shop-123-order123abc The |
| Merchant-Serial-Number required | string (MSNType) [ 4 .. 10 ] characters ^[0-9]{4,10}$ Example: 1234567 The merchant serial number (MSN) for the sales unit. |
| Ocp-Apim-Subscription-Key required | string Example: da7d5b0e18a84aeda961c0c31b75c2a9 The subscription key for a sales unit. See API keys. |
Force approve request body
Customer phone number (object) or Personal QR code (object) or Customer token (object) (Customer) The target customer if the identity is known. The customer can be specified either with phone number, the customer token or with the user's personal QR code Specifying more than one of these will result in an error. | |
| token | string The token value received in the |
{- "customer": {
- "phoneNumber": "4712345678"
}, - "token": "string"
}These endpoints are used by Vipps MobilePay to communicate with you as the merchant, and must be implemented on your side.
Implement this endpoint on your server to provide dynamic shipping options. Vipps MobilePay will POST to this URL with the user's address and a token. Your response must include an array of shipping groups. Your URL must use HTTPS and a common port (80, 443, or 8080). See the API guide for URL validation requirements.
| Authorization | string^[a-zA-Z0-9-]{1,50}$ Example: ae0cb90d91b4a84a The token provided by the merchant in the create payment request, in the |
Available shipping groups.
| reference required | string (ReferenceType) [ 8 .. 64 ] characters ^[a-zA-Z0-9-]{8,64}$ The |
| AddressLine1 required | string The first line of the recipient's address (e.g., street name and number). |
| AddressLine2 | string or null Additional address information, such as apartment, suite, or attention line. Optional. |
| City required | string The city or locality of the address. |
| PostCode required | string The postal code of the address in local country format. |
| Country required | string The country of the address in ISO 3166-1 alpha-2 format (e.g., NO for Norway, DK for Denmark, FI for Finland). |
{- "reference": "acme-shop-123-order123abc",
- "AddressLine1": "Robert Levins gate 5",
- "AddressLine2": "Apt 3",
- "City": "Oslo",
- "PostCode": "0154",
- "Country": "NO"
}{- "groups": [
- {
- "isDefault": true,
- "priority": 0,
- "type": "HOME_DELIVERY",
- "brand": "POSTEN",
- "options": [
- {
- "id": "pickup-123",
- "isDefault": true,
- "amount": {
- "currency": "NOK",
- "value": 49900
}, - "name": "Pickup at Posten Store",
- "priority": 1,
- "meta": "Keybox code required",
- "estimatedDelivery": "string"
}
]
}
]
}This endpoint is only relevant if you are a PSP (Payment Services Provider).
This is the endpoint where Vipps MobilePay will send card information to the PSP as part of the card passthrough flow. Either a network token or an encrypted PAN will be sent, depending on the cardDataType field in the request. The PSP should use this information to perform the authorization and return the result.
The PSP must respond with a status of RESERVE, SOFT_DECLINE, or FAIL.
RESERVE, the networkTransactionReference must be included.SOFT_DECLINE, the softDeclineUrl must be included.FAIL, errorCode and errorMessage must be included.Request authentication
All requests to this endpoint are signed using HMAC-SHA256 with the PSP's client_secret as the signing key. To verify a received request:
Verify payload integrity — compute the SHA-256 hash of the raw request body, base64-encode it, and compare the result against the x-ms-content-sha256 header value.
Verify the signature — construct the string to sign by concatenating the HTTP method, path and query string, date, host, and content hash in the following format (note: \n newlines, not \r\n):
POST\n<pathAndQuery>\n<date>;<host>;<contentHash>
Sign this string with HMAC-SHA256 using the PSP's client_secret and base64-encode
the result. It must match the Signature value in the Authorization header.
Both Authorization and X-Vipps-Authorization use the same signing scheme and can be verified independently.
| Authorization required | string Example: HMAC-SHA256 SignedHeaders=x-ms-date;host;x-ms-content-sha256&Signature=agAiSyogQbDHpeucoNwYz+yAr5nJ+v+zasdkSbqzv+U= HMAC-SHA256 authentication header. Format: |
| X-Vipps-Authorization required | string Example: HMAC-SHA256 SignedHeaders=x-ms-date;host;x-ms-content-sha256&Signature=agAiSyogQbDHpeucoNwYz+yAr5nJ+v+zasdkSbqzv+U= Secondary HMAC-SHA256 authorization header, identical in format to |
| x-ms-date required | string Example: Mon, 18 Feb 2026 15:33:00 GMT The UTC date and time of the request in RFC 1123 format. Used as part of the HMAC signature. |
| x-ms-content-sha256 required | string Example: lNlsp1XA03N34HrQsVzPgJKtC+r7l/RBF4V3JQUWMj4= Base64-encoded SHA-256 hash of the raw request body. Used to verify that the content has not been tampered with. |
| pspReference required | string Your unique reference for this payment, as provided in the create payment request. |
| authorizationAttemptId required | string <uuid> Unique identifier for this authorization attempt. |
| merchantSerialNumber required | string The merchant serial number for the payment. |
required | object (Amount) Amount object, containing a |
| softDeclineCompletedRedirectUrl | string URL to redirect to after a soft decline is resolved. |
required | object (CardInfo) Card details included in the PSP card callback. |
{- "pspReference": "7686f7788898767977",
- "authorizationAttemptId": "731C95C5-7E8B-40C3-A6EA-713B24694E6E",
- "merchantSerialNumber": "123456",
- "cardInfo": {
- "maskedCardNumber": "47969485XXXX1234",
- "cardType": "VISA-DEBIT",
- "cardIssuedInCountryCode": "DK",
- "cardDataType": "TOKEN",
- "networkToken": {
- "number": "5000000000000000001",
- "cryptogram": "aFgdgjdkfgjdFDF=",
- "expiryMonth": "03",
- "expiryYear": "2030",
- "tokenType": "VISA",
- "eci": "7",
- "paymentAccountReference": "5001BO8B9NXVVIXCT0HAJU98I512Z"
}
}, - "amount": {
- "value": 1000,
- "currency": "DKK"
}
}{- "status": "RESERVE",
- "networkTransactionReference": "ABC123XYZ"
}