Skip to main content
PUT
Update Campaign

Update Campaign

Update campaign configuration. Important: the campaign is automatically paused as the first step of every update, before the request is validated. You must manually resume it after updating via POST /api/campaigns/{id}/resume.
Because the pause happens first, a request that is then rejected (for example 400 no fields provided, too many notification_emails, concurrency above your organisation maximum, or an invalid date change) still leaves the campaign paused. Check campaign_status after any failed update and resume if needed. Only 422 parameter-range errors (max_retries, retry_delay_mins, concurrency) are rejected before the pause.

Path Parameters

string
required
UUID of the campaign to update

Request Parameters

All fields are optional. Only provide the fields you want to update.
string
Updated campaign name
integer
Updated concurrency (≥ 1 and ≤ org max)
integer
Updated max retries (1-10)
integer
Updated retry delay (0-1440 minutes)
string
Updated start time - UTC HH:MM (e.g. 05:00)
string
Updated end time - UTC HH:MM (e.g. 12:00)
string
Comma-separated weekdays
string
Updated from_date YYYY-MM-DD
string
Updated to_date YYYY-MM-DD
string
Comma-separated emails (max 5)
string
Updated campaign webhook URL
string
Updated per-call webhook URL

Example Request


Response 200 OK


Important Notes

Campaign is automatically paused when edited. You must call POST /api/campaigns/{id}/resume to restart.
  1. Auto-Pause: The campaign is paused first, then the update is validated. A rejected update does not undo the pause. Pausing also triggers a campaign_paused webhook and a notification email
  2. Partial Updates: Only provided fields are updated
  3. Validation: Same constraints as create endpoint apply (max_retries 1-10, retry_delay_mins 0-1440, concurrency ≥ 1 and ≤ your organisation maximum)
  4. Time Format: UTC 24-hour HH:MM (02:30–14:29)

Error Response

The same code values as Create Campaign apply here, plus NO_FIELDS_TO_UPDATE. Remember the campaign has already been paused when you receive this response.