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

# Changelog

> Updates to the MoonPay developer platform

<Update label="June 30, 2026">
  **Reset frame parameters corrected** — removed the `language` parameter from
  the [Reset frame](/platform/frames/reset) reference. The frame is headless and
  renders no UI, so the parameter had no effect.
</Update>

<Update label="June 25, 2026">
  **HYPE sustainability indicators added** — added Hyperliquid (HYPE) to the
  [Sustainability transparency](/widget/sustainability-transparency) page with
  MiCA sustainability indicators provided by CCRI.
</Update>

<Update label="June 23, 2026">
  **Test payment cards updated** — revised the test card tables on the [Test
  mode](/platform/overview/test-mode) page. Removed all American Express test
  cards, since Amex is not a supported payment method, and removed a duplicate
  card entry that appeared in more than one table.
</Update>

<Update label="June 19, 2026">
  **Frame theme parameter documented** — frames accept a `theme` query parameter
  set to `dark` or `light` to force a specific appearance. Omit it and the frame
  follows the user's system appearance. The parameter is now documented across
  the frames that render UI.

  Updated references:

  * [Widget frame](/platform/frames/widget)
  * [Add card frame](/platform/frames/add-card)
  * [Apple Pay frame](/platform/frames/apple-pay)
  * [Google Pay frame](/platform/frames/google-pay)
  * [Challenge frame](/platform/frames/challenge)
</Update>

<Update label="June 17, 2026">
  **Buy Button documentation** — the buy button now has a full guide and frame
  reference. The buy button renders a MoonPay-hosted express-checkout payment
  button (Apple Pay, Google Pay, or card) and runs the same buy pipeline as the
  headless buy frame.

  New pages:

  * [Pay with the buy button](/platform/guides/pay-with-buy-button) — guide
  * [Buy button frame](/platform/frames/buy-button) — frame reference

  The [`setupBuyButton()` reference](/platform/sdk-reference/web/setup-buy-button)
  now documents the `ready` event, which the SDK emits once the button is rendered
  and ready for the customer to tap.
</Update>

