---
title: "Update a draft campaign"
method: PUT
path: "/campaigns/{campaignId}"
tags: ["Campaigns"]
---

# Update a draft campaign

`PUT /campaigns/{campaignId}`

Update a draft campaign's name, labels, content, audience, From/Reply-To settings, or campaign personalization data. Direct addresses create profiles when needed.

## Path parameters

- `campaignId` string, required

## Request body

- object
  - `name` string — Updated campaign name
  - `subject` string — Updated email subject line
  - `previewText` string, nullable — Updated inbox preview text. Set to null to clear it.
  - `preheaderText` string, nullable — Compatibility alias for previewText.
  - `trackingCode` string, nullable — Campaign tracking code available to UTM templates as `{{campaign.trackingCode}}`. Send an empty string or null to clear it.
  - `html` string — Updated email HTML content. Mutually exclusive with `blocks`.
  - `blocks` object[] — Updated Sequenzy email blocks. Mutually exclusive with `html`. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
  - `fromEmail` string, email — Campaign From address. Its domain must be configured and verified.
  - `fromName` string — Display name for a newly created sender profile. Requires fromEmail; omit it when using senderProfileId, which already carries its own display name.
  - `senderProfileId` string — Existing sender profile ID. It already supplies both the From address and display name, so send it on its own and omit fromEmail and fromName.
  - `replyTo` string, email — Reply-To email for this campaign. A profile is created when needed. Mutually exclusive with `replyProfileId`.
  - `replyProfileId` string — Reply profile ID for this company. It already supplies both the Reply-To address and display name, so send it on its own and omit replyTo and replyToName.
  - `replyToName` string — Display name for a newly created reply profile. Requires replyTo; omit it when using replyProfileId, which already carries its own display name.
  - `ccEmails` string[], nullable — Addresses CC'd on every recipient's email for this campaign. Send an empty array or null to clear them.
  - `bccEmails` string[], nullable — Addresses BCC'd on every recipient's email for this campaign. Send an empty array or null to clear them.
  - `labels` string[] — Replacement label names. Send an empty array to clear labels. Missing labels are created automatically.
  - `label` string[] — Compatibility alias for labels.
  - `campaignData` object, nullable — Campaign-scoped JSON data available while rendering this campaign. Top-level arrays can contain up to 500 items. Set to null to clear it.
  - `computedLists` object[] — Personalized list definitions computed from campaignData. Keys can use letters, numbers, underscores, and dots. Use maxItems to cap each subscriber's list length. Pass an empty array to clear computed lists.
  - `targetLists` object, nullable — Replacement campaign audience, using the same shapes as campaign create. Send null to clear saved targeting and choose the audience when scheduling; omit to leave it unchanged. Mutually exclusive with segmentId.
  - `segmentId` string — Shorthand for retargeting the draft at one saved segment. Equivalent to `targetLists` `{"type":"segment","segmentId":"seg_123"}`. Mutually exclusive with targetLists.

## Response `200`

Campaign updated successfully

- object
  - `success` boolean, required
  - `campaign` object, required
    - `id` string
    - `name` string
    - `subject` string
    - `status` string
    - `labels` string[]
    - `targetLists` object, nullable — Saved campaign audience, or null when targeting is still unset.
    - `replyProfileId` string, nullable
    - `replyToName` string, nullable
    - `replyToEmail` string, email, nullable
    - `ccEmails` string[], nullable
    - `bccEmails` string[], nullable
    - `url` string, uri
    - `previewUrl` string, uri
  - `warnings` string[] — Non-blocking advisories about the blocks that were written. The write succeeded. Present when a field was not part of the block schema and was discarded, or when a supported field does not control what its name suggests for that block type - for example styles.backgroundColor on a button colors the band behind the button while the fill comes from buttonColor. Each message names the offending path and the fields that block does accept. Absent when there is nothing to report.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `404` — Campaign not found
- `422` — Request body failed schema validation

## Changes

- **2026-07-29** `d03612b5fabd` — 1 info
  - added the optional property `warnings` to the response with the `200` status
- **2026-07-25** `b58891ac1cde` — 3 info
  - added the new optional request property `segmentId`
  - added the new optional request property `targetLists`
  - added the optional property `campaign/targetLists` to the response with the `200` status
- **2026-07-16** `d7ea66dede72` — 4 info
  - added the new optional request property `bccEmails`
  - added the new optional request property `ccEmails`
  - added the optional property `campaign/bccEmails` to the response with the `200` status
  - added the optional property `campaign/ccEmails` to the response with the `200` status
- **2026-07-12** `d103f2b71fca` — 4 info
  - added the new optional request property `fromEmail`
  - added the new optional request property `fromName`
  - added the new optional request property `replyToName`
  - added the new optional request property `senderProfileId`
- **2026-07-02** `f4df432f0a85` — 2 info
  - added the new optional request property `preheaderText`
  - added the new optional request property `previewText`

[Full history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/campaigns/:campaignId/put.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/6db218f95cf4/schema)
