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

# Wallet Pregeneration

> Overview of generating pregenerated wallets for Para

export const Link = ({href, label, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  return <a href={href} target={newTab ? '_blank' : '_self'} rel={newTab ? 'noopener noreferrer' : undefined} className="not-prose inline-block relative text-black font-semibold cursor-pointer border-b-0 no-underline" onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      {label}
      <span className={`absolute left-0 bottom-0 w-full rounded-sm bg-gradient-to-r from-orange-600 to-purple-600 transition-all duration-300 ${isHovered ? 'h-0.5' : 'h-px'}`} />
    </a>;
};

export const Card = ({imgUrl, title, description, href, horizontal = false, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  const handleClick = e => {
    e.preventDefault();
    if (newTab) {
      window.open(href, '_blank', 'noopener,noreferrer');
    } else {
      window.location.href = href;
    }
  };
  return <div className={`not-prose relative my-2 p-[1px] rounded-xl transition-all duration-300 ${isHovered ? 'bg-gradient-to-r from-[#FF4E00] to-[#874AE3]' : 'bg-gray-200'}`} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      <a href={href} onClick={handleClick} className={`not-prose flex ${horizontal ? 'flex-row' : 'flex-col'} font-normal h-full bg-white overflow-hidden w-full cursor-pointer rounded-[11px] no-underline`}>
        {imgUrl && <div className={`relative overflow-hidden flex-shrink-0 ${horizontal ? 'w-[30%] rounded-l-[11px]' : 'w-full'}`} onClick={e => e.stopPropagation()}>
            <img src={imgUrl} alt={title} className="w-full h-full object-cover pointer-events-none select-none" draggable="false" />
            <div className="absolute inset-0 pointer-events-none" />
          </div>}
        <div className={`flex-grow px-6 py-5 ${horizontal ? 'w-[70%]' : 'w-full'} flex flex-col ${horizontal && imgUrl ? 'justify-center' : 'justify-start'}`}>
          {title && <h2 className="font-semibold text-base text-gray-800 m-0">{title}</h2>}
          {description && <div className={`font-normal text-gray-500 re leading-6 ${horizontal || !imgUrl ? 'mt-0' : 'mt-1'}`}>
              <p className="m-0 text-xs">{description}</p>
            </div>}
        </div>
      </a>
    </div>;
};

Wallet pregeneration allows you to create wallets in advance of user interactions, which can significantly improve user onboarding speeds and overall experience in your application. With pregeneration, you can create a wallet for any identifier (email, phone number, username, etc.) using Para's 2-of-2 MPC protocol.

The pregenerated wallet can later be claimed by the user associated with that identifier, transferring ownership to them — if your application permits this option. To claim a wallet, the wallet's user share must be loaded into the client and the wallet identifier must match the user's authenticating identifier.

<Info>
  If you create a wallet with an internal custom ID, store your own mapping from that ID to the future claimant. Before
  returning the user share for claim, update the wallet identifier to the identifier the user is authenticating with.
</Info>

## Choose Your Approach

### Recommended: REST API

The simplest path for new server-to-server integrations. No SDK to install, no user share to manage — just HTTP calls.

<Card horizontal title="REST API" imgUrl="/images/v2/general-server.png" href="/v2/rest/overview" description="Create, sign, and manage wallets over HTTP. No SDK required — Para's enclave handles key storage." />

### SDK Integrations

If you need client-side wallet claiming, signing with ecosystem libraries (ethers.js, @solana/web3.js), or fine-grained control over user share management, use one of the SDK integrations:

<CardGroup cols={2}>
  <Card horizontal title="Web Pregeneration" imgUrl="/images/v2/framework-nextjs.png" href="/v2/react/guides/pregen" description="Implement wallet pregeneration in web applications using Para's Web SDK." />

  <Card horizontal title="Server Pregeneration" imgUrl="/images/v2/framework-node.png" href="/v2/server/guides/pregen" description="Generate wallets server-side before user interactions using Para's Server SDK." />

  <Card horizontal title="React Native Pregeneration" imgUrl="/images/v2/framework-react-native.png" href="/v2/react-native/guides/pregen" description="Pre-create wallets in React Native mobile applications." />

  <Card horizontal title="Swift Pregeneration" imgUrl="/images/v2/framework-swift.png" href="/v2/swift/guides/pregen" description="Implement wallet pregeneration in iOS applications with Para's Swift SDK." />

  <Card horizontal title="Flutter Pregeneration" imgUrl="/images/v2/framework-flutter.png" href="/v2/flutter/guides/pregen" description="Generate wallets in advance for Flutter cross-platform applications." />
</CardGroup>

## Innovative Use Cases

Pregeneration enables powerful new ways to incorporate blockchain into your application:

* **Mass User Onboarding**: Create wallets for your existing user base or email lists instantly
* **Social Integration**: Generate wallets based on social identifiers like Twitter followers
* **Agent-Owned Wallets**: Allow AI agents or bots to create and manage wallets for specific functions
* **Server-Side Operations**: Create app-managed wallets to perform operations on behalf of users
* **Airdrops and Rewards**: Preload funds or NFTs into wallets that users can claim later
* **Staged Onboarding**: Let users experience your application before formally creating their wallet

These use cases represent just a few of the possibilities enabled by wallet pregeneration. The platform-specific guides provide detailed implementation instructions for your chosen environment.
