Skip to main content
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.

Steps

Each entry in schedule[] is one step. A cadence uses one of three shapes, and every step in it must share that shape. 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 endpoint returns how many leads sit on each step of a campaign.
  • The 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 are the people who asked to be called back and are queued for it.
  • Parked speed-to-lead leads are the leads waiting for the calling window to open. See Speed to lead and power dialer.

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 does, after each call.

In the API