# Flows and Workflows

Flows and Workflows are Incode-hosted web applications that guide end users through an identity verification session. You configure the verification steps in Dashboard, and Incode handles the front end entirely. There is no custom web development required.

This is the simplest integration approach.

## Flows vs. Workflows

Incode supports two configuration models for hosted sessions:

* **Workflows** are the newest, recommended model. They support conditional logic, dynamic routing between verification steps, and more advanced session configuration.
* **Flows** are the legacy model. They remain supported but do not include conditions or dynamic routing. New integrations should use Workflows.

For instructions on creating and configuring Workflows and Flows in Dashboard, see [Workflows](https://developer.incode.com/docs/workflows-20) and [Flows](https://developer.incode.com/docs/flows-1).

## How it works

1. **[Configure a Workflow](https://developer.incode.com/docs/workflows-20) in Dashboard.** Define the verification modules your users will complete (ID scan, selfie, eKYC, etc.) and any conditional logic.
2. **Start a session (recommended).** Your backend calls the Incode Omni API to create an onboarding session and generate a session-specific URL. Attaching an `externalCustomerId` at this step links the session to a user in your own system.
3. **Direct your user to the URL.** Share it via SMS, email, or a redirect from your web or mobile app.
4. **Retrieve results.** Read session results directly in Dashboard, or configure a webhook to receive real-time notifications when sessions complete.

<Callout icon="📘" theme="info">
  **Note**: If you do not start a session via the API, you can share a generic Workflow URL directly with users. This is suitable for simple cases but does not allow you to link sessions to specific users in your system.
</Callout>

## When to use this approach

Flows and Workflows are a good fit when:

* You want to go live quickly without front-end development
* You don’t need to customize the verification UI
* You are handling a high volume of users and want Incode to manage the delivery infrastructure
* You need to send verification links via messaging channels (SMS, WhatsApp, email)

If you need users to remain on your domain, consider the iFrame approach instead. If you need full UI control, see Web SDK.

## Prerequisites

Complete the [Dashboard setup steps](https://developer.incode.com/docs/web-integration-overview#before-you-begin) in Web Integration Overview before starting this integration. These cover creating a Workflow, adding the Data Sharing Consent module, enabling redirect desktop to mobile, and obtaining your API credentials.

## Starting a session

Call the [Start Onboarding Session](https://developer.incode.com/docs/single-onboarding) endpoint from your backend to create a session and retrieve an onboarding URL.

```javascript
POST /omni/start
```

Include an `externalCustomerId` in the request body to associate the session with a user in your system. The response includes a `token` and a ready-to-use onboarding URL.

Redirect your user to the URL, or share it through your preferred channel.

## Retrieving results

When the user completes the session, you can retrieve results in two ways:

* **Dashboard**: View session scores, OCR data, and status directly in the Incode Omni Dashboard.
* **Webhook**: Configure an [Onboarding Status Webhook](https://developer.incode.com/docs/onboarding-status-webhook) or [Session Webhooks](https://developer.incode.com/docs/session-webhooks) to receive notifications when session status changes

For full details on fetching data programmatically, see [How to Fetch Results and Data](https://developer.incode.com/docs/how-to-fetch-onboarding-results-and-data).
