Step-up authentication is enforced when you set your minimum API version to
2026-04-01 in Dashboard > Developers > API & SDK Keys. Implement the required flows in your app before enabling enforcement. See the API version upgrade guide for details.Overview
Step-up authentication requires users to re-verify their identity before performing sensitive actions — exporting a private key, linking a new credential, deleting a passkey, etc. After successful verification, the user receives an elevated access token: a short-lived, scope-bound JWT that authorizes the specific operation. Step-up authentication encompasses both re-authentication and MFA:- Re-authentication — Email OTP, SMS OTP, OAuth (social), or external wallet signature. The user proves control of an existing credential. Embedded wallets cannot be used for step-up verification.
- MFA (multi-factor authentication) — Passkey, TOTP, or recovery code. The user proves possession of a registered second factor.
For MFA-specific setup (enrollment, session-based MFA, device management), see Multi-Factor Authentication (MFA). If your users have MFA enabled, the SDK automatically routes step-up verification through MFA.
Enabling step-up authentication
Step-up authentication is enforced once you set your minimum API version to2026_04_01 via the Developers > API & SDK Keys page in your dashboard.
Until you set the minimum version, the backend will not require elevated access tokens on any endpoints — you can implement the step-up flows in your app first and enable enforcement when ready.
New environments have step-up authentication enforced by default. Only environments created before 2026_04_01 was introduced need to opt in.
After enabling, step-up is enforced server-side — even if a client sends requests without an elevated token, the backend will reject them with a
403. Make sure your integration handles the step-up flow before enabling enforcement.When is step-up authentication required?
When step-up authentication is enabled for your environment, the backend enforces it on sensitive operations. The user must present a valid elevated access token or the request is rejected with a403.
Step-up is not required for:
- Initial sign-in and sign-up flows
- Reading user data or wallet balances
- Signing transactions with an embedded wallet (unless
wallet:signis configured)
How it works
- Check — Before a sensitive action, the SDK checks whether the user already has a valid elevated access token for the required scope.
- Verify — If no valid token exists, the user is prompted to verify. The SDK automatically selects MFA or re-authentication based on the user’s configuration.
- Use — After successful verification, the token is stored in SDK state. The SDK automatically attaches it to the relevant API calls — no manual token handling is needed.
Supported verification methods
Scopes
Elevated access tokens are bound to specific scopes. When requesting step-up authentication, specify which scopes you need viarequestedScopes. The table below shows each scope, which SDK operations require it, and the underlying API endpoints that enforce it.
Exclusive scopes must be requested alone — they cannot be combined with other scopes in a single requestedScopes request. Non-exclusive scopes can be freely combined (e.g., ['credential:link', 'credential:unlink']).
Wallet operations
Credential operations
Single-use scopes (like
wallet:export) are consumed after the SDK uses them for the first qualifying API call. The user must re-verify to perform the action again.The
credential:link scope is required on verification endpoints (email, SMS, OAuth, wallet) only when the request includes requestedScopes — meaning the caller is performing step-up reauthentication. Normal sign-in and sign-up flows through these same endpoints do not require an elevated token.Token lifecycle
Dynamic’s built-in UI
When using Dynamic’s built-in UI (available in the React SDK), step-up authentication is handled automatically for Dynamic’s own operations:- Wallet export — The export flow prompts for step-up before showing the private key.
- Credential linking/unlinking — Linking a new wallet, social account, or email/phone prompts for step-up in the widget UI.
- Passkey/TOTP deletion — The MFA management views prompt for step-up before deletion.
Migration from MFA tokens
For a complete migration walkthrough with before/after code examples, see the action-based MFA to step-up migration guide.
SDK implementation guides
JavaScript SDK
Headless implementation with direct function calls. Use this for vanilla JS, Vue, Svelte, Angular, or any non-React framework.
React SDK
Hooks with automatic routing, Dynamic UI prompts, and headless React patterns.
React Native SDK
Built-in UI prompts and headless verification for React Native mobile apps.
Flutter SDK
Step-up auth module with built-in UI prompts and individual verification methods.
Swift SDK
Step-up auth module with built-in UI prompts and individual verification methods for iOS.
Kotlin SDK
Step-up auth module with built-in UI prompts and individual verification methods for Android.