Render the Apple Pay frame in your app and initiate a transaction with a quote signature. The quote must haveDocumentation Index
Fetch the complete documentation index at: https://dev.moonpay.com/llms.txt
Use this file to discover all available pages before exploring further.
executable: true. The provider mounts the frame as a react-native-webview.
Apple Pay availability inside a WebView depends on iOS WebKit support. The
frame emits
"unsupported" when Apple Pay isn’t available in the current
environment — surface a fallback payment method.Setup Apple Pay
Parameters
| Property | Type | Required | Description |
|---|---|---|---|
quote | string | ✅ | The quote signature returned from getQuote. |
onEvent | (event: ApplePayEvent) => void | Callback invoked for Apple Pay flow events. See ApplePayEvent. |
ApplePayEvent
onEvent receives events as the Apple Pay flow progresses. Use event.kind to decide how to handle each event.
| kind | Payload | When you receive it |
|---|---|---|
"ready" | — | The Apple Pay UI is rendered and ready to be shown. |
"complete" | { transaction: FrameTransaction } | The Apple Pay flow finished. Inspect the FrameTransaction for the outcome. |
"quoteExpired" | { setQuote: (signature: string) => void } | The quote signature expired. Fetch a new quote and call payload.setQuote(...). |
"error" | ApplePayEventError | The flow encountered an error. |
"unsupported" | — | Apple Pay isn’t available in the user’s current environment. |
FrameTransaction
The transaction object returned on "complete". FrameTransaction is a discriminated union — the failure variant carries failureReason, the non-failure variant always carries id.
| Field | Type | Required | Description |
|---|---|---|---|
status | string | ✅ | The transaction status. On the failure variant, "failed". |
id | string | Required on the non-failure variant; optional when status is "failed" (a transaction may not exist yet on early failure). | |
failureReason | string | Present only on the failure variant (status === "failed"). |
ApplePayEventError
| Field | Type | Required | Description |
|---|---|---|---|
kind | "configurationError" | "invalidQuote" | "quoteExpired" | "oneTapApplePaySecondFactorRequired" | "genericError" | ✅ | The error category. |
message | string | ✅ | Developer-friendly details. |
"oneTapApplePaySecondFactorRequired" is emitted on the 1TAP Apple Pay flow when MoonPay needs a second authentication factor — typically because the device is new or the customer hasn’t completed a recent challenge. Hand off to the full connect flow with client.connect(), then retry.
Apple Pay being unavailable in the environment is signalled separately through the "unsupported" event, not as an error.
Result
client.setupApplePay() returns a Result<ApplePayFrame, SetupApplePayError>.
Result envelope
Result<ApplePayFrame, SetupApplePayError>
| Field | Type | Required | Description |
|---|---|---|---|
ok | boolean | ✅ | Whether the operation succeeded. |
value | ApplePayFrame | Present when ok is true. | |
error | SetupApplePayError | Present when ok is false. |
ApplePayFrame
| Field | Type | Required | Description |
|---|---|---|---|
setQuote | (signature: string) => void | ✅ | Updates the quote signature used by the frame. Use this in response to quoteExpired. |
dispose | () => void | ✅ | Unmounts the frame. After you call this, no further events are dispatched to your onEvent callback. |
SetupApplePayError
| Field | Type | Required | Description |
|---|---|---|---|
kind | "invalidQuote" | "quoteExpired" | "applePayUnavailable" | "oneTapApplePaySecondFactorRequired" | "genericError" | ✅ | The error category. |
message | string | ✅ | Developer-friendly details. |
TS Definitions
TS Definitions
types.ts