> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Digital Wallets

> Accept Apple Pay, Google Pay, Amazon Pay, Cash App Pay, and RevolutPay for fast, secure one-tap checkout. Learn about setup, domain verification, and testing.

Digital wallets let customers pay with a single tap using payment methods saved on their devices. They offer higher conversion rates, stronger security through tokenization, and a streamlined checkout experience.

## Supported Wallets

| Wallet           | Availability         | Currencies | Subscriptions | Setup Required      |
| :--------------- | :------------------- | :--------- | :-----------: | :------------------ |
| **Apple Pay**    | Global (excl. India) | All        |      Yes      | Domain verification |
| **Google Pay**   | Global (excl. India) | All        |      Yes      | None                |
| **Amazon Pay**   | Global (excl. India) | USD        |       No      | None                |
| **Cash App Pay** | US only              | USD        |       No      | None                |
| **RevolutPay**   | Global               | GBP        |       No      | None                |

<Warning>
  **PayPal Support Paused:** PayPal is temporarily unavailable for new transactions.
</Warning>

## Apple Pay

Apple Pay allows customers to pay using cards saved in their Apple Wallet, with Face ID or Touch ID authentication.

<Info>
  Apple Pay is offered for subscriptions even when the first charge is \*\*$0** (for example, free trials) so the payment mandate can be set up at signup. For one-time payments, Apple Pay is only shown when the amount is greater than $0.
</Info>

### Requirements

* **Devices:** iOS 17+, iPadOS 17+, Safari 17+ on macOS
* **Protocol:** HTTPS required
* **Domain:** Must be verified with Apple

### Domain Verification

<Info>
  Domain verification is only required for **inline (embedded) checkout**. Overlay checkout, hosted checkout, and payment links don't need it.
</Info>

<Steps>
  <Step title="Open Wallet domains">
    In your dashboard, go to **Settings → Payment Methods** and, on the **Apple Pay** row, click **Manage domains**.

    <Frame caption="Open Wallet domains from the Apple Pay row">
      <img src="https://mintcdn.com/dodopayments/TklciB6vqCMDIBgH/images/apple-pay-domains/manage-domains.png?fit=max&auto=format&n=TklciB6vqCMDIBgH&q=85&s=a96c60ee0eef744336df955f5148c573" alt="Manage domains button on the Apple Pay row in Payment Methods settings" style={{ maxHeight: '500px', width: 'auto' }} width="2940" height="1670" data-path="images/apple-pay-domains/manage-domains.png" />
    </Frame>
  </Step>

  <Step title="Download the domain association file">
    From the Wallet domains panel, download the association file.

    <Frame caption="Download the Apple Pay domain association file">
      <img src="https://mintcdn.com/dodopayments/TklciB6vqCMDIBgH/images/apple-pay-domains/wallet-domains-panel.png?fit=max&auto=format&n=TklciB6vqCMDIBgH&q=85&s=fb37db780807c0e92ffaa57d2140b91d" alt="Wallet domains panel with the Download file button" style={{ maxHeight: '500px', width: 'auto' }} width="2940" height="1668" data-path="images/apple-pay-domains/wallet-domains-panel.png" />
    </Frame>
  </Step>

  <Step title="Register your domain">
    Click **Register domain** and enter the domain where you embed checkout (e.g., `shop.example.com`), then **Continue**.

    <Frame caption="Register the domain where you embed checkout">
      <img src="https://mintcdn.com/dodopayments/TklciB6vqCMDIBgH/images/apple-pay-domains/register-domain.png?fit=max&auto=format&n=TklciB6vqCMDIBgH&q=85&s=9c2bf22e51c8ff188a4e11b36b24c136" alt="Register a domain form with a domain entered" style={{ maxHeight: '500px', width: 'auto' }} width="2940" height="1672" data-path="images/apple-pay-domains/register-domain.png" />
    </Frame>
  </Step>

  <Step title="Host the file on your domain">
    Upload to your server at:

    ```
    https://shop.example.com/.well-known/apple-developer-merchantid-domain-association
    ```

    The file must be served over HTTPS, accessible without redirects, and served with `Content-Type: application/octet-stream` or `text/plain`.
  </Step>

  <Step title="Verify the domain">
    Click **Verify domain**. Dodo Payments checks the hosted file and submits your domain to Apple.

    <Frame caption="Verify the hosted association file">
      <img src="https://mintcdn.com/dodopayments/TklciB6vqCMDIBgH/images/apple-pay-domains/verify-domain.png?fit=max&auto=format&n=TklciB6vqCMDIBgH&q=85&s=e9fcfe5b68320a0a22c644fb935c840b" alt="Verify your domain screen with the association file host path and Verify domain button" style={{ maxHeight: '500px', width: 'auto' }} width="2940" height="1674" data-path="images/apple-pay-domains/verify-domain.png" />
    </Frame>
  </Step>

  <Step title="Confirm it's active">
    When the status shows **Active**, Apple Pay is live for that domain. Use the **Enabled** toggle to turn it on or off per domain.

    <Frame caption="Verified domains show an Active status">
      <img src="https://mintcdn.com/dodopayments/TklciB6vqCMDIBgH/images/apple-pay-domains/domains-active.png?fit=max&auto=format&n=TklciB6vqCMDIBgH&q=85&s=51a2bf473b1faf3db5776bbfa7140854" alt="Wallet domains list showing domains with an Active Apple Pay status and Enabled toggles" style={{ maxHeight: '500px', width: 'auto' }} width="2940" height="1670" data-path="images/apple-pay-domains/domains-active.png" />
    </Frame>
  </Step>

  <Step title="Test the integration">
    1. Open checkout on an Apple device
    2. Verify Apple Pay button appears
    3. Complete a test transaction
  </Step>
