Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .cursor/rules/product-embedded-wallets.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ Embedded Wallets uses domain-oriented folders rather than strict Diataxis catego
| Root (`README.mdx`) | Product overview and positioning |
| `sdk/` | Per-platform integration docs (React, Vue, JS, Node, Android, iOS, React Native, Flutter, Unity, Unreal) |
| `authentication/` | Auth methods by type (social, basic, custom) |
| `features/` | Product capabilities (MPC, smart accounts, funding, NFT minting, session management) |
| `dashboard/` | Developer console and project configuration |
| `connect-blockchain/`| Chain-specific connection guides (EVM, Solana, other) |
| `infrastructure/` | Architecture and security (MPC, SSS, nodes) |
Expand Down
48 changes: 26 additions & 22 deletions embedded-wallets/README.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: What are Embedded Wallets?
title: MetaMask Embedded Wallets
image: 'img/metamaskog.jpg'
sidebar_label: About
description: 'What are MetaMask Embedded Wallets? Pluggable wallet infrastructure for Web3. OAuth logins, multiple platforms, non-custodial wallets.'
Expand Down Expand Up @@ -30,8 +30,8 @@ import Head from '@docusaurus/Head'
</Head>

MetaMask Embedded Wallets (formerly Web3Auth) provides a pluggable embedded wallet infrastructure to
simplify Web3 wallet integration and user onboarding. It supports OAuth-based logins and multiple
platforms, allowing your users to access Web3 applications through familiar authentication methods.
simplify web3 wallet integration and user onboarding.
It supports OAuth-based sign-ins and multiple platforms, allowing your users to access web3 applications through familiar authentication methods.

MetaMask Embedded Wallets reduces traditional wallet management overhead by removing the need
to manage private keys and seed phrases directly.
Expand Down Expand Up @@ -59,30 +59,31 @@ Users get a smoother onboarding experience while retaining control of non-custod

Help users get started quickly with sign-in methods they already use:

