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

> ## Agent Instructions
> Use the public API base URL: https://api.teamfollowup.ai/api.
> Authenticate public API requests with Authorization: Bearer YOUR_API_KEY.
> Use product-owned terms: agents, campaigns, projects (GoHighLevel sub-accounts), contacts, calls, outcomes, skills, cadences, phone numbers.
> Scope requests by locationId rather than projectName.
> Read the guide linked from each API reference group before recommending an endpoint.

# The campaign’s cadence

> Edit the single schedule used by this campaign: its call attempts, messages and other follow-up steps.

A **cadence** is the finite, ordered sequence of follow-up steps in a campaign's
[Power Dialer](/campaigns/power-dialer). Each campaign has one linked cadence at a
time, or none. Open its **Power Dialer** tab to edit that schedule.

A step can place a call, send a message, apply a tag or move a pipeline stage.
Five steps do not necessarily mean five calls: only the call steps dial someone.
The sequence finishes after its last step, or earlier when a result ends follow-up.
It does not repeat indefinitely.

## What a step is

Outbound campaigns offer two timing modes:

* **By set times:** choose a day and local time for each step, such as day 1
  at 9am followed by day 2 at 10am. The gap between step days controls the wait.
* **By waits:** choose how long to wait, such as 1 minute after entry, then
  45 minutes after the previous step finishes, then another 3 hours. Each wait
  belongs to its own step; it is not a total measured from campaign entry.

Use one mode throughout the cadence. You can change modes even with leads queued.
When you save a timing change, queued leads **keep their current step number**
and their next scheduled times are recalculated from the save time. For example,
a lead waiting on step 3 with a new 60-minute wait remains on step 3 and is
scheduled 60 minutes after saving, subject to active days and calling rules.
Paused leads stay paused. Calls already underway and separately scheduled
callbacks keep their existing handling. Removing or reordering steps is a
separate edit with its own lead-movement controls.

A cadence must always have at least one step.

## A step is not only a call

This is the part people miss, and it is where most of a cadence's value is.

A step is **one touchpoint**, and a call is only one kind. Four kinds exist:

| Step kind | What it does |
| - | - |
| `call` | Dials the lead. Optionally double dials: a missed call gets one more attempt about a minute later. It never places two calls at once. The speed-to-lead and callback double dials are separate switches, see [Power Dialer](/campaigns/power-dialer#double-dial). |
| `sms` / `email` | Messages them. Same `{{variables}}` the script uses. |
| `add-tag` | Applies CRM tags, which is how you fire your own automations. |
| `move-stage` | Moves them to a pipeline stage. |

**One step does one thing.** A step has exactly one kind. A call step dials and
nothing else; a message, a tag or a stage move is its own step. On the canvas
each is its own box on the spine, added with the **+ button between any two
steps**.

There is no way to attach a tag or a stage move *to* a call. It is not a
restriction that gets enforced, it is simply not a thing a step can be, which
is what keeps every step you build visible on the canvas and editable by hand.

Adjacency is expressed by the clock, not by stacking: a tag or stage move sits at
the **same day and time** as the call it follows, directly after it. That is how
"move them to Day 1 once they've been called on day 1" is built:

```
Day 1  9:00am   call
Day 1  9:00am   move stage → "Day 1 (SMS & Email)"
Day 1  6:00pm   SMS "sorry I missed you, when suits?"
Day 2  10:00am  call
```

<Note>
  A step that does nothing is rejected: an `sms` step with no text, an `add-tag`
  step with no tags, a `move-stage` step with no stage. A cadence full of silent
  steps looks like a broken dialer.
</Note>

This is the same everywhere: the canvas, the assistant, and the system all write the
one shape. Ask the assistant to "move leads to the matching stage after each
call" and it adds a stage step beside each call, which you then see on the canvas
and can edit yourself.

This is also the answer to "move leads along the pipeline as they get chased".
Stage moves belong on the cadence, because they track *progress through the
chase*. The [post-call workflow](/campaigns/after-the-call) is a different
surface: it reacts to how a call **ended** (booked, voicemail, not interested).
Both can move a stage, and they answer different questions.

### When a step runs its actions

A tag or stage move fires when the cadence **moves past** the step it sits on,
so after a call that did not end in an outcome that stops the cadence. On the
last step, it fires when the cadence runs out. A lead who books on call one is
never tagged by step two.

<Warning>
  Editing a cadence replaces the whole step list, so a list that leaves a step
  out deletes it. Read the cadence first. Ask the assistant to change a time and
  it keeps every other step; if a write would drop one, it refuses rather than
  deleting it silently, and only goes ahead once you have said you meant it.
</Warning>

## Active days are a restriction, not a multiplier

This is the trap.

`activeDays` limits which weekdays an attempt is **allowed to land on**. It does
not add attempts.

<Warning>
  Two day-one attempts at 9am and 2pm with active days set to Saturday and Sunday
  means **two calls total**, both on the first eligible weekend day. It does not
  mean two calls every weekend, forever. If you want more attempts, add more
  steps.
</Warning>

## Edit this campaign's schedule

Add, change or remove steps in the campaign's **Power Dialer** tab. Review the
complete sequence before saving so the steps you want to keep remain in place.
If the campaign has no cadence yet, configuring one creates its schedule.

Leads partway through continue from their current position in the updated list.
Reordering or removing steps therefore changes what those leads encounter next.

## Appointment reminders work differently

A confirmation campaign's cadence is anchored to the **appointment time**, not to
when the lead entered. Steps count backwards:

* one day before the appointment
* two hours before
* ninety minutes before

Scheduled reminder steps run before the appointment starts. An immediate call is
a separate option: it runs when the appointment is booked. Those are different
moments. Zero minutes before the appointment would mean its start time, not its
booking time; scheduled reminder steps require a positive time before the start.

**Skip when the AI booked it** skips the immediate call for an AI-booked
appointment. Scheduled reminders still run.

Reminder steps carry the same extra actions as any other step, and this is the
most common place to want them: text the day before, call two hours before.

```
24 hours before   no call, SMS "see you tomorrow at {{appointment_time}}"
2 hours before    call
```

## In the API

* [Get campaign](/api-reference/campaigns/get-campaign) reads the schedule under `calling.cadence`
* [Update campaign](/api-reference/campaigns/update-campaign) replaces the ordered step list under `calling.cadence.steps`; each step has a `kind` of `call`, `sms`, `email`, `add-tag` or `move-stage`
* [Cadences, steps and the queue](/power-dialer/overview) covers the queue side
