Sales Engine
API documentation
CampaignsOperation campaigns.update

Update a campaign

Wizard patch: name, ICP and notes, goal, cadence, tracking, limits, launch mode, mailboxes.

PATCH/api/v1/campaigns/{id}
Scope write: Create and edit lists, research, sequences, campaigns, memory, signals and learning; queue jobs.

Parameters

Path

NameInDescription
idrequiredpathThe record's id.

Body

A JSON object. Fields not listed are ignored.

NameInDescription
namebodyName.
icp_profile_idbodyICP profile.
themebody, objectWhat the copy sells and cites: {offer_ids, proof_point_ids, document_ids, framework_ids}; framework_ids limits the writer to those frameworks for this campaign (routing still picks between them).
icp_notesbodyNotes for the writer.
goalbodyGoal.
cadence_textbodyCadence.
build_notesbodyA note on the structure for the writer: what worked last time, what is a template and what is written per person.
daily_limitbody, integerSends per day.
send_delay_minsbody, integerGap between sends.
track_opensbody, booleanOpen pixel.
track_clicksbody, booleanClick tracking.
ignore_other_campaignsbody, booleanLeave out leads live in another campaign (default true). Turning it off brings them back in.
launch_modebodynow or scheduled.
scheduled_atbodyISO time when scheduled.
mailbox_idsbody, arrayMailboxes to send from.
signaturebodySignature appended after the copy on every step, plain text or HTML; null clears it. Pasted base64 images are hosted on save.
signature_formatbodyplain, html or template.
signature_fieldsbody, objectTemplate fields: sign_off, title, photo_url, linkedin_url, site_label, site_url; the name and email come from the sending inbox. Empty drops the line.
audience_filtersbody, objectLeads step filters, kept on the campaign: { icp: ""|80|70|60|50|below50, tier, email: ""|valid|catch_all|invalid|none, in: ""|in|out }.
schedule_timezonebodyIANA time zone the scheduled start is picked in, such as America/New_York.
schedule_daysbody, arraySend days, 1 Monday to 7 Sunday; null uses each mailbox's days.
window_start_minbody, integerSending window start, minutes from midnight in schedule_timezone (540 = 09:00).
window_end_minbody, integerSending window end, minutes from midnight (1080 = 18:00).
max_new_leads_per_daybody, integerMost new leads (first emails) a day for this campaign.
wizard_step_reachedbody, integer1 to 8.

Example

curl
curl -X PATCH "https://crm.ashwanth.dev/api/v1/campaigns/{id}" \
  -H "Authorization: Bearer $SALES_ENGINE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "",
  "icp_profile_id": "",
  "theme": {},
  "icp_notes": "",
  "goal": "",
  "cadence_text": "",
  "build_notes": "",
  "daily_limit": 0,
  "send_delay_mins": 0,
  "track_opens": false,
  "track_clicks": false,
  "ignore_other_campaigns": false,
  "launch_mode": "",
  "scheduled_at": "",
  "mailbox_ids": [],
  "signature": "",
  "signature_format": "",
  "signature_fields": {},
  "audience_filters": {},
  "schedule_timezone": "",
  "schedule_days": [],
  "window_start_min": 0,
  "window_end_min": 0,
  "max_new_leads_per_day": 0,
  "wizard_step_reached": 0
}'
CLI
sales-engine campaigns update <id>

The JSON above lists every documented field with a typed placeholder; send only the ones you mean.

Response

A 200 with the result under data, on creation too. Errors come back as an error object with a stable code; see Errors.

Shape
{
  "data": { ... }
}

Run it below to see the live shape for your workspace.

Try it

Runs against this server, as the workspace behind the key.
Kept in this page while you browse the docs, gone on reload, never stored. Signed in to the app? Leave it blank and the call runs as you.
Path
required
The record's id.
Every documented field is listed above; leave out the ones you do not need.
Request
PATCH /api/v1/campaigns/%7Bid%7D
Fill the path first.

Also in Campaigns