Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey’s consensus system.
Here are some examples of how MFA policies can be used in practice on your end-users’ sub-organization. MFA policies are highly customizable and can be configured to fit the specific needs of your organization and users. Feel free to tweak these examples to fit your use case!
In this example, we require users to satisfy MFA only when performing signing activities. For all other activities, no MFA is required. In this case, the user can use their existing session along with a passkey to satisfy MFA when signing.
mfaPolicy: { userId: "<target-user-id>", // Required: the user this MFA policy applies to condition: "activity.action == 'SIGN'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 0, // Evaluation priority; policies with lower values are evaluated first}
In this example, we require users to authenticate with both a passkey and an email OTP to retrieve a session. Every other activity requires only a session.
// Require users to authenticate with both a passkey and an email OTP to retrieve a sessionmfaPolicy: { condition: "activity.resource == 'AUTH'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_EMAIL_OTP" }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 0,}// Everything else only requires the session (recieved after satisfying the above MFA requirements to authenticate)mfaPolicy: { condition: "true", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, ] } ], order: 1,}
Two factor authentication, exporting requires stronger MFA
In this example, we require users to authenticate with both a passkey and an email OTP to retrieve a session. For exporting, we require users to authenticate with their passkey and their existing session. For all other activities, only a session is required.
// Require users to authenticate with both a passkey and an email OTP to retrieve a sessionmfaPolicy: { condition: "activity.resource == 'AUTH'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_EMAIL_OTP" }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 0,}// Exporting requires both session and passkeymfaPolicy: { condition: "activity.action == 'EXPORT'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 1,}// Everything else only requires the sessionmfaPolicy: { condition: "true", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, ] } ], order: 2,}
Two factor authentication, signing requires MFA every 15 minutes
In this example, MFA is required for authentication. Signing requires MFA but, a session profile with a 15 minute expiration is used so that users only need to satisfy MFA every 15 minutes when signing.In order to get this session profile, the user must authenticate with their existing default session (retrieved by using email OTP and a passkey) and a passkey. All other activities only require a session.First, we set up the session profile with a 15 minute expiration on the parent organization:
// The UUID for this session will be generated on creation. Let's assume it is `11111111-1111-1111-1111-111111111111` for this example!sessionProfile: { sessionProfileName: 'colossal session', scope: "true", // This session profile can be used for any activity expirationSeconds: 900, // 15 minutes}
Then, we set up the MFA policies on the sub-organization:
// Requires users to authenticate with the default session and a passkey in order to retrieve the "colossal session" that has a 15 minute expirationmfaPolicy: { condition: "activity.resource == 'AUTH' && activity.params.session_profile_id == '11111111-1111-1111-1111-111111111111'", // This condition ensures that the MFA requirements only apply when the user is trying to retrieve the "colossal session" requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION", id: "00000000-0000-0000-0000-000000000000" // This is the default read/write session that is issued if no session profile is specified during authentication }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 0,}// Require users to authenticate with both a passkey and email OTP to retrieve a default read/write sessionmfaPolicy: { condition: "activity.resource == 'AUTH'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_EMAIL_OTP" }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 1,}// Signing requires a session issued with the session profile (which requires MFA every 15 minutes), but not the passkeymfaPolicy: { condition: "activity.action == 'SIGN'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION", id: "11111111-1111-1111-1111-111111111111" // Must use the "colossal session" that has a 15 minute expiration, so that MFA is required every 15 minutes when signing }, ] } ], order: 2,}mfaPolicy: { condition: "true", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, // All other activities can be satisfied with any session, so users can use the "colossal session" that requires MFA every 15 minutes, or the default read/write session that doesn't require MFA ] } ], order: 3,}
In this example, different login methods grant different levels of access:
SMS OTP login: grants a session that can do all activities except export
Passkey login: grants a session that can do all activities including export
SMS user wants to export: must upgrade their session by proving they also have a passkey. The upgraded session lasts 15 minutes, after which they must re-authenticate to export again.
First, we set up the session profiles on the parent organization:
// SMS basic session (assume uuid: 11111111-1111-1111-1111-111111111111)// Can do everything except exportsessionProfile: { sessionProfileName: 'sms-basic-session', scope: "activity.action != 'EXPORT'", expirationSeconds: 25200, // 7 hours}// SMS upgraded session (assume uuid: 22222222-2222-2222-2222-222222222222)// Only used for exporting, expires quickly to force re-authenticationsessionProfile: { sessionProfileName: 'sms-upgraded-session', scope: "activity.action == 'EXPORT'", expirationSeconds: 900, // 15 minutes}// Passkey login session (assume uuid: 33333333-3333-3333-3333-333333333333)// Full access to all activitiessessionProfile: { sessionProfileName: 'passkey-login-session', scope: "true", expirationSeconds: 25200, // 7 hours}
Then, we set up the MFA policies on the sub-organization:
// SMS basic login: requires SMS OTP to get the basic sessionmfaPolicy: { condition: "activity.resource == 'AUTH' && activity.params.session_profile_id == '11111111-1111-1111-1111-111111111111'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SMS_OTP" }, ] } ], order: 0,}// Passkey login: requires passkey to get the passkey sessionmfaPolicy: { condition: "activity.resource == 'AUTH' && activity.params.session_profile_id == '33333333-3333-3333-3333-333333333333'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 1,}// SMS upgrade: requires the existing SMS basic session AND a passkey to get the upgraded export sessionmfaPolicy: { condition: "activity.resource == 'AUTH' && activity.params.session_profile_id == '22222222-2222-2222-2222-222222222222'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION", id: "11111111-1111-1111-1111-111111111111", // Must use the SMS basic session }, ] }, { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 2,}// Export: requires either the upgraded SMS session or the passkey sessionmfaPolicy: { condition: "activity.action == 'EXPORT'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION", id: "22222222-2222-2222-2222-222222222222", // SMS upgraded session }, { type: "AUTHENTICATION_TYPE_SESSION", id: "33333333-3333-3333-3333-333333333333", // Passkey session (already has full access) }, ] } ], order: 3,}// Everything else: requires any sessionmfaPolicy: { condition: "true", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_SESSION" }, ] } ], order: 4,}
In this example, users log in with SMS OTP and receive a safe session that allows all activities except signing. To sign, they must upgrade to a signing session by proving they have a passkey. The signing session lasts 15 minutes, after which the user falls back to the safe session. In the UX, the user can also explicitly “downgrade” back to the safe session at any time by simply discarding the signing session.
SMS OTP login: grants a safe session that can do all activities except sign
User wants to sign: uses the safe session and a passkey to get a signing session that can only be used for signing activities. The signing session lasts 15 minutes.
Explicit downgrade: user discards the signing session in the UX and switches back to the safe session. No Turnkey API call is needed - the app simply stops using the signing session.
Automatic downgrade: after 15 minutes, the signing session expires. Any signing attempts will require the user to go through the upgrade flow again.
First, we set up the session profiles on the parent organization:
In this example, a parent organization enforces MFA on an end-user’s sub-organization using a delegated access user. The delegated access user is controlled by the parent org and has a narrowly scoped policy that only allows it to manage MFA policies.
Parent org
Creates a sub-organization with a root user
Sub-org root user
Creates a delegated access user whose API key is controlled by the parent org
Assigns the delegated access user a policy that only allows MFA policy management
Delegated access user
Creates an MFA policy requiring the end user to authenticate with a passkey for all signing activities
First, the sub-org root user creates a policy for the delegated access user:
// Policy for the delegated access userpolicy: { policyName: "Allow MFA policy management", effect: "EFFECT_ALLOW", condition: "activity.resource == 'MFA_POLICY' && activity.action == 'CREATE'", // Only allow creating MFA policies to prevent the delegated access user from doing anything else notes: "Allows the delegated access user to create MFA policies",}
Give your protective policy order: 0, as the example below does. Only the first matching policy applies, and two policies on the same user cannot share an order, so nothing can be placed ahead of order 0. Leave it free and a credential that can create MFA policies could take it with a permissive policy, overriding yours without modifying or deleting it.
Then, the delegated access user (controlled by the parent org) creates an MFA policy for the sub-org root user:
// MFA policy created by the delegated access usermfaPolicy: { userId: "<suborg-root-user-id>", mfaPolicyName: "Require passkey for signing", condition: "activity.action == 'SIGN'", requiredAuthenticationMethods: [ { any: [ { type: "AUTHENTICATION_TYPE_PASSKEY" }, ] } ], order: 0,}
In this example, a parent organization sets up a recovery mechanism using two delegated access users. Both must approve before an MFA policy can be deleted, preventing any single party from removing a user’s MFA protections. See MFA Recovery for more details.
Sub-org root user
Creates two delegated access users, each with an API key controlled by a different party in the parent org
Assigns a policy requiring both delegated users to approve MFA policy deletions
Delegated access users
When the end user is locked out, both users must approve the DeleteMfaPolicy activity
The sub-org root user creates a consensus policy for recovery:
// Policy for the delegated access users - requires both to approvepolicy: { policyName: "Quorum MFA recovery", effect: "EFFECT_ALLOW", condition: "activity.resource == 'MFA_POLICY' && activity.action == 'DELETE'", // Only allow deleting MFA policies to prevent the delegated access users from doing anything else consensus: "approvers.count() >= 2", notes: "Requires both delegated access users to approve before an MFA policy can be deleted",}
To recover a locked-out user, the first delegated access user proposes the deletion:
// First delegated access user proposes deleting the MFA policydeleteMfaPolicy: { userId: "<suborg-root-user-id>", mfaPolicyId: "<mfa-policy-id-to-delete>",}// Activity is returned with ACTIVITY_STATUS_CONSENSUS_NEEDED
Then the second delegated access user approves:
// Second delegated access user approves the deletionapproveActivity: { fingerprint: "<fingerprint-from-delete-activity>",}// Activity completes - MFA policy is deleted, user is no longer locked out
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Turnkey","colors":{"primary":"#4C48FF","light":"#4C48FF","dark":"#050a0b"},"logo":{"light":"https://mintcdn.com/turnkey-0e7c1f5b/YQKQ_azrjtJ471Qy/logo/light.svg?fit=max\u0026auto=format\u0026n=YQKQ_azrjtJ471Qy\u0026q=85\u0026s=38556c8732a1d68a5399fce905b480b1","dark":"https://mintcdn.com/turnkey-0e7c1f5b/YQKQ_azrjtJ471Qy/logo/dark.svg?fit=max\u0026auto=format\u0026n=YQKQ_azrjtJ471Qy\u0026q=85\u0026s=98f8b7cda703a0db60ac27ff2230e82a","href":"https://www.turnkey.com/"},"favicon":"https://mintcdn.com/turnkey-0e7c1f5b/G2SswZbcSJ7UNXDG/favicon.svg?fit=max\u0026auto=format\u0026n=G2SswZbcSJ7UNXDG\u0026q=85\u0026s=3ebddfc4d9bf146ad2e2dd286f2ead54","navbar":{"links":[{"href":"https://www.turnkey.com/blog","label":"Blog"},{"href":"https://www.turnkey.com/contact-us","label":"Contact us"}],"primary":{"type":"button","label":"Get started","href":"https://app.turnkey.com/dashboard/auth/initial"}},"footer":{"socials":{"x":"https://x.com/turnkeyhq","github":"https://github.com/tkhq","linkedin":"https://www.linkedin.com/company/turnkeyhq"}},"seo":{"metatags":{"og:image":"https://docs.turnkey.com/images/og-image.png"}},"styling":{"codeblocks":"system","latex":true},"integrations":{"ga4":{"measurementId":"G-VRJJ2TSC23"},"gtm":{"tagId":"GTM-PN838HQC"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"markdown":{"instructions":["Turnkey is wallet infrastructure: create and manage crypto wallets, sign transactions, and enforce policy-based access controls. Best-fit uses: embedded consumer wallets (email/passkey/social auth, no seed phrases), automated onchain operations with server-side wallets, AI agent wallets with policy-scoped signing, enterprise key management, and verifiable off-chain workloads on Turnkey Verifiable Cloud (TVC).","Every API call is a JSON POST to https://api.turnkey.com signed with a P-256 API key; create an organization and key self-serve at https://app.turnkey.com.","Key Turnkey developer resources: API reference (https://docs.turnkey.com/api-reference/overview/intro.md), OpenAPI spec (https://docs.turnkey.com/public_api.swagger.json), authentication (https://docs.turnkey.com/features/authentication/overview.md), webhooks (https://docs.turnkey.com/features/webhooks/overview.md), MCP server for docs search (https://docs.turnkey.com/mcp), skill for building with Turnkey (https://docs.turnkey.com/skill.md), agent skills for operating an organization (https://docs.turnkey.com/get-started/ai-skills.md), CLI (https://docs.turnkey.com/sdks/cli.md), SDK reference (https://docs.turnkey.com/sdks/introduction.md), full docs content (https://docs.turnkey.com/llms-full.txt)."]},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"turnkey-0e7c1f5b","hasAudioNarration":false,"actualSubdomain":"turnkey-0e7c1f5b","customDomains":["docs.turnkey.com"],"gitSource":{"type":"github","owner":"tkhq","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aecc9bdb73fb2a3ef800551","collectionId":"5db7017d-425f-4d37-a722-132c5f5546b0","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecc9bdb73fb2a3ef800551"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aecc9bdb73fb2a3ef800551","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API \u0026 SDK reference","count":450},{"language":"default","tag":"SDK reference","count":241},{"language":"default","tag":"REST API","count":209},{"language":"default","tag":"Documentation","count":126},{"language":"default","tag":"Activities","count":118},{"language":"default","tag":"Features","count":115},{"language":"default","tag":"Solutions","count":105},{"language":"default","tag":"React wallet kit","count":94},{"language":"default","tag":"Queries","count":75},{"language":"default","tag":"Embedded Wallets","count":71}]},"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":"styles.css","content":".sms-price-lookup-container{position:relative;margin-top:1rem;margin-bottom:1rem}.sms-country-trigger{display:block;width:100%;padding:0.5rem 0.75rem;font-size:1rem;font-family:inherit;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:0.25rem;text-align:left;cursor:pointer;padding-right:2rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 0.75rem center;background-size:16px 12px}.sms-country-list{display:none;position:absolute;top:100%;left:0;width:100%;max-height:200px;overflow-y:auto;background-color:#fff;border:1px solid #ced4da;border-top:none;border-radius:0 0 0.25rem 0.25rem;z-index:1000;box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);margin:0;padding:0;list-style:none}.sms-country-item{display:block;width:100%;padding:0.5rem 0.75rem;font-size:1rem;font-family:inherit;color:#495057;text-align:left;background-color:transparent;border:none;cursor:pointer;white-space:nowrap}.sms-country-item:hover,.sms-country-item:focus{background-color:#f8f9fa;color:#16181b;outline:none}#hidden-content-simple[data-open=\"false\"]{display:none}#hidden-content-simple[data-open=\"true\"]{display:block}@font-face{font-family:'ABC Favorit';src:url('/fonts/ABCFavorit-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'ABC Favorit';src:url('/fonts/ABCFavorit-Bold.woff2') format('woff2'),\n url('/fonts/ABCFavorit-Bold.woff') format('woff');font-weight:700;font-style:normal;font-display:swap}a.nav-tabs-item[href=\"/welcome\"]>img{display:none!important}a.nav-tabs-item[href=\"/welcome\"]::before{content:\"\";display:block;width:1rem;height:1rem;flex-shrink:0;background-color:currentColor;mask-image:url(/images/icons/home-02.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-image:url(/images/icons/home-02.svg);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}a.nav-tabs-item[data-active=\"true\"],a.nav-tabs-item[data-active=\"true\"].text-gray-800{color:#4c48ff!important;text-shadow:none!important}.dark a.nav-tabs-item[data-active=\"true\"],.dark a.nav-tabs-item[data-active=\"true\"].dark\\:text-gray-200{color:#5B68FF!important;text-shadow:none!important}a.nav-tabs-item[href=\"/welcome\"][data-active=\"true\"]::before{background-color:#4c48ff!important}.dark a.nav-tabs-item[href=\"/welcome\"][data-active=\"true\"]::before{background-color:#5B68FF!important}.scroll-mt-\\[var\\(--scroll-mt\\)\\]:has(.tk-page){max-width:none!important;width:100%!important;margin-inline:0!important;padding-inline:0!important}#content-container:has(.tk-page)>.flex.flex-row-reverse{flex-direction:row!important}#content-container:has(.tk-page) #content-area{width:100%!important;max-width:none!important;padding:0!important;margin:0!important}#content-container:has(.tk-page) #sidebar{display:none!important}#content-container:has(.tk-page) #content{max-width:none!important;padding:0!important}.tk-page{width:100%;max-width:92rem;margin-inline:auto;padding:0 3rem 5rem;box-sizing:border-box}@media (max-width: 1000px){.tk-page{padding-inline:40px}}@media (max-width: 868px){.tk-page{padding-inline:20px;padding-bottom:2.5rem}}.tk-img-light{display:block!important}.tk-img-dark{display:none!important}.dark .tk-img-light{display:none!important}.dark .tk-img-dark{display:block!important}.dark .tk-page{--tk-surface: #0B0B0F}.tk-placeholder{background:#f3f4f6;border:2px dashed #d1d5db;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:1.5rem;text-align:center;font-size:0.75rem;color:#9ca3af;box-sizing:border-box}.dark .tk-placeholder{background:#1f2937;border-color:#374151;color:#6b7280}.section-divider{border:none;border-top:1px solid #e5e7eb;margin:0}.dark .section-divider{border-top-color:rgba(255, 255, 255, 0.06)}.tk-hero{position:relative;overflow:hidden;padding:2.5rem 0 3rem;min-height:360px;display:flex;align-items:stretch;justify-content:flex-start;gap:2.5rem}.tk-hero-content{flex:0 1 720px;max-width:62%;min-width:0;align-self:flex-start;position:relative;z-index:2}.tk-hero-headline{color:var(--Black, #111);font-family:'ABC Favorit', sans-serif;font-size:82px;font-style:normal;font-weight:400;line-height:95%;letter-spacing:-4.1px;font-synthesis:none;margin:0 0 1.25rem;max-width:720px}.dark .tk-hero-headline{color:#f9fafb}.tk-hero-body{color:#414146;font-family:Inter, sans-serif;font-size:18px;font-style:normal;font-weight:400;line-height:28px;font-feature-settings:'ss01' on, 'ss03' on;margin:0 0 1.5rem;max-width:720px}.dark .tk-hero-body{color:#a1a1aa}.tk-build-body,.tk-whitepaper-text{color:#414146;font-family:Inter, sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:28px}.dark .tk-build-body,.dark .tk-whitepaper-text{color:#a1a1aa}.tk-search-bar{display:flex;align-items:center;gap:12px;border-radius:12px;border:1px solid var(--Black-20, rgba(0, 0, 0, 0.20));background:var(--Black-4, rgba(0, 0, 0, 0.04));padding:12px 16px;cursor:pointer;max-width:500px;transition:border-color 0.15s, background 0.15s}.tk-search-bar:hover{border-color:rgba(0, 0, 0, 0.28);background:rgba(0, 0, 0, 0.06)}.tk-search-icon{flex-shrink:0;color:#737277}.tk-search-placeholder{flex:1;color:#737277;text-align:left;font-family:Inter, sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:24px}.dark .tk-search-icon,.dark .tk-search-placeholder{color:#a1a1aa}.dark .tk-search-bar{border-color:rgba(255, 255, 255, 0.20);background:rgba(255, 255, 255, 0.04)}.dark .tk-search-bar:hover{border-color:rgba(255, 255, 255, 0.28);background:rgba(255, 255, 255, 0.06)}.tk-search-kbd{color:#737277;text-align:center;font-family:\"SF Pro\", -apple-system, BlinkMacSystemFont, sans-serif;font-size:12px;font-style:normal;font-weight:590;line-height:16px;border:none;border-radius:0;padding:0;background:transparent}.dark .tk-search-kbd{color:#a1a1aa;background:transparent}.tk-hero-illustration{position:relative;flex:0 0 657px;width:657px;min-height:329px;display:flex;align-items:center;justify-content:flex-start;z-index:1;pointer-events:none;user-select:none}.tk-hero>.tk-hero-grid{flex:none}.tk-hero-illustration>*{pointer-events:none;cursor:default}.tk-hero-grid{position:absolute;top:0;right:0;width:640px;height:512px;z-index:0;pointer-events:none}.tk-hero-grid img{display:block;width:640px;height:512px}.tk-hero-img{position:relative;display:block;width:657px;height:329px;flex-shrink:0;pointer-events:none;border:none}.tk-hero-img svg{display:block;width:657px;height:329px}@media (max-width: 1440px) and (min-width: 869px){.tk-hero{position:relative;flex-direction:row;align-items:flex-start;justify-content:flex-start;gap:1rem;width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);padding:2.3125rem 0 2.5rem 3rem;min-height:auto;overflow:hidden;box-sizing:border-box}.tk-hero-grid{top:-3.3125rem;right:0;left:auto;width:640px;height:512px}.tk-hero-grid img{width:640px;height:512px;max-height:none;object-fit:none}.tk-hero-content{display:flex;flex-direction:column;gap:24px;flex:0 0 612px;max-width:612px;width:612px;align-self:flex-start;position:relative;z-index:2;isolation:isolate}.tk-hero-content::before{content:\"\";position:absolute;z-index:-1;top:0;right:0;bottom:0;left:0;width:100%;pointer-events:none;background:linear-gradient(\n 90deg,\n #ffffff 0%,\n #ffffff 75%,\n rgba(255, 255, 255, 0) 100%\n )}.dark .tk-hero-content::before{background:linear-gradient(\n 90deg,\n var(--tk-surface, #0B0B0F) 0%,\n var(--tk-surface, #0B0B0F) 75%,\n rgba(11, 11, 15, 0) 100%\n )}.tk-hero-headline{font-size:74px;letter-spacing:-3.7px;line-height:0.95;margin:0;max-width:none}.tk-hero-body{margin:0;max-width:none}.tk-search-bar{max-width:437px}.tk-hero-illustration{position:absolute;top:2.3125rem;right:0;display:block;flex:none;width:657px;min-width:657px;min-height:328px;margin:0;overflow:visible;z-index:1}.tk-hero-img{display:block;width:657px;max-width:none;height:auto}}@media (max-width: 1190px) and (min-width: 869px){.tk-hero-illustration{right:-100px}}@media (max-width: 1000px) and (min-width: 869px){.tk-hero{padding-left:40px}}@media (max-width: 1000px){.tk-whitepaper{padding:20px 40px 0}}@media (max-width: 868px){.tk-hero{flex-direction:column;gap:0;padding:2.25rem 0 2.5rem;min-height:auto;overflow:visible}.tk-hero-grid{display:none}.tk-hero-illustration{display:none}.tk-hero-content{display:flex;flex-direction:column;gap:24px;flex:1 1 auto;max-width:100%;width:100%;isolation:auto}.tk-hero-content::before{display:none}.tk-hero-headline{font-size:44px;letter-spacing:-2.2px;line-height:0.95;margin:0}.tk-hero-body{margin:0}.tk-search-bar{max-width:none;width:100%}.tk-build,.tk-solutions-section,.tk-features-section,.tk-whitepaper-section{margin:2.5rem 0}}.tk-section-heading{font-family:Inter, sans-serif;font-size:30px;font-weight:700;letter-spacing:-0.75px;line-height:1.2;margin:0 0 1.25rem;color:#1a191e}.dark .tk-section-heading{color:#f9fafb}.tk-build{display:grid;grid-template-columns:1fr;gap:28px;align-items:start;margin:52px 0}.tk-build-intro{display:contents}.tk-build-copy{display:flex;flex-direction:column;gap:28px;grid-column:1;grid-row:1}.tk-build-visual{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:40px;grid-column:1;grid-row:2;width:100%;justify-self:start}.tk-build-links{grid-column:1;grid-row:3}.tk-build-selectors{flex:0 0 auto;min-width:0;max-width:none;justify-content:flex-start}.tk-selector-list{width:100%;max-width:100%}@media (min-width: 869px) and (max-width: 1379px){.tk-build-visual{justify-content:center;justify-self:center;width:fit-content;max-width:100%;margin-inline:auto}}@media (min-width: 1380px){.tk-build{display:grid;grid-template-columns:minmax(0, 558px) auto;width:100%;gap:40px;align-items:center;justify-items:start}.tk-build-intro{display:flex;flex-direction:column;gap:28px;min-width:0;max-width:558px}.tk-build-copy{grid-column:unset;grid-row:unset;max-width:none}.tk-build-links{grid-column:unset;grid-row:unset}.tk-build-visual{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:40px;width:auto;min-width:0;grid-column:unset;grid-row:unset;justify-self:start}.tk-build-selectors{flex:0 0 auto;min-width:auto;max-width:none;justify-content:flex-start}.tk-selector-list{width:max-content;max-width:100%}}.tk-build-heading{font-family:Inter, sans-serif;font-size:30px;font-weight:700;letter-spacing:-0.75px;line-height:normal;margin:0;color:#1a191e}.dark .tk-build-heading{color:#f9fafb}.tk-build-body{margin:0}.tk-build-links{display:flex;flex-direction:row;gap:40px;flex-wrap:wrap}.tk-build-link{display:inline-flex;align-items:center;gap:7px;color:#4C48FF;font-weight:500;text-decoration:none;font-size:0.875rem;transition:opacity 0.15s}.tk-build-link-icon{flex-shrink:0}.dark .tk-build-link{color:#5B68FF}.tk-build-link:hover{opacity:0.75}.tk-build-cube{width:149px;flex-shrink:0;margin:0;padding:0;align-self:center}.tk-cube-wrapper{position:relative;width:149px;height:170px;margin:0;padding:0;pointer-events:none;user-select:none}.tk-plane-img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;opacity:0;visibility:hidden;transition:none;pointer-events:none;cursor:default}.tk-build[data-selected=\"a\"] .tk-plane-img[data-plane=\"a\"],.tk-build[data-selected=\"b\"] .tk-plane-img[data-plane=\"b\"],.tk-build[data-selected=\"c\"] .tk-plane-img[data-plane=\"c\"]{opacity:1;visibility:visible}.tk-build-selectors{display:flex;flex-direction:row;align-items:center;gap:17px;width:max-content;max-width:100%;flex-shrink:0;overflow:visible}.tk-build-connectors{position:relative;flex-shrink:0;width:40px;height:120px;margin-left:-24px;pointer-events:none}.tk-connector-line{position:absolute;left:0;width:40px;height:0}.tk-connector-line--a{top:20px}.tk-connector-line--b{top:60px}.tk-connector-line--c{top:100px}.tk-connector-line::after{content:\"\";position:absolute;left:0;right:0;top:0;height:1px;background:rgba(0, 0, 0, 0.2);transition:background 0.15s}.dark .tk-connector-line::after{background:rgba(255, 255, 255, 0.2)}.tk-build[data-selected=\"a\"] .tk-connector-line--a::after,.tk-build[data-selected=\"b\"] .tk-connector-line--b::after,.tk-build[data-selected=\"c\"] .tk-connector-line--c::after{background:#4C48FF}.dark .tk-build[data-selected=\"a\"] .tk-connector-line--a::after,.dark .tk-build[data-selected=\"b\"] .tk-connector-line--b::after,.dark .tk-build[data-selected=\"c\"] .tk-connector-line--c::after{background:#5B68FF}.tk-selector-list{position:relative;flex-shrink:0;display:grid;grid-template-columns:1fr;gap:0;width:max-content;max-width:100%}.tk-selector-row{position:relative;display:flex;align-items:center;gap:12px;box-sizing:border-box;width:100%;height:40px;min-height:40px;padding:8px 36px 8px 12px;white-space:nowrap;text-decoration:none;color:inherit;border-radius:8px;border:none;transition:background 0.15s, color 0.15s}.tk-build[data-selected=\"a\"] #tk-row-a,.tk-build[data-selected=\"b\"] #tk-row-b,.tk-build[data-selected=\"c\"] #tk-row-c{background:rgba(76, 72, 255, 0.12)}.dark .tk-build[data-selected=\"a\"] #tk-row-a,.dark .tk-build[data-selected=\"b\"] #tk-row-b,.dark .tk-build[data-selected=\"c\"] #tk-row-c{background:rgba(91, 104, 255, 0.12)}.tk-selector-icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#28282c;opacity:0.5;background:none;border-radius:0;transition:color 0.15s, opacity 0.15s}.tk-selector-icon svg{width:24px;height:24px}.tk-selector-icon svg path,.tk-selector-icon svg g path{stroke-width:1.5}.dark .tk-selector-icon{color:#d1d5db}.tk-selector-label{font-family:Inter, sans-serif;font-size:14px;font-weight:600;line-height:normal;color:#28282c;flex-shrink:0;transition:color 0.15s}.dark .tk-selector-label{color:#f3f4f6}.tk-build[data-selected=\"a\"] #tk-row-a .tk-selector-label,.tk-build[data-selected=\"b\"] #tk-row-b .tk-selector-label,.tk-build[data-selected=\"c\"] #tk-row-c .tk-selector-label{color:#4C48FF}.dark .tk-build[data-selected=\"a\"] #tk-row-a .tk-selector-label,.dark .tk-build[data-selected=\"b\"] #tk-row-b .tk-selector-label,.dark .tk-build[data-selected=\"c\"] #tk-row-c .tk-selector-label{color:#5B68FF}.tk-build[data-selected=\"a\"] #tk-row-a .tk-selector-icon,.tk-build[data-selected=\"b\"] #tk-row-b .tk-selector-icon,.tk-build[data-selected=\"c\"] #tk-row-c .tk-selector-icon{opacity:1;color:#4C48FF}.dark .tk-build[data-selected=\"a\"] #tk-row-a .tk-selector-icon,.dark .tk-build[data-selected=\"b\"] #tk-row-b .tk-selector-icon,.dark .tk-build[data-selected=\"c\"] #tk-row-c .tk-selector-icon{color:#5B68FF}.tk-selector-desc{font-family:Inter, sans-serif;font-size:14px;font-weight:400;line-height:1.48;color:#505454;flex-shrink:1;min-width:0}.dark .tk-selector-desc{color:#9ca3af}.tk-selector-chevron{position:absolute;right:8px;top:50%;display:flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);opacity:0;color:#4C48FF;pointer-events:none;transition:opacity 0.2s ease}.dark .tk-selector-chevron{color:#5B68FF}.tk-selector-chevron svg{width:20px;height:20px}.tk-selector-chevron svg path{stroke-width:1.5}.tk-build[data-selected=\"a\"] #tk-row-a .tk-selector-chevron,.tk-build[data-selected=\"b\"] #tk-row-b .tk-selector-chevron,.tk-build[data-selected=\"c\"] #tk-row-c .tk-selector-chevron,.tk-selector-row:hover .tk-selector-chevron{opacity:1}@media (max-width: 868px){.tk-build{grid-template-columns:1fr;align-items:start;gap:28px}.tk-build-intro{display:contents}.tk-build-copy{grid-column:1 / -1;grid-row:1}.tk-build-links{grid-column:1 / -1;grid-row:2;gap:40px}.tk-build-visual{grid-column:1 / -1;grid-row:3;flex-direction:column;gap:16px;width:100%;align-items:center;padding:0}.tk-build-cube{width:100%;max-width:149px;margin:0 auto}.tk-cube-wrapper{width:149px;height:170px;margin:0 auto}.tk-build[data-selected=\"c\"]:not([data-user-picked]) .tk-plane-img[data-plane=\"c\"]{opacity:0;visibility:hidden}.tk-build[data-selected=\"c\"]:not([data-user-picked]) .tk-plane-img[data-plane=\"a\"]{opacity:1;visibility:visible}.tk-build-selectors{width:100%;max-width:100%;justify-content:stretch}.tk-build-connectors{display:none}.tk-selector-list{width:100%;max-width:100%;gap:0}.tk-selector-row{display:grid;grid-template-columns:24px minmax(0, 1fr) 20px;grid-template-rows:auto auto;column-gap:12px;row-gap:0;align-items:center;width:100%;max-width:100%;height:auto;min-height:54px;padding:8px;white-space:normal;background:transparent!important;border-radius:0}.tk-selector-row+.tk-selector-row{border-top:1px solid rgba(0, 0, 0, 0.12);margin-top:4px}.dark .tk-selector-row+.tk-selector-row{border-top-color:rgba(255, 255, 255, 0.06)}.tk-selector-icon{grid-column:1;grid-row:1 / 3;align-self:center;opacity:1;color:#4C48FF}.dark .tk-selector-icon{color:#5B68FF}.tk-selector-label{grid-column:2;grid-row:1;font-weight:500;color:#4C48FF}.dark .tk-selector-label{color:#5B68FF}.tk-selector-desc{grid-column:2;grid-row:2;white-space:normal;overflow:visible;text-overflow:unset}.tk-selector-chevron{grid-column:3;grid-row:1 / 3;position:static;transform:none;opacity:1}}.tk-solutions-section{display:flex;flex-direction:column;gap:28px;margin:52px 0}.tk-solutions-section .tk-solution-card{display:grid!important}.tk-solutions-section .tk-section-heading{margin:0}.tk-solutions-grid{display:grid;grid-template-columns:repeat(3, 1fr);column-gap:24px;row-gap:20px;width:100%}.tk-solution-card{grid-row:span 3;display:grid;grid-template-rows:subgrid;box-sizing:border-box;padding:20px 32px 36px;background:rgba(0, 0, 0, 0.02);border:1px solid rgba(13, 12, 17, 0.1);border-radius:16px}.tk-solution-copy{display:flex;flex-direction:column;gap:8px;min-width:0}.dark .tk-solution-card{background:rgba(255, 255, 255, 0.02);border-color:rgba(255, 255, 255, 0.12)}.tk-solution-thumbnail{width:120px;height:120px;flex-shrink:0}.tk-solution-thumbnail img{display:block;width:100%;height:100%;object-fit:contain}.tk-solution-copy .tk-solution-title,.tk-solution-card>.tk-solution-title-row{min-width:0}.tk-solution-title-row{display:inline-flex;align-items:center;gap:12px;flex-wrap:nowrap;width:fit-content;max-width:100%}.tk-solution-title-row .tk-solution-title{width:auto;max-width:none}.tk-solution-title-long{display:inline}.tk-solution-title-short{display:none}.tk-solution-title{font-family:Inter, sans-serif;font-size:24px;font-weight:600;letter-spacing:-0.6px;line-height:32px;margin:0;color:#111827;text-decoration:none}.dark .tk-solution-title{color:#f9fafb}.tk-solution-desc{margin:0;font-family:Inter, sans-serif;font-size:14px;font-weight:400;line-height:1.48;color:#414146;min-width:0}.dark .tk-solution-desc{color:#a1a1aa}.tk-solution-links{display:flex;flex-direction:column;gap:16px;align-items:flex-start;min-width:0;border-top:1px solid rgba(0, 0, 0, 0.12);padding-top:20px}.dark .tk-solution-links{border-top-color:rgba(255, 255, 255, 0.06)}.tk-solution-link{text-decoration:none;font-family:Inter, sans-serif;font-size:14px;font-weight:500;color:#4C48FF;transition:opacity 0.15s}.tk-solution-link:hover{opacity:0.75;color:#4C48FF}.dark .tk-solution-link{color:#5B68FF}.dark .tk-solution-link:hover{opacity:0.75}@media (max-width: 768px){.tk-solutions-grid{grid-template-columns:1fr}}.tk-features-section{display:flex;flex-direction:column;gap:28px;margin:52px 0}.tk-features-section .tk-section-heading{margin:0}.tk-features-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:40px;width:100%}.tk-feature-column{display:flex;flex-direction:column;gap:12px;min-width:0}.tk-feature-column-heading{font-family:Inter, sans-serif;font-size:18px;font-weight:600;line-height:32px;color:#111827;margin:0}.dark .tk-feature-column-heading{color:#f9fafb}.tk-feature-items{display:flex;flex-direction:column;gap:8px;width:100%}.tk-feature-divider{border:none;height:1px;margin:0;background:rgba(0, 0, 0, 0.12)}.dark .tk-feature-divider{background:rgba(255, 255, 255, 0.06)}.tk-feature-row{display:flex;align-items:center;gap:12px;padding:4px 0;text-decoration:none;color:#000000;font-family:Inter, sans-serif;font-size:16px;font-weight:500;line-height:normal;transition:color 0.12s ease}.dark .tk-feature-row{color:#f3f4f6}.tk-feature-row:hover,.tk-feature-row:focus-visible{color:#4C48FF}.dark .tk-feature-row:hover,.dark .tk-feature-row:focus-visible{color:#5B68FF}.tk-feature-icon-circle{display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:6px;border-radius:9999px;background:rgba(0, 0, 0, 0.04);border:1px solid rgba(0, 0, 0, 0.12);color:#000000;transition:background 0.12s ease, border-color 0.12s ease, color 0.12s ease}.dark .tk-feature-icon-circle{background:rgba(255, 255, 255, 0.04);border-color:rgba(255, 255, 255, 0.12);color:#f3f4f6}.tk-feature-row:hover .tk-feature-icon-circle,.tk-feature-row:focus-visible .tk-feature-icon-circle{background:#f1f3ff;border-color:#c9ceff;color:#4C48FF}.dark .tk-feature-row:hover .tk-feature-icon-circle,.dark .tk-feature-row:focus-visible .tk-feature-icon-circle{background:rgba(91, 104, 255, 0.15);border-color:rgba(91, 104, 255, 0.35);color:#5B68FF}.tk-feature-icon-circle svg,.tk-feature-icon-circle .tk-feature-icon-img{width:20px;height:20px;display:block;flex-shrink:0;opacity:0.5;transition:opacity 0.12s ease}.tk-feature-row:hover .tk-feature-icon-circle svg,.tk-feature-row:focus-visible .tk-feature-icon-circle svg,.tk-feature-row:hover .tk-feature-icon-circle .tk-feature-icon-img,.tk-feature-row:focus-visible .tk-feature-icon-circle .tk-feature-icon-img{opacity:1}.tk-feature-icon-img{background-color:currentColor;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.tk-feature-icon-img--wallet-embedded{mask-image:url('/images/icons/wallet-embedded.svg');-webkit-mask-image:url('/images/icons/wallet-embedded.svg')}.tk-feature-icon-img--fuel{mask-image:url('/images/icons/fuel.svg');-webkit-mask-image:url('/images/icons/fuel.svg')}.tk-feature-icon-circle svg path,.tk-feature-icon-circle svg g path,.tk-feature-icon-circle svg line,.tk-feature-icon-circle svg circle,.tk-feature-icon-circle svg rect{stroke-width:1.5px;vector-effect:non-scaling-stroke}.tk-feature-label{flex:1;min-width:0}.tk-feature-row::after{content:'';width:20px;height:20px;flex-shrink:0;opacity:0;transition:opacity 0.12s ease;background-color:#4C48FF;mask-image:url('/images/icons/chevron-right.svg');mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-image:url('/images/icons/chevron-right.svg');-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.dark .tk-feature-row::after{background-color:#5B68FF}.tk-feature-row:hover::after,.tk-feature-row:focus-visible::after{opacity:1}@media (max-width: 868px){.tk-features-grid{grid-template-columns:1fr;gap:40px}.tk-feature-row--chevron::after{opacity:1}}.tk-whitepaper-section{margin:52px 0}.tk-whitepaper{position:relative;display:flex;align-items:flex-start;justify-content:center;padding:20px 48px 0;background:rgba(0, 0, 0, 0.02);border:1px solid rgba(13, 12, 17, 0.1);border-radius:16px;overflow:hidden}.dark .tk-whitepaper{background:rgba(255, 255, 255, 0.02);border-color:rgba(255, 255, 255, 0.1)}.tk-whitepaper-inner{display:flex;gap:40px;align-items:flex-start;width:auto;max-width:100%;box-sizing:border-box;padding:0;min-height:132px}.tk-whitepaper-thumb-wrap{position:relative;flex-shrink:0;align-self:flex-end;width:121px;height:132px;overflow:hidden;box-shadow:0 4px 12px rgba(0, 0, 0, 0.1)}.tk-whitepaper-thumb{position:absolute;top:0;left:-46.26%;height:100%;width:192.52%;max-width:none;display:block;pointer-events:none}.tk-whitepaper-content{display:flex;flex-direction:column;gap:12px;align-items:flex-start;align-self:flex-start;padding-top:12px;padding-bottom:0;min-width:0;max-width:476px}.tk-whitepaper-text{margin:0;max-width:476px}.tk-whitepaper-link{display:inline-flex;align-items:center;gap:8px;color:#4C48FF;font-family:Inter, sans-serif;font-size:14px;font-weight:500;line-height:normal;text-decoration:none;transition:opacity 0.15s;white-space:nowrap}.tk-whitepaper-link-icon{display:flex;flex-shrink:0;width:20px;height:20px;color:#4C48FF}.tk-whitepaper-link-icon svg{width:20px;height:20px;display:block}.tk-whitepaper-link-icon svg path{stroke-width:1.5px;vector-effect:non-scaling-stroke}.dark .tk-whitepaper-link,.dark .tk-whitepaper-link-icon{color:#5B68FF}.tk-whitepaper-link:hover{opacity:0.75}@media (max-width: 868px){.tk-whitepaper{justify-content:flex-start;padding:0}.tk-whitepaper-thumb-wrap{position:absolute;left:24px;bottom:0}.tk-whitepaper-inner{flex-direction:column;align-items:flex-start;gap:0;width:100%;padding:20px 24px 132px}.tk-whitepaper-content{padding-top:12px;padding-bottom:0;margin-bottom:24px;align-items:flex-start;align-self:stretch;text-align:left;width:100%}.tk-whitepaper-text{max-width:none}}.tk-badge{font-family:Inter, sans-serif;font-size:10px;font-weight:500;line-height:normal;background:#ede9fe;color:#4C48FF;border-radius:4px;padding:2px 6px;flex-shrink:0}.dark .tk-badge{background:rgba(91, 104, 255, 0.2);color:#5B68FF}.tk-card-icon-wrap{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:44px;height:44px;border-radius:9999px;border:1px solid rgba(0, 0, 0, 0.16);background:#ffffff;box-sizing:border-box}.dark .tk-card-icon-wrap{background:transparent;border-color:rgba(255, 255, 255, 0.16)}.tk-card-icon{display:block;flex-shrink:0;width:24px;height:25px;background-color:#505454;mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}.dark .tk-card-icon{background-color:#ffffff}.tk-card-row{display:flex;align-items:flex-start;gap:16px}.tk-network-cards .tk-card-row{align-items:center}.tk-card-network-logo{display:block;width:24px;height:24px;object-fit:contain}.dark .tk-network-cards .tk-card-network-logo[src$=\"cosmos.svg\"],.dark .tk-network-cards .tk-card-network-logo[src$=\"aptos.svg\"],.dark .tk-network-cards .tk-card-network-logo[src$=\"tempo.svg\"],.dark .tk-network-cards .tk-card-network-logo[src$=\"iota.svg\"]{filter:brightness(0) invert(1)}.tk-card-icon-img{display:block;flex-shrink:0;width:44px;height:44px}#content [data-table-wrapper=\"true\"]{width:100%!important;max-width:100%!important;margin-inline:0!important;contain:none!important}.policy-language :is(h3,h4) a[aria-label=\"Navigate to header\"]{opacity:1}.policy-language a[id]{scroll-margin-top:var(--scroll-mt)}.policy-language [data-table-wrapper=\"true\"] :is(th,td,th *,td *){overflow-wrap:anywhere}.policy-language [data-table-wrapper=\"true\"] td{min-width:5rem}@media (min-width: 768px){.policy-language [data-table-wrapper=\"true\"] td:not(:last-child){min-width:max(8.5rem, 25cqi)}.policy-language [data-table-wrapper=\"true\"] table:has(th:nth-child(5)) td:not(:last-child){min-width:max(6.5rem, 18cqi)}}#content .policy-language [data-table-wrapper=\"true\"]{width:calc(100% + (var(--page-padding) * 2))!important;max-width:none!important;margin-inline:calc(var(--page-padding) * -1)!important}@media (min-width: 1280px){#content-area:has(.policy-language){width:calc(100% - 15rem)!important;padding-left:2rem!important;margin-left:0!important}#content-container:has(.policy-language) #table-of-contents-layout{width:14rem!important;padding-left:1.5rem!important}#content-container:has(.policy-language) #table-of-contents{width:auto!important}}"}],"page":{"pagePath":"features/authentication/mfa/examples","slug":"/features/authentication/mfa/examples","pageMetadata":{"title":"MFA Examples","description":"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey's consensus system.","sidebarTitle":"Examples","href":"/features/authentication/mfa/examples"},"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: \"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey’s consensus system.\"\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];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Here are some examples of how MFA policies can be used in practice on your end-users’ sub-organization. MFA policies are highly customizable and can be configured to fit the specific needs of your organization and users. Feel free to tweak these examples to fit your use case!`}),`\n`,_jsx(Heading,{level:`3`,id:`only-require-mfa-for-signing-activities`,children:`Only require MFA for signing activities`}),`\n`,_jsx(_components.p,{children:`In this example, we require users to satisfy MFA only when performing signing activities. For all other activities, no MFA is required. In this case, the user can use their existing session along with a passkey to satisfy MFA when signing.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`17`,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:`17`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` userId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003ctarget-user-id>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Required: the user this MFA policy applies to`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'SIGN'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_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:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Evaluation priority; policies with lower values are evaluated first`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`two-factor-authentication`,children:`Two factor authentication`}),`\n`,_jsx(_components.p,{children:`In this example, we require users to authenticate with both a passkey and an email OTP to retrieve a session. Every other activity requires only a session.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`30`,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:`30`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Require users to authenticate with both a passkey and an email OTP to retrieve a session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_EMAIL_OTP\"`}),_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`,_jsx(_components.span,{className:`line`,children:_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:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Everything else only requires the session (recieved after satisfying the above MFA requirements to authenticate)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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(Heading,{level:`3`,id:`two-factor-authentication-exporting-requires-stronger-mfa`,children:`Two factor authentication, exporting requires stronger MFA`}),`\n`,_jsx(_components.p,{children:`In this example, we require users to authenticate with both a passkey and an email OTP to retrieve a session. For exporting, we require users to authenticate with their passkey and their existing session. For all other activities, only a session is required.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`48`,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:`48`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Require users to authenticate with both a passkey and an email OTP to retrieve a session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_EMAIL_OTP\"`}),_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`,_jsx(_components.span,{className:`line`,children:_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:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Exporting requires both session and passkey`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'EXPORT'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_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:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Everything else only requires the session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_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(Heading,{level:`3`,id:`two-factor-authentication-signing-requires-mfa-every-15-minutes`,children:`Two factor authentication, signing requires MFA every 15 minutes`}),`\n`,_jsx(_components.p,{children:`In this example, MFA is required for authentication. Signing requires MFA but, a session profile with a 15 minute expiration is used so that users only need to satisfy MFA every 15 minutes when signing.`}),`\n`,_jsx(_components.p,{children:`In order to get this session profile, the user must authenticate with their existing default session (retrieved by using email OTP and a passkey) and a passkey. All other activities only require a session.`}),`\n`,_jsx(_components.p,{children:`First, we set up the session profile with a 15 minute expiration on the parent organization:`}),`\n`,_jsx(CodeBlock,{filename:``,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:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\"// The UUID for this session will be generated on creation. Let's assume it is `11111111-1111-1111-1111-111111111111` for this example!\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'colossal session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This session profile can be used for any activity`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`900`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 15 minutes`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then, we set up the MFA policies on the sub-organization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`67`,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:`67`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Requires users to authenticate with the default session and a passkey in order to retrieve the \"colossal session\" that has a 15 minute expiration`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '11111111-1111-1111-1111-111111111111'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// This condition ensures that the MFA requirements only apply when the user is trying to retrieve the \"colossal session\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"00000000-0000-0000-0000-000000000000\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // This is the default read/write session that is issued if no session profile is specified during authentication`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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`}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Require users to authenticate with both a passkey and email OTP to retrieve a default read/write session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_EMAIL_OTP\"`}),_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`,_jsx(_components.span,{className:`line`,children:_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:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Signing requires a session issued with the session profile (which requires MFA every 15 minutes), but not the passkey`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'SIGN'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"11111111-1111-1111-1111-111111111111\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Must use the \"colossal session\" that has a 15 minute expiration, so that MFA is required every 15 minutes when signing`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_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`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// All other activities can be satisfied with any session, so users can use the \"colossal session\" that requires MFA every 15 minutes, or the default read/write session that doesn't require MFA`})]}),`\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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_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(Heading,{level:`3`,id:`login-capabilities-by-authentication-method`,children:`Login capabilities by authentication method`}),`\n`,_jsx(_components.p,{children:`In this example, different login methods grant different levels of access:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SMS OTP login`}),`: grants a session that can do all activities `,_jsx(_components.strong,{children:`except`}),` export`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Passkey login`}),`: grants a session that can do `,_jsx(_components.strong,{children:`all activities`}),` including export`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SMS user wants to export`}),`: must upgrade their session by proving they also have a passkey. The upgraded session lasts 15 minutes, after which they must re-authenticate to export again.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`First, we set up the session profiles on the parent organization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`23`,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:`23`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS basic session (assume uuid: 11111111-1111-1111-1111-111111111111)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Can do everything except export`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sms-basic-session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action != 'EXPORT'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`25200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 7 hours`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS upgraded session (assume uuid: 22222222-2222-2222-2222-222222222222)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Only used for exporting, expires quickly to force re-authentication`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sms-upgraded-session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'EXPORT'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`900`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 15 minutes`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Passkey login session (assume uuid: 33333333-3333-3333-3333-333333333333)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Full access to all activities`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'passkey-login-session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`25200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 7 hours`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then, we set up the MFA policies on the sub-organization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`79`,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:`79`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS basic login: requires SMS OTP to get the basic session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '11111111-1111-1111-1111-111111111111'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SMS_OTP\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Passkey login: requires passkey to get the passkey session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '33333333-3333-3333-3333-333333333333'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS upgrade: requires the existing SMS basic session AND a passkey to get the upgraded export session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '22222222-2222-2222-2222-222222222222'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"11111111-1111-1111-1111-111111111111\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Must use the SMS basic session`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Export: requires either the upgraded SMS session or the passkey session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'EXPORT'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"22222222-2222-2222-2222-222222222222\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS upgraded session`})]}),`\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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"33333333-3333-3333-3333-333333333333\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Passkey session (already has full access)`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Everything else: requires any session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_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(Heading,{level:`3`,id:`explicit-downgrade`,children:`Explicit downgrade`}),`\n`,_jsxs(_components.p,{children:[`In this example, users log in with SMS OTP and receive a safe session that allows all activities `,_jsx(_components.strong,{children:`except`}),` signing. To sign, they must upgrade to a signing session by proving they have a passkey. The signing session lasts 15 minutes, after which the user falls back to the safe session. In the UX, the user can also explicitly “downgrade” back to the safe session at any time by simply discarding the signing session.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SMS OTP login`}),`: grants a safe session that can do all activities except sign`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`User wants to sign`}),`: uses the safe session and a passkey to get a signing session that can only be used for signing activities. The signing session lasts 15 minutes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Explicit downgrade`}),`: user discards the signing session in the UX and switches back to the safe session. No Turnkey API call is needed - the app simply stops using the signing session.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Automatic downgrade`}),`: after 15 minutes, the signing session expires. Any signing attempts will require the user to go through the upgrade flow again.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`First, we set up the session profiles on the parent organization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,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:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS safe session (assume uuid: 11111111-1111-1111-1111-111111111111)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Can do everything except sign`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sms-safe-session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action != 'SIGN'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`25200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 7 hours`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS signing session (assume uuid: 22222222-2222-2222-2222-222222222222)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Used for signing, expires quickly`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`sessionProfile`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` sessionProfileName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sms-signing-session'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`900`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 15 minutes`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then, we set up the MFA policies on the sub-organization:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`62`,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:`62`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS safe login: requires SMS OTP to get the safe session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '11111111-1111-1111-1111-111111111111'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SMS_OTP\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// SMS signing session creation: requires the existing safe session AND a passkey`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'AUTH' \u0026\u0026 activity.params.session_profile_id == '22222222-2222-2222-2222-222222222222'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"11111111-1111-1111-1111-111111111111\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Must use the SMS safe session`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Sign action: requires the signing session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'SIGN'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"22222222-2222-2222-2222-222222222222\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Must use the signing session`})]}),`\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`,_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Everything else: requires any session`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_SESSION\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_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(Heading,{level:`3`,id:`enforcing-mfa-via-delegated-access`,children:`Enforcing MFA via delegated access`}),`\n`,_jsxs(_components.p,{children:[`In this example, a parent organization enforces MFA on an end-user’s sub-organization using a `,_jsx(_components.a,{href:`/features/policies/delegated-access/overview`,children:`delegated access user`}),`. The delegated access user is controlled by the parent org and has a narrowly scoped policy that only allows it to manage MFA policies.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Parent org`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Creates a sub-organization with a root user`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sub-org root user`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Creates a delegated access user whose API key is controlled by the parent org`}),`\n`,_jsx(_components.li,{children:`Assigns the delegated access user a policy that only allows MFA policy management`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Delegated access user`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Creates an MFA policy requiring the end user to authenticate with a passkey for all signing activities`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`First, the sub-org root user creates a policy for the delegated access user:`}),`\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:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Policy for the delegated access user`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`policy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` policyName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allow MFA policy management\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` effect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"EFFECT_ALLOW\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'MFA_POLICY' \u0026\u0026 activity.action == 'CREATE'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Only allow creating MFA policies to prevent the delegated access user from doing anything else`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` notes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allows the delegated access user to create MFA policies\"`}),_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(Warning,{children:_jsxs(_components.p,{children:[`Give your protective policy `,_jsx(_components.code,{children:`order: 0`}),`, as the example below does. Only the first matching policy applies, and two policies on the same user cannot share an order, so nothing can be placed ahead of order 0. Leave it free and a credential that can create MFA policies could take it with a permissive policy, overriding yours without modifying or deleting it.`]})}),`\n`,_jsx(_components.p,{children:`Then, the delegated access user (controlled by the parent org) creates an MFA policy for the sub-org root user:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,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:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// MFA policy created by the delegated access user`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`mfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` userId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003csuborg-root-user-id>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` mfaPolicyName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Require passkey for signing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.action == 'SIGN'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` requiredAuthenticationMethods`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` any:`}),_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\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"AUTHENTICATION_TYPE_PASSKEY\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` order`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_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(Heading,{level:`3`,id:`quorum-based-mfa-recovery-via-delegated-access`,children:`Quorum-based MFA recovery via delegated access`}),`\n`,_jsxs(_components.p,{children:[`In this example, a parent organization sets up a recovery mechanism using two `,_jsx(_components.a,{href:`/features/policies/delegated-access/overview`,children:`delegated access users`}),`. Both must approve before an MFA policy can be deleted, preventing any single party from removing a user’s MFA protections. See `,_jsx(_components.a,{href:`/features/authentication/mfa/enforcement-and-recovery#mfa-recovery`,children:`MFA Recovery`}),` for more details.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sub-org root user`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Creates two delegated access users, each with an API key controlled by a different party in the parent org`}),`\n`,_jsx(_components.li,{children:`Assigns a policy requiring both delegated users to approve MFA policy deletions`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Delegated access users`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`When the end user is locked out, both users must approve the `,_jsx(_components.code,{children:`DeleteMfaPolicy`}),` activity`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The sub-org root user creates a consensus policy for recovery:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,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:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Policy for the delegated access users - requires both to approve`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`policy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` policyName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Quorum MFA recovery\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` effect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"EFFECT_ALLOW\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` condition`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"activity.resource == 'MFA_POLICY' \u0026\u0026 activity.action == 'DELETE'\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Only allow deleting MFA policies to prevent the delegated access users from doing anything else`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` consensus`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"approvers.count() >= 2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` notes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Requires both delegated access users to approve before an MFA policy can be deleted\"`}),_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:`To recover a locked-out user, the first delegated access user proposes the deletion:`}),`\n`,_jsx(CodeBlock,{filename:``,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:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// First delegated access user proposes deleting the MFA policy`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`deleteMfaPolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` userId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003csuborg-root-user-id>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` mfaPolicyId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cmfa-policy-id-to-delete>\"`}),_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:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Activity is returned with ACTIVITY_STATUS_CONSENSUS_NEEDED`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then the second delegated access user approves:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Second delegated access user approves the deletion`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:`approveActivity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` fingerprint`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cfingerprint-from-delete-activity>\"`}),_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:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Activity completes - MFA policy is deleted, user is no longer locked out`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"MFA Examples","description":"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey's consensus system.","sidebarTitle":"Examples","href":"/features/authentication/mfa/examples"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Only require MFA for signing activities","slug":"only-require-mfa-for-signing-activities","depth":3,"children":[]},{"title":"Two factor authentication","slug":"two-factor-authentication","depth":3,"children":[]},{"title":"Two factor authentication, exporting requires stronger MFA","slug":"two-factor-authentication-exporting-requires-stronger-mfa","depth":3,"children":[]},{"title":"Two factor authentication, signing requires MFA every 15 minutes","slug":"two-factor-authentication-signing-requires-mfa-every-15-minutes","depth":3,"children":[]},{"title":"Login capabilities by authentication method","slug":"login-capabilities-by-authentication-method","depth":3,"children":[]},{"title":"Explicit downgrade","slug":"explicit-downgrade","depth":3,"children":[]},{"title":"Enforcing MFA via delegated access","slug":"enforcing-mfa-via-delegated-access","depth":3,"children":[]},{"title":"Quorum-based MFA recovery via delegated access","slug":"quorum-based-mfa-recovery-via-delegated-access","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/turnkey-0e7c1f5b/788886ec77a9d964/ga.js","/_mintlify/custom/turnkey-0e7c1f5b/c849d0b15d4f5866/hero-animation.js"],"subdomain":"turnkey-0e7c1f5b","siteName":"Turnkey","title":"MFA Examples - Turnkey","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-08T07:15:48.297Z","originalFileLocation":"features/authentication/mfa/examples.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey\u0026#x27;s consensus system.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Turnkey\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"MFA Examples - Turnkey\">\u003cmeta data-mint-head property=\"og:description\" content=\"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey\u0026#x27;s consensus system.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Turnkey\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.turnkey.com/features/authentication/mfa/examples\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.turnkey.com/images/og-image.png\">\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=\"MFA Examples - Turnkey\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey\u0026#x27;s consensus system.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.turnkey.com/images/og-image.png\">\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/turnkey-0e7c1f5b/umYhjB0nyuI1BMHQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Turnkey\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4C48FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.turnkey.com/features/authentication/mfa/examples\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/authentication/mfa/examples.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.turnkey.com/#organization\",\"name\":\"Turnkey\",\"url\":\"https://docs.turnkey.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/turnkey-0e7c1f5b/YQKQ_azrjtJ471Qy/logo/light.svg?fit=max\u0026auto=format\u0026n=YQKQ_azrjtJ471Qy\u0026q=85\u0026s=38556c8732a1d68a5399fce905b480b1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.turnkey.com#website\",\"name\":\"Turnkey\",\"url\":\"https://docs.turnkey.com\",\"publisher\":{\"@id\":\"https://docs.turnkey.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.turnkey.com/features/authentication/mfa/examples#webpage\",\"url\":\"https://docs.turnkey.com/features/authentication/mfa/examples\",\"name\":\"MFA Examples\",\"description\":\"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey's consensus system.\",\"dateModified\":\"2026-09-08T07:15:48.297Z\",\"isPartOf\":{\"@id\":\"https://docs.turnkey.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.turnkey.com/features/authentication/mfa/examples#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.turnkey.com/features/authentication/mfa/examples#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.turnkey.com/features/organizations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authentication\",\"item\":\"https://docs.turnkey.com/features/authentication/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Multi-factor authentication (MFA)\",\"item\":\"https://docs.turnkey.com/features/authentication/mfa/overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"MFA Examples\",\"item\":\"https://docs.turnkey.com/features/authentication/mfa/examples\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.turnkey.com/features/authentication/mfa/examples#article\",\"headline\":\"MFA Examples\",\"name\":\"MFA Examples\",\"description\":\"Explore examples of multi-factor authentication (MFA) policies in Turnkey, including how to require MFA for specific activities, how to set up recovery mechanisms, and how MFA interacts with Turnkey's consensus system.\",\"url\":\"https://docs.turnkey.com/features/authentication/mfa/examples\",\"mainEntityOfPage\":{\"@id\":\"https://docs.turnkey.com/features/authentication/mfa/examples#webpage\"},\"image\":\"https://docs.turnkey.com/images/og-image.png\",\"dateModified\":\"2026-09-08T07:15:48.297Z\",\"publisher\":{\"@id\":\"https://docs.turnkey.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.turnkey.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Turnkey\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Turnkey","nav":{"global":{},"tabs":[{"tab":"Home","icon":"https://mintlify.s3.us-west-1.amazonaws.com/turnkey-0e7c1f5b/images/icons/home-02.svg","pages":[{"title":"Home","href":"/welcome"}]},{"tab":"Solutions","pages":[{"title":"Solutions","href":"/solutions/overview"}]},{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"About Turnkey","sidebarTitle":"About Turnkey","href":"/get-started/about-turnkey"},{"title":"Account setup","sidebarTitle":"Account setup","href":"/get-started/quickstart"},{"group":"Using LLMs","pages":[{"title":"Turnkey MCP server and AI resources","sidebarTitle":"Using AI to integrate to Turnkey","href":"/get-started/using-llms"},{"title":"Agent Skills","href":"/get-started/ai-skills"}]},{"title":"Code examples","href":"/get-started/examples"},{"group":"Going live","pages":[{"title":"Production checklist","href":"/get-started/production-checklist"},{"title":"Backup and recovery","href":"/get-started/backup-recovery"}]}]},{"group":"Features","pages":[{"group":"Organizations","pages":[{"title":"Organizations","sidebarTitle":"Overview","href":"/features/organizations"},{"title":"Sub-organizations","href":"/features/sub-organizations"}]},{"group":"Users","pages":[{"title":"Users","mode":"wide","sidebarTitle":"Overview","href":"/features/users/introduction"},{"title":"Credentials","sidebarTitle":"Credentials","href":"/features/users/credentials"},{"title":"Root quorum","href":"/features/users/root-quorum"},{"title":"Best practices","href":"/features/users/best-practices"}]},{"group":"Authentication","pages":[{"title":"Turnkey authentication","sidebarTitle":"Overview","href":"/features/authentication/overview"},{"group":"Auth methods","pages":[{"group":"Email auth \u0026 recovery","pages":[{"title":"Overview","href":"/features/authentication/email"},{"title":"Email delivery events","href":"/features/authentication/email-delivery-events"}]},{"title":"Social logins","href":"/features/authentication/social-logins"},{"title":"SMS authentication","sidebarTitle":"SMS","href":"/features/authentication/sms"},{"title":"Migrate to encrypted OTP flows","sidebarTitle":"OTP migration guide","href":"/features/authentication/otp-migration-guide"},{"group":"Passkeys","pages":[{"title":"Introduction to Passkeys","href":"/features/authentication/passkeys/introduction"},{"title":"Integrating Passkeys","href":"/features/authentication/passkeys/integration"},{"title":"Passkey options","href":"/features/authentication/passkeys/options"},{"title":"Native Passkeys","href":"/features/authentication/passkeys/native"},{"title":"Discoverable vs. non-discoverable","href":"/features/authentication/passkeys/discoverable-vs-non-discoverable"}]},{"title":"Backend authentication","href":"/features/authentication/backend-setup"},{"title":"Bring your own auth","href":"/features/authentication/bring-your-own-auth"}]},{"group":"Auth Proxy","pages":[{"title":"Auth Proxy","sidebarTitle":"Auth Proxy","href":"/features/authentication/auth-proxy"},{"title":"Captcha","sidebarTitle":"Captcha","href":"/features/authentication/captcha"}]},{"group":"Sessions","pages":[{"title":"Sessions","sidebarTitle":"Overview","href":"/features/authentication/sessions/overview"},{"title":"Session Profiles","href":"/features/authentication/sessions/session-profiles"}]},{"group":"Multi-factor authentication (MFA)","pages":[{"title":"Multi-Factor Authentication (MFA)","sidebarTitle":"Overview","href":"/features/authentication/mfa/overview"},{"title":"Satisfying MFA","href":"/features/authentication/mfa/satisfying-mfa"},{"title":"MFA Recovery","description":"Learn how to set up recovery mechanisms for MFA policies in case users lose access to their authentication methods.","sidebarTitle":"Recovery","href":"/features/authentication/mfa/enforcement-and-recovery"},{"title":"MFA Examples","sidebarTitle":"Examples","href":"/features/authentication/mfa/examples"}]},{"group":"Advanced","pages":[{"title":"Proxying signed requests","description":"Turnkey has an open CORS policy for its public API. This means your frontend can choose to POST sign requests straight to `https://api.turnkey.com`. Your frontend can also choose to forward the requests via a backend server (which POSTs the signed request to Turnkey).","href":"/features/authentication/proxying-signed-requests"}]}]},{"group":"Wallet and key management","pages":[{"title":"Wallets","sidebarTitle":"Overview","href":"/features/wallets"},{"group":"Import \u0026 export","pages":[{"title":null,"href":"/features/wallets/import-wallets"},{"title":null,"href":"/features/wallets/export-wallets"}]},{"title":"Pre-generated wallets","mode":"wide","href":"/features/wallets/pregenerated-wallets"},{"title":"Claim links","mode":"wide","href":"/features/wallets/claim-links"},{"title":"Account abstraction wallets","href":"/features/wallets/aa-wallets"},{"title":"Managed Secrets","href":"/features/secrets"}]},{"group":"Chain support","pages":[{"title":"Overview","mode":"wide","href":"/features/networks/overview"},{"group":"Supported networks","pages":[{"title":"Ethereum (EVM) support on Turnkey","sidebarTitle":"Ethereum (EVM)","href":"/features/networks/ethereum"},{"group":"Solana (SVM)","pages":[{"title":"Solana (SVM) support on Turnkey","sidebarTitle":"Overview","href":"/features/networks/solana"},{"title":"Solana transactions","sidebarTitle":"Transactions","href":"/features/networks/solana-transactions"},{"title":"Solana transaction construction for sponsored flows","sidebarTitle":"Transaction construction","href":"/features/networks/solana-transaction-construction"},{"title":"Solana rent sponsorship","sidebarTitle":"Rent sponsorship","href":"/features/networks/solana-rent-refunds"}]},{"title":"Bitcoin support on Turnkey","sidebarTitle":"Bitcoin","href":"/features/networks/bitcoin"},{"title":"Spark support on Turnkey","sidebarTitle":"Spark","href":"/features/networks/spark"},{"title":"Hyperliquid support on Turnkey","sidebarTitle":"Hyperliquid","href":"/features/networks/hyperliquid"},{"title":"Cosmos support on Turnkey","sidebarTitle":"Cosmos","href":"/features/networks/cosmos"},{"title":"Tron support on Turnkey","sidebarTitle":"Tron","href":"/features/networks/tron"},{"title":"Sui support on Turnkey","sidebarTitle":"Sui","href":"/features/networks/sui"},{"title":"Sei support on Turnkey","sidebarTitle":"Sei","href":"/features/networks/sei"},{"title":"Stacks","href":"/features/networks/stacks"},{"title":"Aptos support on Turnkey","sidebarTitle":"Aptos","href":"/features/networks/aptos"},{"title":"Tempo support on Turnkey","sidebarTitle":"Tempo","href":"/features/networks/tempo"},{"title":"Arc support on Turnkey","sidebarTitle":"Arc","href":"/features/networks/arc"},{"title":"Movement","href":"/features/networks/movement"},{"title":"IOTA support on Turnkey","sidebarTitle":"IOTA","href":"/features/networks/iota"},{"title":"Doge","href":"/features/networks/doge"},{"title":"Canton support on Turnkey","sidebarTitle":"Canton","href":"/features/networks/canton"},{"title":"Cardano support on Turnkey","sidebarTitle":"Cardano","href":"/features/networks/cardano"},{"title":"Others","mode":"wide","href":"/features/networks/others"}]}]},{"group":"Policies","pages":[{"title":"Policies","sidebarTitle":"Overview","href":"/features/policies/overview"},{"title":"Policy quickstart","sidebarTitle":"Quickstart","href":"/features/policies/quickstart"},{"title":"Policy language","sidebarTitle":"Language","href":"/features/policies/language"},{"title":"Smart contract interfaces — ABIs \u0026 IDLs","sidebarTitle":"Smart contract interfaces","href":"/features/policies/smart-contract-interfaces"},{"title":"Time-based policies","sidebarTitle":"Time-based policies","href":"/features/policies/time-based-policies"},{"group":"Examples","pages":[{"title":"Access control","sidebarTitle":"Access control","href":"/features/policies/examples/access-control"},{"title":"Time-based policies","sidebarTitle":"Time-based policies","href":"/features/policies/examples/time-based-policies"},{"title":"Co-signing transactions","sidebarTitle":"Multi-sig approvals","href":"/features/policies/examples/co-signing-transactions"},{"title":"Signing control","sidebarTitle":"Signing control","href":"/features/policies/examples/signing-control"},{"title":"Ethereum (EVM)","sidebarTitle":"Ethereum (EVM)","href":"/features/policies/examples/ethereum"},{"title":"Solana","sidebarTitle":"Solana","href":"/features/policies/examples/solana"},{"title":"Tron","sidebarTitle":"Tron","href":"/features/policies/examples/tron"},{"title":"Bitcoin","sidebarTitle":"Bitcoin","href":"/features/policies/examples/bitcoin"},{"title":"Spark","sidebarTitle":"Spark","href":"/features/policies/examples/spark"},{"title":"Swaps and Earn","sidebarTitle":"Swaps and Earn","href":"/features/policies/examples/swaps-earn"},{"title":"Tempo","sidebarTitle":"Tempo","href":"/features/policies/examples/tempo"}]},{"group":"Delegated access","pages":[{"title":"Overview","href":"/features/policies/delegated-access/overview"},{"title":"Client-side delegated access setup","href":"/features/policies/delegated-access/frontend"},{"title":"Server-side delegated access setup","href":"/features/policies/delegated-access/backend"},{"title":"End-User Delegated Agent Signing","sidebarTitle":"Agent signing","href":"/features/policies/delegated-access/agentic-wallets"}]}]},{"group":"Transaction management","pages":[{"sidebarTitle":"Overview","title":null,"href":"/features/transaction-management"},{"group":"Broadcasting","pages":[{"title":"Broadcasting (construction, signing, broadcast, gas abstraction)","sidebarTitle":"Broadcasting","href":"/features/transaction-management/broadcasting"},{"title":"Sending sponsored EVM transactions","href":"/features/transaction-management/sending-sponsored-transactions"},{"title":"Sending sponsored Solana transactions","href":"/features/transaction-management/sending-sponsored-solana-transactions"}]},{"title":"Balances","href":"/features/transaction-management/balances"},{"title":"Transaction history","sidebarTitle":"Transaction history","mode":"wide","href":"/features/transaction-management/transaction-history"},{"title":"Funding Flows","mode":"wide","href":"/features/transaction-management/funding"},{"group":"Earn","pages":[{"title":"Overview","href":"/features/transaction-management/earn"},{"title":"Browse the vault catalog","sidebarTitle":"Browse the vault catalog","mode":"wide","href":"/features/transaction-management/earn/vault-catalog"},{"title":"Deploy a vault wrapper","sidebarTitle":"Deploy a vault wrapper","mode":"wide","href":"/features/transaction-management/earn/deploy-wrapper"},{"title":"Manage wrappers","sidebarTitle":"Manage wrappers","mode":"wide","href":"/features/transaction-management/earn/manage-wrappers"},{"title":"Deposit into a vault","mode":"wide","href":"/features/transaction-management/earn/deposit"},{"title":"Withdraw from a vault","mode":"wide","href":"/features/transaction-management/earn/withdraw"},{"title":"Track positions","mode":"wide","href":"/features/transaction-management/earn/positions"},{"title":"Claim Merkl rewards","mode":"wide","href":"/features/transaction-management/earn/rewards"},{"title":"End-to-end example: Earn on Base","sidebarTitle":"End-to-end example: Earn on Base","mode":"wide","href":"/features/transaction-management/earn/end-to-end-example"}]},{"group":"Swaps","pages":[{"title":"Overview","mode":"wide","href":"/features/transaction-management/swap"},{"title":"Enable Swaps","mode":"wide","href":"/features/transaction-management/swap/enable-swap"},{"title":"Get a Swap Quote","mode":"wide","href":"/features/transaction-management/swap/get-swap-quote"},{"title":"Execute a Swap","mode":"wide","href":"/features/transaction-management/swap/execute-swap"},{"title":"Track Swap Status","mode":"wide","href":"/features/transaction-management/swap/track-swap-status"},{"title":"Swap Fee Sponsorship","tag":"Early access","mode":"wide","href":"/features/transaction-management/swap/fee-sponsorship"},{"title":"Fixed-Rate Swaps","tag":"Early access","mode":"wide","href":"/features/transaction-management/swap/fixed-rate"},{"title":"End-to-end example: Swap on Base","sidebarTitle":"End-to-end example: Swap on Base","mode":"wide","href":"/features/transaction-management/swap/end-to-end-example"},{"title":"Swaps in Dashboard","sidebarTitle":"Swaps in Dashboard","mode":"wide","href":"/features/transaction-management/swap/dashboard"}]}]},{"group":"Turnkey Verifiable Cloud","pages":[{"title":"Overview","href":"/features/verifiable-cloud/overview"},{"title":"Why TVC?","href":"/features/verifiable-cloud/why-tvc"},{"title":"Building your first app","href":"/features/verifiable-cloud/onboarding"},{"title":"Turnkey Verifiable Cloud quickstart","sidebarTitle":"Quickstart","tag":"Beta","href":"/features/verifiable-cloud/quickstart"},{"title":"Manifest sets and share sets","sidebarTitle":"Manifest sets and share sets","tag":"Beta","href":"/features/verifiable-cloud/manifest-sets-and-share-sets"},{"title":"Managing TVC apps and deployments","sidebarTitle":"Managing apps and deployments","tag":"Beta","href":"/features/verifiable-cloud/managing-apps-and-deployments"},{"title":"Proofs and Verification","href":"/features/verifiable-cloud/proofs-and-verification"},{"title":"Debug mode","sidebarTitle":"Debug mode","tag":"Beta","href":"/features/verifiable-cloud/debug-mode"},{"title":"TVC agent skill","sidebarTitle":"Agent skill","tag":"Beta","href":"/features/verifiable-cloud/agent-skill"}]},{"group":"IP Allowlist","pages":[{"title":"Overview","href":"/features/ip-allowlisting/overview"}]},{"group":"Webhooks","pages":[{"title":"Turnkey webhooks","sidebarTitle":"Overview","href":"/features/webhooks/overview"},{"title":"Verify webhook signatures","sidebarTitle":"Verify signatures","href":"/features/webhooks/verify-signatures"}]}]},{"group":"Reference","pages":[{"title":"Resource limits","mode":"wide","href":"/reference/resource-limits"},{"title":"API rate limits","sidebarTitle":"Rate limits","href":"/reference/rate-limits"},{"title":"Availability and compliance","href":"/reference/availability-and-compliance"},{"title":"Migrating wallets to Turnkey","sidebarTitle":"Migrating to Turnkey","href":"/reference/migration-guide"}]}]},{"tab":"API \u0026 SDK reference","pages":[{"title":"API \u0026 SDK reference","href":"/api-reference/overview/intro"}]},{"tab":"Security","pages":[{"title":"Security","href":"/security/overview"}]},{"tab":"Support","pages":[{"title":"Support","href":"/support/overview"}]}]},"basePath":"","title":"MFA Examples - Turnkey","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}