Configure verified-identity recovery and open the authenticated backup flow.
Configure recovery when an app-origin account is created. Verified-identity recovery lets a user who loses every passkey prove the same email or OAuth identity and add a new passkey to that application’s existing smart account.This managed-wallet flow is separate from SDK guardian recovery, where your application installs and operates its own onchain guardian accounts.
Add the verified-identity fallback to the same client used for sign-up and login. clientConfig is your provider, client ID, and sponsorship configuration from the shared client initialization:
For the EVM account, the embedded wallet SDK first attempts passkey-based recovery using the passkey provider’s PRF capability. The configured fallback applies only when passkey-based recovery is unavailable.recovery.fallback is an account-creation policy. Adding it to a client later does not retrofit recovery onto an already-created account.
Keep the account namespace unchanged. clientId selects registered
application metadata; it does not move recovery to the hosted provider’s
centralized WebAuthn namespace. Changing the host name, RP ID, or WebAuthn
mode selects another credential, signer, and smart account.
Managed Solana setup requires a verified root, service recovery, and enrollment of every active passkey. Hosted Solana recovery uses the email or OAuth service guardian only: an EVM PRF-derived guardian or backup file does not recover the Solana wallet, and there is no either-guardian policy.Follow Set up a Solana wallet. Do not fund it until the selected cluster reports ready: true; configuring recovery.fallback or completing the backup flow below is not a Solana readiness check.
For the EVM account, call setupRecovery() after a successful login or account creation. It opens the authenticated backup flow where the user creates a recovery passphrase and downloads a backup file:
const auth = await wallet.authenticate();if (!auth.success) throw new Error(auth.error.message);const recovery = await wallet.setupRecovery();if (!recovery.completed) { throw new Error(recovery.error.message);}
A completed result means the user completed this backup flow. It does not prove that every recovery mechanism or guardian is ready, so do not use it as a universal “recovery ready” check.Continue with Recover an account for the flow after every usable passkey is lost.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rhinestone","colors":{"primary":"#4f41ef","light":"#8479ff","dark":"#3428d1"},"logo":{"light":"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/light.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=6868a5854576ff60d371d5fdc0ae55c9","dark":"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/dark.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=2f9bff4fef6da993b8782b8e5d7357c5"},"favicon":"https://mintcdn.com/rhinestone/BVnq0VV8MigHINpS/favicon.svg?fit=max\u0026auto=format\u0026n=BVnq0VV8MigHINpS\u0026q=85\u0026s=25439e41b789b8369c52fa15ceae2644","appearance":{"default":"dark","strict":true},"background":{"color":{"dark":"#0C0C0C"}},"navbar":{"links":[{"href":"https://dashboard.rhinestone.dev","label":"Dashboard"},{"href":"https://github.com/rhinestonewtf","label":"GitHub"}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Create API Key","icon":"key","href":"https://tally.so/r/wg22x4"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rhinestone","hasAudioNarration":false,"actualSubdomain":"rhinestone","customDomains":["docs.rhinestone.dev"],"gitSource":{"type":"github","owner":"rhinestonewtf","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb4295a60f76c94453464a","collectionId":"7618524b-8144-4f55-a620-58d79fbeddf2","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb4295a60f76c94453464a"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeb4295a60f76c94453464a","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Wallets","count":153},{"language":"default","tag":"Custom signer","count":107},{"language":"default","tag":"Deposits","count":88},{"language":"default","tag":"SDK reference","count":74},{"language":"default","tag":"API Reference","count":67},{"language":"default","tag":"Transactions","count":30},{"language":"default","tag":"Account","count":28},{"language":"default","tag":"Overview","count":25},{"language":"default","tag":"Actions","count":25},{"language":"default","tag":"Session keys","count":21}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--background: #0C0C0C}.vm-code-group{--vm-menu-bg: #fff;--vm-menu-border: rgb(0 0 0 / 10%);--vm-hover: rgb(0 0 0 / 5%);margin:1.5rem 0;border:1px solid #404045;border-radius:12px}.dark .vm-code-group{--vm-menu-bg: #171717;--vm-menu-border: rgb(255 255 255 / 10%);--vm-hover: rgb(255 255 255 / 7%)}.vm-code-group-header{display:flex;align-items:center;justify-content:space-between;gap:0.75rem;padding:0.375rem 0.75rem;border-bottom:1px solid #404045;font-size:0.8125rem}.vm-code-caption{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:0.65}.vm-code-selector{position:relative;flex:none}.vm-code-trigger,.vm-code-option{display:flex;align-items:center;gap:0.5rem;min-height:32px;padding:0.375rem 0.5rem;border:0;border-radius:6px;background:transparent;color:inherit;font:inherit;line-height:1.25;cursor:pointer}.vm-code-trigger:hover,.vm-code-trigger[aria-expanded=\"true\"],.vm-code-option:hover,.vm-code-option:focus{background:var(--vm-hover)}.vm-code-trigger:focus-visible,.vm-code-option:focus-visible{outline:2px solid #8b7bf7;outline-offset:2px}.vm-code-group .vm-code-icon{display:block;flex:none;width:16px;height:16px;margin:0;border-radius:0}.vm-code-chevron{margin-left:0.125rem;opacity:0.55;transition:transform 150ms ease}.vm-code-trigger[aria-expanded=\"true\"] .vm-code-chevron{transform:rotate(180deg)}.vm-code-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:30;min-width:156px;padding:4px;border:1px solid var(--vm-menu-border);border-radius:10px;background:var(--vm-menu-bg);box-shadow:0 8px 24px rgb(0 0 0 / 18%)}.vm-code-option{width:100%;text-align:left}.vm-code-check{margin-left:auto;opacity:0.65}@media (pointer: coarse){.vm-code-trigger,.vm-code-option{min-height:44px}}@media (prefers-reduced-motion: reduce){.vm-code-chevron{transition:none}}.vm-code-group-panel>*{margin:0!important;border:0!important;border-radius:0 0 12px 12px;box-shadow:none!important}.vm-code-group-panel[hidden]{display:none}.prose table{display:table}table{border-collapse:separate;border-spacing:0;border:1px solid #404045;border-radius:8px;width:fit-content!important}table th,table td{border-right:1px solid #404045;border-bottom:1px solid #404045;padding:12px 16px!important}table th:last-child,table td:last-child{border-right:none}table tr:last-child td{border-bottom:none}table th{background-color:#201E2C}table th:first-child{border-radius:8px 0 0 0}table th:last-child{border-radius:0 8px 0 0}[data-component-name=\"mermaid-controls-wrapper\"]{display:none!important}.mermaid svg .actor{fill:#17132E!important;stroke:#373352!important}.mermaid svg rect.actor{rx:6;ry:6}.mermaid svg text.actor>tspan{fill:#D3CFF7!important}.mermaid svg .actor-line{stroke:#464359!important;stroke-width:1!important}.mermaid svg .messageLine0,.mermaid svg .messageLine1{stroke:#464359!important;stroke-width:1.5!important}.mermaid svg #arrowhead path,.mermaid svg [id$=\"-arrowhead\"] path{fill:#464359!important;stroke:#464359!important}.mermaid svg #crosshead path,.mermaid svg [id$=\"-crosshead\"] path{stroke:#464359!important}.mermaid svg .messageText{fill:#C7C6CC!important}.mermaid svg .activation0,.mermaid svg .activation1,.mermaid svg .activation2{fill:#17132E!important;stroke:#373352!important}.mermaid svg .note{fill:#17132E!important;stroke:#373352!important}.mermaid svg .noteText,.mermaid svg .noteText>tspan{fill:#C7C6CC!important}.mermaid svg .loopText,.mermaid svg .loopText>tspan{fill:#C7C6CC!important}.mermaid svg .loopLine{stroke:#373352!important}.mermaid svg .labelBox{fill:#17132E!important;stroke:#373352!important}.mermaid svg .labelText,.mermaid svg .labelText>tspan{fill:#C7C6CC!important}.mermaid svg .sequenceNumber{fill:#D3CFF7!important}.mermaid svg .node rect,.mermaid svg .node circle,.mermaid svg .node ellipse,.mermaid svg .node polygon,.mermaid svg .node path{fill:#17132E!important;stroke:#373352!important}.mermaid svg .nodeLabel,.mermaid svg .node .label{color:#D3CFF7!important;fill:#D3CFF7!important}.mermaid svg .flowchart-link{stroke:#464359!important}.mermaid svg .edgeLabel,.mermaid svg .edge-label{color:#C7C6CC!important;fill:#C7C6CC!important}.mermaid .labelBkg,.mermaid .labelBkg *{background:transparent!important}.mermaid svg .marker{fill:#464359!important;stroke:#464359!important}.dark #sidebar [data-active=\"true\"]{background-color:#141414!important;border-radius:6px}.deposit-demo{container-type:inline-size}.deposit-demo-loading{position:absolute;inset:0;display:grid;place-items:center;margin:0}.deposit-demo-stage:has(iframe[data-ready=\"true\"]) .deposit-demo-loading{visibility:hidden}@container (max-width: 411px){.deposit-demo-stage{--deposit-demo-height: 629px}}"}],"page":{"pagePath":"wallets/recovery/set-up","slug":"/wallets/recovery/set-up","pageMetadata":{"title":"Set up","description":"Configure verified-identity recovery and open the authenticated backup flow.","public":true,"href":"/wallets/recovery/set-up"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Configure verified-identity recovery and open the authenticated backup flow.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const CSS=`.rhinestone-wallet-demo .oa-demo {\n margin: 1.5rem 0;\n border: 1px solid #202127;\n border-radius: 16px;\n background: #0b0c0e;\n overflow: hidden;\n}\n.rhinestone-wallet-demo .oa-demo-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n min-height: 39px;\n padding: 0.625rem 1rem;\n border-bottom: 1px solid #191a1e;\n}\n.rhinestone-wallet-demo .oa-demo-title {\n font-size: 0.8125rem;\n font-weight: 500;\n letter-spacing: -0.01em;\n color: #e4e4e9;\n}\n.rhinestone-wallet-demo .oa-demo-status {\n display: flex;\n align-items: center;\n gap: 0.4375rem;\n flex: 0 0 auto;\n font-size: 0.75rem;\n color: #5e5e68;\n}\n.rhinestone-wallet-demo .oa-demo-dot {\n width: 6px;\n height: 6px;\n border-radius: 999px;\n background: #3f3f48;\n}\n.rhinestone-wallet-demo .oa-demo-dot[data-state=\"on\"] {\n background: #22c55e;\n box-shadow: 0 0 8px rgba(34, 197, 94, 0.5);\n}\n.rhinestone-wallet-demo .oa-demo-body {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 1rem;\n}\n.rhinestone-wallet-demo .demo-container {\n display: contents;\n}\n.rhinestone-wallet-demo .oa-demo-body > * > [style] {\n margin: 0 !important;\n}\n.rhinestone-wallet-demo .oa-demo-body > * > div[style]:not([class]) {\n padding: 0 !important;\n}\n.rhinestone-wallet-demo .oa-demo-body [style] {\n text-align: left !important;\n}\n.rhinestone-wallet-demo .oa-demo-body [style*=\"justify-content: center\"] {\n justify-content: flex-start !important;\n}\n.rhinestone-wallet-demo .demo-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.375rem;\n height: 2.25rem;\n padding: 0 0.875rem;\n border: none;\n border-radius: 10px;\n background: #4f41ef;\n color: #ffffff;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition:\n background 0.15s ease,\n opacity 0.15s ease;\n}\n.rhinestone-wallet-demo .demo-button:hover:not(:disabled) {\n background: #6355f5;\n}\n.rhinestone-wallet-demo .demo-button:disabled {\n opacity: 0.6;\n cursor: default;\n}\n.rhinestone-wallet-demo .oa-demo-body > * > .demo-button {\n align-self: flex-start;\n}\n.rhinestone-wallet-demo .oa-demo-body input[type=\"checkbox\"] {\n accent-color: #4f41ef;\n}\n.rhinestone-wallet-demo .demo-result {\n padding: 0.75rem 0.875rem;\n border-radius: 10px;\n background: #14151a;\n}\n.rhinestone-wallet-demo .demo-result-label {\n font-size: 0.6875rem;\n font-weight: 500;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: #6e6e78;\n}\n.rhinestone-wallet-demo .demo-result-value {\n margin-top: 0.1875rem;\n font-family: paperMono, ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.8125rem;\n line-height: 1.5;\n color: #e4e4e9;\n overflow-wrap: anywhere;\n}\n.rhinestone-wallet-demo .demo-error {\n margin: 0;\n font-size: 0.8125rem;\n color: #f87171;\n overflow-wrap: anywhere;\n}\n.rhinestone-wallet-demo .oa-demo-skeleton {\n display: block;\n width: 7rem;\n height: 2.25rem;\n border-radius: 10px;\n background: #16171c;\n animation: rhinestone-wallet-demo-pulse 1.6s ease-in-out infinite;\n}\n@keyframes rhinestone-wallet-demo-pulse {\n 50% {\n opacity: 0.45;\n }\n}`;const SDK_VERSION=`0.17.0`;const VIEM_VERSION=`2.55.0`;const STORAGE_KEY=`rhinestone-docs-1auth-account`;const PROD_BACKENDS={auth:`https://passkey.1auth.app`,sponsorship:`https://passkey.1auth.app/api/sponsorship`};const DEV_BACKENDS={auth:`https://passkey.passkey-test.app`,sponsorship:`https://passkey.passkey-test.app/api/sponsorship`};const PROD_DOCS_HOST=`docs.rhinestone.dev`;const backends=()=>{const host=typeof window===`undefined`?``:window.location.hostname;return host===PROD_DOCS_HOST?PROD_BACKENDS:DEV_BACKENDS};const BACKEND_NOTE=`Only the production docs host talks to the production Rhinestone deployment. `+`Every other host — a Mintlify preview, a tunnel, localhost — uses dev, so `+`an unrecognised preview pattern fails towards dev rather than creating `+`passkey state against production.`;const CDN=spec=>`https://esm.sh/`+spec+(spec.startsWith(`@rhinestone/wallet@`)?`?deps=viem@`+VIEM_VERSION:``);const MODULE_SPECS={sdk:()=>CDN(`@rhinestone/wallet@`+SDK_VERSION)};const importModule=url=>new Promise((resolve,reject)=>{const key=`__oa_`+Math.random().toString(36).slice(2);window[key]={resolve,reject};const script=document.createElement(`script`);script.type=`module`;script.textContent=`import(`+JSON.stringify(url)+`).then(m => window[`+JSON.stringify(key)+`].resolve(m))`+`.catch(e => window[`+JSON.stringify(key)+`].reject(new Error(String(e))));`;script.onerror=()=>reject(new Error(`failed to load `+url));document.head.appendChild(script);script.remove()});const importModuleWithRetry=async url=>{try{return await importModule(url)}catch(first){await new Promise(r=>setTimeout(r,500));return importModule(url)}};const loadDeps=async()=>{const specs=Object.entries(MODULE_SPECS).map(([name,spec])=>[name,spec()]);const cacheKey=`__OA_DEPS__`+specs.map(([,url])=>url).join(`|`);if(window[cacheKey])return window[cacheKey];const loaded=await Promise.all(specs.map(([,url])=>importModuleWithRetry(url)));const deps={React};specs.forEach(([name],i)=>{deps[name]=loaded[i]});deps.motion=motionShim(deps.React);window[cacheKey]=deps;return deps};const sponsorshipConfig=()=>({accessTokenUrl:backends().sponsorship+`/access-token`,extensionTokenUrl:backends().sponsorship+`/extension-token`});const motionShim=React=>{const passthrough=Tag=>React.forwardRef((props,ref)=>{const rest=Object.fromEntries(Object.entries(props).filter(([k])=>![`initial`,`animate`,`exit`,`transition`,`variants`,`whileHover`,`whileTap`,`layout`,`layoutId`].includes(k)));return React.createElement(Tag,{...rest,ref})});const cache={};return{motion:new Proxy({},{get:(_,tag)=>{if(!cache[tag])cache[tag]=passthrough(tag);return cache[tag]}}),AnimatePresence:({children})=>React.createElement(React.Fragment,null,children),useReducedMotion:()=>true}};const AuthContext=React.createContext(null);const useAuthContext=()=>React.useContext(AuthContext);const buildModules=deps=>{const mods={};mods.authctx=(()=>{const DOCS_APP_ORIGIN_STORAGE_KEY=STORAGE_KEY;const useAuth=()=>useAuthContext();return{DOCS_APP_ORIGIN_STORAGE_KEY,useAuth,clearDocsSession:()=>{}}})();mods.accountRecoveryDemo=(()=>{const{useCallback,useState}=deps.React;const{useAuth}=mods.authctx;function AccountRecoveryDemo(){const{client,isAuthenticated,login}=useAuth();const[state,setState]=useState({status:`idle`});const setupRecovery=useCallback(async()=>{if(!client)return;setState({status:`working`});try{if(!isAuthenticated\u0026\u0026!await login()){setState({status:`idle`});return}const result=await client.setupRecovery();if(result.completed){setState({status:`complete`})}else if(result.error.code===`USER_CANCELLED`){setState({status:`cancelled`})}else{setState({status:`error`,message:result.error.message})}}catch(error){setState({status:`error`,message:error instanceof Error?error.message:`Recovery setup failed`})}},[client,isAuthenticated,login]);const working=state.status===`working`;return React.createElement(`div`,{className:`demo-container`,\"data-testid\":`account-recovery-demo`},React.createElement(`div`,{className:`demo-result`,\"data-testid\":`account-recovery-result`},React.createElement(`p`,{className:`demo-result-label`},`Recovery`),React.createElement(`p`,{className:`demo-result-value`,\"data-testid\":`account-recovery-status`},state.status===`complete`?`Recovery backup steps confirmed — verify the file is present, then keep its passphrase separate.`:state.status===`cancelled`?`Recovery setup cancelled. No backup was marked complete.`:state.status===`error`?state.message:working?`Recovery setup is open. Approve the passkey check, then save both backup parts.`:isAuthenticated?`Signed in. Create an encrypted recovery backup for this account.`:`Log in to create a recovery backup for this docs-hostname account.`)),React.createElement(`button`,{className:`demo-button`,\"data-testid\":`account-recovery-action`,disabled:!client||working,onClick:()=>void setupRecovery(),style:{marginTop:`0.75rem`}},working?`Setup in progress…`:isAuthenticated?`Set up recovery`:`Log in and set up recovery`))}return{AccountRecoveryDemo}})();return mods};const ADDRESS_RE=/^0x[0-9a-fA-F]{40}$/;const readStoredAddressFromJsonEnvelope=()=>{try{const raw=window.localStorage.getItem(STORAGE_KEY);if(!raw)return null;const parsed=JSON.parse(raw);const address=parsed\u0026\u0026typeof parsed===`object`?parsed.address:null;return typeof address===`string`\u0026\u0026ADDRESS_RE.test(address)?address:null}catch{return null}};const writeStoredAddressAsJsonEnvelope=address=>{window.localStorage.setItem(STORAGE_KEY,JSON.stringify({address}))};const useWalletAuth=deps=>{const[address,setAddress]=React.useState(null);const[client,setClient]=React.useState(null);const sponsorship=React.useMemo(sponsorshipConfig,[]);const mounted=React.useRef(false);const sessionGeneration=React.useRef(0);React.useEffect(()=>{if(!deps)return;mounted.current=true;const restoreGeneration=++sessionGeneration.current;const{WalletClient}=deps.sdk;const nextClient=new WalletClient({providerUrl:backends().auth,clientId:`docs-app-origin`,webauthn:{rpId:window.location.hostname},theme:{mode:`dark`,primaryColor:`#ffffff`,backdrop:{color:`#52525c`,opacity:.5,blur:12}},recovery:{fallback:{type:`verified-identity`}},testnets:true,sponsorship,onDisconnect:()=>{if(!mounted.current)return;sessionGeneration.current+=1;window.localStorage.removeItem(STORAGE_KEY);setAddress(null)}});setClient(nextClient);const stored=readStoredAddressFromJsonEnvelope();if(stored){nextClient.getSession().then(result=>{if(!mounted.current||sessionGeneration.current!==restoreGeneration)return;const account=result.success?result.session.accounts.evm.address:null;if(account\u0026\u0026ADDRESS_RE.test(account)){writeStoredAddressAsJsonEnvelope(account);setAddress(account)}else{window.localStorage.removeItem(STORAGE_KEY);setAddress(null)}}).catch(()=>{if(!mounted.current||sessionGeneration.current!==restoreGeneration)return;window.localStorage.removeItem(STORAGE_KEY);setAddress(null)})}return()=>{mounted.current=false;sessionGeneration.current+=1}},[deps,sponsorship]);const login=React.useCallback(async()=>{if(!client)return null;const generation=++sessionGeneration.current;const result=await client.authenticate({oauthEnabled:false});if(!result.success){if(result.error?.code===`USER_CANCELLED`)return null;throw new Error(result.error?.message??`Authentication failed`)}const account=result.session.accounts.evm.address;if(!ADDRESS_RE.test(account))throw new Error(`Authentication returned an invalid account address`);if(!mounted.current||sessionGeneration.current!==generation)return null;writeStoredAddressAsJsonEnvelope(account);setAddress(account);return account},[client]);const logout=React.useCallback(()=>{sessionGeneration.current+=1;window.localStorage.removeItem(STORAGE_KEY);if(mounted.current)setAddress(null);if(client?.disconnect)client.disconnect()},[client]);return React.useMemo(()=>({address,isAuthenticated:!!address,client,sponsorship,login,logout}),[address,client,sponsorship,login,logout])};const Frame=({children,connected})=>_jsxs(`div`,{className:`oa-demo`,children:[_jsxs(`div`,{className:`oa-demo-head`,children:[_jsx(`span`,{className:`oa-demo-title`,children:`Set up recovery`}),_jsxs(`span`,{className:`oa-demo-status`,children:[_jsx(`span`,{className:`oa-demo-dot`,\"data-state\":connected?`on`:`off`}),connected?`Signed in`:`Not connected`]})]}),_jsx(`div`,{className:`oa-demo-body`,children})]});const AccountRecoveryDemo=()=>{const[deps,setDeps]=React.useState(null);const[loadError,setLoadError]=React.useState(``);const[connecting,setConnecting]=React.useState(false);React.useEffect(()=>{let cancelled=false;loadDeps().then(d=>!cancelled\u0026\u0026setDeps(d)).catch(e=>!cancelled\u0026\u0026setLoadError(String(e.message??e)));return()=>{cancelled=true}},[]);const mods=React.useMemo(()=>deps?buildModules(deps):null,[deps]);const auth=useWalletAuth(deps);return _jsxs(`div`,{className:`not-prose rhinestone-wallet-demo`,\"data-demo\":`account-recovery`,children:[_jsx(`style`,{dangerouslySetInnerHTML:{__html:CSS}}),_jsx(AuthContext.Provider,{value:auth,children:_jsx(Frame,{connected:auth.isAuthenticated,children:mods\u0026\u0026auth.client\u0026\u0026false\u0026\u0026!auth.isAuthenticated?_jsxs(`div`,{children:[_jsx(`button`,{className:`demo-button`,disabled:connecting,onClick:async()=>{setConnecting(true);setLoadError(``);try{await auth.login()}catch(error){setLoadError(String(error.message??error))}finally{setConnecting(false)}},children:connecting?`Signing in...`:`Sign in to try it`}),loadError?_jsx(`p`,{className:`demo-error`,children:loadError}):null]}):mods\u0026\u0026(auth.client||false)?React.createElement(mods.accountRecoveryDemo.AccountRecoveryDemo,{key:auth.address}):loadError?_jsx(`p`,{className:`demo-error`,children:loadError}):_jsx(`span`,{className:`oa-demo-skeleton`})})})]})};function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Configure recovery when an app-origin account is created. Verified-identity recovery lets a user who loses every passkey prove the same email or OAuth identity and add a new passkey to that application’s existing smart account.`}),`\n`,_jsxs(_components.p,{children:[`This managed-wallet flow is separate from `,_jsx(_components.a,{href:`/wallets/custom-signer/recovery/set-up`,children:`SDK guardian recovery`}),`, where your application installs and operates its own onchain guardian accounts.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-account-creation`,children:`Configure account creation`}),`\n`,_jsxs(_components.p,{children:[`Add the verified-identity fallback to the same client used for sign-up and login. `,_jsx(_components.code,{children:`clientConfig`}),` is your provider, client ID, and sponsorship configuration from the shared `,_jsx(_components.a,{href:`/wallets/embedded-wallets/accounts#initialize-the-client`,children:`client initialization`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,highlight:`[4]`,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` wallet`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` WalletClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`clientConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` recovery:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line line-highlight`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` fallback:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"verified-identity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`For the EVM account, the embedded wallet SDK first attempts passkey-based recovery using the passkey provider’s PRF capability. The configured fallback applies only when passkey-based recovery is unavailable.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`recovery.fallback`}),` is an account-creation policy. Adding it to a client later does not retrofit recovery onto an already-created account.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Keep the account namespace unchanged. `,_jsx(_components.code,{children:`clientId`}),` selects registered\napplication metadata; it does not move recovery to the hosted provider’s\ncentralized WebAuthn namespace. Changing the host name, RP ID, or WebAuthn\nmode selects another credential, signer, and smart account.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`set-up-managed-solana-recovery`,children:`Set up managed Solana recovery`}),`\n`,_jsx(_components.p,{children:`Managed Solana setup requires a verified root, service recovery, and enrollment of every active passkey. Hosted Solana recovery uses the email or OAuth service guardian only: an EVM PRF-derived guardian or backup file does not recover the Solana wallet, and there is no either-guardian policy.`}),`\n`,_jsxs(_components.p,{children:[`Follow `,_jsx(_components.a,{href:`/wallets/embedded-wallets/accounts#set-up-a-solana-wallet`,children:`Set up a Solana wallet`}),`. Do not fund it until the selected cluster reports `,_jsx(_components.code,{children:`ready: true`}),`; configuring `,_jsx(_components.code,{children:`recovery.fallback`}),` or completing the backup flow below is not a Solana readiness check.`]}),`\n`,_jsx(`span`,{id:`open-the-recovery-backup-flow`}),`\n`,_jsx(Heading,{level:`2`,id:`open-the-evm-recovery-backup-flow`,children:`Open the EVM recovery backup flow`}),`\n`,_jsxs(_components.p,{children:[`For the EVM account, call `,_jsx(_components.code,{children:`setupRecovery()`}),` after a successful login or account creation. It opens the authenticated backup flow where the user creates a recovery passphrase and downloads a backup file:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` auth`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` wallet`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`authenticate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`auth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`success`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`auth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` recovery`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` wallet`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setupRecovery`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`recovery`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`completed`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`recovery`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`A completed result means the user completed this backup flow. It does not prove that every recovery mechanism or guardian is ready, so do not use it as a universal “recovery ready” check.`}),`\n`,_jsx(_MdxComponentBoundary,{name:`AccountRecoveryDemo`,children:_jsx(AccountRecoveryDemo,{})}),`\n`,_jsxs(_components.p,{children:[`Continue with `,_jsx(_components.a,{href:`/wallets/recovery/recover-an-account`,children:`Recover an account`}),` for the flow after every usable passkey is lost.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{CSS,SDK_VERSION,VIEM_VERSION,STORAGE_KEY,PROD_BACKENDS,DEV_BACKENDS,PROD_DOCS_HOST,backends,BACKEND_NOTE,CDN,MODULE_SPECS,importModule,importModuleWithRetry,loadDeps,sponsorshipConfig,motionShim,AuthContext,useAuthContext,buildModules,ADDRESS_RE,readStoredAddressFromJsonEnvelope,writeStoredAddressAsJsonEnvelope,useWalletAuth,Frame,AccountRecoveryDemo,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Set up","description":"Configure verified-identity recovery and open the authenticated backup flow.","public":true,"href":"/wallets/recovery/set-up"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[138,12968,"undefined;const SDK_VERSION=undefined;const VIEM_VERSION=undefined;const STORAGE_KEY=undefined;const PROD_BACKENDS=undefined;const DEV_BACKENDS=undefined;const PROD_DOCS_HOST=undefined;const backends=()=>null;const BACKEND_NOTE=undefined;const CDN=()=>null;const MODULE_SPECS=undefined;const importModule=()=>null;const importModuleWithRetry=()=>null;const loadDeps=()=>null;const sponsorshipConfig=()=>null;const motionShim=()=>null;const AuthContext=undefined;const useAuthContext=()=>null;const buildModules=()=>null;const ADDRESS_RE=undefined;const readStoredAddressFromJsonEnvelope=()=>null;const writeStoredAddressAsJsonEnvelope=()=>null;const useWalletAuth=()=>null;const Frame=()=>null;const AccountRecoveryDemo=()=>null;function _c"]]},"mdxExtracts":{"tableOfContents":[{"title":"Configure account creation","slug":"configure-account-creation","depth":2,"children":[]},{"title":"Set up managed Solana recovery","slug":"set-up-managed-solana-recovery","depth":2,"children":[]},{"title":"Open the EVM recovery backup flow","slug":"open-the-evm-recovery-backup-flow","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"rhinestone","siteName":"Rhinestone","title":"Set up - Rhinestone","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-14T10:30:59.873Z","originalFileLocation":"wallets/recovery/set-up.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Configure verified-identity recovery and open the authenticated backup flow.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rhinestone\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Set up - Rhinestone\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure verified-identity recovery and open the authenticated backup flow.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rhinestone\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rhinestone.dev/wallets/recovery/set-up\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rhinestone.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Set+up\u0026amp;description=Configure+verified-identity+recovery+and+open+the+authenticated+backup+flow.\u0026amp;theme=480304d2cd15a3be6f477401\u0026amp;signature=873345cfcf6b4f8d4093a690082eb808b92396fc9052a9ff68a6b6e353279dff\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Set up - Rhinestone\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure verified-identity recovery and open the authenticated backup flow.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rhinestone.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Set+up\u0026amp;description=Configure+verified-identity+recovery+and+open+the+authenticated+backup+flow.\u0026amp;theme=480304d2cd15a3be6f477401\u0026amp;signature=873345cfcf6b4f8d4093a690082eb808b92396fc9052a9ff68a6b6e353279dff\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rhinestone\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f41ef\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rhinestone.dev/wallets/recovery/set-up\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/wallets/recovery/set-up.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rhinestone.dev/#organization\",\"name\":\"Rhinestone\",\"url\":\"https://docs.rhinestone.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/light.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=6868a5854576ff60d371d5fdc0ae55c9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rhinestone.dev#website\",\"name\":\"Rhinestone\",\"url\":\"https://docs.rhinestone.dev\",\"publisher\":{\"@id\":\"https://docs.rhinestone.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rhinestone.dev/wallets/recovery/set-up#webpage\",\"url\":\"https://docs.rhinestone.dev/wallets/recovery/set-up\",\"name\":\"Set up\",\"description\":\"Configure verified-identity recovery and open the authenticated backup flow.\",\"dateModified\":\"2026-10-14T10:30:59.873Z\",\"isPartOf\":{\"@id\":\"https://docs.rhinestone.dev#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.rhinestone.dev/wallets/recovery/set-up#article\",\"headline\":\"Set up\",\"name\":\"Set up\",\"description\":\"Configure verified-identity recovery and open the authenticated backup flow.\",\"url\":\"https://docs.rhinestone.dev/wallets/recovery/set-up\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rhinestone.dev/wallets/recovery/set-up#webpage\"},\"dateModified\":\"2026-10-14T10:30:59.873Z\",\"publisher\":{\"@id\":\"https://docs.rhinestone.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rhinestone.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rhinestone\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rhinestone","nav":{"global":{"anchors":[{"anchor":"Create API Key","icon":"key","href":"https://tally.so/r/wg22x4"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/home/introduction"}]},{"tab":"Wallets","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/wallets/overview"}]},{"item":"Embedded wallets","pages":[{"title":"Embedded wallets","href":"/wallets/embedded-wallets/overview"}]},{"item":"Session keys","pages":[{"title":"Session keys","href":"/wallets/session-keys/overview"}]},{"item":"Recovery","pages":[{"title":"Recovery","sidebarTitle":"Overview","description":"Restore access to an embedded wallet through a configured recovery guardian.","href":"/wallets/recovery/overview"},{"title":"Set up","href":"/wallets/recovery/set-up"},{"title":"Recover an account","description":"Regain access to a managed app-origin account after all usable passkeys are lost.","href":"/wallets/recovery/recover-an-account"},{"title":"Trustless recovery","href":"/wallets/recovery/trustless-recovery"}]},{"item":"Custom signer","pages":[{"title":"Custom signer","href":"/wallets/custom-signer/overview"}]}]},{"tab":"Transactions","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/transactions/overview"}]},{"item":"Relaying","pages":[{"title":"Relaying","href":"/transactions/relaying/overview"}]},{"item":"Multichain","pages":[{"title":"Multichain","href":"/transactions/multichain/overview"}]},{"item":"Trading","pages":[{"title":"Trading","href":"/transactions/trading/overview"}]},{"item":"Sponsorship \u0026 monetization","pages":[{"title":"Sponsorship \u0026 monetization","href":"/transactions/sponsorship/overview"}]}],"pages":[{"title":"Transactions","href":"/transactions/overview"}]},{"tab":"Deposits","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/deposits/overview/overview"}]},{"item":"Onramps","pages":[{"title":"Onramps","href":"/deposits/onramps/overview"}]},{"item":"Crypto","pages":[{"title":"Crypto","href":"/deposits/crypto/overview"}]},{"item":"Exchanges","pages":[{"title":"Exchanges","href":"/deposits/exchanges/overview"}]},{"item":"Headless","pages":[{"title":"Headless","href":"/deposits/headless/overview"}]}],"pages":[{"title":"Deposits","href":"/deposits/overview/overview"}]},{"tab":"Fiat integrations","pages":[{"title":"Fiat integrations","href":"/fiat/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Set up - Rhinestone","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}