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 send from.
["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."