- Sign in with Google, Twitter, GitHub, and other popular social accounts.
- Sign in with email, SMS, and authenticator apps without passwords.
- Bring your own auth system while using MetaMask Embedded Wallets infrastructure.
- Sign in with [Google, X, GitHub, and other popular social accounts](./authentication/#oauth-and-social-login).
- Use [passwordless sign-in](./authentication/basic-logins/email-passwordless) with email or SMS one-time passcodes.
- [Bring your own authentication system](./authentication/#jwt-based-authentication) while using Embedded Wallets infrastructure.

### Security

Enterprise-level protection for your users' digital assets:

- Users maintain 100% control of their non-custodial wallets.
- A distributed architecture prevents single points of failure.
- Multiple recovery options support account recovery flows.
- Users maintain full control of their non-custodial wallets.
- A [distributed key management infrastructure](./infrastructure/README.mdx) prevents single points of failure.
- Multiple [recovery options](./authentication/user-account-dashboard#recovery-and-mfa) support account recovery flows.

### Developer experience

Integrate MetaMask Embedded Wallets into your app with minimal setup:
Integrate MetaMask Embedded Wallets into your dapp with minimal setup:

- Use a drop-in solution that works with your existing auth system.
- Use a drop-in solution that works with your existing authentication system.
- Avoid complex migrations or infrastructure changes.
- Customize the look and feel.
- Integrate on web, mobile, and gaming platforms.
- [Customize the look and feel](./dashboard/customization) from the dashboard.
- Integrate on [web, mobile, and gaming platforms](./get-started.mdx).
- Mint NFTs and run gasless airdrops with the built-in NFT minting API (contact [sales](https://calendly.com/elishamm/sales) for access).

### User experience

Provide a low-friction path to Web3:
Provide a low-friction path to web3:

- Help users get started quickly.
- Avoid requiring users to understand blockchain concepts up front.
Expand All @@ -93,23 +94,26 @@ MetaMask Embedded Wallets provides wallet infrastructure for dapps and blockchai
documentation explains how it works, including how it generates cryptographic key providers for
each user and application.

## How do Embedded Wallets work?
## How does MetaMask Embedded Wallets work?

See **[Architecture](./architecture.mdx)** for the high-level system design, SDK and integration diagram, and wallet management infrastructure.
See [Architecture](./architecture.mdx) for the high-level system design, SDK and integration diagram, and wallet management infrastructure.

## Is MetaMask Embedded Wallets a wallet?

MetaMask Embedded Wallets is not a wallet, but rather a wallet infrastructure that can be integrated into any application. It provides customizable authentication flows for dapps and blockchain wallets, solving user onboarding and key management challenges.
MetaMask Embedded Wallets is not a wallet, but rather a wallet infrastructure that can be integrated into any application.
It provides customizable authentication flows for dapps and blockchain wallets, solving user onboarding and key management challenges.

Unlike traditional wallets that can limit user experience, MetaMask Embedded Wallets enables developers to create tailored flows without requiring users to understand complex blockchain concepts. It provides a cryptographic key provider that can be used to build custom wallets or integrate with existing ones through Web3Auth's external wallet adapters.
Unlike traditional wallets that can limit user experience, MetaMask Embedded Wallets enables developers to create tailored flows without requiring users to understand complex blockchain concepts.
It includes a cryptographic key provider that can be used to build custom wallets or integrate with existing ones through external wallet adapters.

## Is MetaMask Embedded Wallets scalable?

The MetaMask Embedded Wallets infrastructure is built to handle millions of users. Our architecture provides:
The MetaMask Embedded Wallets infrastructure is built to handle millions of users.
Its architecture provides:

- Global availability across multiple regions with consistent low-latency performance worldwide
- Automatic horizontal scaling that adjusts capacity based on demand, eliminating bottlenecks and ensuring uninterrupted service
- Enterprise-grade infrastructure running on Kubernetes orchestration for maximum reliability and performance
- Global availability across multiple regions with consistent low-latency performance worldwide.
- Automatic horizontal scaling that adjusts capacity based on demand, eliminating bottlenecks and ensuring uninterrupted service.
- Enterprise-grade infrastructure running on Kubernetes orchestration for maximum reliability and performance.

:::tip[Start]

Expand Down
63 changes: 45 additions & 18 deletions embedded-wallets/authentication/basic-logins/external-wallets.mdx
Original file line number Diff line number Diff line change
@@ -1,23 +1,51 @@
---
title: External wallets login with Embedded Wallets
title: External wallets sign-in with Embedded Wallets
sidebar_label: External wallets
description: 'External Wallets Login with Embedded Wallets | Embedded Wallets'
description: 'Sign users in to your dapp with external EVM and Solana wallets using the Embedded Wallets external wallet aggregator.'
---

import ExternalWalletsToggle from '@site/static/img/embedded-wallets/w3a-dashboard/external-wallets-toggle.png'
import ExternalWalletsSelectWallets from '@site/static/img/embedded-wallets/w3a-dashboard/external-wallets-select-wallets.png'

Web3Auth provides built-in support for email and SMS-based authentication, allowing users to log in seamlessly using a one-time passcode (OTP) sent to their email address or phone number. This form of passwordless authentication simplifies the onboarding process, removes friction for end users, and expands accessibility—especially in regions where social login options may be limited.
Embedded Wallets provides an external wallet aggregator that unifies wallet discovery,
connection, and session management for EVM and Solana wallets.
Use it to sign users in to your dapp with MetaMask or any other supported wallet through a single
integration.

## Enable external wallets

:::success Enable on dashboard
:::info Demo

To enable this feature, developers must first activate **External Wallets** from the **Social Connections** section in the [dashboard](https://dashboard.web3auth.io).
Try the wallet aggregator in the [live demo](https://demo.web3auth.io).

:::

<div style={{ display: 'flex', margin: '20px 0' }}>
## Features

The wallet aggregator has the following features:

- **Cross-ecosystem support:** Discover and connect to EVM and Solana wallets from one flow.
- **Standards-native:** It detects EVM wallets through
[EIP-6963 (Multi Injected Provider Discovery)](https://eips.ethereum.org/EIPS/eip-6963) and Solana
wallets through the
[Solana Wallet Standard](https://github.com/wallet-standard/wallet-standard).
- **Library compatibility:** Use it with ethers.js, viem, Wagmi, and `@solana/web3.js`.
- **Framework hooks:** It supports React hooks and Vue composables to read connection state and trigger
flows.
- **Dashboard control:** Manage which wallets appear, alongside social sign-ins, from the
[Embedded Wallets dashboard](https://dashboard.web3auth.io).

## Choose a sign-in flow

You can offer external wallets on their own or alongside social sign-ins. Configure the flow that fits
your dapp from the [Embedded Wallets dashboard](https://dashboard.web3auth.io):

- **Wallet aggregator only**, for users who already have a wallet.
- **External wallets with social logins**, presented side by side in one flow.

## Enable external wallets

Go to the **Social Connections** section in the [dashboard](https://dashboard.web3auth.io), and enable **External Wallets**:

<div align="center">
<img
src={ExternalWalletsToggle}
alt="External Wallets Toggle"
Expand All @@ -29,20 +57,19 @@ To enable this feature, developers must first activate **External Wallets** from
/>
</div>

To choose which external wallets to enable, click the **Settings** icon next to the **External Wallets** toggle in the Social Connections section of the [dashboard](https://dashboard.web3auth.io).
Select the **Settings** icon next to the **External Wallets** toggle, and choose which external wallets to enable.
You can choose from wide range of wallets:

:::note

MetamMask Wallet is enabled by default and cannot be disabled.

:::

A wide range of wallets are available to choose from.

<div style={{ display: 'flex', margin: '20px 0' }}>
<div align="center">
<img
src={ExternalWalletsSelectWallets}
style={{ alignSelf: 'center', maxWidth: '100%' }}
alt="External Wallets Select Wallets"
/>
</div>

:::note

MetaMask is enabled by default and cannot be disabled.

:::
31 changes: 24 additions & 7 deletions embedded-wallets/authentication/id-token.mdx
Original file line number Diff line number Diff line change
@@ -1,25 +1,42 @@
---
title: Embedded Wallets identity token
sidebar_label: Web3Auth identity token
title: Identity token
image: 'img/metamaskog.jpg'
description: 'Identity Token | Embedded Wallets'
description: 'Use the Embedded Wallets identity token (JWT) for server-side verification of user identity and wallet ownership.'
---

import TabItem from '@theme/TabItem'
import Tabs from '@theme/Tabs'

The **Identity Token** (ID Token) issued by Embedded Wallets is a JSON Web Token (JWT) that contains verified identity claims about the authenticated user. This token is signed using Embedded Wallets' private key and cannot be spoofed, allowing developers to trust the identity information presented by the client.
The identity token (ID token) issued by Embedded Wallets is a JSON Web Token (JWT) that contains verified identity claims about the authenticated user.
This token is signed using Embedded Wallets' private key and cannot be spoofed, allowing developers to trust the identity information presented by the client.

Once a user successfully authenticates via Embedded Wallets, the platform issues an ID token which can then be used to authorize client-to-server requests or verify ownership of associated wallet addresses.

#### Purpose of the ID token
The ID token enables:

- **User identity verification**: Ensures that the client user is indeed who they claim to be.
- **Secure backend requests**: The token should be passed in API requests to validate sessions server-side.
- **User identity verification**: Ensures that the client user is who they claim to be.
- **Secure backend requests**: The token is passed in API requests to validate sessions server-side.
- **Wallet ownership proof**: Includes public wallet keys to prove a user owns a particular wallet.

When making a backend request from the frontend, the client must include this ID token to ensure the backend can verify the authenticated user.

## Server-side verification

Server-side verification uses the ID token to authenticate users on your backend by validating the ownership of a wallet address.
The flow has three steps:

1. **Retrieve the ID token on the client.** After the user authenticates with Embedded Wallets, the SDK issues a JWT signed with the `ES256` algorithm.
Send this token to your backend with each authenticated request.
2. **Verify the token on your backend.** Validate the JWT signature against the appropriate JWKS endpoint or your project's verification key, and check that the wallet claim matches the identity the client is asserting.
3. **Authenticate the user.** Once the token is verified, treat the wallet address (or public key) inside it as a trusted user identifier and continue with your application logic.

The contents of the token differ based on how the user signed in:

- **Social logins:** The token includes a `public_key` linked to the user's wallet.
- **External wallets:** The token includes the wallet `address` instead of the public key.

The sections below describe the token format, how to retrieve it on the client, and how to verify it on your backend.

## ID token format

Embedded Wallets (previously Web3Auth) issues tokens as ES256-signed JWTs containing various identity claims about the user.
Expand Down
83 changes: 83 additions & 0 deletions embedded-wallets/authentication/user-account-dashboard.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
title: User account dashboard
description: 'Let your users manage recovery, multi-factor authentication, devices, and connected apps for their MetaMask Embedded Wallets account.'
---

The Embedded Wallets account dashboard gives your users one place to manage their account across every dapp that uses MetaMask Embedded Wallets.
Users can configure recovery and multi-factor authentication (MFA), review and revoke connected dapps, and manage trusted devices.

:::info Try it

Try the live [account dashboard](https://account.web3auth.io).

:::

![Unified recovery management screenshot](/img/embedded-wallets/account-dashboard/unified-recovery-management.jpg)

## Recovery and MFA

Users can:

- Set up and manage recovery factors: password, social recovery, authenticator app, recovery phrase, and passkeys.
- Unhide and copy their backup phrase.

Check warning on line 22 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Unhide'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Unhide'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 22, "column": 3}}}, "severity": "WARNING"}

Check warning on line 22 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Unhide'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Unhide'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 22, "column": 3}}}, "severity": "WARNING"}
- Resend the recovery phrase to a registered email address.
- Add or remove MFA factors at any time.

![Account dashboard overview screenshot](/img/embedded-wallets/account-dashboard/account-dashboard-overview.jpg)

## Connected dapps and sessions

Users can see which dapps are connected to their account and stay in control of access:

- View all dapps authorized to use the account.
- Revoke a dapp's access instantly.
- Sign out of active sessions as needed.

## Devices

Users can view and manage every device connected to their account:

- Add trusted devices.
- Remove unused or unauthorized devices.
- Set the current device as the default for added convenience.

![Device overview screenshot](/img/embedded-wallets/account-dashboard/device-overview.jpg)

## Security status

A visual indicator shows the overall security status of the account, prompting users to set up additional recovery factors for stronger protection.

![Security insights screenshot](/img/embedded-wallets/account-dashboard/security-insights.jpg)

## Use the dashboard in your dapp

Users access the dashboard after authenticating with any dapp that uses Embedded Wallets.

:::tip

For a smoother experience, add a **Manage account** or **Security** link to [account.web3auth.io](https://account.web3auth.io) in your dapp's settings or profile screen.

:::

Encourage your users to:

1. Set up at least three recovery factors.
2. Regularly review connected dapps and sessions.

Check warning on line 65 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Microsoft.Adverbs] Remove 'Regularly' if it's not important to the meaning of the statement. Raw Output: {"message": "[Microsoft.Adverbs] Remove 'Regularly' if it's not important to the meaning of the statement.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 65, "column": 4}}}, "severity": "WARNING"}

Check warning on line 65 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Microsoft.Adverbs] Remove 'Regularly' if it's not important to the meaning of the statement. Raw Output: {"message": "[Microsoft.Adverbs] Remove 'Regularly' if it's not important to the meaning of the statement.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 65, "column": 4}}}, "severity": "WARNING"}
3. Periodically review devices and enable an authenticator app.

