This page has been updated for Wallets SDK V1. If you are using the previous version,
see the previous version docs or the V1 migration guide.
Recovery signers can also sign transactions when needed — they are not limited to recovery only. However, they involve higher friction (OTP verification or server-side signing), so they are best reserved for recovery flows and as a fallback.
Prerequisites
- A Crossmint API key with
wallets.createscope - For email OTP: the user’s email address
- For SMS OTP: the user’s phone number in E.164 format (e.g.,
+1234567890) - For server signer: a signer secret stored on your server
Email OTP Recovery
The user verifies ownership of their email address via a one-time password sent by Crossmint. This is the most common recovery method for consumer applications.- React
- Node.js
- React Native
- Flutter
- REST
Using Or using
createOnLogin on the provider (recommended):createWallet directly:SMS OTP Recovery
The user verifies ownership of their phone number via a one-time password delivered by SMS (or optionally WhatsApp). This is ideal for mobile-first applications.- React
- Node.js
- React Native
- Flutter
- REST
Using Or using
createOnLogin on the provider:createWallet directly:Server Signer as Recovery
Use a server signer as the recovery signer when you want your backend to manage recovery without user-facing OTP flows. This is common for AI agents, backend automation, and hybrid architectures where the server creates wallets that clients later use.How Recovery Works on a New Device
When a user accesses their wallet from a new device where no device signer exists:- The user authenticates via your app — the SDK retrieves the wallet
- The SDK detects no local device signer on this device
- On the first transaction (or when
recover()is called), the SDK triggers the recovery flow:- Email OTP: Crossmint sends a one-time code to the user’s email
- SMS OTP: Crossmint sends a one-time code to the user’s phone
- Server signer: your backend signs the recovery approval automatically
- The recovery signer authorizes a new device signer for this device
- All subsequent transactions on the new device are frictionless
The previous device’s signer remains valid. Each device maintains its own independent device signer.
Choosing a Recovery Method
Next Steps
Device Signer
Understand how the default client-side signer works
Server Signer
Set up server-side signing with key derivation
Add Signers
Add passkeys or external wallets to an existing wallet

