Campaigns
Resend to Non-Openers
Create a draft resend to subscribers who didn’t open a sent campaign
POST
/
api
/
v1
/
campaigns
/
{campaignId}
/
resend-to-non-openers
Resend to Non-Openers
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers"
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}/resend-to-non-openers', 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}/resend-to-non-openers",
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}/resend-to-non-openers"
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}/resend-to-non-openers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers")
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_new123",
"name": "April Launch (Non-openers)",
"subject": "A quick update",
"status": "draft",
"labels": [],
"emailId": "email_new123",
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-06-11T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123?step=review"
},
"estimatedNonOpenerCount": 842
}
{
"error": "Resending to non-openers is only available 6 hours after a campaign finishes sending."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Failed to create non-opener resend"
}
Create a draft that resends a sent campaign to everyone in the same audience who didn’t open it. The draft copies the campaign email and reuses the original audience with a “didn’t open this campaign” rule added, so only people who haven’t opened it yet are targeted.
This is only available 6 hours after the campaign finishes sending, which gives opens time to register. The response includes an estimate of how many subscribers haven’t opened the original. The new draft is not sent automatically - review it, then schedule or send it.
Request
ID of the sent campaign to resend to non-openers.
curl -X POST "https://api.sequenzy.com/api/v1/campaigns/camp_abc123/resend-to-non-openers" \
-H "Authorization: Bearer YOUR_API_KEY"
Responses
{
"success": true,
"campaign": {
"id": "camp_new123",
"name": "April Launch (Non-openers)",
"subject": "A quick update",
"status": "draft",
"labels": [],
"emailId": "email_new123",
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-06-11T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123?step=review"
},
"estimatedNonOpenerCount": 842
}
{
"error": "Resending to non-openers is only available 6 hours after a campaign finishes sending."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Failed to create non-opener resend"
}
⌘I
Resend to Non-Openers
curl --request POST \
--url https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers"
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}/resend-to-non-openers', 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}/resend-to-non-openers",
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}/resend-to-non-openers"
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}/resend-to-non-openers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/campaigns/{campaignId}/resend-to-non-openers")
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_new123",
"name": "April Launch (Non-openers)",
"subject": "A quick update",
"status": "draft",
"labels": [],
"emailId": "email_new123",
"scheduledAt": null,
"sentAt": null,
"createdAt": "2026-06-11T10:00:00.000Z",
"url": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123",
"previewUrl": "https://sequenzy.com/dashboard/company/comp_abc123/campaign/camp_new123?step=review"
},
"estimatedNonOpenerCount": 842
}
{
"error": "Resending to non-openers is only available 6 hours after a campaign finishes sending."
}
{
"error": "Invalid API key"
}
{
"error": "Campaign not found"
}
{
"error": "Failed to create non-opener resend"
}