<Update label="June 17, 2026">
  **Credentials payload documented** — the decrypted shape of the `credentials`
  string returned by the check and connect frames is now explicitly documented.
  Once decrypted, `credentials` is a JSON object with `accessToken`,
  `clientToken`, and `expiresAt`. See [API and SDK
  credentials](/platform/guides/api-and-sdk-credentials#client-credentials).
</Update>

<Update label="June 12, 2026">
  **Customer geo fields on connection** — `country`, `administrativeArea`, and
  `area` are now returned directly on the `customer` object in the `complete`
  event payload (connect and check frames) and in the `Connection` type returned
  by `getConnection()`. Use these fields to determine which payment disclosures
  apply for the customer's jurisdiction.

  `capabilities.ramps.requirements.paymentDisclosures` is deprecated. Read
  geography from `customer.country`, `customer.administrativeArea`, and
  `customer.area` instead.

  Updated references:

  * [Connect frame](/platform/frames/connect)
  * [Check frame](/platform/frames/check)
  * [Web SDK — `getConnection()`](/platform/sdk-reference/web/get-connection)
  * [React Native SDK — `getConnection()`](/platform/sdk-reference/react-native/get-connection)
  * [Manual integration — Web](/platform/guides/manual-integration/web)
  * [Manual integration — React Native](/platform/guides/manual-integration/react-native)
  * [Manual integration — Flutter](/platform/guides/manual-integration/flutter)
  * [Manual integration — Android](/platform/guides/manual-integration/android)
  * [Manual integration — iOS](/platform/guides/manual-integration/ios)
</Update>

<Update label="June 12, 2026">
  **React Native SDK is now available** — the [React Native
  SDK](/platform/sdk-reference/react-native/overview)
  ([`@moonpay/platform-sdk-react-native`](https://www.npmjs.com/package/@moonpay/platform-sdk-react-native))
  is published on npm and its reference is now in the Platform sidebar:

  * **Provider and hook** —
    [`<MoonPayProvider>`](/platform/sdk-reference/react-native/provider) and
    [`useMoonPay()`](/platform/sdk-reference/react-native/use-moonpay) give any
    descendant component access to the client.
  * **Client methods** — customer connection, [email/OTP
    auth](/platform/sdk-reference/react-native/setup-auth), payment methods,
    quotes, frame setup (widget, buy, buy button, add card, Apple Pay, Google
    Pay, challenge), and transactions — mirroring the [Web
    SDK](/platform/sdk-reference/web/overview) surface.
  * **[Inline
    components](/platform/sdk-reference/react-native/components/overview)** —
    every frame also ships as a declarative component
    (`<MoonPayApplePayButton>`, `<MoonPayConnect>`, `<MoonPayWidget>`, and
    more) you render directly in your layout, with a reactive `quote` prop that
    updates live frames without remounting. These replace the deprecated
    `setupApplePay()`, `setupGooglePay()`, and `setupBuyButton()` client
    methods.

  The [SDK reference overview](/platform/sdk-reference/overview), [Web SDK
  overview](/platform/sdk-reference/web/overview), and [manual
  integration](/platform/guides/manual-integration/overview) pages now point
  React Native integrators at the SDK instead of a direct frame integration.
</Update>

<Update label="June 12, 2026">
  **Web SDK reference — corrections and 1.0.0 coverage** — the [Web
  SDK](/platform/sdk-reference/web/overview) docs were audited against the
  `@moonpay/platform-sdk-web` 1.0.0 source and corrected:

  * **`getQuote()` input shape** — every example and parameter table now uses
    the nested request shape the SDK and API accept (`source: { asset: { code },
    amount }`, `destination: { asset: { code } }`, `wallet: { address, tag? }`,
    `paymentMethod: { type, id? }`). The previously documented flat shape
    (`source: "USD"`, `sourceAmount`, `walletAddress`, string `paymentMethod`)
    is rejected by the API. Corrected across the
    [SDK reference](/platform/sdk-reference/web/get-quote), all `pay-with-*`
    guides, and the [introduction](/platform/overview/introduction).
  * **New: [`setupAuth()`](/platform/sdk-reference/web/setup-auth)** — the
    lighter-weight email/OTP counterpart to `connect()` for headless and
    Identity API integrations, added in SDK 1.0.0.
  * **New: [Identity methods](/platform/sdk-reference/web/identity)** —
    `createIdentity`, `getIdentity`, `updateIdentity`, `verifyIdentity`,
    `getIdentityUploadUrl`, and `submitIdentityFiles`, added in SDK 1.0.0.
  * **[`getConnection()`](/platform/sdk-reference/web/get-connection)** — now
    documents the optional `skipKyc` flag for headless integrations.
  * **[`setupChallenge()`](/platform/sdk-reference/web/setup-challenge)** — the
    challenge URL no longer needs to carry a `channelId` query parameter; the
    SDK generates one automatically (SDK 1.0.0). Identity verification challenge
    URLs can be passed straight through.
  * **[`setupAddCard()`](/platform/sdk-reference/web/setup-add-card)** — the
    Add Card frame does emit a `ready` event; the docs previously said it
    didn't.
  * **[`setupApplePay()`](/platform/sdk-reference/web/setup-apple-pay) and
    [`setupGooglePay()`](/platform/sdk-reference/web/setup-google-pay)** — the
    `SetupApplePayError` / `SetupGooglePayError` unions are
    `"configurationError" | "genericError"`; quote problems and wallet
    availability surface through `onEvent` instead. The Apple Pay page also
    gained the previously undocumented `challenge` event.
  * **[`getPaymentMethods()`](/platform/sdk-reference/web/get-payment-methods)** —
    the response is `{ data: { paymentMethodConfigs, paymentMethods } }`; the
    previously documented `storedCards` field doesn't exist on the wire.
  * **Package name and `createClient()` usage** — remaining `@moonpay/platform`
    imports and `Result`-wrapped `createClient()` examples in the guides were
    updated to `@moonpay/platform-sdk-web` and the synchronous `Client` return.
</Update>

<Update label="June 12, 2026">
  **Check and Connect frame references corrected** — resolved discrepancies in
  the [Check](/platform/frames/check) and [Connect](/platform/frames/connect)
  frame references to ensure the correct event payloads are documented, and
  removed the retired `connection_required` / `connection_pending` /
  `connection_unavailable` error codes from the SDK references.
</Update>

<Update label="June 10, 2026">
  **Quotes now reject assets that aren't available in the active mode** —
  [`POST /platform/v1/quotes/buy`](/api-reference/platform/endpoints/quotes/get)
  returns a `400 invalid_request` error when the destination asset doesn't
  support the mode of your session (test or live). Previously the endpoint
  returned a quote even when the asset couldn't be purchased in that mode. The
  error includes a field-level detail identifying the asset:

  ```json theme={null}
  {
    "code": "invalid_request",
    "message": "Invalid request",
    "errors": [
      {
        "field": "destination.asset.code",
        "message": "Destination asset is not supported in test mode."
      }
    ]
  }
  ```

  In test mode, request quotes for assets on a
  [supported testnet](/platform/overview/test-mode#supported-testnets), such as
  `ETH` or `SOL`.
</Update>

<Update label="June 9, 2026">
  **Platform SDK reference — Web** — the [Web
  SDK](/platform/sdk-reference/web/overview) (`@moonpay/platform-sdk-web`) is
  now fully documented and wired into the Platform sidebar:

  * **Customer connection** —
    [`getConnection`](/platform/sdk-reference/web/get-connection),
    [`connect`](/platform/sdk-reference/web/connect),
    [`resetConnection`](/platform/sdk-reference/web/reset-connection).
  * **Payment methods** —
    [`getPaymentMethods`](/platform/sdk-reference/web/get-payment-methods),
    [`deletePaymentMethod`](/platform/sdk-reference/web/delete-payment-method).
  * **Quotes** — [`getQuote`](/platform/sdk-reference/web/get-quote).
  * **Frame setup** —
    [`setupWidget`](/platform/sdk-reference/web/setup-widget),
    [`setupBuyButton`](/platform/sdk-reference/web/setup-buy-button),
    [`setupBuy`](/platform/sdk-reference/web/setup-buy),
    [`setupAddCard`](/platform/sdk-reference/web/setup-add-card),
    [`setupApplePay`](/platform/sdk-reference/web/setup-apple-pay),
    [`setupGooglePay`](/platform/sdk-reference/web/setup-google-pay),
    [`setupChallenge`](/platform/sdk-reference/web/setup-challenge).
  * **Transactions** —
    [`getTransaction`](/platform/sdk-reference/web/get-transaction),
    [`listTransactions`](/platform/sdk-reference/web/list-transactions).

  Web SDK pages were rewritten against the current SDK source: the package name
  was corrected across samples (`@moonpay/platform` →
  `@moonpay/platform-sdk-web`),
  [`createClient()`](/platform/sdk-reference/web/create-client) is now correctly
  typed as returning a `Client` directly, API error tables use the real
  `DevPlatformApiError` shape (`code` + `message` + optional `errors[]`),
  success envelopes use `{ data }` and `{ data, pageInfo }`, and event and
  error unions for every `setup*` method match what the SDK actually emits
  (including the `kind: "frame"` discriminator on `challenge` events,
  `oneTapApplePaySecondFactorRequired` for Apple Pay, and `"unsupported"`
  rather than an error when Google Pay is unavailable).
  [`getConnection`](/platform/sdk-reference/web/get-connection) documents the
  full set of connection statuses (including `termsAcceptanceRequired`) and
  `CustomerCapabilities`.

  **Challenge frame `error` event guidance corrected** — the
  [Handle challenges](/platform/guides/handling-challenges) guide previously told
  partners to surface the `message` payload from the Challenge frame's `error`
  event. That contradicts the [Challenge frame](/platform/frames/challenge)
  reference, which marks `code` and `message` as developer-facing and explicitly
  not for end-user UI. Updated the guide to recommend logging the `code` and
  `message` and showing the customer a generic next step (such as retry or
  choose a different payment method) instead.
</Update>

<Update label="June 9, 2026">
  **Buy quotes now return payment disclosure IDs** — the [quote
  response](/api-reference/platform/endpoints/quotes/get#response-data-payment-disclosures)
  includes a `paymentDisclosures` array of `{ id, version }` objects that
  identifies exactly which disclosure(s) to render for a transaction. This
  replaces the need to infer disclosure requirements from
  `capabilities.ramps.requirements.paymentDisclosures` at connect time. The
  `capabilities.ramps.requirements.paymentDisclosures` property is deprecated
  and will be removed.

  **Apple Pay frame failure codes documented** — the [Apple Pay
  frame](/platform/frames/apple-pay#failure-codes) reference now lists the
  `failureCode` values a failed `complete` event can return
  (`applePayMerchantUnavailable`, `transactionNotAllowed`, `validationError`,
  `serviceUnavailable`, `authorizationDeclined`, and `unknown`), each with its
  default `failureReason` and recommended handling. The [Pay with Apple
  Pay](/platform/guides/pay-with-apple-pay) guide shows how to branch on
  `failureCode` to drive your error handling.

  **Google Pay frame failure codes documented** — the [Google Pay
  frame](/platform/frames/google-pay#failure-codes) reference now lists the
  `failureCode` values a failed `complete` event can return
  (`transactionNotAllowed`, `validationError`, `serviceUnavailable`,
  `authorizationDeclined`, and `unknown`), each with its default `failureReason`
  and recommended handling. The [Pay with Google
  Pay](/platform/guides/pay-with-google-pay) guide shows how to branch on
  `failureCode` to drive your error handling.
</Update>

<Update label="June 3, 2026">
  **Test mode documents challenge triggers** — the [Test
  mode](/platform/overview/test-mode#triggering-challenges) page now explains
  how to force a [challenge](/platform/guides/handling-challenges) in test mode
  by setting the buy amount to a specific value: `48` triggers a
  wallet-ownership challenge (Apple Pay and card) and `49` triggers a CVV
  re-entry challenge (card). These triggers only apply in test mode.
</Update>

<Update label="June 1, 2026">
  **Challenges and quotes docs corrected** — refreshed the guides and SDK
  reference to match how the SDK and API actually behave:

  * [Handle challenges](/platform/guides/handling-challenges) is now a
    flow-agnostic guide. Challenges are surfaced by frames — today the Apple
    Pay, Google Pay, and buy (Pay with card) frames each emit a `challenge`
    event whose URL is loaded into the dedicated
    [Challenge frame](/platform/frames/challenge). The old example showing
    `challenge` nested inside a quote response was incorrect and has been
    removed.
  * [Core concepts → Quotes](/platform/overview/core-concepts#quotes) no longer
    describes "price quotes" and "executable quotes" as two types. There is a
    single quote with an `executable` boolean — see the
    [quotes API reference](/api-reference/platform/endpoints/quotes/get) for the
    request fields required to receive `executable: true`.
  * The per-flow guides ([Apple Pay](/platform/guides/pay-with-apple-pay),
    [Google Pay](/platform/guides/pay-with-google-pay)) and the
    [`getQuote`](/platform/sdk-reference/web/get-quote) / setup-method SDK
    reference pages now use this single-quote framing.
</Update>

<Update label="May 28, 2026">
  **Challenge frame docs cover the identity flow** — updated the [Challenge
  frame](/platform/frames/challenge) reference so the `complete`, `cancelled`,
  and `error` payloads describe both upstream flows (buy and identity):

  * `complete` and `cancelled` payloads are now documented as discriminated
    unions over `flow: "buy" | "identity"`. The `identity` variant carries
    `identityId` on `complete` and no extra fields on `cancelled`.
  * `error` codes refreshed to match the frame's wire format (`invalid_token`,
    `unsupported_flow`, `invalid_challenge`) and the payload type loosened to
    `code: string` to reflect that additional codes can be propagated from the
    upstream flow.
</Update>

<Update label="May 26, 2026">
  **Frame theming** — every frame now accepts a `brandColor` URL parameter that
  seeds a runtime-derived palette across the entire UI, plus an optional
  `customTheme` for border radius, color scheme lock, and granular palette
  control. See the new [theming guide](/platform/frames/theming) for accepted
  formats and examples per frame.
</Update>

<Update label="May 21, 2026">
  **Challenge events for Apple Pay and Google Pay** — the [Apple Pay
  frame](/platform/frames/apple-pay) and [Google Pay
  frame](/platform/frames/google-pay) now emit a `challenge` event when
  verification is required before a transaction can proceed. Challenge handling
  added to the [Apple Pay SDK
  reference](/platform/sdk-reference/web/setup-apple-pay), [Google Pay SDK
  reference](/platform/sdk-reference/web/setup-google-pay), and manual
  integration guides for
  [web](/platform/guides/manual-integration/web),
  [iOS](/platform/guides/manual-integration/ios), [React
  Native](/platform/guides/manual-integration/react-native), and
  [Flutter](/platform/guides/manual-integration/flutter).

  **TransactionStatus fix** — corrected the `TransactionStatus` enum value from
  `complete` to `completed` in the [Apple Pay
  frame](/platform/frames/apple-pay) and [Google Pay
  frame](/platform/frames/google-pay) references.
</Update>

<Update label="May 20, 2026">
  **Google Pay** — new [Pay with Google
  Pay](/platform/guides/pay-with-google-pay) guide, [Google Pay
  frame](/platform/frames/google-pay) reference, and
  [`setupGooglePay`](/platform/sdk-reference/web/setup-google-pay) SDK method.
  Covers the standalone Google Pay frame integration and manual integration for
  [web](/platform/guides/manual-integration/web),
  [Android](/platform/guides/manual-integration/android), [React
  Native](/platform/guides/manual-integration/react-native), and
  [Flutter](/platform/guides/manual-integration/flutter).
</Update>

<Update label="May 19, 2026">
  **EEA disclosures** — published the exact verbiage required above the Apple
  Pay frame and the card Pay button for customers located in the EEA, with
  separate text for standard crypto-assets and non-MiCA-compliant stablecoins
  (USDT, cUSD, DAI, PYUSD). See [Going
  Live](/platform/overview/going-live#disclosures-eea).
</Update>

<Update label="May 18, 2026">
  **API key header** — server-to-server requests now authenticate with the
  `X-Api-Key` header. See [Using the Platform
  API](/api-reference/platform/documentation/using-the-api#server-side-authentication)
  and [API and SDK
  credentials](/platform/guides/api-and-sdk-credentials#secret-key).
</Update>

<Update label="May 13, 2026">
  **Payment-disclosure geography** — `paymentDisclosures` now identifies the
  customer's geography. `country` is the ISO 3166-1 alpha-3 code,
  `administrativeArea` is included for US state-level disclosures, and `area`
  can identify broader regions such as `"EEA"`.
</Update>

<Update label="May 12, 2026">
  **Going Live** — documented the acceptance criteria for the global rollout
  (except UK). Each requirement is now tagged with a geo, and new sections cover
  Cards, Identity API, and EEA Apple Pay disclosures (verbiage pending). See
  [Going Live](/platform/overview/going-live).
</Update>

<Update label="May 8, 2026">
  **Preview removed** — the Developer Platform is now generally available. The
  "currently in preview" notice has been removed from all docs pages.
</Update>

<Update label="May 8, 2026">
  **Card payments** — new [Pay with card](/platform/guides/pay-with-card) guide
  and frame references for [Add Card](/platform/frames/add-card),
  [Buy](/platform/frames/buy), and [Challenge](/platform/frames/challenge).
  Covers the full integration: listing and managing stored cards, getting a card
  quote, executing transactions via the headless buy frame, and handling
  verification challenges (SCA, 3DS, CVC re-entry, KYC). Also adds the [Delete
  payment method](/api-reference/platform/endpoints/payment-methods/delete) API
  endpoint.
</Update>

<Update label="May 5, 2026">
  **Reset frame** — new headless frame at `/platform/v1/reset` that lets you log
  a customer out by clearing their authentication state on MoonPay's domain.
  Reports completion via postMessage. See [Reset](/platform/frames/reset).
</Update>

<Update label="May 5, 2026">
  **Unified docs site** — Platform and Widget docs now live under a single
  Mintlify site with separate top-level tabs. Legacy `/overview/*`, `/guides/*`,
  `/frames/*`, `/sdk-reference/*`, and `/api-reference/*` URLs redirect to their
  new `/platform/*` paths.
</Update>

<Update label="May 1, 2026">
  **Manual integration fixes** — corrected the WebView samples to post the
  payload as a string, base64-decode credentials, and handle JS dialogs. Affects
  [web](/platform/guides/manual-integration/web),
  [iOS](/platform/guides/manual-integration/ios),
  [Android](/platform/guides/manual-integration/android), [React
  Native](/platform/guides/manual-integration/react-native), and
  [Flutter](/platform/guides/manual-integration/flutter) guides.
</Update>

<Update label="May 1, 2026">
  **Fee language** updated across guides to clarify partner vs. ecosystem fees.
</Update>

<Update label="April 30, 2026">
  **Revoke session** — `DELETE /platform/v1/sessions` invalidates an active
  session token. See [Revoke a
  session](/api-reference/platform/endpoints/sessions/revoke).
</Update>

<Update label="April 29, 2026">
  **Sessions endpoint renamed** — `POST /platform/v1/session` is now `POST
      /platform/v1/sessions` (plural). The old path continues to work; new
  integrations should use the plural form.
</Update>

<Update label="April 28, 2026">
  **Apple Pay going-live guide** — added production-readiness details for the
  Apple Pay frame, including merchant verification and domain registration
  steps. See [Pay with Apple Pay](/platform/guides/pay-with-apple-pay).
</Update>

<Update label="April 27, 2026">
  **`customerId` in connect/check payload** — the `complete` postMessage event
  now documents `customer.id`, and the session-create request documents the
  `customerId` field for returning users (skip the connect flow when you already
  have one).
</Update>

<Update label="April 20, 2026">
  **Manual integration credentials** — the manual integration guides now use
  `clientToken` (not `sessionToken`) to initialize frames, matching the
  early-credential-issuance flow.
</Update>

<Update label="April 17, 2026">
  **US payment-disclosure rails narrowed** — the `paymentDisclosures` capability
  is now documented as scoped to NY and WA within the US. Customers in other US
  states will not receive a `paymentDisclosures` requirement.
</Update>

<Update label="April 17, 2026">
  **HKDF examples** — manual integration code samples consistently pass
  `undefined` for the `info` parameter of `hkdf()`.
</Update>

<Update label="April 10, 2026">
  **Acceptance criteria page** — new compliance checklist outlining the
  requirements for going live. See [Going live](/platform/overview/going-live).
</Update>

<Update label="April 10, 2026">
  **Manual integration moved** — the per-platform manual integration pages now
  live under [Guides → Manual
  Integration](/platform/guides/manual-integration/overview).
</Update>

<Update label="April 10, 2026">
  **Using agents** — new page covering MCP client setup for Claude Code and
  Codex, so you can wire your agent to MoonPay's developer docs. See [Using
  agents](/platform/overview/using-agents).
</Update>

<Update label="April 10, 2026">
  **Manual integration docs** — initial documented integrations for web, iOS,
  Android, React Native, and Flutter (graduated from hidden drafts).
</Update>

<Update label="April 9, 2026">
  **Early credential issuance** — the credentials-flow guide now reflects that
  `clientToken` and `accessToken` are issued before authentication completes, so
  partners can initialize sensitive frames sooner.
</Update>

<Update label="April 9, 2026">
  **Connect-flow low-friction callout** — added guidance to the connect-flow
  guide about minimizing handoffs back to MoonPay-hosted UI.
</Update>

<Update label="April 9, 2026">
  **Apple Pay frame height** — corrected the documented frame height for the
  Apple Pay frame.
</Update>

<Update label="March 2026">
  Quote API: `fees.partner` field renamed to `fees.ecosystem`.

  Apple Pay: documented test-mode and frame sandbox requirements, plus a
  corrected frame size.

  Customer capabilities and payment-disclosure requirements expanded.

  New widget-fallback frame and integration guide.

  Frames protocol: documented `version: 2` and added the versioning section.

  Frame URLs migrated from `/v2/*` to `/platform/*` across all docs.
</Update>

<Update label="February 2026">
  OpenAPI now served live from `https://api.moonpay.com/platform/openapi.json`
  rather than checked into the repo.

  Removed historical `pk_test` / `pk_live` references in favor of the new
  credential model.

  Initial Apple Pay frame size and frame sandbox requirements published.

  Mintlify upgrade and a content-style-guide pass across guides and frames docs.
</Update>
