running campaign is allowed and takes effect at the next evaluation, roughly within a minute — you do not have to pause first.
Terminal campaigns (completed, stopped, archived) can no longer be edited and return 400.
Required scope: campaigns:manage.
Path parameters
Writable fields
The same allowlist asPOST /campaigns, all optional here. Ranges, defaults and guidance are on the create page.
Unknown keys are rejected with 400, and so is every engine-owned field (
status, spent_cents, last_tick_result, total_leads, …). Status changes go through the transition endpoints — POST /campaigns/{id}/launch, /pause, /resume, /stop — and never through PATCH.
An empty body, or a body containing no writable field, is a 400 rather than a no-op.
Editing a live campaign
- Stop rules apply forward only. Adding a disposition to
stop_disposition_idsretires contacts that land it from now on; it does not retroactively retire contacts already called. Removing one never resurrects a contact that was already retired. - Raising
max_attemptsdoes not reviveexhaustedcontacts. They stay terminal. - Lowering pacing takes effect immediately — a smaller
max_calls_per_daythan today’sdaily_admitted_countsimply stops the campaign for the rest of the day. - Changing
agent_idorfrom_phone_number_idaffects the next call, not calls already in flight. Pointing at an inactive number or an agent with no duration cap will pause the campaign aspaused_configat the next evaluation. - Raising
budget_centson apaused_budgetcampaign does not resume it. CallPOST /campaigns/{id}/resume.
Example request
Example response
The complete campaign after the update, same shape asGET /campaigns/{id}:
GET /campaigns/{id}.