> **Description:** Streamline your checkout process by letting customers select shipping options and confirm delivery details directly within the Vipps or MobilePay app.

# Express

Streamline your checkout process by letting customers select shipping options and confirm delivery details directly within the Vipps or MobilePay app.
For a visual walkthrough of the customer's experience with Express, see [How Express works](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/how-it-works/express.md).

**TIP**

For a visual walkthrough of the customer's experience with Express, see [How Express works](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/how-it-works/express.md).

## Overview

With the *Express* feature, you can provide users with groups of shipping options,
which they can then choose from within the
Vipps  or MobilePay  app.
Place the *Express* button on your checkout screen or your product screens.

Four-screen Express flow (Vipps or MobilePay): (1) Product page with Express button. (2) Information sharing consent screen. (3) Delivery options with pick-up point and home delivery. (4) Payment summary.

The customer can update their address, if needed.

Express delivery address selection screen (Vipps or MobilePay): pre-filled current address with an option to search or enter a different delivery address.

The customer can select the delivery option from the main screen.

If additional options are available, the customer can select *Change* to view them in a new panel.
They can then choose their preferred option and return to the main screen.

Express shipping options screen (Vipps or MobilePay) showing available delivery methods such as pick-up points and home delivery, with estimated delivery dates.

The Express flow is as follows:

