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

# Wallet as a Service

> Create self-custodial wallets for your users with MoonPay WaaS, then onramp fiat straight into them.

MoonPay WaaS is MoonPay's wallet as a service. You embed it in your app and create self-custodial wallets for your users, with no seed phrase for them to write down. Private keys are split into shards, so neither MoonPay nor your app ever holds a complete key, and users can export their keys at any time.

MoonPay WaaS is documented on its own site. Everything below is the short version.

<Card title="MoonPay WaaS documentation" icon="wallet" href="https://x-docs.moonpay.com/get-started/frontend-sdks/react-native/quick-start" horizontal>
  Install the SDK, log a user in, and create a wallet.
</Card>

## What you get

<CardGroup cols={2}>
  <Card title="Headless SDKs" icon="code">
    A React SDK for web and a React Native SDK for iOS and Android. Hooks only, so every screen stays yours.
  </Card>

  <Card title="Wallets on demand" icon="wallet">
    `useCreateWallet('ethereum')` returns a wallet and its `public_address`. Users start with none until you create one.
  </Card>

  <Card title="EVM, Solana and Tron" icon="cube">
    Ethereum and EVM L2s (Base, Arbitrum, Optimism, Polygon), Solana, and Tron.
  </Card>

  <Card title="Signing built in" icon="signature">
    Sign messages and transactions from the wallet, including the proof-of-ownership message MoonPay Enterprise requires.
  </Card>
</CardGroup>

## Example: onramp into a wallet you generated

A banking app wants each user to receive EUR in their own name and hold it as USDC. The user has no wallet yet, so you make one.

<Steps>
  <Step title="Create the wallet in your app">
    Authenticate the user with MoonPay WaaS, then create a wallet. Keep the `public_address`.

    ```tsx theme={null}
    import { useCreateWallet } from '@moon-x/react-native-sdk';

    const { createWallet } = useCreateWallet();
    const { wallet } = await createWallet('ethereum');
    // wallet.public_address -> 0x742d...f44e
    ```
  </Step>

  <Step title="Sign the proof-of-ownership message">
    MoonPay WaaS wallets are self-custodial, so they register with MoonPay Enterprise as self-hosted wallets. Build the exact message from [Crypto Addresses](/crypto-addresses#verify-a-self-hosted-crypto-address) and sign it with the wallet you just created.

    ```tsx theme={null}
    import { useSignMessage } from '@moon-x/react-native-sdk/ethereum';

    const { signMessage } = useSignMessage();
    const { signature } = await signMessage({ message, wallet });
    ```

    The message must be byte-identical between signing and submission, and the date inside it must be today in UTC.
  </Step>

  <Step title="Register the address">
    `POST /api/addresses/crypto/selfhosted` with the address, message, and signature. Registration is required before any Autoramp flow. See [Crypto Addresses](/crypto-addresses).
  </Step>

  <Step title="Create the onramp">
    `POST /api/autoramps` with the registered address as `recipient_account`. The user gets a named EUR virtual account. Every deposit auto-mints to USDC and lands in their wallet. See [Onramp](/onramp).
  </Step>
</Steps>

<Note>
  Self-attested registration (no signature) is available only to customers in the US and Rest of World. Customers in the UK, EEA, Canada, and Australia must use the signed flow, which a MoonPay WaaS wallet can produce directly.
</Note>

The same pattern works in reverse. Register the wallet once, then use it as the source for an [Offramp](/offramp) or a [Stable to Stable](/stable-to-stable) swap.

## Get started

Talk to the MoonPay team about access, then follow the SDK setup on the [MoonPay WaaS docs site](https://x-docs.moonpay.com/get-started/frontend-sdks/react-native/quick-start).

<Card title="Contact sales" icon="envelope" href="https://www.moonpay.com/business/contact?referral=stablecoins" horizontal>
  Tell the team what you are building and which chains you need.
</Card>

<Note>
  Custodial wallets are in development. If you need MoonPay to hold keys on behalf of your users, we are working with a small number of design partners. [Get in touch](https://www.moonpay.com/business/contact?referral=stablecoins).
</Note>