## FAQ

### Can users access the account dashboard without logging in?

Check warning on line 70 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Microsoft.HeadingPunctuation] Don't use end punctuation in headings. Raw Output: {"message": "[Microsoft.HeadingPunctuation] Don't use end punctuation in headings.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 70, "column": 61}}}, "severity": "WARNING"}

Check warning on line 70 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Microsoft.HeadingPunctuation] Don't use end punctuation in headings. Raw Output: {"message": "[Microsoft.HeadingPunctuation] Don't use end punctuation in headings.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 70, "column": 61}}}, "severity": "WARNING"}

No.
Users must authenticate before they can access the dashboard.

### What recovery factors are supported?

Check warning on line 75 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Microsoft.HeadingPunctuation] Don't use end punctuation in headings. Raw Output: {"message": "[Microsoft.HeadingPunctuation] Don't use end punctuation in headings.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 75, "column": 39}}}, "severity": "WARNING"}

Check warning on line 75 in embedded-wallets/authentication/user-account-dashboard.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Microsoft.HeadingPunctuation] Don't use end punctuation in headings. Raw Output: {"message": "[Microsoft.HeadingPunctuation] Don't use end punctuation in headings.", "location": {"path": "embedded-wallets/authentication/user-account-dashboard.mdx", "range": {"start": {"line": 75, "column": 39}}}, "severity": "WARNING"}

