---
title: Enable digital wallets
slug: enable-digital-wallets
docTags: 
createdAt: 2026-10-02T17:31:22.755Z
---

:::hint{type="warning"}
Apple Pay and Google Pay are enabled per account. Contact [Jetpay support](mailto\:jetpay@baselinepayments.com) to turn them on.
:::

Let customers pay with a digital wallet in the payment form you already embed at checkout. Currently supported:

- Apple Pay
- Google Pay

There are no changes to your API integration. Once wallets are enabled on your account, the buttons appear in the payment form automatically. You only need to update your iframe and, for Apple Pay in production, verify your domain.

***

## Prerequisites

- [Getting your API Key](docId:_zgmIm7QKrrAoX9JjaQrL)
- A checkout that embeds the Jetpay payment form in an iframe. If you haven't built this yet, start with [Collect a payment method at checkout](docId:\<CHECKOUT_DOC_ID>).
- Apple Pay and Google Pay enabled on your account by Jetpay

***

## Setup overview

```mermaid
sequenceDiagram
    autonumber
    participant Platform
    participant Jetpay

    Platform->>Jetpay: Ask support to enable Apple Pay and Google Pay
    Platform->>Platform: Add allow="payment" to the iframe
    Note over Platform,Jetpay: Demo is ready to test at this point
    Jetpay-->>Platform: Send the Apple domain association file
    Platform->>Platform: Host the file on each production checkout domain
    Platform->>Jetpay: Send your production domains
    Jetpay->>Jetpay: Register the domains with Apple Pay
```

***

## Implementation details

### Allow payments in your iframe

Safari won't show Apple Pay inside an iframe from another domain unless the iframe allows it. Add `allow="payment"` to the iframe that loads the payment form URL from [`POST /transaction/{identifier}/pay-debit/url`](https://extapi.jetpay.baselinepayments.com/docs#tag/Transactions-\(v0\)/operation/generate_payment_form_url_transaction__identifier__pay_debit_url_post).

```html
<iframe
  src="<payment_form_url>"
  allow="payment"
  title="Payment form">
</iframe>
```

This is the only change you need to test in the demo environment.

### Host the Apple domain association file (production)

For Apple Pay in production, Apple has to confirm you own the domain your customers see in the address bar. Jetpay sends you the domain association file.

Host it, unchanged, at this exact path on every domain where customers check out:

```javascript
https://<your_domain>/.well-known/apple-developer-merchantid-domain-association
```

Check that the file is publicly reachable before you move on:

```curl
curl -i https://checkout.example.com/.well-known/apple-developer-merchantid-domain-association
```

You should get an HTTP `200` with the file's contents. Some hosting platforms don't publish folders whose names start with a dot, so if you get a `404`, check your host's settings for `.well-known`.

### Send us your domains (production)

Once the file is live, send each production checkout domain to [Jetpay support](mailto\:jetpay@baselinepayments.com). Include every subdomain separately, for example both `example.com` and `checkout.example.com`. We register them for Apple Pay, and the button starts showing on those domains.

Google Pay needs no extra steps from you.

***

## Handling failures

**The Apple Pay button doesn't appear.** The payment form hides the button without showing an error. Check, in order:

1. The iframe has `allow="payment"`.
2. You're testing in Safari.
3. In production, the domain association file loads at the exact path above on the domain in the address bar.
4. In production, you've sent us that exact domain, including its subdomain.

**Domain registration fails.** We can only register a domain once Apple can reach the file on it. Run the `curl` check above, fix any `404`, and let us know so we can try again.

**It works in demo but not in production.** Demo only needs `allow="payment"`. Production also needs the hosted file and a registered domain.

***

## Testing

Test in the demo environment first:

1. Add `allow="payment"` to your iframe.
2. Open your checkout in Safari on a Mac or iPhone and confirm the Apple Pay button appears.
3. Open it in Chrome and confirm the Google Pay button appears.

You don't need the domain association file or a registered domain in demo. In browsers other than Safari, Apple Pay may show a QR code so the customer can finish on their iPhone instead.

Before you go live, run the `curl` check against each production domain.

***

## Best practices

- **Add&#x20;**`allow="payment"`**&#x20;everywhere you embed the form.** Ship it in every environment so demo and production behave the same.
- **Host the file before you send us a domain.** Registration fails if Apple can't reach it.
- **Keep the file in place.** Don't remove or change it after setup.
- **List every checkout domain.** Staging, regional and white-label domains each need their own registration if customers pay there in production.

***

## FAQ

**Do I need to change my API calls?**
No. You use the same payment form URL. The wallet buttons appear in the form once they're enabled on your account.

**Which domain do I register: mine or Jetpay's?**
Yours. Apple checks the domain shown in the customer's address bar, which is your checkout page, not the payment form inside the iframe.
