> ## 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.

# Cadences, steps and the queue

> A cadence is the follow-up schedule a power-dialer campaign runs: how many tries, how far apart, and what else happens at each step. The queue shows every lead's place in it.

A lead who did not answer today is not lost. A **cadence** is the plan for
trying again: call on day one, text on day two, call again on day four, tag
and stop on day seven. Every contact in a power-dialer campaign is somewhere in
that plan, and the **queue** tells you where.

## Anatomy of a cadence

A cadence belongs to your agency and is shared by the campaigns that use it.

| Field                           | Meaning                                                                                                                                            |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cadenceName`                   | Its label.                                                                                                                                         |
| `isDefault`                     | Whether new power-dialer campaigns pick it up automatically.                                                                                       |
| `campaignIds` and `locationIds` | The campaigns and projects it currently drives.                                                                                                    |
| `activeDays`                    | The weekdays it may act on. The campaign's [calling window](/campaigns/calling-window) still applies within them.                                  |
| `active`                        | Whether it runs at all.                                                                                                                            |
| `stepCount` and `schedule[]`    | The steps, described below.                                                                                                                        |
| `mode`                          | Blank for follow-up cadences. `appointment_reminder` for the cadence behind an appointment campaign, where steps count backwards from the booking. |

## Steps

Each entry in `schedule[]` is one step. A cadence uses one of three shapes,
and every step in it must share that shape.

| Shape      | Field                                                         | Reads as                                                                                                                                                                       |
| ---------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Wait       | `offsetMinutes`, optionally `at` (`hour`, `minute`, `period`) | This many minutes after the previous step. With `at`, the step then lands at that local time on the day the wait ends. A zero wait with `at` is "straight away, at that time". |
| Clock time | `day`, `hour`, `minute`, `period` (`AM` or `PM`)              | Day N of the cadence at that local time. Equivalent to a wait of `day - 1` days with `at` set to the same time; the dashboard reads and saves clock steps that way.            |
| Reminder   | `minutesBeforeAppt`                                           | This long before the appointment. Only in `appointment_reminder` mode.                                                                                                         |

Every step can also carry:

* `label`: a name for the step, shown in the dashboard.
* `doubleDial`: dial twice back to back if the first attempt is not answered.
* `call`: whether the step dials (`enabled`) and what the agent says on it.
  `openingMessage` is the agent's first line when the lead answers.
  `screeningPurpose` is why you are calling, given when the lead's phone
  screens the call. The agent still gives its own name, and the purpose does
  nothing if the agent has no call screening set up. `voicemail: true` with a
  `voicemailMessage` leaves that message on the step's last dial, in place of
  the campaign's voicemail. Leave any of them out and the agent's own opening
  and purpose, and the campaign's voicemail setting (`config.voicemail` and
  `config.voicemailMessage` on the campaign), apply. Callbacks the lead asked
  for always use the agent's own settings. A `{{variable}}` with no value is
  read out as written.
* `additionalActions[]`: things to do at this step besides calling. Each has a
  `type` of `sms`, `email`, `add-tag` or `move-stage`. A message carries a
  `body` or a `snippetId` pointing at a GoHighLevel snippet, and an email a
  `subject`. A tag action carries `tags`. A stage action carries `pipelineId`
  and `stageId`. `delaySeconds` and `jitterSeconds` hold the action back and
  spread it out so a hundred leads do not all get the same text at the same
  second.

A step with only additional actions and no call is fine. That is how "text on
day two" works.

## Editing a cadence safely

Leads are mid-cadence while you edit, so the update request carries the
guards.

* `schedule` replaces the steps.
* `deletions[]` names removed steps by index with a `strategy`: `advance`
  moves leads sitting on that step to the next one, `remove` takes them out
  of the cadence.
* `stepOrder` reorders steps. Reordering changes what waiting leads do next,
  so it is refused unless `confirmReorder: true`.
* `allowEmpty: true` is required to save a cadence with no steps.

## The queue

The queue is the live view of who is waiting for what.

* The [pipeline steps](/api-reference/power-dialer/get-pipeline-steps)
  endpoint returns how many leads sit on each step of a campaign.
* The [pipeline leads](/api-reference/power-dialer/list-pipeline-leads)
  endpoint lists them. Each lead carries `queueId`, its `cadenceStep`,
  `callStatus`, `nextCallTime`, whether it is `live`, whether it is a
  `callback`, and `pipeline`, which reads `v2` for the current queue and `v1`
  for legacy rows.
* [Callback leads](/api-reference/power-dialer/list-callback-leads) are the
  people who asked to be called back and are queued for it.
* [Parked speed-to-lead leads](/api-reference/power-dialer/list-parked-speed-to-lead-leads)
  are the leads waiting for the calling window to open. See
  [Speed to lead and power dialer](/campaigns/dispatch-modes).

## Moving leads by hand

Three actions act on leads that are **waiting**. A lead on a live call or
already finished is skipped, and the response lists each skip with its reason.

* **Run now** places the lead's next touchpoint immediately, ignoring its
  `nextCallTime`.
* **Move** puts leads on another step. `targetStep` is zero-based, so `0` is
  the first step.
* **Remove** takes leads out of the cadence.

Each accepts a list of `queueId` values, or `selectAll: true` to act on the
whole outstanding backlog matched by your filters. Selecting all on a busy
campaign can start a great many calls. Read the counts from the pipeline steps
first.

## Boundaries

* A cadence belongs to the agency, not to a campaign. Editing it changes every
  campaign that uses it.
* Steps are relative to when the lead entered, not to the calendar, except
  clock-time steps, which pin the time of day.
* The calling window always wins. A step due at 3 a.m. waits for the window.
* The power dialer does not decide outcomes. The
  [campaign workflow](/campaign-workflows/overview) does, after each call.

## In the API

* [List campaign schedules](/api-reference/power-dialer/list-campaign-schedules),
  [Get campaign schedule](/api-reference/power-dialer/get-campaign-schedule) and
  [Update campaign schedule](/api-reference/power-dialer/update-campaign-schedule)
* [Get pipeline steps](/api-reference/power-dialer/get-pipeline-steps) and
  [List pipeline leads](/api-reference/power-dialer/list-pipeline-leads)
* [List callback leads](/api-reference/power-dialer/list-callback-leads) and
  [List parked speed-to-lead leads](/api-reference/power-dialer/list-parked-speed-to-lead-leads)
* [Run lead touchpoints now](/api-reference/power-dialer/run-lead-touchpoints-now),
  [Move leads to another step](/api-reference/power-dialer/move-leads-to-another-step) and
  [Remove leads from cadence](/api-reference/power-dialer/remove-leads-from-cadence)
* Every field above is defined in the [Glossary](/glossary#power-dialer)

## Related

* [Backfill existing leads](/campaigns/backfill-existing-leads) fills a cadence
  with contacts already in the CRM.
* [Contacts and leads](/contacts/overview) shows `nextScheduledCall` per
  person.
