curl --request POST \
--url https://api.mailbeast.ai/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q4 Product Launch Outreach",
"schedule": {
"timezone": "America/New_York",
"sendingDays": [
1,
2,
3,
4,
5
],
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": true,
"trackClicks": true,
"sendAsTextOnly": false,
"stopOnReply": true
},
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": [
"123e4567-e89b-12d3-a456-426614174000"
],
"leads": [
"[email protected]"
],
"launch": false
}
'import requests
url = "https://api.mailbeast.ai/v1/campaigns"
payload = {
"name": "Q4 Product Launch Outreach",
"schedule": {
"timezone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": True,
"trackClicks": True,
"sendAsTextOnly": False,
"stopOnReply": True
},
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": ["123e4567-e89b-12d3-a456-426614174000"],
"leads": ["[email protected]"],
"launch": False
}
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({
name: 'Q4 Product Launch Outreach',
schedule: {
timezone: 'America/New_York',
sendingDays: [1, 2, 3, 4, 5],
sendingMinutesStart: 540,
sendingMinutesEnd: 1020,
dailyLimit: 50,
startDate: '2023-11-07T05:31:56Z',
endDate: '2023-11-07T05:31:56Z'
},
settings: {trackOpens: true, trackClicks: true, sendAsTextOnly: false, stopOnReply: true},
sequence: [
{
subject: 'Quick question about {{companyName}}',
body: JSON.stringify('<p>Hi {{firstName}}, …</p>'),
delayDays: 0,
delayHours: 0
}
],
accounts: ['123e4567-e89b-12d3-a456-426614174000'],
leads: ['[email protected]'],
launch: false
})
};
fetch('https://api.mailbeast.ai/v1/campaigns', 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.mailbeast.ai/v1/campaigns",
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([
'name' => 'Q4 Product Launch Outreach',
'schedule' => [
'timezone' => 'America/New_York',
'sendingDays' => [
1,
2,
3,
4,
5
],
'sendingMinutesStart' => 540,
'sendingMinutesEnd' => 1020,
'dailyLimit' => 50,
'startDate' => '2023-11-07T05:31:56Z',
'endDate' => '2023-11-07T05:31:56Z'
],
'settings' => [
'trackOpens' => true,
'trackClicks' => true,
'sendAsTextOnly' => false,
'stopOnReply' => true
],
'sequence' => [
[
'subject' => 'Quick question about {{companyName}}',
'body' => '<p>Hi {{firstName}}, …</p>',
'delayDays' => 0,
'delayHours' => 0
]
],
'accounts' => [
'123e4567-e89b-12d3-a456-426614174000'
],
'leads' => [
'[email protected]'
],
'launch' => false
]),
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.mailbeast.ai/v1/campaigns"
payload := strings.NewReader("{\n \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\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.mailbeast.ai/v1/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mailbeast.ai/v1/campaigns")
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 \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\n}"
response = http.request(request)
puts response.read_body{
"campaign": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Q4 Product Launch Outreach",
"status": "draft",
"schedule": {
"timezone": "America/New_York",
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"sendingDays": [
1,
2,
3,
4,
5
],
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": true,
"trackClicks": true,
"sendAsTextOnly": false,
"stopOnReply": true
},
"metrics": {
"leadsCount": 150,
"sent": 120,
"opens": 90,
"clicks": 25,
"replies": 12
},
"tags": [
{
"id": "5c9b1e77-2f4a-4c31-9d8e-1a2b3c4d5e6f",
"name": "client-acme",
"color": "#4F46E5"
}
],
"createdAt": "2026-07-11T08:00:00.000Z",
"updatedAt": "2026-07-11T10:30:00.000Z",
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": [
"3f1c2b7e-9a4d-4e18-b2c1-6d8f5a0e7c93"
]
},
"launched": false,
"leads": {
"submitted": 100,
"created": 92,
"duplicates": 6,
"invalid": 2
},
"launchError": "Campaign is not ready to launch: No leads added. Start it with POST /v1/campaigns/{id}/start."
}{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "One or more fields are invalid.",
"status": 400,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f",
"details": [
"name should not be empty"
]
}
}{
"error": {
"type": "authentication_error",
"code": "unauthenticated",
"message": "Missing or invalid API key.",
"status": 401,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "authorization_error",
"code": "permission_denied",
"message": "This API key is missing the required scope.",
"status": 403,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "invalid_request_error",
"code": "conflict",
"message": "The request conflicts with an existing resource.",
"status": 409,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "invalid_request_error",
"code": "idempotency_key_reused",
"message": "The Idempotency-Key was already used with a different request body. Use a new key for a new operation.",
"status": 422,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Too many requests. Retry after the interval in the Retry-After header.",
"status": 429,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f",
"retryAfter": 30
}
}Create a campaign
Create a campaign with its schedule, settings, sequence, sending accounts, and optionally its leads, in one call. Set launch: true to start it right away, which also needs the campaigns:lifecycle scope. If it cannot launch, the campaign is still created and launchError says why.
Requires one of the following scopes: campaigns:write, campaigns:all, all:all.
curl --request POST \
--url https://api.mailbeast.ai/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q4 Product Launch Outreach",
"schedule": {
"timezone": "America/New_York",
"sendingDays": [
1,
2,
3,
4,
5
],
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": true,
"trackClicks": true,
"sendAsTextOnly": false,
"stopOnReply": true
},
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": [
"123e4567-e89b-12d3-a456-426614174000"
],
"leads": [
"[email protected]"
],
"launch": false
}
'import requests
url = "https://api.mailbeast.ai/v1/campaigns"
payload = {
"name": "Q4 Product Launch Outreach",
"schedule": {
"timezone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": True,
"trackClicks": True,
"sendAsTextOnly": False,
"stopOnReply": True
},
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": ["123e4567-e89b-12d3-a456-426614174000"],
"leads": ["[email protected]"],
"launch": False
}
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({
name: 'Q4 Product Launch Outreach',
schedule: {
timezone: 'America/New_York',
sendingDays: [1, 2, 3, 4, 5],
sendingMinutesStart: 540,
sendingMinutesEnd: 1020,
dailyLimit: 50,
startDate: '2023-11-07T05:31:56Z',
endDate: '2023-11-07T05:31:56Z'
},
settings: {trackOpens: true, trackClicks: true, sendAsTextOnly: false, stopOnReply: true},
sequence: [
{
subject: 'Quick question about {{companyName}}',
body: JSON.stringify('<p>Hi {{firstName}}, …</p>'),
delayDays: 0,
delayHours: 0
}
],
accounts: ['123e4567-e89b-12d3-a456-426614174000'],
leads: ['[email protected]'],
launch: false
})
};
fetch('https://api.mailbeast.ai/v1/campaigns', 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.mailbeast.ai/v1/campaigns",
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([
'name' => 'Q4 Product Launch Outreach',
'schedule' => [
'timezone' => 'America/New_York',
'sendingDays' => [
1,
2,
3,
4,
5
],
'sendingMinutesStart' => 540,
'sendingMinutesEnd' => 1020,
'dailyLimit' => 50,
'startDate' => '2023-11-07T05:31:56Z',
'endDate' => '2023-11-07T05:31:56Z'
],
'settings' => [
'trackOpens' => true,
'trackClicks' => true,
'sendAsTextOnly' => false,
'stopOnReply' => true
],
'sequence' => [
[
'subject' => 'Quick question about {{companyName}}',
'body' => '<p>Hi {{firstName}}, …</p>',
'delayDays' => 0,
'delayHours' => 0
]
],
'accounts' => [
'123e4567-e89b-12d3-a456-426614174000'
],
'leads' => [
'[email protected]'
],
'launch' => false
]),
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.mailbeast.ai/v1/campaigns"
payload := strings.NewReader("{\n \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\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.mailbeast.ai/v1/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mailbeast.ai/v1/campaigns")
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 \"name\": \"Q4 Product Launch Outreach\",\n \"schedule\": {\n \"timezone\": \"America/New_York\",\n \"sendingDays\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"sendingMinutesStart\": 540,\n \"sendingMinutesEnd\": 1020,\n \"dailyLimit\": 50,\n \"startDate\": \"2023-11-07T05:31:56Z\",\n \"endDate\": \"2023-11-07T05:31:56Z\"\n },\n \"settings\": {\n \"trackOpens\": true,\n \"trackClicks\": true,\n \"sendAsTextOnly\": false,\n \"stopOnReply\": true\n },\n \"sequence\": [\n {\n \"subject\": \"Quick question about {{companyName}}\",\n \"body\": \"<p>Hi {{firstName}}, …</p>\",\n \"delayDays\": 0,\n \"delayHours\": 0\n }\n ],\n \"accounts\": [\n \"123e4567-e89b-12d3-a456-426614174000\"\n ],\n \"leads\": [\n \"[email protected]\"\n ],\n \"launch\": false\n}"
response = http.request(request)
puts response.read_body{
"campaign": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Q4 Product Launch Outreach",
"status": "draft",
"schedule": {
"timezone": "America/New_York",
"sendingMinutesStart": 540,
"sendingMinutesEnd": 1020,
"dailyLimit": 50,
"sendingDays": [
1,
2,
3,
4,
5
],
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z"
},
"settings": {
"trackOpens": true,
"trackClicks": true,
"sendAsTextOnly": false,
"stopOnReply": true
},
"metrics": {
"leadsCount": 150,
"sent": 120,
"opens": 90,
"clicks": 25,
"replies": 12
},
"tags": [
{
"id": "5c9b1e77-2f4a-4c31-9d8e-1a2b3c4d5e6f",
"name": "client-acme",
"color": "#4F46E5"
}
],
"createdAt": "2026-07-11T08:00:00.000Z",
"updatedAt": "2026-07-11T10:30:00.000Z",
"sequence": [
{
"subject": "Quick question about {{companyName}}",
"body": "<p>Hi {{firstName}}, …</p>",
"delayDays": 0,
"delayHours": 0
}
],
"accounts": [
"3f1c2b7e-9a4d-4e18-b2c1-6d8f5a0e7c93"
]
},
"launched": false,
"leads": {
"submitted": 100,
"created": 92,
"duplicates": 6,
"invalid": 2
},
"launchError": "Campaign is not ready to launch: No leads added. Start it with POST /v1/campaigns/{id}/start."
}{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "One or more fields are invalid.",
"status": 400,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f",
"details": [
"name should not be empty"
]
}
}{
"error": {
"type": "authentication_error",
"code": "unauthenticated",
"message": "Missing or invalid API key.",
"status": 401,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "authorization_error",
"code": "permission_denied",
"message": "This API key is missing the required scope.",
"status": 403,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "invalid_request_error",
"code": "conflict",
"message": "The request conflicts with an existing resource.",
"status": 409,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "invalid_request_error",
"code": "idempotency_key_reused",
"message": "The Idempotency-Key was already used with a different request body. Use a new key for a new operation.",
"status": 422,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Too many requests. Retry after the interval in the Retry-After header.",
"status": 429,
"requestId": "e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f",
"retryAfter": 30
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Optional. A unique key you generate (max 255 chars, such as a UUID) that makes this request safe to retry. Retrying with the same key replays the original response instead of repeating the operation. Reusing a key with a different body returns 422.
255"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Body
255"Q4 Product Launch Outreach"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Inline email sequence steps, in send order. Omit for no sequence; when supplied it must have at least one step.
1Show child attributes
Show child attributes
SMTP account ids to attach to the campaign. Campaigns created through the API send from all connected mailboxes of the workspace ("use all accounts" mode), so this list does not limit which mailboxes send.
["123e4567-e89b-12d3-a456-426614174000"]
Lead emails to add. The response summarizes how many were added. Up to 1000. A malformed address is NOT a request-level 400 - it is counted in the leads summary’s invalid, so one bad entry never rejects the create.
Start sending immediately after the campaign is configured. Requires the campaigns:lifecycle scope in addition to campaigns:write.
false
Response
Show child attributes
Show child attributes
Whether the campaign was launched (true only when launch: true succeeded).
false
Present only when leads were supplied.
Show child attributes
Show child attributes
Present only when launch: true was requested but the campaign could NOT be started. The campaign is still created (as a draft) - fix the issue and start it via the lifecycle endpoint. Absent on success.
"Campaign is not ready to launch: No leads added. Start it with POST /v1/campaigns/{id}/start."