# Overview

Build your own wallet selection, review, confirmation, and progress screens using the chain-specific MoonPay Wallets hooks. Headless UI does not remove the configured wallet protection or authorization requirements.

## Choose the surface

| Platform | UI model | Start here |
| --- | --- | --- |
| React web | Configurable MoonPay Wallets UI plus hooks for application-owned screens | [React setup](/get-started/frontend-sdks/react/setup) |
| React Native | Headless hooks; your app owns every screen | [Native setup](/get-started/frontend-sdks/react-native/setup) |
| Backend | Supported APIs and user-authorized delegated signing | [Ephemeral signers](/wallets/ephemeral-signers/overview) |

Standard wallet creation/signing still involves the client SDK's MPC protocol. Do not replace it with a secret-key-only REST call.

## Available tasks

* **Create/select wallets:** use the appropriate `useCreateWallet` and `useWallets` chain hooks.
* **Sign:** use chain-specific message, transaction, or typed-data/hash hooks where supported.
* **Send:** submit the chain's expected transaction format and track its returned identifier.
* **Import:** use the documented key-import flow and handle partial results.
* **Export:** invoke the secure user-initiated export flow; keep key material inside its documented secure display boundary.

See [chain support](/wallets/chain-support) for differences between chains and platforms. Raw wallets use `public_address`; adapters/providers can expose a different interface.

## Review and confirmation ownership

Before calling a signing hook, display the selected wallet, network, recipient or delegated contract, asset/amount, and relevant fees. A cancelled review must not invoke signing.

For example, SDK **0.26.0** accepts `options.uiOptions.showWalletUI` for web EVM message signing. Set it to `false` only after your own review/confirmation screen has obtained consent:

```tsx
import { useState } from 'react';
import { useMoonX } from '@moon-x/react-sdk';
import { useSignMessage, useWallets } from '@moon-x/react-sdk/ethereum';

export function ReviewMessage() {
  const { ready, isAuthenticated } = useMoonX();
  const { wallets } = useWallets();
  const { signMessage, loading } = useSignMessage();
  const [result, setResult] = useState('');
  const wallet = wallets[0];
  const message = 'Confirm this example message';

  async function confirm() {
    if (!ready || !isAuthenticated || !wallet || loading) return;
    try {
      const { signature } = await signMessage({
        wallet,
        message,
        options: { uiOptions: { showWalletUI: false } },
      });
      setResult(signature);
    } catch (error) {
      setResult(error instanceof Error ? error.message : 'Signing failed');
    }
  }

  return <section><h2>Review message</h2><p>{wallet?.public_address}</p><p>{message}</p><button onClick={confirm} disabled={!ready || !isAuthenticated || !wallet || loading}>Confirm and sign</button><p role="status" style={{ overflowWrap: 'anywhere' }}>{result}</p></section>;
}
```

This hides the wallet review UI for that call, not the configured passkey/identity-backed protection flow. Export has its own secure UI contract; do not apply message-signing UI options to it.

## Submission and completion

Separate **reviewing**, **authorizing**, **submitted**, **confirmed**, **cancelled**, and **failed** states. Preserve the transaction identifier when broadcast succeeds, and wait for a successful chain result before dependent actions.

Use [multi-step transaction sequencing](/recipes/wallets/multi-step-transaction-flow) for receipt-based EVM flows and [native signing](/get-started/frontend-sdks/react-native/signing) for platform-specific inputs/results. A fixed timer is not a confirmation check.

## Related guides

* [Create a wallet](/wallets/embedded-wallets/create-a-wallet/overview)
* [Import a wallet](/wallets/embedded-wallets/import-a-wallet)
* [Export a wallet](/wallets/embedded-wallets/export-a-wallet)
* [EVM sign message](/wallets/using-wallets/ethereum/sign-message)
* [Solana signing](/wallets/using-wallets/solana/sign-transaction)
* [Protection and recovery](/security/passkeys-and-recovery)
