> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev.setoo.work/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Update campaign

> Update settings or schedule for a draft campaign

Updates configuration fields on an existing campaign.

<Note>
  Only campaigns in `DRAFT` status can be modified. Once a campaign is running or completed, its core parameters cannot be altered.
</Note>

### Path parameters

<ParamField path="id" type="string" required>
  The unique UUID of the campaign to update.
</ParamField>

### Body parameters

<ParamField body="name" type="string">
  New campaign name (must remain unique within tenant).
</ParamField>

<ParamField body="agentId" type="string">
  UUID of the voice agent.
</ParamField>

<ParamField body="voiceNumberId" type="string">
  UUID of the voice number.
</ParamField>

<ParamField body="contactListId" type="string">
  UUID of the contact list to attach. Must have at least 2 contacts.
</ParamField>

<ParamField body="description" type="string">
  Updated campaign description.
</ParamField>

<ParamField body="scheduledAt" type="string">
  ISO-8601 timestamp to set or update scheduled start time. Setting this transitions the status to `SCHEDULED`.
</ParamField>

<ParamField body="timezone" type="string">
  IANA timezone identifier (e.g. `America/New_York`).
</ParamField>

<ParamField body="callWindowStart" type="string">
  Earliest dial time in `HH:mm` format.
</ParamField>

<ParamField body="callWindowEnd" type="string">
  Latest dial time in `HH:mm` format.
</ParamField>

<ParamField body="callDays" type="integer[]">
  Allowed days of the week (`1` = Mon ... `7` = Sun).
</ParamField>

<ParamField body="dialTimeout" type="integer">
  Dial timeout in seconds (10 to 300).
</ParamField>

<ParamField body="maxAttempts" type="integer">
  Max attempts per contact (1 to 10).
</ParamField>

<ParamField body="redialDelayMin" type="integer">
  Delay before redialing in minutes (minimum 1).
</ParamField>

<ParamField body="metadata" type="object">
  Updated key-value metadata.
</ParamField>

<CodeGroup>
  ```bash curl theme={null}
  curl -X PATCH https://api.agentic-os.com/api/v1/campaigns/770e8400-e29b-41d4-a716-446655440000 \
    -H "Authorization: Bearer $AGENTIC_OS_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "callWindowStart": "10:00",
      "callWindowEnd": "17:00",
      "maxAttempts": 4,
      "redialDelayMin": 45
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.patch(
      "https://api.agentic-os.com/api/v1/campaigns/770e8400-e29b-41d4-a716-446655440000",
      headers={
          "Authorization": f"Bearer {API_KEY}",
          "Content-Type": "application/json",
      },
      json={
          "callWindowStart": "10:00",
          "callWindowEnd": "17:00",
          "maxAttempts": 4,
          "redialDelayMin": 45,
      },
  )
  print(response.json())
  ```

  ```javascript Node theme={null}
  const response = await fetch(
    "https://api.agentic-os.com/api/v1/campaigns/770e8400-e29b-41d4-a716-446655440000",
    {
      method: "PATCH",
      headers: {
        Authorization: `Bearer ${API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        callWindowStart: "10:00",
        callWindowEnd: "17:00",
        maxAttempts: 4,
        redialDelayMin: 45,
      }),
    },
  );
  const data = await response.json();
  console.log(data);
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "id": "770e8400-e29b-41d4-a716-446655440000",
  "name": "Q3 Renewal Outreach",
  "status": "DRAFT",
  "callWindowStart": "10:00",
  "callWindowEnd": "17:00",
  "maxAttempts": 4,
  "redialDelayMin": 45,
  "updatedAt": "2026-06-01T10:15:00.000Z"
}
```
