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

# APM transfer integration overview

> Let users fund their accounts and payouts using Alternative Payment Methods (APM).

export const NoIcon = () => <Icon icon="xmark" size={12} color="#ef4444" />;

export const YesIcon = () => <Icon icon="check" size={12} color="#10b981" />;

## Available methods

The available payment methods are Apple Pay, Google Pay and PayPal. All are available in the UK and US. Apple Pay and Google Pay support **Individual** accounts, while PayPal supports both **Individual** and **Business** accounts. Support for Business accounts on Apple Pay, Google Pay and other methods will be added soon.

### Coverage

| Method                                          | Region  | Currency  |
| ----------------------------------------------- | ------- | --------- |
| <Icon icon="apple" size={16} /> **Apple Pay**   | UK / US | GBP / USD |
| <Icon icon="google" size={16} /> **Google Pay** | UK / US | GBP / USD |
| <Icon icon="paypal" size={16} /> **PayPal**     | UK / US | GBP / USD |

### Supported features

| Method                                          | Deposit               | Withdrawal                                                     |
| ----------------------------------------------- | --------------------- | -------------------------------------------------------------- |
| <Icon icon="apple" size={16} /> **Apple Pay**   | <YesIcon /> Supported | <YesIcon /> Supported                                          |
| <Icon icon="google" size={16} /> **Google Pay** | <YesIcon /> Supported | <Icon icon="minus" size={12} color="#9ca3af" /> Not applicable |
| <Icon icon="paypal" size={16} /> **PayPal**     | <YesIcon /> Supported | <YesIcon /> Supported                                          |

### Browser and platform compatibility (Payment Widget)

Some APMs require authorization through the [Payment Widget](/widgets/payment/introduction) regardless of integration path, whether [via REST API](/developer-guides/apm-transfers/deposit/via-rest-api) or [via the widget directly](/developer-guides/apm-transfers/deposit/via-payment-widget).

| APM                                             | Web browsers                  | iOS WebView     | Android WebView |
| ----------------------------------------------- | ----------------------------- | --------------- | --------------- |
| <Icon icon="apple" size={16} /> **Apple Pay**   | Safari, Chrome¹, Edge¹        | <YesIcon /> Yes | <NoIcon /> No   |
| <Icon icon="google" size={16} /> **Google Pay** | Safari, Chrome, Edge          | <YesIcon /> Yes | <YesIcon /> Yes |
| <Icon icon="paypal" size={16} /> **PayPal**     | Safari, Chrome, Firefox, Edge | <YesIcon /> Yes | <YesIcon /> Yes |

¹Partial support — Apple Pay renders a QR code instead of the payment sheet; the user must scan it with an iOS device to complete the payment there.

## Apple Pay

Apple Pay requires a couple of extra things to be set up:

* **Domain registration** — For web apps, your top-level domain must be registered with Apple Pay before going live (this is not necessary for sandbox if you use an Apple Tester Account as explained [here](/rest-apis/core-api/accounts/test-helpers/fund-sandbox-accounts#setting-up-apple-pay)). Contact your account manager if you haven't done so already, and note that:
  * Your domain must not already be registered with a different Apple Merchant ID in the Apple Developer Portal.
  * You must verify ownership of your domain by hosting a domain verification file, which we provide.
* **Native apps** — integrating with the Payment Widget [without the SDK](/widgets/payment/installation-and-setup#setup-with-javascript) works out of the box. If you use [the Web SDK](/widgets/payment/installation-and-setup#choose-an-integration-approach) instead, the WebView's HTML page must be served from a real HTTPS origin rather than bundled locally.

## Key concepts

* **Transfers are quote-based** — deposits and withdrawals both require the user to confirm a quote before the transaction is created, whether funds are being collected from the payment method or paid out to it.
* **APM authorization** — when the quote response includes a `authorize:<method>` requirement, the specified method needs to be authorized. Use the Payment Widget to manage the authorization flow.
* **Authorized external accounts** — some APMs support account linking. After the first deposit or withdrawal, an external account is created and reused automatically for subsequent transactions. Other APMs don't support linking, so the transaction node is always the APM identified by its method, with no persistent external account created.

## Testing in Sandbox

Each APM has its own setup for testing in Sandbox. See [Testing APMs](/rest-apis/core-api/accounts/test-helpers/fund-sandbox-accounts#testing-apms) for testing steps and recommended actions to take.

## Start building

<CardGroup cols={2}>
  <Card title="Deposit via API" icon="code" href="/developer-guides/apm-transfers/deposit/via-rest-api">
    Fund a user's account programmatically.
  </Card>

  <Card title="Deposit via Widget" icon="puzzle-piece" href="/developer-guides/apm-transfers/deposit/via-payment-widget">
    Let users deposit funds with a low-code, embeddable widget.
  </Card>

  <Card title="Withdrawal via API" icon="code" href="/developer-guides/apm-transfers/withdrawal/via-rest-api">
    Create quotes and submit payouts programmatically.
  </Card>

  <Card title="Withdrawal via Widget" icon="puzzle-piece" href="/developer-guides/apm-transfers/withdrawal/via-payment-widget">
    Let users withdraw funds with a low-code, embeddable widget.
  </Card>
</CardGroup>
