zoxaAI
Homepage
API ReferenceCampaigns

Update a campaign

PATCH /api/v1/campaign/{id} — change name, concurrency, retry, schedule, or circuit-breaker. Locked once completed, failed, or archived.

PATCH /api/v1/campaign/{campaign_id}

Partial update. Cannot change the target agent (agent_id), source_type, or source_id — create a new campaign for those.

Request body

FieldTypeNotes
namestring1..255 characters.
max_concurrencyintCapped at the lower of the org ceiling and the available caller-number count (from the org's default telephony config).
telephony_configuration_idintSwitch the campaign to a different telephony config. Best done before the campaign moves into running.
retry_configobjectFull block — replaces entirely. Accepts the backoff and per-reason delay fields.
schedule_configobjectFull block — replaces entirely.
circuit_breakerobjectFull block — replaces entirely.

Each *_config block is replaced wholesale, not merged — send the complete object.

Response

200 OK with the updated campaign.

Examples

curl -X PATCH https://dashboard.zoxa.ai/api/v1/campaign/7 \
  -H "X-API-Key: zsk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "max_concurrency": 10,
    "retry_config": {
      "enabled": true,
      "max_retries": 3,
      "retry_delay_seconds": 300,
      "backoff_multiplier": 2.0,
      "retry_delay_cap_seconds": 3600,
      "retry_on_busy": true,
      "retry_on_no_answer": true,
      "retry_on_voicemail": true
    }
  }'

Errors

StatusdetailWhen
400"Cannot update a completed campaign" / "Cannot update a failed campaign"Campaign is in a terminal state.
400"max_concurrency (X) cannot exceed Y"Above org ceiling.
400"telephony_configuration_not_found"The telephony_configuration_id you passed doesn't exist or doesn't belong to your org.
409"Unarchive the campaign first"Campaign is archived.
404"Campaign not found"Id not in your org.

On this page