executable: true.
Setup Apple Pay
Parameters
| Property | Type | Required | Description |
|---|---|---|---|
quote | string | ✅ | The quote signature returned from getQuote. |
container | HTMLElement | ✅ | A DOM element to render the Apple Pay frame into. |
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. |
"challenge" | { kind: "frame"; url: string } | Verification required. Render the challenge frame at the provided URL using setupChallenge(). |
"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 (for example, the browser doesn’t support it) 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 | "configurationError" | "genericError" | ✅ | The error category. |
message | string | ✅ | Developer-friendly details. |
onEvent after setup succeeds — as the
"error", "quoteExpired", and "unsupported" events respectively.
TS Definitions
TS Definitions
types.ts