> ## Documentation Index
> Fetch the complete documentation index at: https://docs.authsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-step sign-in

> Ask users who don't sign in with a passkey for a second factor, then offer them a passkey for next time.

Users sign in with email OTP or a passkey. A passkey is enough on its own. Users who used email OTP also verify by SMS or WhatsApp, and are then offered a passkey so they can skip the second step next time.

![A flow with a verification step for email OTP or passkey, a method branch that completes for passkey users, and an SMS OTP or WhatsApp verification step followed by an optional passkey enrollment step for everyone else](https://mintcdn.com/authsignal-23/wPTVXdR08lavcXQp/images/docs/flows/multi-step-sign-in-flow.png?fit=max\&auto=format\&n=wPTVXdR08lavcXQp\&q=85\&s=acbf229c2c60d0b9cbe095436adc53df)

Passkey users skip the second step

## Build the flow

**1. Set up the methods**

Set up email OTP, passkeys, SMS OTP and WhatsApp on the **Authenticators** page.

**2. Start from the Multi-step verification template**

Create a Flows action, such as `signIn`, and choose the **Multi-step verification** template. It gives you:

* A verification step that accepts **Email OTP** or **Passkey**.
* A method branch, which picks a path based on the method the user just verified with. Passkey users go to **Complete**, and any other method follows **Else**.
* On the **Else** branch, a verification step that accepts **SMS OTP**, then an optional step that offers a passkey. Users can skip an optional step.

Select the second verification step and turn on **WhatsApp**, so users can choose SMS or WhatsApp.

**3. Publish the flow**

Select **Publish**. Then start and verify the flow from your backend, as in the [quickstart](https://docs.authsignal.com/flows/overview.md#quickstart).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.