Campaigns
Unschedule Campaign
Return a scheduled campaign to an editable draft
POST
/
api
/
v1
/
campaigns
/
{campaignId}
/
unschedule
Unschedule Campaign
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "draft",
"labels": [],
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-05-20T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123?step=review"
}
}
{
"error": "Cannot unschedule a campaign in \"draft\" status."
}
{
"error": "Campaign not found"
}
{
"error": "You have view-only access to this company. Contact the owner to request edit permissions."
}
{
"success": false,
"code": "CAMPAIGN_UNSCHEDULE_CONFLICT",
"error": "Campaign can no longer be unscheduled",
"title": "Campaign can no longer be unscheduled",
"description": "Delivery has already started or the campaign scheduling state changed while the request was processed.",
"resolution": "Call get_campaign to refresh status. If it is still scheduled, retry unschedule_campaign once. If it is sending, use pause_campaign or cancel_campaign. Do not retry in a loop."
}
Unschedule a campaign in
This endpoint does not accept a request body.
scheduled status. The pending send is removed, any
weekly or monthly recurrence is stopped, and the campaign returns to draft so
you can edit and schedule it again. This is different from
cancelling a campaign, which is permanent.
Request
string
required
Campaign ID.
curl -X POST "https://api.sequenzy.com/api/v1/campaigns/camp_abc123/unschedule" \
-H "Authorization: Bearer YOUR_API_KEY"
Responses
{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "draft",
"labels": [],
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-05-20T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123?step=review"
}
}
{
"error": "Cannot unschedule a campaign in \"draft\" status."
}
{
"error": "Campaign not found"
}
{
"error": "You have view-only access to this company. Contact the owner to request edit permissions."
}
{
"success": false,
"code": "CAMPAIGN_UNSCHEDULE_CONFLICT",
"error": "Campaign can no longer be unscheduled",
"title": "Campaign can no longer be unscheduled",
"description": "Delivery has already started or the campaign scheduling state changed while the request was processed.",
"resolution": "Call get_campaign to refresh status. If it is still scheduled, retry unschedule_campaign once. If it is sending, use pause_campaign or cancel_campaign. Do not retry in a loop."
}
⌘I
Unschedule Campaign
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/unschedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "draft",
"labels": [],
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-05-20T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_abc123?step=review"
}
}
{
"error": "Cannot unschedule a campaign in \"draft\" status."
}
{
"error": "Campaign not found"
}
{
"error": "You have view-only access to this company. Contact the owner to request edit permissions."
}
{
"success": false,
"code": "CAMPAIGN_UNSCHEDULE_CONFLICT",
"error": "Campaign can no longer be unscheduled",
"title": "Campaign can no longer be unscheduled",
"description": "Delivery has already started or the campaign scheduling state changed while the request was processed.",
"resolution": "Call get_campaign to refresh status. If it is still scheduled, retry unschedule_campaign once. If it is sending, use pause_campaign or cancel_campaign. Do not retry in a loop."
}