The account dashboard supports the following recovery factors:

- Social recovery
- Recovery phrase
- Password
- Authenticator app
- Passkeys
54 changes: 54 additions & 0 deletions embedded-wallets/authentication/wallet-pregeneration.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: Wallet pregeneration
description: 'Pregenerate Embedded Wallets and smart accounts for your users before they sign in, so wallets are ready on first login.'
---

import BrowserOnly from '@docusaurus/BrowserOnly'
import PregenerateWallet from '@site/src/components/PregenerateWallet'
import PregenrateSmartAccount from '@site/src/components/PregenrateSmartAccount'

Wallet pregeneration creates an embedded wallet for a user before they sign in.

Check warning on line 10 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 10, "column": 8}}}, "severity": "WARNING"}

Check warning on line 10 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 10, "column": 8}}}, "severity": "WARNING"}
Call the API from your backend with a user identifier (such as an email), and Embedded Wallets returns the wallet address that the user receives on their first sign-in.

Pregenerated wallets unlock several patterns:

Check warning on line 13 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Pregenerated'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Pregenerated'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 13, "column": 1}}}, "severity": "WARNING"}

Check warning on line 13 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Pregenerated'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Pregenerated'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 13, "column": 1}}}, "severity": "WARNING"}

- **Onboarding without immediate sign-in.** Assign wallets during invitation or sign-up so users can engage with your dapp
before completing OAuth or other authentication flows.
- **Prefunded wallets.** Send tokens, NFTs, or rewards to a user's wallet address ahead of time so assets are waiting at first sign-in.

