curl --request PATCH \
--url https://api.stardex.ai/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"is_archived": true
}
'import requests
url = "https://api.stardex.ai/v1/campaigns/{id}"
payload = { "is_archived": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({is_archived: true})
};
fetch('https://api.stardex.ai/v1/campaigns/{id}', 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.stardex.ai/v1/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'is_archived' => true
]),
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.stardex.ai/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"is_archived\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.stardex.ai/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"is_archived\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"is_archived\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"campaign": {
"id": "3f9a1c27-8e4b-4d2a-b6f0-7c1e5a9d2b84",
"name": "Senior Backend Engineer, Monzo",
"sequence_type": "candidate",
"is_archived": true,
"created_by": "7c1e4a9b-3d6f-4b2e-8a5c-9f1d3b7e5a20",
"step_count": 3,
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-24T15:02:00.000Z",
"enable_sequence_automation": true,
"stop_on_response": true,
"send_on_weekends": false,
"send_on_holidays": false,
"link_tracking": true,
"open_tracking": false,
"include_unsubscribe_link": false,
"steps": [
{
"id": "5b0f3c8e-2a71-4d0e-9a51-6f0c2d7e1a43",
"order": 1,
"type": "email",
"send_after_days": 0,
"subject": "{{search_name}} role at {{search_client}}",
"body_html": "<div>Hi {{first_name}},</div><div><br></div><div>{{ai:opening_line}} I'm hiring a <strong>{{search_name}}</strong> at {{search_client}}. {{personalization_line}}</div><div><br></div><div>You can see the role <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"{{application_link}}\">here</a>. Open to a chat?</div><div><br></div><div>{{sender_first_name}}</div>",
"timezone": "Europe/London",
"time_window_start": "09:00",
"time_window_end": "17:00",
"include_signature": true,
"block_until_task_complete": false,
"ai_variables": [
{
"name": "opening_line",
"description": "One sentence on the most relevant thing they have built or led recently."
}
],
"attachments": [
{
"file_name": "Monzo backend engineering role.pdf",
"content_type": "application/pdf",
"size_bytes": 184320
}
],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-13T10:15:00.000Z"
},
{
"id": "9d2e7a14-61c3-4b8f-8f0e-3a5c9b2d4e17",
"order": 2,
"type": "email",
"send_after_days": 3,
"subject": "Re: {{search_name}} role at {{search_client}}",
"body_html": "<div>Hi {{first_name}}, following up on my note. {{custom}}</div><div><br></div><div>{{sender_first_name}}</div>",
"timezone": "Europe/London",
"time_window_start": "09:00",
"time_window_end": "17:00",
"include_signature": true,
"block_until_task_complete": false,
"ai_variables": [],
"attachments": [],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-13T10:15:00.000Z"
},
{
"id": "c4a8e2f1-7b3d-4e6a-9c1f-2d8b5a7e3f90",
"order": 3,
"type": "manual",
"send_after_days": 2,
"subject": null,
"body_html": "<div>Call {{first_name}} if they opened but did not reply.</div>",
"timezone": "Europe/London",
"time_window_start": null,
"time_window_end": null,
"include_signature": false,
"block_until_task_complete": true,
"ai_variables": [],
"attachments": [],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": null
}
],
"manual_variables": [
"personalization_line",
"custom"
],
"ai_variables": [
{
"name": "opening_line",
"description": "One sentence on the most relevant thing they have built or led recently.",
"step_ids": [
"5b0f3c8e-2a71-4d0e-9a51-6f0c2d7e1a43"
]
}
],
"enrollment_counts": {
"total": 42,
"running": 0,
"awaiting_task": 0,
"replied": 6,
"meeting_booked": 3,
"bounced": 0,
"completed": 4,
"stopped": 29
},
"engagement": {
"responded": 9,
"interested": 5,
"neutral": 2,
"not_interested": 2,
"opened": 0,
"clicked": 7,
"reply_rate": 21.4,
"open_rate": null,
"click_rate": 17
}
},
"stopped_enrollment_count": 28
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Update campaign
Change only the fields you send. Signed-in users must be admins to change sequence_type or enable_sequence_automation. Setting is_archived to true stops everyone still in the campaign and returns how many were stopped; sending it again finishes a stop that was interrupted. Archiving also needs campaigns:enroll, because it stops email. Unarchiving restarts nobody. Needs campaigns:write.
curl --request PATCH \
--url https://api.stardex.ai/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"is_archived": true
}
'import requests
url = "https://api.stardex.ai/v1/campaigns/{id}"
payload = { "is_archived": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({is_archived: true})
};
fetch('https://api.stardex.ai/v1/campaigns/{id}', 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.stardex.ai/v1/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'is_archived' => true
]),
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.stardex.ai/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"is_archived\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.stardex.ai/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"is_archived\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"is_archived\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"campaign": {
"id": "3f9a1c27-8e4b-4d2a-b6f0-7c1e5a9d2b84",
"name": "Senior Backend Engineer, Monzo",
"sequence_type": "candidate",
"is_archived": true,
"created_by": "7c1e4a9b-3d6f-4b2e-8a5c-9f1d3b7e5a20",
"step_count": 3,
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-24T15:02:00.000Z",
"enable_sequence_automation": true,
"stop_on_response": true,
"send_on_weekends": false,
"send_on_holidays": false,
"link_tracking": true,
"open_tracking": false,
"include_unsubscribe_link": false,
"steps": [
{
"id": "5b0f3c8e-2a71-4d0e-9a51-6f0c2d7e1a43",
"order": 1,
"type": "email",
"send_after_days": 0,
"subject": "{{search_name}} role at {{search_client}}",
"body_html": "<div>Hi {{first_name}},</div><div><br></div><div>{{ai:opening_line}} I'm hiring a <strong>{{search_name}}</strong> at {{search_client}}. {{personalization_line}}</div><div><br></div><div>You can see the role <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"{{application_link}}\">here</a>. Open to a chat?</div><div><br></div><div>{{sender_first_name}}</div>",
"timezone": "Europe/London",
"time_window_start": "09:00",
"time_window_end": "17:00",
"include_signature": true,
"block_until_task_complete": false,
"ai_variables": [
{
"name": "opening_line",
"description": "One sentence on the most relevant thing they have built or led recently."
}
],
"attachments": [
{
"file_name": "Monzo backend engineering role.pdf",
"content_type": "application/pdf",
"size_bytes": 184320
}
],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-13T10:15:00.000Z"
},
{
"id": "9d2e7a14-61c3-4b8f-8f0e-3a5c9b2d4e17",
"order": 2,
"type": "email",
"send_after_days": 3,
"subject": "Re: {{search_name}} role at {{search_client}}",
"body_html": "<div>Hi {{first_name}}, following up on my note. {{custom}}</div><div><br></div><div>{{sender_first_name}}</div>",
"timezone": "Europe/London",
"time_window_start": "09:00",
"time_window_end": "17:00",
"include_signature": true,
"block_until_task_complete": false,
"ai_variables": [],
"attachments": [],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": "2026-10-13T10:15:00.000Z"
},
{
"id": "c4a8e2f1-7b3d-4e6a-9c1f-2d8b5a7e3f90",
"order": 3,
"type": "manual",
"send_after_days": 2,
"subject": null,
"body_html": "<div>Call {{first_name}} if they opened but did not reply.</div>",
"timezone": "Europe/London",
"time_window_start": null,
"time_window_end": null,
"include_signature": false,
"block_until_task_complete": true,
"ai_variables": [],
"attachments": [],
"created_at": "2026-10-13T10:15:00.000Z",
"updated_at": null
}
],
"manual_variables": [
"personalization_line",
"custom"
],
"ai_variables": [
{
"name": "opening_line",
"description": "One sentence on the most relevant thing they have built or led recently.",
"step_ids": [
"5b0f3c8e-2a71-4d0e-9a51-6f0c2d7e1a43"
]
}
],
"enrollment_counts": {
"total": 42,
"running": 0,
"awaiting_task": 0,
"replied": 6,
"meeting_booked": 3,
"bounced": 0,
"completed": 4,
"stopped": 29
},
"engagement": {
"responded": 9,
"interested": 5,
"neutral": 2,
"not_interested": 2,
"opened": 0,
"clicked": 7,
"reply_rate": 21.4,
"open_rate": null,
"click_rate": 17
}
},
"stopped_enrollment_count": 28
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Authenticate with a Bearer token: API key, OAuth token, or session token.
Path Parameters
Campaign ID.
Body
Campaign name.
1 - 200Who the campaign is for. Admins only for signed-in users.
candidate, business_development, candidate_nurture, client_nurture Move people through the linked job pipeline as they reply. Admins only for signed-in users.
Stop emailing a person once they reply. Always off for nurture campaigns.
Allow emails to go out on Saturdays and Sundays.
Allow emails to go out on public holidays. When off, the campaign skips the holidays in your workspace's holiday calendar.
Track link clicks.
Track email opens.
Add an unsubscribe link to every email.
Archive or unarchive. Archiving stops everyone still in the campaign; unarchiving does not restart them.
Was this page helpful?