Skip to main content

Update Campaign

Partially update a campaign. Only the fields you include are changed.

A campaign can be updated only while its status is draft, scheduled, or failed. Updating a campaign in any other status returns 409 CAMPAIGN_NOT_EDITABLE.

Request

PATCH /campaigns/{uuid}

Path Parameters

ParameterTypeDescription
uuidstringCampaign's UUID

Request Body

All fields are optional. Only include the fields you want to change. Send null for an optional field to clear it.

ParameterTypeDescription
namestringCampaign name (max 255 characters). When provided it must not be empty.
subjectstring|nullEmail subject line (max 255 characters). Send null to clear.
preheaderstring|nullPreview text shown after the subject (max 255 characters). Send null to clear.
from_namestring|nullSender display name (max 255 characters). Send null to clear.
reply_tostring|nullReply-to email address. Send null to clear.
from_identitystring|nullUUID of a sender identity to send from. Send null to clear.
list_uuidstring|nullUUID of a contact list to use as the audience. Send null to clear.
segment_uuidstring|nullUUID of a contact segment to use as the audience. Send null to clear.
contentstring|nullThe email body, in Markdown (max 65000 characters). Send null to clear the body. See Campaign body.
overwritebooleanSet true to replace (or clear) a body that carries formatting Markdown can't preserve. Defaults to false.

from_identity, list_uuid, and segment_uuid must reference resources that belong to your account; an unknown value returns 422 VALIDATION_ERROR.

The content body accepts a subset of Markdown — headings, bold, italic, links, lists, blockquotes, code blocks, images, and horizontal rules. Tables, strikethrough, task lists, inline `code`, and raw HTML are silently dropped rather than rejected. See Campaign body for the full list.

If the campaign's existing body reports content_overwrite_required: true — it carries styling or layout that Markdown can't preserve — writing content requires overwrite: true, which permanently discards that formatting. Otherwise the write is rejected with 409 CONTENT_OVERWRITE_REQUIRED. See Campaign body.

To update other fields of such a campaign while keeping its body as-is, simply omit content from the request — the body is left untouched. Neither overwrite nor the 409 CONTENT_OVERWRITE_REQUIRED check applies unless you actually send a content value (including null to clear it).

Example Request

curl -X PATCH "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"subject": "Final hours — up to 40% off",
"from_name": "Acme",
"list_uuid": "660e8400-e29b-41d4-a716-446655440001"
}'

Example Request (clearing the audience)

curl -X PATCH "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"list_uuid": null,
"segment_uuid": null
}'

Example Request (replacing a richer body)

When the campaign reports content_overwrite_required: true, include overwrite: true to confirm the existing styling or layout is discarded.

curl -X PATCH "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"content": "## Spring sale\n\nUp to **40% off**. [Shop now](https://acme.com/sale)",
"overwrite": true
}'

Response

Success Response (200 OK)

Returns the full campaign, identical in shape to Get Campaign.

{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Spring Sale",
"status": "draft",
"subject": "Final hours — up to 40% off",
"preheader": "Our biggest sale of the season",
"from_name": "Acme",
"reply_to": "support@acme.com",
"from_identity": null,
"from_email": null,
"content": "## Spring sale\n\nUp to **40% off**. [Shop now](https://acme.com/sale)",
"content_editable_via_api": true,
"content_overwrite_required": false,
"audience": {
"list_uuid": "660e8400-e29b-41d4-a716-446655440001",
"segment_uuid": null
},
"readiness": {
"can_send": false,
"missing": ["sender_email"]
},
"created_at": "2026-06-24T10:00:00Z",
"updated_at": "2026-06-24T10:12:00Z",
"last_updated_at": "2026-06-24T10:12:00Z"
}
}

See Get Campaign for the full field reference.

Error Responses

Not Found Error (404)

{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Campaign with UUID '550e8400-e29b-41d4-a716-446655440000' not found"
}
}

Conflict Error (409 — Not Editable)

The campaign's status does not allow editing. This is checked first: a campaign in a non-editable status returns CAMPAIGN_NOT_EDITABLE before any content check runs.

{
"error": {
"code": "CAMPAIGN_NOT_EDITABLE",
"message": "Campaign cannot be edited because of its current status"
}
}

Conflict Error (409 — Overwrite Required)

A content write would overwrite a body whose formatting Markdown can't preserve and overwrite was not true. Resend with overwrite: true to replace it. See Campaign body.

{
"error": {
"code": "CONTENT_OVERWRITE_REQUIRED",
"message": "This campaign's body contains styling Markdown can't preserve; pass overwrite=true to replace it."
}
}

Validation Error (422 Unprocessable Entity)

{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid",
"details": {
"list_uuid": ["Contact list not found"]
}
}
}