> For the complete documentation index, see [llms.txt](https://guides.d7networks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guides.d7networks.com/verify/flow.md).

# Flow

Create reusable OTP verification flows that define how codes are generated,   which channel sends them, and which channels take over if the first one fails.

## Verification Flow

A **Verification Flow** is a saved OTP configuration. You set up the OTP settings (code length, expiry, channel, sender, message) once in the dashboard, and every verification that uses the flow follows them.

Each flow defines:

* **OTP rules**: code type, code length, expiry, and resend limits.
* **Primary channel**: SMS, Voice, or WhatsApp, with its sender and message.
* **Fallback sequence** (optional): up to two more channels, tried in the order you set.

You can create as many flows as you need, for example one for sign-up, one for login, and one for payment confirmation.

Go to **Verify → Flow** in the D7 dashboard to manage your flows.

### Before you start

<table><thead><tr><th width="269">Channel</th><th>What you need</th></tr></thead><tbody><tr><td>SMS</td><td>At least one registered SMS originator (sender ID). If you have none, <a href="https://d7networks.com/contact/">contact us</a> to register one.</td></tr><tr><td>WhatsApp</td><td>A WhatsApp Business number onboarded under <strong>WhatsApp → Getting Started</strong>, and at least one approved <strong>Authentication</strong> template for that number.</td></tr><tr><td>Voice</td><td>No onboarding needed. To place a <strong>Test Call</strong> from the flow editor, your account's mobile number must be verified (<strong>Account → Preferences</strong>).</td></tr></tbody></table>

### The Flow list

The **Flow** page lists all your flows with these columns:

| Column       | Description                                     |
| ------------ | ----------------------------------------------- |
| **Name**     | The display name you gave the flow.             |
| **Flow Id**  | The flow's unique identifier.                   |
| **Channel**  | The primary channel (SMS, VOICE, or WHATSAPP).  |
| **OTP Type** | The code type: numeric, alpha, or alphanumeric. |

Use the search box to find a flow by name or Flow ID. Each row has three actions:

* **Edit**: opens the flow in the editor.
* **Delete**: removes the flow after you confirm.
* **Analytics**: opens the flow's analytics page.

\
Create a flow

Click **Create Flow**. The editor has three steps.\
\
General settings

**General Identity**

| Field         | Description                                                                                                                                                                                                                                                                   |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Flow Name** | A name to recognise the flow, for example `User Signup Flow`. Up to 150 characters.                                                                                                                                                                                           |
| **Flow ID**   | The flow's unique identifier, used by your developers to send OTPs through this flow. It's filled in automatically from the name (for example `user_signup_flow`), and you can change it. Only lowercase letters, numbers, and underscores are allowed. Up to 150 characters. |

The Flow ID must be unique in your account, and it **can't be changed after the flow is created**.

**OTP Complexity**

| Option           | Characters used | Example  |
| ---------------- | --------------- | -------- |
| **Alpha**        | a–z             | `abcdef` |
| **Numeric**      | 0–9             | `123456` |
| **Alphanumeric** | a–z and 0–9     | `a1b2c3` |

**Timing & Limits**

| Field               | Description                                                       | Allowed range    | Default |
| ------------------- | ----------------------------------------------------------------- | ---------------- | ------- |
| **Expiry Duration** | How long the OTP stays valid after it's sent.                     | 30–18000 seconds | 300     |
| **Max Retry Count** | Maximum number of times the OTP can be resent to the same number. | 1–10             | 5       |
| **Retry Delay**     | Minimum wait before the OTP can be resent.                        | 30–600 seconds   | 60      |
| **OTP Code Length** | Number of characters in the code.                                 | 2–10             | 6       |

Click **Next : Channels**.\
\
Primary channel

Under **Select Preferred Channel**, choose the channel used to send the OTP first. A **Live Preview** on the right shows how the message will look, using a sample code that matches your OTP settings.

**SMS**

* **Originator**: the sender name shown on the user's phone.
* **Message Content**: the SMS text. Use `{}` where the OTP should appear, for example `Your OTP Code is {}`.

**Voice**

* **Voice Language**: the language of the automated call.&#x20;
* **Gender**: shown when the selected language has more than one voice.
* **Voice Content**: the text read out on the call. Use `{}` where the OTP should be spoken, for example `Your verification code is {}. I repeat, your verification code is {}.`
* **Test Call**: places a real call to a number you enter, so you can hear the message before saving.

**WhatsApp**

* **Originator**: your onboarded WhatsApp Business number.
* **WhatsApp Message Template**: an approved Authentication template for that number. Select the originator first to load its templates.

Click **Next : Fallback Logic**.

#### Fallback logic (optional)

Fallback channels give the OTP another way to reach the user if the primary channel doesn't succeed. You can add up to two fallback channels. Only channels other than the primary one are listed:

* **Global SMS**: Text-only fallback that works on all devices.
* **WhatsApp Business**: High deliverability.
* **Voice Call**: automated text-to-speech call.

To set up the **Fallback Sequence**:

1. Select the checkbox on a channel card to add it. A number badge shows its position in the sequence (1 is tried first).
2. Click a card to show its settings under **Configuration Details**, and fill them in. The fields are the same as in step 2 (for Voice, the language field is labelled **TTS Language**).
3. If you add two fallback channels, use **Swap Fallback Priority** to change their order.

If you start editing a channel's settings, it's added to the sequence automatically. Clear its checkbox to remove it.

**Voice is billed as an add-on.** When a flow combines Voice with SMS or WhatsApp (as primary or fallback), an extra Voice charge applies on top of your SMS/WhatsApp Verify price whenever Voice is used to send the OTP.

Click **Create Flow** to save. If a selected fallback channel is missing required details, the editor opens that channel's settings and highlights what's missing.

<figure><img src="https://1617928555-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F56vP61LHDfGd4HenwKbH%2Fuploads%2F3ucWxh9vgkEA2YDrCR3e%2FScreenshot%20from%202026-10-07%2011-31-18.png?alt=media&amp;token=a87cb984-94f8-44fd-8e69-e8b0240f6c6f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1617928555-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F56vP61LHDfGd4HenwKbH%2Fuploads%2FYynnFsrVYstL3kYHBtMT%2Ffow_step_2.png?alt=media&amp;token=31993865-c1a2-461f-a843-a2648af7c021" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1617928555-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F56vP61LHDfGd4HenwKbH%2Fuploads%2Fv4LdvTXYaamsCWfittNu%2Fflow_step_3.png?alt=media&amp;token=38715d7c-2894-422c-af08-1ced5c754f90" alt=""><figcaption></figcaption></figure>

Click **Edit** on the flow list, or **Edit Flow** on the flow's analytics page. The same three-step editor opens with the current settings filled in. Click **Save Changes** on the last step.

You can change everything except the **Flow ID**.

### Delete a flow

Click **Delete** on the flow list, or **Delete** on the flow's analytics page, and confirm.
