API reference / Outreach
Change a campaign
Changes a campaign, starts it (status active: it needs the business's postal address, its steps, and a mailbox whose domain has SPF or DKIM), pauses it, or ends it (done: every email not yet sent is canceled). New steps drop the drafts written for the old ones.
/api/v1/campaigns/{id}Other ways to call it
troopy campaigns updatetroopy_update_campaignIdempotency-Key header. A retry with the same key gets the first answer back, and the operation runs one time.Path parameters
id*stringA 24-character id
Body
application/jsonnamestringAt least 1 characters · At most 120 characters
liststringA 24-character id
wherearray<object>At most 10 items
3 properties
column*stringA column's id
At most 40 characters
op*enum<string>isis_notcontainsgtltemptynot_empty
valuestring | number | booleanWhat to compare with; none for empty and not_empty
stepsarray<object>At most 8 items
6 properties
kind*"email"waitintegerDays after the step before it (the first: 0)
Default 0 · At least 0 · At most 60
writeenum<string>fixed: the body is the email, with variables filled in for each lead. ai: a teammate writes the email for each lead from the brief
fixedai
Default "fixed"
briefstring | nullFor ai: what the email is for, like the offer, the angle and the ask. It is required. For fixed: a note for people
subjectstring | nullIts subject, with variables. A fixed first email needs one. A follow-up without one answers in the thread. For ai, a first email without one gets a subject from the teammate
bodystring | nullFor fixed: its words, with variables like {{first_name|there}} filled in for each lead. For ai: a draft for the teammate to follow, or nothing
mailboxesarray<string>At most 20 items
windowobject4 properties
days*array<integer>The weekdays it sends on, 0 is Sunday
At most 7 items
start*integerThe hour it starts sending
At least 0 · At most 23
end*integerThe hour it stops
At least 1 · At most 24
timezone*stringIANA time zone the time is in, like Europe/Berlin
At most 64 characters
statusenum<string>activepauseddone
Response
200 · application/jsondata*object14 properties
id*stringA 24-character id
name*stringlist*object | nullThe list of people it is for
2 properties
id*stringA 24-character id
name*stringwhere*array<object>3 properties
column*stringop*enum<string>isis_notcontainsgtltemptynot_empty
valuestring | number | boolean | nullsteps*array<object>6 properties
kind*"email"wait*integerwrite*enum<string>fixed: the body is the email, with variables filled in for each lead. ai: a teammate writes the email for each lead from the brief
fixedai
brief*string | nullsubject*string | nullbody*string | nullmailboxes*array<string>The mailboxes it sends from
window*object4 properties
days*array<integer>start*integerend*integertimezone*stringstatus*enum<string>draftactivepauseddone
stats*object7 properties
enrolled*integeractive*integerreplied*integerbounced*integerunsubscribed*integersent*integerreview*integerDrafts waiting for a person
writer*objectThe emails that a teammate writes for each lead
2 properties
busy*booleanA teammate writes emails of it now
error*string | nullWhy its emails could not be written lately. The teammate tries again after 10 minutes
autopilot*object | nullAn owner's or admin's grant to send without a person approving each email; null when never granted
7 properties
on*booleanIn force now
until*stringISO 8601 date and time
dailyCap*integergrantedBy*objectWho wrote it
3 properties
type*enum<string>personagentapi
id*stringname*stringgrantedAt*stringISO 8601 date and time
endedAt*string | nullwhy*string | nullWhy it ended
createdBy*objectWho wrote it
3 properties
type*enum<string>personagentapi
id*stringname*stringcreatedAt*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time