# Getting started

Create a MoonPay Wallets app, choose an integration, and reach a visible first signature. Add funding and a confirmed transaction as a separate milestone. For the wider product offering, start with the [platform overview](/).

## 1. Create your account

Sign in to the [MoonPay Wallets Dashboard](https://x-dashboard.moonpay.com). Dashboard login uses an emailed magic link; end users in your application use supported email OTP, Google/Apple OAuth, or external-wallet login.

<WalkthroughVideo src="/videos/dashboard-magic-link-example-1080p-60.mp4" caption="Signing in to the MoonPay Wallets Dashboard with an emailed magic link" />

## 2. Create an app and get its publishable key

[Create an app](/get-started/dashboard/create-new-app). Keep these values distinct:

* **App ID:** the app identifier used by routes that explicitly require it.
* **Publishable key:** `moon_pk_test_...` / `moon_pk_live_...`, used by the frontend SDK through `publishableKey`.
* **Secret key:** `moon_sk_test_...` / `moon_sk_live_...`, used only by supported backend operations.

See [Credentials and environments](/get-started/environments) before choosing app keys, provider sandbox settings, and blockchain networks.

## 3. Configure the integration prerequisites

Before running the starter:

1. Enable the [login method](/get-started/dashboard/login-methods) you will use.
2. Configure [allowed origins and passkey domains](/get-started/domain-whitelisting), including the exact development origin.
3. Choose the [wallet protection model](/security/passkeys-and-recovery). Passkey-only and identity-backed access have different eligibility, trust, and recovery guarantees.
4. Configure the chain/RPC for your application and check the [iframe RPC allowlist](/get-started/frontend-sdks/react/advance/csp-and-rpc-allowlist).

<Info>
  Wallets are created explicitly, not at login. Standard signing uses 2-of-2 MPC without assembling the full key. Sensitive-operation authorization depends on the configured protection model; a passkey assertion is not the only path for eligible identity-backed wallets.
</Info>

## 4. Choose your starter

<CardGroup cols={2}>
  <Card title="React and Next.js" href="/get-started/frontend-sdks/react/quick-start">
    Run a pinned React starter, sign in, explicitly create/select a wallet, and display a signature. Then make a funded test transfer.
  </Card>

  <Card title="React Native" href="/get-started/frontend-sdks/react-native/quick-start">
    Use headless native hooks and your own screens. Complete native association/passkey setup before wallet operations.
  </Card>

  <Card title="Backend integration" href="/get-started/rest-api/api-overview">
    Verify user tokens and use supported backend APIs, including data, swaps, and separately authorized delegated signing.
  </Card>

  <Card title="Choose your platform" href="/get-started/platform-selection">
    Compare UI/headless integration boundaries and client participation before selecting an architecture.
  </Card>
</CardGroup>

## 5. Verify the first milestone

The starter should show a signed-in state, an explicitly created/selected wallet address, and a **Message signed** result. A signed message proves wallet access without requiring funds or a transfer.

For a transaction milestone, fund the wallet on the chosen network, submit the transaction, and wait for successful execution. A returned hash or a fixed delay is not confirmation. See [multi-step transaction sequencing](/recipes/wallets/multi-step-transaction-flow).

## Continue building

* [Funding and cash out](/wallets/funding/overview)
* [Market data](/data/overview) and [swaps](/swaps/overview)
* [Earn (coming soon)](/earn/overview)
* [User-authorized automation](/wallets/ephemeral-signers/overview)

<Tip>
  Review [Security](/security/overview) for protection, recovery, export, delegation, and session-revocation boundaries. Offline JWT verification on your backend does not discover a newly revoked MoonPay Wallets session by itself.
</Tip>
