Skip to main content
POST
/
v1
/
campaigns
/
{campaignId}
Update a campaign
curl --request POST \
  --url https://app.loops.so/api/v1/campaigns/{campaignId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "campaignGroupId": "<string>",
  "mailingListId": {},
  "audienceSegmentId": {},
  "audienceFilter": {},
  "scheduling": {
    "method": "<string>",
    "timestamp": "<string>"
  }
}
'
{
  "id": "cln0y4p6r003yl70i1j2k3l4m",
  "name": "Spring announcement v2",
  "status": "Draft",
  "createdAt": "2026-03-28T15:00:00.000Z",
  "updatedAt": "2026-03-28T15:15:00.000Z",
  "emailMessageId": "cmn5zia4i0017tzli8ric8giv",
  "campaignGroupId": "clq3b7s9u007yl70u9v0w1x2y",
  "mailingListId": null,
  "audienceSegmentId": "clr4c8t0v008yl70x3y4z5a6b",
  "audienceFilter": null,
  "scheduling": {
    "method": "now",
    "timestamp": null
  }
}
Campaigns can only be updated while they are in Draft status. At least one field must be provided.

Request

Path parameters

campaignId
string
required
The ID of the campaign.

Body

name
string
The updated campaign name.
campaignGroupId
string
The ID of the group to move this campaign to.
mailingListId
nullable string
The ID of the mailing list to send to.
audienceSegmentId
nullable string
The ID of an audience segment. Setting this clears any audienceFilter.
audienceFilter
object
An inline audience filter. See Get an audience segment for the filter structure.
scheduling
object
When the campaign should send.

Response

Success

id
string
required
The campaign ID.
name
string
required
The campaign name.
status
string
required
The campaign status. One of Draft, Scheduled, Sending, Sent.
createdAt
string
required
ISO 8601 timestamp for when the campaign was created.
updatedAt
string
required
ISO 8601 timestamp for when the campaign was last updated.
emailMessageId
nullable string
required
The associated email message ID.
campaignGroupId
nullable string
required
The ID of the campaign group this campaign belongs to.
mailingListId
nullable string
required
The ID of the mailing list this campaign sends to, if set.
audienceSegmentId
nullable string
required
The ID of the audience segment this campaign targets, if set.
audienceFilter
nullable object
required
The inline audience filter, if set.
scheduling
object
required
When the campaign is scheduled to send.

Error

If the request body is invalid, or if the campaign group is not found, a 400 Bad Request is returned. A 404 Not Found is returned if the campaign, mailing list, or audience segment does not exist. A 409 Conflict is returned if the campaign is not in draft status. If the API key is invalid (or content API is not enabled for your team), a 401 Unauthorized is returned.
message
string
required
An error message describing what went wrong.
{
  "id": "cln0y4p6r003yl70i1j2k3l4m",
  "name": "Spring announcement v2",
  "status": "Draft",
  "createdAt": "2026-03-28T15:00:00.000Z",
  "updatedAt": "2026-03-28T15:15:00.000Z",
  "emailMessageId": "cmn5zia4i0017tzli8ric8giv",
  "campaignGroupId": "clq3b7s9u007yl70u9v0w1x2y",
  "mailingListId": null,
  "audienceSegmentId": "clr4c8t0v008yl70x3y4z5a6b",
  "audienceFilter": null,
  "scheduling": {
    "method": "now",
    "timestamp": null
  }
}
Last modified on June 30, 2026