Skip to main content
PATCH
cURL

Authorizations

Authorization
string
header
required

Send your API key as Authorization: Bearer YOUR_API_KEY.

Headers

Idempotency-Key
string

Reuse a unique key for retries of the exact same change. A retry returns its saved result or partial-failure receipt without repeating effects. Pending or changed-payload reuse returns 409. After a partial failure, read the campaign before submitting only the remaining changes with a new key.

Required string length: 1 - 128

Path Parameters

id
string
required

Agent id, or a TFU Live agent’s tfu_live: id.

Minimum string length: 1

Query Parameters

locationId
string

Pair with campaignId; omit both for primary campaign.

Minimum string length: 1
campaignId
string

Pair with locationId; omit both for primary campaign.

Minimum string length: 1

Body

application/json

Partial update of the selected campaign. Trigger fields must match its stored campaignType. Omitted sections and named abilities stay unchanged. null removes one named capability/tool; arrays replace only that field. An absent ability requires enabled:true to install. Root config, calendarId, transferNumber, activeTags and inactiveTags are not accepted.

name
string
Minimum string length: 1
description
string

A note about the campaign for people. Calls do not use it.

active
boolean

True switches the campaign live. False pauses it.

agentId
string | null

Change the bound agent separately from capability, tool or outcome edits.

campaignType
enum<string>

Optional assertion about the selected campaign; its type cannot be changed.

Available options:
outbound,
confirmation,
inbound
trigger
object

Must match the selected campaign type. Outbound accepts activeTags/inactiveTags. Confirmation/reminder accepts calendarId, which also supplies rescheduling. Inbound accepts neither tags nor an appointment calendar. Include type when changing a trigger; it cannot change the campaign type.

capabilities
object

Named installed capabilities. Outbound/inbound booking calendarId/calendarRules/collectAddress belong inside appointment_booking. Confirmation uses trigger.calendarId and has no separate booking routing/address settings. Transfer destinations, messages and routing belong inside live_transfer. An absent entry requires enabled:true to install; null removes it, and omitted siblings survive. Zero capabilities is valid. Optionally send campaign.metadata.inventoryVersion from Get campaign as expectedVersion to reject a stale inventory edit. Agents shared outside one explicit Master agent family must be separated before editing installations.

tools
object

Partial map of named platform tool installations. An absent entry requires enabled:true; null removes only that entry. Omitted tools, capabilities and instruction playbooks stay unchanged. Shares the inventory expectedVersion guard.

calling
object

The campaign’s dialing rules and single cadence. Patch cadence.name or cadence.activeDays independently; cadence.steps replaces the complete step list. No cadenceId is accepted. Outbound and confirmation campaigns support independent speedToLead and powerDialer switches. For reminders, skipWhenAiBooked suppresses only the immediate booking-time call, preserving scheduled reminders. Inbound refuses this section.

fromNumbers
string[]

The campaign's phone numbers. Calls go out from them, and an inbound campaign answers on them.

answerCalls
string[]

Use with fromNumbers. Numbers whose incoming calls this campaign takes over. A number nobody answers is taken without being listed. Other numbers keep their answering campaign.

Maximum array length: 100
smsFromNumber
string | null

The number this campaign’s texts come from. That covers the text steps of its cadence and a chat campaign’s replies. A number on the sub-account’s own phone system, in international format (+14155550123). An empty string or null clears it, so texts go from the sub-account’s default number.

Pattern: ^(\+[1-9]\d{7,14})?$
chatChannels
string[] | null

TFU Live chat channels: SMS (always kept), FB (Messenger), IG (Instagram), WHATSAPP. Whether the agent texts at all is its Chat switch. With FB, IG or WHATSAPP the agent also answers a lead who writes on that channel, within 24 hours of their last message, and never starts a conversation there. Each needs the Facebook page, Instagram account or WhatsApp number connected in GoHighLevel; on a sub-account with another CRM, the built-in one included, adding one is refused with 400 ChatChannelsNeedGhl. Case does not matter and repeats are removed; any other value is refused with 400 ChatChannelsInvalid. The list replaces the stored one. [] or null means SMS only. EMAIL, which some older campaigns carry, is kept as stored.

answerWaitingMessage
boolean

TFU Live: true makes the agent answer the message a lead sent before they were tagged onto this campaign. It applies when that message is the latest in the conversation, nobody has replied to it, it is at most 24 hours old and it is on a chat channel the campaign answers. It covers leads with no phone number who wrote on Messenger or Instagram. Off unless true: the agent then answers only messages sent after the tag.

testing
object

Settings for the campaign's shareable test form.

maxCallMinutes
integer | null

Longest call on this campaign, in minutes, 1 to 120, for every campaign type. null restores the default, 15. A call also stops when its funded minutes run out. Not used by TFU Live campaigns, which keep their own limit.

Required range: 1 <= x <= 120
masterCampaignEnabled
boolean

True makes this campaign a master agent. Link other sub-accounts to it with POST /api/agent-builder/agents/{id}/campaign/master/projects.

outcomes
object

Partial map of outcome prompts, each { prompt: text }. Omitted outcomes are unchanged. Outcome prompts are stored on the bound agent, so an edit returns 409 if that agent is shared outside one explicit Master agent family. Split variants continue sharing their campaign settings.

expectedVersion
integer

Optional stale-edit guard. Copy campaign.metadata.inventoryVersion from Get campaign. A mismatch returns 409 before capability/tool changes. This guards inventory edits, not the whole campaign.

Required range: 0 <= x <= 9007199254740991

Response

Campaign facet updated.

success
any
required
campaign
object
required
actionResults
object
required