Saasco logoSaasco logo
Saasco logoSaasco logo

Introduction

OverviewGetting startedAgent setupWhat is Saasco?

SDK

Quick startTrackingIdentifyConfigurationWidgetsProperties

MCP

Quick startHow it worksAuthorizationTool reference
Skills for agents

REST API

Quick start
getList Email CampaignsgetGet Email CampaignpostCreate Email CampaignputUpdate Email CampaignpostDuplicate Email CampaigndelDelete Email CampaignpostSend Email CampaignpostResume Sending Email CampaignpostStop Sending Email CampaignpostSend Test EmailgetCount Campaign EmailsgetGet Email StatsputUpdate Campaign Message
Email MarketingCampaigns

Update Campaign Message

View as MarkdownAgent setup

Updates one campaign message's sender or content. Read Get Email Campaign for messages[].id, then pass campaignId, messageId, and changes. Supports STANDARD, AUTOMATION, and AB_TEST campaigns while DRAFT or PAUSED; omitted fields are unchanged. Use this endpoint to set fromEmailUsername, fromName, and fromDomain on workflow emails. Use Update Email Campaign for workflowId and workflowStepId links.

PUT
/projects/{projectId}/email-campaigns/{campaignId}/messages/{messageId}

Authorization

Authorization
AuthorizationBearer <token>

In: header

Path Parameters

projectIdrequiredstring
campaignIdrequiredstring
messageIdrequiredstring

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

changesrequiredobject
bccstring | null
bodyHTMLstring
ccstring | null
fromDomainstring
fromEmailUsernamestring
fromNamestring
labelstring
previewTextHTMLstring
replyTostring | null
scheduledAtstring | null

When to send this message, as an ISO 8601 timestamp with a timezone offset. Null clears it.

subjectHTMLstring
textstring
themeobject | null
bodyJSONobject
previewTextJSONobject
subjectJSONobject

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/projects/string/email-campaigns/string/messages/string" \  -H "Content-Type: application/json" \  -d '{    "changes": {}  }'
{  "id": "string",  "createdAt": "string",  "updatedAt": "string",  "projectId": "string",  "emailCampaignId": "string",  "label": "string",  "fromName": "string",  "fromEmailUsername": "string",  "fromDomain": "string",  "bcc": "string",  "cc": "string",  "replyTo": "string",  "text": "string",  "subjectHTML": "string",  "previewTextHTML": "string",  "bodyHTML": "string",  "scheduledAt": "string",  "sentAt": "string",  "lastSuccessContactId": "string",  "lastSuccessContactCreatedAt": "string",  "bodyJSON": {    "property1": null,    "property2": null  },  "previewTextJSON": {    "property1": null,    "property2": null  },  "sendCount": 0,  "subjectJSON": {    "property1": null,    "property2": null  },  "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      }    }  }}

Get Email Stats

Aggregate delivery and engagement figures for one campaign: sent, delivered, opened, clicked, bounced, complained, and delivery-delayed. Each comes back as a raw `total`, a `unique` count that collapses repeat events from the same recipient, and a `rate`, so open rate is not just opens divided by sends. For the per-recipient breakdown behind these numbers use List Emails.

List Emails

The per-recipient send log for one campaign: who it went to, current status, and delivery timestamps. Paginated, and returns `total` alongside the rows so you can page without a second call. Filter by `status` to answer questions like "who bounced", or by `messageId` / `sendPhase` to isolate one side of an A/B test.