Check warning on line 17 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Prefunded'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Prefunded'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 17, "column": 5}}}, "severity": "WARNING"}

Check warning on line 17 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Prefunded'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Prefunded'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 17, "column": 5}}}, "severity": "WARNING"}
This pattern fits airdrops, welcome bonuses, and in-game items.
- **Deferred authentication.** Defer the full sign-in flow until the user is ready for their first onchain transaction.

:::note Plan requirement

Wallet pregeneration is a paid feature.

Check warning on line 23 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 23, "column": 8}}}, "severity": "WARNING"}

Check warning on line 23 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 23, "column": 8}}}, "severity": "WARNING"}
Use it for free on Sapphire Devnet; production use requires the [Scale Plan](https://web3auth.io/pricing.html).

Check failure on line 24 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [proselint.Cliches] 'for free' is a cliche. Raw Output: {"message": "[proselint.Cliches] 'for free' is a cliche.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 24, "column": 8}}}, "severity": "ERROR"}

Check failure on line 24 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [proselint.Cliches] 'for free' is a cliche. Raw Output: {"message": "[proselint.Cliches] 'for free' is a cliche.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 24, "column": 8}}}, "severity": "ERROR"}

:::

:::warning

The pregeneration API returns Core Kit / SFA key wallet addresses.

Check warning on line 30 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 30, "column": 5}}}, "severity": "WARNING"}

Check warning on line 30 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'pregeneration'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 30, "column": 5}}}, "severity": "WARNING"}
To use these addresses with the Embedded Wallets SDKs, set the `useCoreKitKey` or `useSFAKey` flag.

For more context, see how [keys can change between products](../troubleshooting/different-private-key.mdx#product).

:::

## Pregenerate an EOA wallet

Check warning on line 37 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.mdx)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Pregenerate'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Pregenerate'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 37, "column": 4}}}, "severity": "WARNING"}

Check warning on line 37 in embedded-wallets/authentication/wallet-pregeneration.mdx

View workflow job for this annotation

GitHub Actions / Spelling (.md)

[vale] reported by reviewdog 🐶 [Consensys.Spelling] Did you really mean 'Pregenerate'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary. Raw Output: {"message": "[Consensys.Spelling] Did you really mean 'Pregenerate'? Ignore this alert if this is a false positive, or ask Cursor to add the term to the Vale dictionary.", "location": {"path": "embedded-wallets/authentication/wallet-pregeneration.mdx", "range": {"start": {"line": 37, "column": 4}}}, "severity": "WARNING"}

Use the pregeneration API to create an externally owned account (EOA) for a user.
Call it after the user verifies their email, or independently using any unique identifier.

1. **Identify the user.** Determine the unique identifier (such as an email) you'll use as the `verifierId`.
2. **Call the API.** Submit the user's identifier along with the **Verifier Name**, **Web3Auth Network**, and **Client ID** from your project dashboard.
3. **Receive the wallet address.** Use the returned address.
The wallet is ready for the user on first sign-in.

<BrowserOnly>{() => <PregenerateWallet />}</BrowserOnly>

## Pregenerate a smart account

The same API also pregenerates ERC-4337 smart accounts.
The flow is identical to EOA pregeneration; only the returned address differs.

<BrowserOnly>{() => <PregenrateSmartAccount />}</BrowserOnly>
Loading
Loading