1. The user selects to pay with Vipps  or MobilePay .
   - If they are on a PC, they will go through the [Vipps MobilePay landing page](https://developer.vippsmobilepay.com/docs/knowledge-base/landing-page.md),
   where they enter their phone number and the app opens.
   - If they are on a phone, their app will open, and they will switch to it.
1. In their Vipps or MobilePay app, they will provide consent for sharing their name, address, phone number, and email address with the merchant.
1. They then choose one of the displayed shipping options.
1. On the last page, the user confirms the final payment. The amount shown will include the shipping.
1. They will be directed back to your website, where you should show a confirmation of the payment.

## User consent and privacy

**Privacy terms**

As part of the Express flow, you will get access to the user's personal information.
Ensure that you comply with our [privacy terms](https://vippsmobilepay.com/en-NO/legal/terms-privacy).

Users must approve sharing their profile information in order to proceed with Express. They can remove this consent later through their Vipps  or MobilePay  app.

We recommend that you don't keep their information any longer than needed for the shipping to be completed.

For more about profile sharing, see [Profile sharing feature](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/api-guide/features/profile-sharing.md).

## Limitations

- The shipping address must be within the same country as the merchant's sales unit registration.
  *For example: If the sales unit is registered in Denmark, only Danish shipping addresses are allowed.*

- The transaction currency must match the country where the sales unit is registered.
  *For example: A sales unit registered in Denmark must use Danish kroner (DKK).*

## Authorization

All ePayment API requests must include a valid Bearer token in the `Authorization` header.
See [Authorization](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/api-guide/concepts.md#authorization) for how to obtain one.

## Create an express payment

*Express* is initiated by sending a [create payment](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml) request with the following settings:

- Include the `shipping` property, filled out as described in  [Shipping options](#shipping-options)
- Set `paymentMethod` to `WALLET`
- Set `profile.scope` to `"name address email phoneNumber"` (use exactly these values -- no more, no less. Adding other values will cause the request to fail.)

All four scope values are required for Express payments -- they can't be left out or changed. For more about requesting customer profile information, see [Profile sharing](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/api-guide/features/profile-sharing.md).

See a detailed example

```json
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 '{
  "amount":{
    "currency":"NOK",
    "value":6000
    },
    "customer":{
        "phoneNumber":"4712345678"
    },
    "paymentMethod":{
        "type":"WALLET"
    },
    "profile": {
        "scope": "name address email phoneNumber"
    },
  "shipping": {
    "fixedOptions": [
        {
            "isDefault": true,
            "priority": 0,
            "type": "PICKUP_POINT",
            "brand": "POSTNORD",
            "options": [
                {
                    "id": "meny_grunerlokka",
                    "isDefault": true,
                    "amount": {
                        "currency": "NOK",
                        "value": 3900
                        },
                    "priority": 0,
                    "name": "Meny Grünerløkka",
                    "meta": "Henrik Ibsens Gate 1, 0000 Oslo",
                    "estimatedDelivery": "In 2 days"
                },
                {
                    "id": "bunnpris_skoyen",
                    "isDefault": false,
                    "amount": {
                        "currency": "NOK",
                        "value": 3900
                        },
                    "name": "Bunnpris Skøyen",
                    "priority": 1,
                    "meta": "Gatenavn 21, 0001 Oslo",
                    "estimatedDelivery": "In 2 days"
                }
            ]
        }
        ]
    },
  "reference": 2810171754658432260,
  "userFlow": "WEB_REDIRECT",
  "returnUrl": "https://developer.vippsmobilepay.com/docs/example-pages/result-page/",
  "paymentDescription": "Purchase of socks"
}'
```

### Shipping options

In the `shipping` property, you can specify either  `fixedOptions` or `dynamicOptions` (not both).

  If you know the delivery options in advance, send only `fixedOptions`.

- [Fixed options](#fixed-options) - Specify all the shipping options.
- [Dynamic options](#dynamic-options) - Register a callback to generate dynamic options (optional)

**Important**

When using [Fixed options](#fixed-options), the user's address must correspond to the currency in use.

With [Dynamic options](#dynamic-options), you have the flexibility to decide whether the address is supported.
If shipping to the specified address is not possible, return a `400` in the [callback response](#callback-response).
The app will then notify the user that delivery to the selected address is unavailable.

#### Fixed options

When you know the shipping options in advance, supply these through the `shipping.fixedOptions` property.
We accept only one of these options: `fixedOptions` or `dynamicOptions`, so please don't supply `dynamicOptions` if you already
know what the shipping options should be.

The `fixedOptions` property contains an array of one or more shipping groups.

Here is an example showing one type of shipping (e.g., home delivery with PostNord) and two options (standard or express delivery).

```json
 "shipping": {
        "fixedOptions": [
            {
                "brand": "POSTNORD",
                "type": "HOME_DELIVERY",
                "options": [
                    {
                        "id": "postnord-home-1",
                        "amount": {
                            "currency": "NOK",
                            "value": 19900
                        },
                        "name": "Posten home express",
                        "estimatedDelivery": "1 business day"
                    },
                    {
                        "id": "postnord-home-2",
                        "amount": {
                            "currency": "NOK",
                            "value": 9900
                        },
                        "name": "Posten home standard",
                        "estimatedDelivery": "3-5 business days"
                    }
                ]
            }
        ]
    }
```

As with other ePayment API requests, the `value` field is in minor units (e.g., 9900 is 99,- NOK).

##### Shipping groups

Each shipping group contains all the parameters needed for a shipping method.

The properties for each shipping group are:

- `type` (required): Enum specifying the delivery type: `HOME_DELIVERY`, `PICKUP_POINT`, `MAILBOX`, `IN_STORE`, `OTHER`
- `brand` (required): Enum representing the shipping provider (e.g., `BRING`, `DHL`). We'll add the logo based on the vendor in the apps.
    Here are the options (see [Brand logos](#brand-logos)):
    `BRING`, `DHL`, `FEDEX`, `GLS`, `HELTHJEM`, `INSTABOX`, `MATKAHUOLTO`, `PORTERBUDDY`, `POSTEN`, `POSTI`, `POSTNORD`, `OTHER`
- `isDefault`: Boolean indicating whether this method is the default option. The default value is `false`. If no default is found, then the first option will be preselected.
- `priority`: Integer defining the display order (lower numbers appear higher in the app). If no priority is set, we show your options in the order you provide them. If some options have a priority set and others not, we'll show the prioritized options first and show the remaining options in the order you have specified them.
- `options` (required): This is an array with one or more delivery options for a shipping group. This is used for showing options with small differences, such as pickup locations or delivery times. Each array element contains the following:
  - `id` (required): Unique identifier for the shipping option. The ID of the selected option will be returned in the API after the payment is completed.
  - `amount` (required): Cost of the shipping in `currency` and `value` (e.g., NOK 3900 = NOK 39.00).
  - `name` (required): Name of the delivery point or store.
  - `isDefault`: Boolean indicating whether this is the default selection.
  - `priority`: Determines the order that options appear in the app, with lower numbers appearing higher.
  - `meta`: Additional information such as address or opening hours.
  - `estimatedDelivery`: Expected delivery (e.g., 'Ready in 2 hours', '17:00-19:00', '1-2 Days').

For more details, see the [Create payment spec](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml).

###### How the fields map to the app

Screenshot: Vipps Express shipping selection screen annotated to show how API fields map to UI elements -- shipping option title, description, price, meta text, and estimated delivery date are all labeled.

###### Shipping group with one option

An example of a shipping group with only one option:

```json
 "shipping": {
        "fixedOptions": [
            {
                "brand": "POSTNORD",
                "type": "HOME_DELIVERY",
                "options": [
                    {
                        "id": "postnord_home_1",
                        "amount": {
                            "currency": "NOK",
                            "value": 4900
                        },
                        "name": "Delivery to your door"
                    }
                ]
            }
        ]
    }
```

Full HTTP POST example

```bash
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 '{
     "shipping": {
        "fixedOptions": [
            {
                "brand": "POSTNORD",
                "type": "HOME_DELIVERY",
                "options": [
                    {
                        "id": "postnord_home_1",
                        "amount": {
                            "currency": "NOK",
                            "value": 4900
                        },
                        "name": "Delivery to your door"
                    }
                ]
            }
        ]
    },
    "paymentMethod": {
        "type": "WALLET"
    },
    "profile": {
        "scope": "name address email phoneNumber"
    },
    "amount": {
        "currency": "NOK",
        "value": 49900
    },
    "customer": {
        "phoneNumber": "4512345678"
    },
    "reference": "acme-shop-123-order123abc",
    "returnUrl": "https://developer.vippsmobilepay.com/docs/example-pages/result-page/",
    "userFlow": "WEB_REDIRECT",
    "paymentDescription": "Descriptive message"
}'
```

###### Shipping group with multiple options

If you have more than one shipping option with the same brand and type (e.g., Postnord pickup points, PorterBuddy delivery times), add these to `options`.
You can specify the `priority` property, where lower numbers appear higher in the app, otherwise we will display them in the order you send them.
To set a default, use `isDefault`.

An example of a shipping group with two options (i.e., pickup points):

```json
"shipping": {
        "fixedOptions": [
            {
                "brand": "BRING",
                "type": "PICKUP_POINT",
                "options": [
                    {
                        "id": "bring_pickup_1",
                        "isDefault": true,
                        "amount": {
                            "currency": "NOK",
                            "value": 3900
                        },
                        "priority": 0,
                        "name": "Gellerup Shoppen",
                    },
                    {
                        "id": "bring_pickup_2",
                        "amount": {
                            "currency": "NOK",
                            "value": 3900
                        },
                        "name": "Pakkeboks Bazar Vest",
                        "priority": 1,
                    }
                ]
            }
        ]
    }
```

###### Multiple shipping groups

Create a new shipping group for each unique brand and delivery type.
For example, if you offer `POSTNORD` for `HOME_DELIVERY` and `PICKUP_POINT`, provide two shipping groups.

An example with two shipping groups (i.e., same brand, different type of shipping):

```json
    "shipping": {
        "fixedOptions": [
            {
                "brand": "BRING",
                "type": "PICKUP_POINT",
                "options": [
                    {
                        "id": "bring_pickup_1",
                        "isDefault": true,
                        "amount": {
                            "currency": "NOK",
                            "value": 3900
                        },
                        "priority": 0,
                        "name": "Gellerup Shoppen",
                    },
                    {
                        "id": "bring_pickup_2",
                        "amount": {
                            "currency": "NOK",
                            "value": 3900
                        },
                        "name": "Pakkeboks Bazar Vest",
                        "priority": 1,
                    }
                ]
            },
            {
                "brand": "BRING",
                "type": "HOME_DELIVERY",
                "options": [
                    {
                        "id": "bring_home_1",
                        "amount": {
                            "currency": "NOK",
                            "value": 2900
                        },
                        "name": "Delivery to your door",
                    }
                ]
            }
        ]
    },
```

###### Shipping groups containing time slots

Some companies, such as Porterbuddy, offer dates with time slots.

Screenshot: Vipps Express shipping selection screen showing Porterbuddy time-slot delivery options grouped by date, each with a time window and price (e.g., "Tomorrow 17:00-19:00 - 99 kr").

Here's a clear way to present delivery options when companies like Porterbuddy provide both dates and time slots:

- `name`: The shipment date (e.g., `"Tuesday 2026-01-30"`)
- `estimatedDelivery`: The delivery time slot for that date (e.g., `"17:00 - 19:00"`)
- `priority`: Start from 0 for the earliest time slot, then count up (0 is the first slot, 1 is next, and so on)

For example, add the following to your [`POST:/epayment/v1/payments`](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml) request:

```json
 "shipping": {
        "fixedOptions": [
            {
                "brand": "PORTERBUDDY",
                "type": "HOME_DELIVERY",
                "options": [
                    {
                        "id": "porterbuddy_4417",
                        "amount": {
                            "currency": "NOK",
                            "value": 3900
                        },
                        "name": "Tuesday 2026-01-13",
                        "estimatedDelivery": "17:00 - 19:00"
                    },
                    {
                        "id": "porterbuddy_5410",
                        "amount": {
                            "currency": "NOK",
                            "value": 1900
                        },
                        "name": "Wednesday 2026-01-14",
                        "estimatedDelivery": "10:00 - 12:00"
                    }
                ]
            }
        ]
    },
```

#### Dynamic options

**TIP**

If you already know the available shipping options, you don't need to send dynamic options.

Instead, use `fixedOptions` to avoid the extra communication between our backend and your server. This makes the checkout faster and reduces the risk of drop-offs or errors.

Only use dynamic options when you don't know the user's address and need us to send it to you, so that you can respond with the relevant delivery options. If you already have the address or fixed delivery destinations (for example, in-store pickup), use fixed options.

Dynamic shipping options let you provide live delivery methods based on the user's address.

We send the user's address to your callback endpoint, and you return one or more groups of shipping options. These are then shown to the user on the shipping screen in the Vipps  or MobilePay  app.

Enable dynamic shipping by setting `shipping.dynamicOptions` in the
[create payment](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml) request.

To use dynamic options, include:

- **`callbackUrl`** - URL to your callback endpoint.
- **`callbackAuthorizationToken`** - Token used to securely authorize callbacks from our servers.

For example, add the following to the [`POST:/epayment/v1/payments`](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml) request.

```json
"shipping": {
  "dynamicOptions": {
    "callbackUrl": "https://example.com/shipping",
    "callbackAuthorizationToken": "Bearer eyJhbGciOi..."
  }
}
```

For more details, see the [Create payment spec](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml).

##### Callback request

We will provide the address to you as a JSON object with the following properties:

- **`reference`** (required): The unique identifier for the payment, specified when initiating the payment.
- **`AddressLine1`** (required): First address line.
- **`AddressLine2`** Second address line.
- **`City`** (required): City name.
- **`PostCode`** (required): Postcode of the address in local country format.
- **`Country`** (required): The country of the address in ISO 3166-1 alpha-2 format.

For example:

```json
{
"Reference": "stracme-shop-123-order123abcing",
"AddressLine1": "Robert Levins gate 5",
"AddressLine2": "Apt 4",
"City": "Oslo",
"PostCode": "0154",
"Country": "NO"
}
```

For more details, see the callback section of the [Create payment spec](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml).

##### Callback response

Your server should respond with the addresses in this JSON format:

`{ "groups": [ {shipping options 1}, {shipping options 2}, ... ] }`

The `groups` property contains an array with one or more shipping groups.
Each shipping group contains the properties as described in the [Shipping groups](#shipping-groups).

For example:

```json
{
  "groups": [
    {
      "isDefault": true,
      "priority": 0,
      "type": "PICKUP_POINT",
      "brand": "POSTNORD",
      "options": [
        {
          "id": "meny_grunerlokka",
          "isDefault": true,
          "amount": {
            "currency": "NOK",
            "value": 3900
          },
          "priority": 0,
          "name": "Meny Grünerløkka",
          "meta": "Henrik Ibsens Gate 1, 0000 Oslo",
          "estimatedDelivery": "In 2 days"
        },
        {
          "id": "bunnpris_skoyen",
          "isDefault": false,
          "amount": {
              "currency": "NOK",
              "value": 3900
              },
          "name": "Bunnpris Skøyen",
          "priority": 1,
          "meta": "Gatenavn 21, 0001 Oslo",
          "estimatedDelivery": "In 2 days"
        }
      ]
    }
  ],
}
```

## Get payment details

When you [create an Express payment](#create-an-express-payment)
and the user gives their consent, you will receive `shippingDetails` and `userDetails` in the
[`GET:/epayment/v1/payments/{reference}`](https://developer.vippsmobilepay.com/redocusaurus/epayment-swagger-id.yaml) response.
You can also get this information through the [ePayment webhook payload](https://developer.vippsmobilepay.com/docs/APIs/epayment-api/api-guide/webhooks.md#webhook-payload).

The `shippingDetails` object provides information about the shipment:

- `address` - An object that holds the recipient's shipping address, including: `addressLine1`, `addressLine2`, `city`, `country`, `postCode`.
- `shippingCost` - The cost of shipping, specified in minor currency units. For example, 9900 (99.00 NOK).
- `shippingOptionId` - The ID of the selected shipping option.
- `shippingOptionName` - The name of the selected shipping option.

The `userDetails` object contains `email`, `firstName`, `lastName`, `mobileNumber`, and `addresses`.

For example:

```json
"shippingDetails": {
    "address": {
        "addressLine1": "BOKS 6300, ETTERSTAD",
        "addressLine2": "",
        "city": "OSLO",
        "country": "NO",
        "postCode": "0603"
    },
    "shippingCost": 0,
    "shippingOptionId": "posten2",
    "shippingOptionName": "Postibutikk"
},
"userDetails": {
    "email": "test.user@example.com",
    "firstName": "Test",
    "lastName": "User",
    "mobileNumber": "4712345678",
    "addresses": [
        {
            "addressLine1": "BOKS 6300, ETTERSTAD",
            "addressLine2": "",
            "city": "OSLO",
            "country": "NO",
            "postCode": "0603"
        },
        {
            "addressLine1": "Robert Levins gate 5",
            "addressLine2": "",
            "city": "Oslo",
            "country": "NO",
            "postCode": "0152"
        }
    ]
}
```

## Sequence diagram

```mermaid
sequenceDiagram
    autonumber
    actor User
    participant Merchant as Merchant backend
    participant Vipps as ePayment

    %% --- Payment initiation ---
User->> Merchant: User click Express button
    Merchant->>Vipps: Create Express payment (POST /epayment/v1/payments)
    Note over Merchant,Vipps: amount=8000 NOK, paymentMethod=WALLET,<br />profile.scope="name address email phoneNumber",<br />shipping.fixedOptions or shipping.dynamicOptions,<br />userFlow=WEB_REDIRECT, returnUrl

    Vipps-->>Merchant: redirectUrl and payment reference
    Merchant->>User: Redirect user to Vipps/MobilePay app (redirectUrl)

    %% --- User consent ---

    Vipps->>User: Ask to share name, address, phone and email with merchant
    Note right of User: User does not yet see<br />the total amount including shipping
    User->>Vipps: Consents to share profile information

    %% --- Dynamic shipping (optional) ---

    opt Dynamic shipping (shipping.dynamicOptions)
        Vipps->>Merchant: Merchant dynamic shipping callback<br />(POST callbackUrl with reference and address)
        Merchant->>Merchant: Calculate shipping methods and costs
        Merchant-->>Vipps: Return shipping groups (shipping options)
    end

    %% --- Shipping selection and authorization ---

    Vipps->>User: Show available shipping methods
    User->>Vipps: Selects shipping option (e.g. 400 NOK)

    Vipps->>Vipps: Update payment amount (8000 + 400 = 8400 NOK)
    Vipps->>User: Ask user to confirm total amount 8400 NOK
    Note right of User: User can now see<br />the full amount
    User->>Vipps: Confirms payment
    Vipps->>Vipps: Reserve 8400 NOK on user card<br />(payment state = AUTHORIZED)

    %% --- Merchant notification and fulfillment ---

    Vipps-->>Merchant: Payment confirmed, 8400 NOK reserved<br />(webhook or GET /epayment/v1/payments/{reference})
    Note left of Merchant: Includes userDetails and shippingDetails<br />(address, shipping cost, and selected option)
    Merchant->>Merchant: Package product and hand over to carrier

    %% --- Capture and order info ---

    Merchant->>Vipps: Capture 8400 NOK
    Vipps-->>Merchant: Capture successful

    Merchant->>Vipps: Add order info / tracking link<br />(Order Management API)
    Vipps->>User: Order confirmation and tracking details
    Note right of User: User can view order and tracking<br />in Vipps/MobilePay

```

  User clicks the Express button on the merchant site.
  Merchant creates an Express payment with ePayment (POST /epayment/v1/payments) for 8000 NOK, specifying payment method WALLET, profile scope for name/address/email/phone, shipping options, user flow WEB_REDIRECT, and a returnUrl.
  ePayment returns a redirectUrl and payment reference to the merchant.
  Merchant redirects the user to the Vipps or MobilePay app via the redirectUrl.
  ePayment asks the user to consent to sharing their name, address, phone, and email with the merchant. The user does not yet see the total amount including shipping.
  User consents to sharing their profile information.
  If dynamic shipping is configured: ePayment sends a callback to the merchant with the user's address. The merchant calculates available shipping methods and costs, and returns the shipping options to ePayment.
  ePayment shows available shipping methods to the user.
  User selects a shipping option (for example, 400 NOK).
  ePayment updates the total payment amount to 8400 NOK (8000 + 400) and asks the user to confirm. The user can now see the full amount.
  User confirms the payment.
  ePayment reserves 8400 NOK on the user's card (payment state becomes AUTHORIZED).
  ePayment notifies the merchant that payment is confirmed and 8400 NOK is reserved, including user details and shipping details.
  Merchant packages the product and hands it over to the carrier.
  Merchant captures 8400 NOK via ePayment. ePayment confirms the capture is successful.
  Merchant adds order info and/or a tracking link via the Order Management API. ePayment sends order confirmation and tracking details to the user, who can view them in Vipps or MobilePay.

## Button guidelines

Choose one of these button formats for Express:

1. **"Buy now with Vipps/MobilePay"** (Recommended) - Full call-to-action text
2. **"Vipps Express / MobilePay Express"** - Compact format
3. **Icon + "Express"** - For limited width areas (e.g., shopping cart pop-ups)

**NOTE**

For **Option 3** (Icon + "Express"), use the **white logo versions**, as these are optimized for display on Vipps orange or MobilePay blue backgrounds.

Download the white icons:

- [Vipps smile icon (white)](https://developer.vippsmobilepay.com/img/vipps-smile-white.svg)
- [MobilePay logo icon (white)](https://developer.vippsmobilepay.com/img/mp-logo-white.svg)

**INFO**

**You must use the correctly translated button text for your market.** Refer to the translations below.

### Translations

The following are translations into our supported languages.

**Danish**

- Køb nu med Vipps
- Vipps Ekspres
-  Ekspres

**Finnish**

- Osta nyt Vippsillä
- Vipps Express
-  Express

**Norwegian**

- Kjøp nå med Vipps
- Vipps Ekspress
-  Ekspress

**Swedish**

- Köp nu med Vipps
- Vipps Express
-  Express

**English**

- Buy now with Vipps
- Vipps Express
-  Express

**Danish**

- Køb nu med MobilePay
- MobilePay Ekspres
-  Ekspres

**Finnish**

- Osta nyt MobilePaylla
- MobilePay Express
-  Express

**Norwegian**

- Kjøp nå med MobilePay
- MobilePay Ekspress
-  Ekspress

**Swedish**

- Køp nu med MobilePay
- MobilePay Express
-  Express

**English**

- Buy now with MobilePay
- MobilePay Express
-  Express

Button examples

**On the product page on desktop computer:**

**In the shopping cart pop-up:**

**On the product page on mobile:**

**On the product page on desktop computer:**

**In the shopping cart pop-up:**

**On the product page on mobile:**

Screenshots showing Express button placement (Vipps or MobilePay): (1) Desktop product page with a rectangular Express button below the main "Add to cart" button. (2) Shopping cart pop-up showing the app logo alongside an Express button option. (3) Mobile product page with the Express button displayed below the product details.

**TIP**

If you can dynamically generate buttons with JavaScript,
see our [JavaScript button library](https://developer.vippsmobilepay.com/docs/knowledge-base/buttons.md).

For more button resources, see:

- [Buttons design guidelines](https://brand.vippsmobilepay.com/document/61#/branding/online/buttons)

## Brand logos

Here are the brands we currently have in the app.

If you need another logo, let us know in the feedback form below.

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