Skip to main content

Sign in

An existing user proves who they are. Every entry mode shares these screens; only the exit differs.

Map

Screens

RouteScreenPurpose
/IndexEmail first. Decides between sign in and sign up.
/signin, /oauth/signinSigninEnter the password. Also hosts the passkey and Google/Apple buttons.
/force_auth, /oauth/force_authSigninSame screen with the email locked, for a client that already knows the account.
/signin_passkey_fallbackSigninPasskeyFallbackPasskey failed or unsupported; use the password.
/signin_passwordless_code, /oauth/signin_passwordless_codeSigninPasswordlessCodeEmailed code for an account with no password.
/signin_token_codeSigninTokenCodeEmailed code to confirm an unverified session.
/signin_totp_codeSigninTotpCodeAuthenticator app code.
/signin_recovery_choiceSigninRecoveryChoiceChoose a backup code or the recovery phone.
/signin_recovery_codeSigninRecoveryCodeBackup authentication code.
/signin_recovery_phoneSigninRecoveryPhoneSMS code to the recovery phone.
/signin_unblockSigninUnblockUnblock code emailed after rate limiting.
/signin_bouncedSigninBouncedThe account email bounced.
/complete_signinCompleteSigninLanding for the confirm sign-in email link; finishes the session and continues to /pair.
/signin_confirmed, /signin_verifiedSigninConfirmedSigned-in confirmation kept for old links. The current flow continues to /pair instead.
/report_signinReportSigninLanding for the "this wasn't me" email link.
/signin_reportedSigninReportedReport confirmation.
/post_verify/password/force_password_changeforce_password_change (legacy)Mandatory password change after a security event.
/signin_permissionspermissions (legacy)Consent screen for untrusted relying parties. Not reachable from React.
/confirm_signin, /confirmconfirm (legacy)Link-based "check your email" screens, replaced by code entry.

Notes

  • Exit depends on the entry mode: web goes to /settings, a relying party gets a redirect with a code, Sync sends credentials to the browser and continues to /pair. See Entry modes.
  • A relying party that requires two-step authentication sends the user through /inline_totp_setup first. A passwordless account entering Sync goes through /post_verify/set_password.