Update Email Campaign
Updates a campaign's settings. Despite the PUT, only the fields present in changes are written. Anything omitted keeps its current value. Editing a campaign that has already sent changes future behaviour only; it does not alter or resend emails already delivered.
Authorization
Authorization In: header
Path Parameters
ID of the project that owns the campaign.
ID of the campaign to update.
Request Body
application/json
Fields to change. Anything omitted is left as-is.
Attribute filters combined with groupType.
Contact attribute distinct id to filter on.
Attribute type. Defaults to string when omitted.
Comparison operator for the attribute value.
Value to compare the attribute against.
Event filters evaluated over the last 24 hours only.
Analytics event name.
Whether the contact performed the event in the last 24 hours.
How filters in this group are combined.
When true, the group is ANDed with $subscribed == true. Set by email sending, not the filter UI.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://www.saasco.com/api/v2/projects/string/email-campaigns/string" \ -H "Content-Type: application/json" \ -d '{ "changes": {} }'{
"id": "string",
"createdAt": "string",
"updatedAt": "string",
"projectId": "string",
"name": "string",
"status": "DRAFT",
"type": "STANDARD",
"workflowId": "string",
"workflowStepId": "string",
"sentAt": "string",
"contactListId": "string",
"contactsFilterGroups": [],
"lastSuccessContactId": "string",
"lastSuccessContactCreatedAt": "string",
"sendOrderByProperty": {
"direction": "asc",
"propertyKey": "string"
},
"abTestConfig": {
"variable": "SUBJECT",
"samplePercent": 20,
"winnerMetric": "OPEN_RATE",
"winnerWaitHours": 4,
"winnerWaitUnit": "HOURS",
"sendTimeDelayHours": 2,
"sendTimeDelayUnit": "HOURS",
"winnerMessageId": "string",
"winnerSelectedAt": "string",
"winnerRolloutAt": "string",
"winnerWaitStartedAt": "string",
"status": "AWAITING_SAMPLE",
"samplePaginationEnd": 9007199254740991
},
"utmConfig": {
"enabled": true,
"params": {
"campaign": "",
"content": "",
"medium": "",
"source": "",
"term": ""
}
},
"sendCount": 0,
"sendingTargetDurationMs": 9007199254740991,
"sendPaginationCount": 0,
"messages": [],
"bcc": "string",
"bodyHTML": "string",
"bodyJSON": {
"property1": null,
"property2": null
},
"cc": "string",
"fromDomain": "string",
"fromEmailUsername": "string",
"fromName": "string",
"previewTextHTML": "string",
"previewTextJSON": {
"property1": null,
"property2": null
},
"replyTo": "string",
"scheduledAt": "string",
"subjectHTML": "string",
"subjectJSON": {
"property1": null,
"property2": null
},
"text": "string",
"theme": {
"body": {
"align": "left",
"background": "string",
"container": "string"
},
"button": {
"background": "string",
"borderColor": "string",
"borderSize": 0,
"color": "string",
"radius": 0
},
"link": {
"color": "string"
},
"template": "string",
"typography": {
"h1": {
"color": "string",
"fontSize": 0,
"lineHeight": 0
},
"h2": {
"color": "string",
"fontSize": 0,
"lineHeight": 0
},
"h3": {
"color": "string",
"fontSize": 0,
"lineHeight": 0
},
"p": {
"color": "string",
"fontSize": 0,
"lineHeight": 0
}
}
}
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "NOT_FOUND",
"message": "Not found",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Create Email Campaign
Creates a campaign together with its first message (subject, body, sender) in one transaction. New campaigns always start as a DRAFT. Creating one never sends anything. Define the audience with `contactListId`, `contactsFilterGroups`, or both; set `type` to `AB_TEST` and supply `abTestConfig` for a split test.
Duplicate Email Campaign
Copies a campaign (its messages, audience, and settings) into a new DRAFT. The copy is named `"<original> (Copy)"`, incrementing to `(Copy 2)` and beyond if that name is taken. Send counts, sent timestamps, and any A/B winner are reset, so the duplicate behaves like a fresh campaign rather than inheriting the original's results.