Skip to main content
A passkey is a passwordless credential stored on the user’s device (or password manager). The user signs in with the same biometric or PIN they use to unlock their device — no password, nothing to remember.
Passkeys are a sign-in method, not a sign-up method. A user cannot create an account with a passkey. The order is always:
  1. The user signs up with another method (email/SMS OTP, social, wallet).
  2. While authenticated, they register a passkey.
  3. On a later visit, they sign in with that passkey.
registerPasskey requires an authenticated user; signInWithPasskey requires an already-registered passkey. Build your UI around that sequence.

Prerequisites

Before this: create and initialize a Dynamic client (see Creating a Dynamic Client, Initializing the Dynamic Client). Enable Passkey in your Dynamic dashboard. Passkeys use WebAuthn, which requires a secure context (HTTPS, or localhost in development).

Register a passkey

Call registerPasskey while the user is signed in — for example, in an “enable faster sign in” prompt right after sign-up, or from an account-security screen. It triggers the browser’s passkey-creation dialog, then stores the credential against the user.
Wire the call to your “enable faster sign in” button. Disable it while the browser dialog is open so the user can’t trigger two prompts at once.

Sign in with a passkey

For returning users who already registered a passkey, a single button is enough. signInWithPasskey opens the browser’s passkey picker and, on success, authenticates the user.
Offer “Sign in with a passkey” alongside your other sign-in options rather than as the only choice — a returning user might be on a device where they haven’t registered one yet.

List and remove passkeys

Let users see and manage their registered passkeys from an account-security screen. getPasskeys returns the user’s passkeys; deletePasskey removes one by id. Each passkey has an optional user-assigned alias, plus createdAt and the origin it was registered on.
Render the user’s passkeys into a list, each with a “Remove” button that calls deletePasskey and re-renders.
Removing a passkey is a sensitive action, so it may require the user to re-authenticate (step-up). See Step-up authentication for how to handle that prompt.

Handling errors

See also

Last modified on July 9, 2026