campaign/patch_by_id
Tool: update
Partially update a campaign (PATCH semantics — only supplied fields applied).
Supply only the fields you want to change; omitted fields are left as-is. Returns the full updated campaign object. To clear a field — and to know why null fails — see call-contract.
Template fields (
subject,body) take personalization variables from a closed list — see personalization-variables. Nothing is checked here, only at campaign/start_by_id, which makes this the operation to fix a start-time 422: patch the corrected subject/body, then start again.
If the campaign is Running and this patch touches a send-affecting field (
scheduleSending, a schedule/day-window field,dailyLimit, orfromEmails), it requiresconfirm_send: truein arguments — same fresh, send-specific consent contract as campaign/start_by_id.
Conditional — shown while this account's documentation includes the Outreach Playbook
If disappointing results are why you are editing, Diagnosing underperformance gives the order to check the layers in — delivery, list, offer, then copy — and why you change one layer at a time; fixing copy when the problem is delivery is the most common wasted week in outbound. Before touching dailyLimit or the schedule on a running campaign, Campaign scheduling and pausing has the operating thresholds: pause and clean above roughly 2% bounces, reduce volume above roughly 0.05% complaints, and keep daily volume steady rather than jumping it.
Arguments
| name | type | req | notes |
|---|---|---|---|
| id | integer | ✓ | Campaign ID — the object's campaignId |
| confirm_send | boolean | – | Required (true) only if the campaign is Running and the patch touches a send-affecting field (see above) |
Body
| field | type | req | constraints | description |
|---|---|---|---|---|
| name | string | – | Campaign display name | |
| description | string | – | Description | |
| folderId | integer | – | Folder ID | |
| fromEmails | string | – | Comma-separated sender email addresses, e.g. "a@x.com,b@x.com" (a literal string, not a JSON array — an array here 422s) |
|
| fromName | string | – | From display name | |
| replyToEmail | string | – | Reply-to address | |
| subject | string | – | Initial email subject line | |
| body | string | – | HTML email body | |
| textOnlyEmails | boolean | – | Controls outbound MIME type at send time only — body must always be HTML (e.g. wrapped in <p> tags) regardless of this setting |
|
| ccEmails | string | – | CC addresses | |
| bccEmails | string | – | BCC addresses | |
| replyBccEmails | string | – | BCC on prospect replies | |
| replyCcEmails | string | – | CC on prospect replies | |
| sendUnsubscribeListHeader | boolean | – | Include List-Unsubscribe header | |
| deactivateIfMissingPlaceholder | boolean | – | If true, a prospect with no value for a variable the copy uses is deactivated (status MissingPlaceholder) instead of mailed |
|
| stopCoworkersOnReply | boolean | – | Stop coworker sends on reply | |
| trackOpens | boolean | – | Open tracking | |
| trackClicks | boolean | – | Click tracking | |
| prospectValue | integer | – | Value per conversion | |
| dailyLimit | integer | – | Max emails per day | |
| dailyLimitPer | string | – | one of: Sender, Campaign | Daily limit scope |
| dailyLimitIncrease | boolean | – | Progressive limit increase | |
| dailyLimitIncreaseToMax | integer | – | Target max for increase | |
| dailyLimitIncreasePercent | integer | – | Daily % increase step | |
| dailyLimitOnDate | string | – | date-time | Limit on specific date |
| dailyLimitPrioritize | string | – | one of: Initial, Followup | Priority when at limit |
| dailyLimitInitial | integer | – | Separate initial email limit | |
| dailyLimitInitialEnabled | boolean | – | Enable separate initial limit | |
| dailyLimitWhichEmailsCount | string | – | one of: All, Initial | What counts toward limit |
| scheduleSending | boolean | – | Enable schedule | |
| scheduleTimeZone | string | – | Timezone | |
| useProspectsTimeZone | boolean | – | Use prospect timezone | |
| scheduleSendOnDate | string | – | date-time | Start date |
| scheduleSendOnDateEnabled | boolean | – | Enable start-on-date | |
| scheduleSendOnDateHours | integer | – | 0–23 | Hour on scheduled date |
| scheduleSendOnDateMinutes | integer | – | 0–1439 | Minute offset on scheduled date |
| delayMinSeconds | integer | – | Min gap between consecutive sends, in seconds — not minutes; see schemas/campaign | |
| espMatchEnabled | boolean | – | ESP matching | |
| espMatchType | string | – | one of: None, MatchSender, MatchDomain | ESP match strategy |
| espLimitEnabled | boolean | – | ESP limiting | |
| espLimitToMicrosoft | boolean | – | Include Microsoft | |
| espLimitToGoogle | boolean | – | Include Google | |
| espLimitToOther | boolean | – | Include other providers | |
| sendMon | boolean | – | Send on Monday | |
| sendMonAfter | integer | – | 0–1439 | Monday start |
| sendMonBefore | integer | – | 0–1439 | Monday end |
| sendTue | boolean | – | Send on Tuesday | |
| sendTueAfter | integer | – | 0–1439 | Tuesday start |
| sendTueBefore | integer | – | 0–1439 | Tuesday end |
| sendWed | boolean | – | Send on Wednesday | |
| sendWedAfter | integer | – | 0–1439 | Wednesday start |
| sendWedBefore | integer | – | 0–1439 | Wednesday end |
| sendThu | boolean | – | Send on Thursday | |
| sendThuAfter | integer | – | 0–1439 | Thursday start |
| sendThuBefore | integer | – | 0–1439 | Thursday end |
| sendFri | boolean | – | Send on Friday | |
| sendFriAfter | integer | – | 0–1439 | Friday start |
| sendFriBefore | integer | – | 0–1439 | Friday end |
| sendSat | boolean | – | Send on Saturday | |
| sendSatAfter | integer | – | 0–1439 | Saturday start |
| sendSatBefore | integer | – | 0–1439 | Saturday end |
| sendSun | boolean | – | Send on Sunday | |
| sendSunAfter | integer | – | 0–1439 | Sunday start |
| sendSunBefore | integer | – | 0–1439 | Sunday end |
Response
200 — Updated campaign; object: see schemas/campaign. Deltas: none.
Errors: 400, 401, 404, 406, 415, 422, 429, 500 — shared schema: schemas/errors.
Invoke
Call update with name: "campaign/patch_by_id".