</Steps>

### Configuration

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['apple_pay', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

## Google Pay

Google Pay allows customers to pay using cards saved in their Google account, with built-in fraud protection.

### Requirements

* **Browsers:** Chrome (desktop/mobile), Safari, Firefox
* **Devices:** Android devices with Google Pay app
* **Settings:** "Allow sites to check if you have payment methods" enabled in Chrome

### Configuration

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['google_pay', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

<Info>
  No domain verification needed for Google Pay — it works automatically once your account is live.
</Info>

## Amazon Pay

Amazon Pay lets customers use their Amazon account credentials and saved payment methods for a familiar checkout experience.

### Limitations

* **Currency:** USD only
* **Subscriptions:** Not supported
* **Region:** Not available in India

### Configuration

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['amazon_pay', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

## Cash App Pay

Cash App Pay enables payments from Cash App, popular among US consumers for peer-to-peer payments.

### Limitations

* **Region:** US only
* **Currency:** USD only
* **Subscriptions:** Not supported

### Configuration

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['cashapp', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

## RevolutPay

RevolutPay enables fast, seamless payments for Revolut users globally, leveraging their existing Revolut account balance or linked cards.

### Limitations

* **Currency:** GBP only
* **Subscriptions:** Not supported

### Configuration

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['revolut_pay', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

## Testing

### Apple Pay Testing

<Steps>
  <Step title="Use test mode">
    Enable test mode in your Dodo Payments dashboard.
  </Step>

  <Step title="Add a card to Apple Wallet">
    Add a real card to your Apple Wallet. In test mode, the card won't be charged.
  </Step>

  <Step title="Complete test purchase">
    Open checkout on an Apple device and complete the Apple Pay flow.
  </Step>
</Steps>

<Warning>
  Apple Pay requires HTTPS. It won't appear on `localhost` without proper SSL setup.
</Warning>

### Google Pay Testing

<Steps>
  <Step title="Join the test card group">
    [Join the Google Pay test card group](https://groups.google.com/g/googlepay-test-mode-stub-data) to get test cards automatically added to your wallet.
  </Step>

  <Step title="Enable test mode">
    Use your Dodo Payments test API keys.
  </Step>

  <Step title="Complete test purchase">
    Select one of the test cards in Google Pay to complete the transaction.
  </Step>
</Steps>

### Amazon Pay & Cash App Pay

Use your test API keys and follow the standard checkout flow. Test transactions will be simulated without actual charges.

## SDK Support

### Web SDKs

All digital wallets are fully supported in:

* Overlay Checkout
* Inline Checkout
* Direct API integration

### Mobile SDKs

<Warning>
  **React Native Limitation:** Apple Pay, Google Pay, Cash App Pay, and UPI are **not currently supported** in the React Native SDK. Use the web-based checkout overlay for mobile apps that need these methods.
</Warning>

For native mobile support, consider:

* Opening checkout in a WebView
* Using the [Overlay Checkout](/developer-resources/overlay-checkout) in a web context
* Implementing platform-native Apple Pay / Google Pay SDKs separately

## Best Practices

<AccordionGroup>
  <Accordion title="Prioritize wallets on mobile">
    Mobile users expect Apple Pay and Google Pay. Show these options prominently on mobile checkouts.
  </Accordion>

  <Accordion title="Complete domain verification early">
    Apple Pay requires domain verification. Don't wait until launch day — start the process during development.
  </Accordion>

  <Accordion title="Always include card fallbacks">
    Not all customers have digital wallets. Always include `credit` and `debit` in your allowed methods.
  </Accordion>

  <Accordion title="Test on real devices">
    Simulators don't fully replicate wallet behavior. Test on actual iOS and Android devices before launch.
  </Accordion>

  <Accordion title="Handle wallet unavailability gracefully">
    If a wallet isn't available (wrong device, no cards saved), ensure other payment options are visible.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Apple Pay button not appearing">
    **Check:**

    1. Domain verified with Dodo Payments?
    2. Using HTTPS?
    3. Device is iOS 17+ / Safari 17+ / iPadOS 17+?
    4. Customer has cards in Apple Wallet?
    5. `apple_pay` included in `allowed_payment_method_types`?

    **Solution:** Complete domain verification and ensure HTTPS. Test on a real Apple device.
  </Accordion>

  <Accordion title="Google Pay button not appearing">
    **Check:**

    1. Using Chrome or compatible browser?
    2. Customer has cards in Google Pay?
    3. Chrome setting "Allow sites to check payment methods" enabled?
    4. `google_pay` included in `allowed_payment_method_types`?

    **Solution:** Verify browser compatibility and customer's Google Pay setup.
  </Accordion>

  <Accordion title="Wallet payment failed">
    **Common causes:**

    * Card in wallet expired or invalid
    * Bank declined the transaction
    * Network connectivity issue

    **Solution:** Customer should verify card in their wallet or try a different payment method.
  </Accordion>

  <Accordion title="Wrong device type">
    Digital wallets only appear on compatible devices:

    * Apple Pay: Apple devices only
    * Google Pay: Chrome browser or Android devices

    **Solution:** This is expected behavior. Ensure card fallbacks are available.
  </Accordion>
</AccordionGroup>

## Related Pages

<CardGroup cols={2}>
  <Card title="Payment Methods Overview" icon="credit-card" href="/features/payment-methods">
    See all supported payment methods.
  </Card>

  <Card title="Overlay Checkout" icon="window-restore" href="/developer-resources/overlay-checkout">
    Implement checkout with digital wallet support.
  </Card>

  <Card title="Testing Process" icon="flask" href="/miscellaneous/testing-process">
    Complete testing guide for all payment methods.
  </Card>

  <Card title="React Native Integration" icon="mobile" href="/developer-resources/react-native-integration">
    Mobile SDK documentation and limitations.
  </Card>
</CardGroup>
