Campaigns
Resume Campaign
Resume a paused campaign
POST
/
api
/
v1
/
campaigns
/
{campaignId}
/
resume
Resume Campaign
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"spreadOverHours": 123
}
'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume"
payload = { "spreadOverHours": 123 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({spreadOverHours: 123})
};
fetch('https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume', 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}/resume",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'spreadOverHours' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume"
payload := strings.NewReader("{\n \"spreadOverHours\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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}/resume")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"spreadOverHours\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"spreadOverHours\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "sending",
"labels": [],
"scheduledAt": "2026-06-01T14:00:00.000Z",
"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 resume a campaign in \"sending\" status."
}
{
"error": "spreadOverHours must be an integer between 1 and 72."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Campaign status has changed and can no longer be resumed."
}
{
"error": "This campaign was paused because sending for this company is paused. Resume company sending first."
}
Resume a campaign in
paused status. Sending continues with the remaining recipients. When the campaign has a linked A/B test, the test or winner phase resumes from where it stopped.
Campaigns that were mid-send when company sending was paused (sender-health thresholds, moderation) or the account was banned are paused automatically. They cannot be resumed on their own while that company-level pause is still active: the request returns 409 and names the cause. Once company sending is restored, they restart automatically unless an admin chose to leave them paused, in which case this endpoint resumes them.
Request
string
required
Campaign ID.
number
Spread the remaining delivery over this many hours. Must be an integer from 1
to 72. Pass
null to clear an existing spread. Omit to keep the campaign’s
current setting.curl -X POST "https://api.sequenzy.com/api/v1/campaigns/camp_abc123/resume" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"spreadOverHours": 6}'
Responses
{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "sending",
"labels": [],
"scheduledAt": "2026-06-01T14:00:00.000Z",
"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 resume a campaign in \"sending\" status."
}
{
"error": "spreadOverHours must be an integer between 1 and 72."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Campaign status has changed and can no longer be resumed."
}
{
"error": "This campaign was paused because sending for this company is paused. Resume company sending first."
}
⌘I
Resume Campaign
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"spreadOverHours": 123
}
'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume"
payload = { "spreadOverHours": 123 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({spreadOverHours: 123})
};
fetch('https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume', 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}/resume",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'spreadOverHours' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume"
payload := strings.NewReader("{\n \"spreadOverHours\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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}/resume")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"spreadOverHours\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resume")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"spreadOverHours\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"campaign": {
"id": "camp_abc123",
"name": "April Launch",
"subject": "A quick update",
"status": "sending",
"labels": [],
"scheduledAt": "2026-06-01T14:00:00.000Z",
"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 resume a campaign in \"sending\" status."
}
{
"error": "spreadOverHours must be an integer between 1 and 72."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Campaign status has changed and can no longer be resumed."
}
{
"error": "This campaign was paused because sending for this company is paused. Resume company sending first."
}