Anatomy of a cadence
Each campaign has its own cadence. Picking a template or another campaign’s cadence copies it, so editing one campaign’s cadence never changes another’s.Steps
Each entry inschedule[] 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.openingMessageis the agent’s first line when the lead answers.screeningPurposeis 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: truewith avoicemailMessageleaves 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.voicemailandconfig.voicemailMessageon 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. The structured voicemail action useshang_upto end without a message orsay_messageto leave the configured message.additionalActions[]: things to do at this step besides calling. Each has a GHLtypeofsms,email,add-tagormove-stage. A message carries abodyor asnippetIdpointing at a GoHighLevel snippet, and an email asubject. A tag action carriestags. A stage action carriespipelineIdandstageId.delaySecondsandjitterSecondshold the action back and spread it out so a hundred leads do not all get the same text at the same second.
Send webhooks from native sub-accounts
Native sub-accounts useapi-event in additionalActions[] to send an HTTPS
POST to your integration. The step is called Send webhook in the builder;
api-event is its stored type. Set call.enabled to false for an event-only step,
or leave calling enabled to send the event when the call advances without an
actionable outcome. Native sub-accounts cannot use GHL message, tag or stage
actions; GHL sub-accounts cannot use api-event. A campaign flow has its own
Send webhook step, which fires where the flow reaches it rather than on a
schedule.
urlis your public HTTPS receiver, up to 2,048 characters. Credentials, fragments and private network destinations are refused.eventNamedefaults tocadence.step. It starts with a letter and contains up to 128 letters, numbers, dots, dashes or underscores.datais a static JSON object, up to 16 KiB when serialised. Nested values are preserved. Text such as{{contact.email}}stays literal.delaySecondsandjitterSecondscontrol when the event is queued.
Editing a cadence safely
Leads are mid-cadence while you edit, so the update request carries the guards.schedulereplaces the steps.deletions[]names removed steps by index with astrategy:advancemoves leads sitting on that step to the next one,removetakes them out of the cadence.stepOrderreorders steps. Reordering changes what waiting leads do next, so it is refused unlessconfirmReorder: true.allowEmpty: trueis 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, itscadenceStep,callStatus,nextCallTime, whether it islive, whether it is acallback, andpipeline, which names the queue holding the lead:v2is the current queue andv1older rows. Act on leads by theirqueueIdrather than branching onpipeline. - 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.
targetStepis zero-based, so0is the first step. - Remove takes leads out of the cadence.
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 one campaign. Editing it changes only that campaign.
- 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
- Get campaign and
Update campaign read and edit
the cadence under
calling.cadence - Get pipeline steps and List pipeline leads
- List callback leads and List parked speed-to-lead leads
- Run lead touchpoints now, Move leads to another step and Remove leads from cadence
- Every field above is defined in the Glossary
Related
- Backfill existing leads fills a cadence with contacts already in GoHighLevel, and Put contacts into a campaign does the same for contacts kept here.
- Contacts and leads shows
nextScheduledCallper person.
