Skip to main content
POST
/
v1
/
email-messages
/
{emailMessageId}
Update an email message
curl --request POST \
  --url https://app.loops.so/api/v1/email-messages/{emailMessageId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "expectedRevisionId": "<string>",
  "subject": "<string>",
  "previewText": "<string>",
  "fromName": "<string>",
  "fromEmail": "<string>",
  "replyToEmail": "<string>",
  "ccEmail": "<string>",
  "bccEmail": "<string>",
  "languageCode": "<string>",
  "emailFormat": "<string>",
  "lmx": "<string>",
  "contactPropertiesFallbacks": {},
  "eventPropertiesFallbacks": {},
  "dataVariablesFallbacks": {}
}
'
{
  "id": "cmn5zia4i0017tzli8ric8giv",
  "campaignId": "cln0y4p6r003yl70i1j2k3l4m",
  "subject": "Big spring updates",
  "previewText": "A quick look at what's new",
  "fromName": "Loops",
  "fromEmail": "hello@news.example.com",
  "replyToEmail": "support@example.com",
  "emailFormat": "styled",
  "lmx": "<Paragraph>Hello world</Paragraph>",
  "contentRevisionId": "clv8g2x4z013yl70s9t0u1v2w",
  "updatedAt": "2026-03-28T15:30:00.000Z"
}

Request

The campaign or transactional email that owns this email message must be in Draft status.

Path parameters

emailMessageId
string
required
The ID of the email message.

Body

expectedRevisionId
string
The contentRevisionId you last fetched, or the emailMessageContentRevisionId you received when creating the campaign. Used for optimistic concurrency.
subject
string
Email subject line.
previewText
string
Email preview text.
fromName
string
Sender display name.
fromEmail
string
The sender username (without @ or domain). The team’s sending domain is appended automatically.
replyToEmail
string
Reply-to email. Must be empty or a valid email address.
ccEmail
string
CC email address. Requires the team to have CC/BCC enabled.
bccEmail
string
BCC email address. Requires the team to have CC/BCC enabled.
languageCode
string
Language code for the email. Requires translation to be enabled for the team.
emailFormat
string
The rendering format of the email. One of styled or plain.
lmx
string
The email body serialized as LMX. Styles must be embedded in the LMX <Style /> tag. The LMX payload must not exceed 100KB.
contactPropertiesFallbacks
object
Fallback values for contact properties, keyed by property name. Per-key merge: a string value sets the fallback, a null value deletes it, and keys omitted from the map are left unchanged.
eventPropertiesFallbacks
object
Fallback values for event properties, keyed by property name. Per-key merge: a string value sets the fallback, a null value deletes it, and keys omitted from the map are left unchanged.
dataVariablesFallbacks
object
Fallback values for data variables, keyed by variable name. Per-key merge: a string value sets the fallback, a null value deletes it, and keys omitted from the map are left unchanged.

Response

Success

id
string
required
campaignId
string
Present only when the message belongs to a campaign.
transactionalId
string
Present only when the message belongs to a transactional email.
subject
string
required
previewText
string
required
fromName
string
required
fromEmail
string
required
replyToEmail
string
required
ccEmail
string
Only present when set.
bccEmail
string
Only present when set.
languageCode
string
Only present when set.
emailFormat
string
required
One of styled or plain.
lmx
string
required
contentRevisionId
nullable string
required
The current content revision ID. Use this value as expectedRevisionId on your next update request.
updatedAt
string
required
contactPropertiesFallbacks
object
Contact property fallbacks. Only present when set.
eventPropertiesFallbacks
object
Event property fallbacks. Only present when set.
dataVariablesFallbacks
object
Data variable fallbacks. Only present when set.
warnings
object[]
Non-fatal issues raised while compiling the submitted LMX. Only present on update responses when warnings were produced.

Error

If the request body is invalid, a 400 Bad Request is returned. A 404 Not Found is returned if the email message does not exist. A 409 Conflict is returned when the campaign is not in draft status, when contentRevisionId is stale, when content cannot be parsed, or when the email message uses MJML format. A 413 Payload Too Large is returned when the LMX payload exceeds the 100KB limit. A 422 Unprocessable Entity is returned when LMX compilation fails. If the API key is invalid (or content API is not enabled for your team), a 401 Unauthorized is returned.
message
string
required
{
  "id": "cmn5zia4i0017tzli8ric8giv",
  "campaignId": "cln0y4p6r003yl70i1j2k3l4m",
  "subject": "Big spring updates",
  "previewText": "A quick look at what's new",
  "fromName": "Loops",
  "fromEmail": "hello@news.example.com",
  "replyToEmail": "support@example.com",
  "emailFormat": "styled",
  "lmx": "<Paragraph>Hello world</Paragraph>",
  "contentRevisionId": "clv8g2x4z013yl70s9t0u1v2w",
  "updatedAt": "2026-03-28T15:30:00.000Z"
}
Last modified on June 30, 2026