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

# Flow

> Set the texts, calls, timing, limits, and links that Hyzl uses after a person leaves your paywall.

A Flow is the saved plan for recovery. Open [**Flow**](https://hyzl.app/flow/) to choose each step and its delivery rules.

Hyzl checks payment before every text and call attempt. A confirmed payment ends recovery before the next contact.

## Use the default Flow

The recovery start time is usually the paywall exit. Your server can set a later start time with `startTimerAt`.

The default Flow contains three text steps:

| Step        | Wait from recovery start | Purpose                                        |
| ----------- | ------------------------ | ---------------------------------------------- |
| First text  | 5 minutes                | Offer help with the purchase.                  |
| Second text | 1 day                    | Ask whether the person still needs help.       |
| Third text  | 3 days                   | Send a final reminder with the available link. |

Select **Use the default flow** to restore these texts. Your reach, limits, quiet hours, and link choice still apply.

Hyzl keeps at least one hour between text deliveries. Quiet hours, replies, delivery delays, and an earlier text can add more delay.

## Customize the Flow

Select **Customize** to mix text steps and call steps in any order.

A Flow needs from one through six steps. Every step waits at least 60 seconds after the recovery start time.

Each later step needs a later due time than the step before it. Hyzl measures these due times from the recovery start time.

If a text arrives late and the next step is a text, Hyzl also leaves a safe gap before it. Hyzl uses whichever time is later.

For consecutive text steps, the safe gap uses the next step's wait. It has a one-hour minimum and a 24-hour maximum.

If a skipped call separates two texts, Hyzl keeps at least one hour between them. Call steps keep their original due times.

Use the arrow controls to change the order. Use **Reset flow to Hyzl default** to replace the complete draft with the default Flow.

### Text steps

A paywall event is the message that your server sends after someone leaves the paywall.

A text can contain up to 600 characters. Use these placeholders to add facts from the paywall event:

| Placeholder    | Value                                                   |
| -------------- | ------------------------------------------------------- |
| `{first_name}` | The person's first name, or `there` when no name exists |
| `{app_name}`   | Your saved app name                                     |
| `{price}`      | The price from the paywall event                        |
| `{link}`       | The link from your selected link mode                   |
| `{detail}`     | The short detail from the paywall event                 |

Place optional words inside `[[ ... ]]`. Hyzl removes that complete phrase when one of its placeholders has no value.

Hyzl adds `Reply STOP to opt out.` to the first Flow text that each person receives.

## Call steps

Outbound calls are off by default. While they are off, Hyzl skips every call step and continues to the next step.

Turn on **Outbound calls** before real Flow calls can start. Calls work only for numbers in the 50 states, Washington, DC, and Canada.

Each call step includes these choices:

| Choice                                    | Rule                                                        |
| ----------------------------------------- | ----------------------------------------------------------- |
| **Why you are calling**                   | Write one short reason with no more than 200 characters.    |
| **Only if they have not replied yet**     | Skip the call after a reply.                                |
| **Only if they have not been called yet** | Skip the call after another successful call.                |
| **Calling window**                        | Choose at least one day and a start and end time.           |
| **Attempts**                              | Choose one, two, or three attempts.                         |
| **Gap between tries**                     | Use at least one minute. The default is 24 hours.           |
| **If voicemail**                          | Leave a message, hang up, or hang up and send a text.       |
| **If no answer**                          | Continue after the last attempt or send a missed-call text. |

A voicemail message can contain 300 characters. It can use `{first_name}` and `{app_name}`.

A text after voicemail or no answer can contain 300 characters. Hyzl checks payment and text permission before it sends that text.

A Flow call can last up to 20 minutes. A voicemail ends the attempts for that call step.

### Calling windows

A calling window is the time when a call step can place an attempt. Each call step has its own days and times.

Hyzl first uses the person's saved timezone. If none exists, it uses the phone area code when possible.

Some area codes cover more than one timezone. In that case, every possible timezone must be inside the window before Hyzl calls.

If neither source gives a timezone, Hyzl uses your app's timezone. Calls wait until the next open window.

The dashboard rejects an overnight window. Choose a start and end time on the same day.

### Daily call cap and call reach

An app day is one calendar day in your app's timezone.

The daily call cap limits outbound attempts for one app day. Each dial attempt counts. Retries also count.

Leave the cap blank for no cap. Test calls do not count.

Call reach selects from 1 through 100 percent of eligible people. Hyzl makes a stable selection for each person.

Call reach uses a separate selection from text reach. A person selected for texts is not always selected for calls.

At the cap, the call waits for the next app day and open calling window.

## Test a call step

Select **Call me as a customer** on a call step to test its reason on your own phone.

The test does not save the Flow. It can run while outbound calls are off.

A test call ignores the app status, payment check, calling window, reach, and daily call cap. It uses the saved Hazel knowledge, voice, and coaching notes.

Your app number and voice connection must be ready. The test phone must have a United States or Canada number.

Test calls are free. They do not count toward billing or Inbox statistics.

## Reach and per-day text limit

Reach is the share of eligible people who enter text recovery. Choose 25, 50, or 100 percent.

Hyzl uses the same stable choice for a person each time. A person outside reach receives no recovery contact for that event.

The per-day limit controls scheduled Flow texts for one app day. Enter a whole number, or leave the field blank for no limit.

The limit includes first texts and follow-ups. Replies and incoming calls can continue after the app reaches the limit.

## Quiet hours

Quiet hours are the daily period when Hyzl holds scheduled texts. The default period starts at 9:00 PM and ends at 9:00 AM.

Quiet hours use your app's timezone. They do not use the person's timezone.

A text due during quiet hours waits until quiet hours end. Hyzl does not drop it.

Incoming replies and calls can still reach Hazel during quiet hours.

## Choose where the link goes

A link mode is the rule that selects a recovery link.

The `{link}` placeholder and links that Hazel sends use one of three link modes:

| Link mode                             | What the person receives                            |
| ------------------------------------- | --------------------------------------------------- |
| **My paywall link**                   | The same web or app paywall address for everyone.   |
| **Links on my domain**                | Your saved destination address, unchanged.          |
| **A link per person from my webhook** | The `recoveryUrl` from that person's paywall event. |

For **Links on my domain**, Hyzl sends the same address to every person. Hyzl does not add a recovery ID to this address.

For **A link per person from my webhook**, send a valid `https://` `recoveryUrl` with each paywall event.

Read the [paywall event reference](/reference/paywall-event) for the event fields.

## What pauses or ends the Flow

At every step:

* A confirmed payment ends recovery.
* `STOP` ends recovery and blocks later contact to that phone number.
* A reply pauses scheduled steps while Hazel answers.
* **Take over** pauses Hazel and the Flow until you release the conversation.

After 24 hours without another reply, scheduled follow-ups can resume. A due step never interrupts an active conversation.

## If the Flow does not save

Review the message beside **Save changes**. Common causes include:

* The Flow has no steps or more than six steps.
* A wait is under 60 seconds.
* A later step does not have a later wait.
* A text is blank or exceeds 600 characters.
* A call reason is blank or exceeds 200 characters.
* A call has no day, or its end time does not follow its start time.
* A retry gap is under one minute.
* A required voicemail or missed-call message is blank.
* A daily limit is not a whole positive number.
* Call reach is outside 1 through 100 percent.

Correct the named field, then select **Save changes** again. An error leaves your draft on the page for another attempt.

## When changes take effect

New paywall events use the saved Flow.

People already in recovery use the latest settings when Hyzl processes them again. A save does not immediately change their queued time.

If you move a step earlier, an existing queued text does not always arrive sooner. Quiet hours, replies, calls, and delivery limits can delay it.

Manage Hazel's knowledge, voice, fallback greeting, offer, and coaching notes on [**Hazel**](https://hyzl.app/hazel/).
