What you do first
- Pick a method: passkey when the person already registered one; OTP when they have no passkey, biometrics fail, or you need a fallback.
- Create an authentication challenge
with
methodset tootporpasskey. - Verify authentication with the OTP code or passkey assertion.
- Put the access token in the
Authorizationheader. When it expires, exchange the refresh token.
States that matter
If the refresh token is invalid or expired, you get
Invalid Refresh Token and must run the challenge
flow again.
When a call fails
Failures come back as problem documents. Open thetype link for the cause, the
fix, and whether retrying is safe.
Common ones on this path:
- Challenge Expired: create a new challenge
- Invalid Refresh Token: sign in again
- Invalid Passkey Assertion: fall back to OTP
- Registration Session Consumed: replay the identical complete call, or start a new session for a new account
- Too Many Requests: wait for the rate limit
Related paths
- Passkeys: register and manage WebAuthn credentials
- Idempotency keys: registration and other writes that accept a key
- Problem types: how to read a failure