Why recovery is needed
Dynamic Embedded Wallets are protected by passkeys which are stored on a user’s device through a password manager like iCloud, 1Password or Google Password Manager. One of two scenarios can result in a user losing access:- The user deletes the passkey manually.
- The user loses access to their password manager (iCloud/Google Password manager)
For Apple and iCloud
For Apple and iCloud
Go to iforgot.apple.com. Follow prompts to restore access to icloud. If a customer lost their device, they will need to complete additional steps to have their passkeys ported over to the new device. They must contact Apple Support for further verifications.
For Google and Android Devices
For Google and Android Devices
Passkeys created on Android are backed up and synced with google password
manager. That means user’s passkeys go with them when they replace their
devices. Customers should follow google’s password recovery flow to regain
access to their account and assign ownership to their new device.
Recovering a passkey from 1Password.
Recovering a passkey from 1Password.
Passkeys are gated in 1password through a combination of unique credentials and encryption. Passkeys are treated similar to existing passwords so that If a user forgets their 1password password, they can recover it using existing processes: https://support.1password.com/forgot-account-password
How to enable recovery
If your customer has deleted their passkey or is unable to see a passkey when signing, they can use recovery to generate a new one. In Dashboard under embedded wallets, toggle Recovery On for all customers. That’s it!What it looks like for a user
Inside the Dynamic modal, your end user should see three dots to the right of their wallet address at the top




- The email will come from the domain turnkey.io
- It will contain containing a base58 encoded string
- The code will expire within 15 minutes
- The code is only valid on the browser and device they started the request on
Triggering recovery manually
If you want to open the recovery flow at any other point, you can. You can do this by calling theinitPasskeyRecoveryProcess
method, which comes as part of the usePasskeyRecovery hook. It will open exactly the same flow as described above.