> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).

# Express checkout for Apple Pay

Present customers with a seamless, one-click payment experience on mobile when using Apple Pay. Express checkout is optimized for mobile purchases, prioritizing Apple Pay and capturing customer information from Apple Wallet.

---

## What's new?

We've released [express checkout](https://developer.paddle.com/concepts/sell/express-checkout.md), a new checkout variant designed for mobile that prioritizes digital wallets for a frictionless, one-click payment experience.

It's available for [Apple Pay](https://developer.paddle.com/concepts/payment-methods/apple-pay.md), using Apple Wallet to capture customer email address, plus IP address geolocation for address details.

You can integrate using [Paddle.js](https://developer.paddle.com/paddle-js.md) or [hosted checkout](https://developer.paddle.com/concepts/sell/hosted-checkout-mobile-apps.md).

## How it works

Express checkout is a [checkout](https://developer.paddle.com/concepts/sell/self-serve-checkout.md) variant designed for mobile. It prioritizes [Apple Pay](https://developer.paddle.com/concepts/payment-methods/apple-pay.md), presenting it first to customers, and uses details from Apple Wallet to capture customer email address.

Behind the scenes, Paddle Checkout uses the customer's IP address to estimate the correct tax and pricing before the checkout loads, eliminating the need for customers to enter their address details before opening Apple Pay.

If Apple Pay is unavailable on the customer's device, the checkout automatically falls back to alternative payment methods.

{% callout type="info" %}
You must [verify your domain for Apple Pay](https://developer.paddle.com/concepts/payment-methods/apple-pay#verify-your-domain-for-apple-pay.md) to offer the one-click experience in express checkout.
{% /callout %}

{% journey-comparison %}

{% comparison-column title="Existing checkout" %}

{% comparison-step title="Checkout opens with the card form and option to pay with Apple Pay" %}

{% /comparison-step %}

{% comparison-step title="Customer selects Apple Pay, then enters their details" %}

{% /comparison-step %}

{% comparison-step title="Customer confirms with Apple Pay" %}

{% /comparison-step %}

{% comparison-step title="Payment complete" %}

{% /comparison-step %}

{% /comparison-column %}

{% comparison-column title="Express checkout" %}

{% comparison-step title="Checkout opens with Apple Pay as the first payment method" %}

{% /comparison-step %}

{% comparison-step title="Customer enters details and confirms with Apple Pay" %}

{% /comparison-step %}

{% comparison-step title="Payment complete" %}

{% /comparison-step %}

{% /comparison-column %}

{% /journey-comparison %}

## Examples

{% accordion %}
{% accordion-item title="Open an express checkout" %}

This example shows the minimal configuration to open an express checkout:

```typescript
import { initializePaddle, Paddle } from '@paddle/paddle-js';

const paddleInstance: Paddle | undefined = await initializePaddle({
  token: 'live_7d279f61a3499fed520f7cd8c08',
});

if (paddleInstance) {
  paddleInstance.Checkout.open({
    items: [
      { priceId: 'pri_01gm81eqze2vmmvhpjg13bfeqg', quantity: 1 },
      { priceId: 'pri_01gm82kny0ad1tk358gxmsq87m', quantity: 1 },
    ],
    settings: {
      displayMode: 'inline',
      variant: 'express',
      frameTarget: 'checkout-container',
      frameInitialHeight: 182,
    },
  });
}
```

{% /accordion-item %}
{% accordion-item title="Open an express checkout with prefilled customer information" %}

This example opens an express checkout with prefilled customer details, overriding details captured from Apple Wallet and IP address geolocation:

```typescript
import { initializePaddle, Paddle } from '@paddle/paddle-js';

const paddleInstance: Paddle | undefined = await initializePaddle({
  token: 'live_7d279f61a3499fed520f7cd8c08',
});

if (paddleInstance) {
  paddleInstance.Checkout.open({
    items: [
      { priceId: 'pri_01gm81eqze2vmmvhpjg13bfeqg', quantity: 1 },
      { priceId: 'pri_01gm82kny0ad1tk358gxmsq87m', quantity: 1 },
    ],
    customer: {
      email: 'sam@example.com',
      address: {
        countryCode: 'US',
        postalCode: '10001',
      },
    },
    settings: {
      displayMode: 'inline',
      variant: 'express',
      frameTarget: 'checkout-container',
      frameInitialHeight: 182,
    },
  });
}
```

{% /accordion-item %}
{% accordion-item title="Hosted checkout URL with express checkout" %}

This example passes a price ID along with `variant=express` to open a hosted checkout as an express checkout for Apple Pay.

```sh {% wrap=true %}
https://pay.paddle.io/checkout/hsc_01jt8s46kx4nv91002z7vy4ecj_1as3scas9cascascasasx23dsa3asd2a?price_id=pri_01h1vjg3sqjj1y9tvazkdqe5vt&variant=express
```

{% /accordion-item %}
{% /accordion %}

{% callout type="warning" %}
Some parameters aren't compatible with `variant: 'express'` or are ignored when set. See the [`Paddle.Checkout.open()` reference](https://developer.paddle.com/paddle-js/methods/paddle-checkout-open.md) and [hosted checkout reference](https://developer.paddle.com/paddle-js/hosted-checkout.md) for the full list of restrictions.
{% /callout %}

## Next steps

Express checkout for Apple Pay is now generally available.

To get started, [verify your domain for Apple Pay](https://developer.paddle.com/concepts/payment-methods/apple-pay#verify-your-domain-for-apple-pay.md), then pass `variant: 'express'` in your Paddle.js settings or `variant=express` as a query parameter in your hosted checkout URL.

To learn more, see the [express checkout concept guide](https://developer.paddle.com/concepts/sell/express-checkout.md).
## Summary of changes

| Name | Type | Change | Entity | Description |
| --- | --- | --- | --- | --- |
| `settings.variant` | Enum value | added | Paddle.Checkout.open() | New `express` enum value to enable express checkout for Apple Pay. Must be used with `displayMode: 'inline'`. |
| `settings.showNonExpressPaymentMethods` | Paddle.js param | added | Paddle.Checkout.open() | Boolean to control whether the option to pay another way is shown when `variant` is `express`. Defaults to `true`. |
| `variant` | Paddle.js param | added | Hosted checkout URL parameters | Set to `express` to enable express checkout for Apple Pay on hosted checkout. |
