Skip to main content
Resume a campaign

Authorizations

Authorization
string
header
required

Every request sends Authorization: Bearer <token>. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key ft_<id>_<secret>. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.

Path Parameters

id
string<uuid>
required

Response

The campaign

abandoned
integer<int64>

Answered with no agent free to take it. Read-only, and the figure max_abandon_pct governs.

agent_kind
enum<string>
Available options:
human,
virtual
ai_assist
boolean

Stream this campaign's answered calls to an AI that writes live suggestions to the agent's screen. Off by default. It costs per minute of every answered call and streams the customer's conversation to the provider for the whole call, which in several jurisdictions is a recording and consent question rather than only a cost one. The AI is never heard: an assist session's audio is dropped at the single point all audio leaves, so it cannot speak into the call even if a provider ignores the text-only instruction. Implemented for OpenAI only; other providers refuse rather than speaking.

answered
integer<int64>
caller_id
string
completed_at
string<date-time> | null

When it completed: nobody left to dial, or stopped.

contact_count
integer
created_at
string<date-time>
dialed
integer<int64>

Dialer output. Read-only.

id
string<uuid>
kind
enum<string>

voice_broadcast plays a message to whoever answers. auto_dial connects the answered contact to an agent.

Available options:
voice_broadcast,
auto_dial
max_abandon_pct
string

Exact decimal string. A COMPLIANCE setting: abandonment caps are law in most jurisdictions and 3% is the common statutory figure.

max_attempts
integer
max_lines
integer

Hard ceiling on simultaneous calls. Not a tuning knob: the node allows 30 new sessions per second in total, shared with inbound traffic.

message_asset_id
string<uuid>

A recording to play. Works today.

message_text
string

What the call says, read out by a machine. May carry {{field}} placeholders filled from that contact's own data -- the columns their CSV row had -- so each person hears their own details.

Rendered to speech once into a media asset and cached on the exact text and voice, so a plain message is spoken once for ten thousand calls and a personalised one is not re-rendered when a busy contact is redialled. Generated at ANSWER, inside the pause the broadcast already takes listening for a voicemail beep, so nothing is spent on calls nobody picks up and the caller hears no extra delay.

A contact whose row is missing a field the message needs is NOT CALLED: the call sheet records missing_field:. A sentence with a hole in it would go out to everybody whose row was short a column, sound broken, and leave nothing saying which calls were affected.

name
string
organisation_id
string<uuid>
pacing
enum<string>

balanced opens one line per free agent and abandons nobody. aggressive dials ahead on the measured answer rate, capped by max_abandon_pct.

Available options:
balanced,
aggressive
reference
string

Your own id for the campaign, on every result.

Maximum string length: 128
result_callback_url
string

Each contact's final outcome (campaign.contact.completed) and the campaign's end (campaign.completed) are POSTed here, signed with the organisation's callback secret; needs the secret to exist (409 no_callback_secret).

schedule_days
integer[]

0=Sunday to 6=Saturday, matching Go's time.Weekday. NOT the ISO 1=Monday convention.

schedule_end
string
schedule_start
string

HH:MM in the campaign's timezone.

script
object

A structured brief for a virtual agent.

start_at
string<date-time> | null

Earliest moment this campaign may dial. Null means as soon as it is running. A campaign whose start is in the future is 'running' and dialling nothing -- there is deliberately no separate status for it. The daily calling window still applies on top.

status
enum<string>

running means the dialer is working this campaign.

Available options:
draft,
running,
paused,
completed
team_id
string<uuid>
timezone
string
trunk_group_id
string<uuid>
tts_voice
string
virtual_agent_profile_id
string<uuid>
workflow_id
string<uuid>

Must be an OUTBOUND workflow.