Create campaign
curl --request POST \
--url https://app.revti.ai/api/user/campaign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"channel": "<string>",
"timezone": "<string>",
"schedule_windows": [
{}
],
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"scheduled_start_at": "<string>",
"allowed_days": [
{}
],
"max_retries": 123,
"retry_interval": 123,
"mark_complete_when_no_leads": true,
"assistant_id": 123,
"max_calls_in_parallel": 123,
"phone_number_ids": [
{}
],
"retry_on_voicemail": true,
"retry_on_goal_incomplete": true,
"goal_completion_variable": "<string>",
"fallback_channel": "<string>",
"fallback_whatsapp_sender_id": 123,
"fallback_whatsapp_template_id": 123,
"fallback_sms_from_phone_number_id": 123,
"fallback_sms_body": "<string>",
"fallback_variable_mapping": {},
"whatsapp_sender_id": 123,
"whatsapp_template_id": 123,
"text_variable_mapping": {},
"messages_per_minute": 123,
"sms_from_phone_number_id": 123,
"sms_body": "<string>"
}
'import requests
url = "https://app.revti.ai/api/user/campaign"
payload = {
"name": "<string>",
"channel": "<string>",
"timezone": "<string>",
"schedule_windows": [{}],
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"scheduled_start_at": "<string>",
"allowed_days": [{}],
"max_retries": 123,
"retry_interval": 123,
"mark_complete_when_no_leads": True,
"assistant_id": 123,
"max_calls_in_parallel": 123,
"phone_number_ids": [{}],
"retry_on_voicemail": True,
"retry_on_goal_incomplete": True,
"goal_completion_variable": "<string>",
"fallback_channel": "<string>",
"fallback_whatsapp_sender_id": 123,
"fallback_whatsapp_template_id": 123,
"fallback_sms_from_phone_number_id": 123,
"fallback_sms_body": "<string>",
"fallback_variable_mapping": {},
"whatsapp_sender_id": 123,
"whatsapp_template_id": 123,
"text_variable_mapping": {},
"messages_per_minute": 123,
"sms_from_phone_number_id": 123,
"sms_body": "<string>"
}
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: '<string>',
channel: '<string>',
timezone: '<string>',
schedule_windows: [{}],
allowed_hours_start_time: '<string>',
allowed_hours_end_time: '<string>',
scheduled_start_at: '<string>',
allowed_days: [{}],
max_retries: 123,
retry_interval: 123,
mark_complete_when_no_leads: true,
assistant_id: 123,
max_calls_in_parallel: 123,
phone_number_ids: [{}],
retry_on_voicemail: true,
retry_on_goal_incomplete: true,
goal_completion_variable: '<string>',
fallback_channel: '<string>',
fallback_whatsapp_sender_id: 123,
fallback_whatsapp_template_id: 123,
fallback_sms_from_phone_number_id: 123,
fallback_sms_body: '<string>',
fallback_variable_mapping: {},
whatsapp_sender_id: 123,
whatsapp_template_id: 123,
text_variable_mapping: {},
messages_per_minute: 123,
sms_from_phone_number_id: 123,
sms_body: '<string>'
})
};
fetch('https://app.revti.ai/api/user/campaign', 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://app.revti.ai/api/user/campaign",
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' => '<string>',
'channel' => '<string>',
'timezone' => '<string>',
'schedule_windows' => [
[
]
],
'allowed_hours_start_time' => '<string>',
'allowed_hours_end_time' => '<string>',
'scheduled_start_at' => '<string>',
'allowed_days' => [
[
]
],
'max_retries' => 123,
'retry_interval' => 123,
'mark_complete_when_no_leads' => true,
'assistant_id' => 123,
'max_calls_in_parallel' => 123,
'phone_number_ids' => [
[
]
],
'retry_on_voicemail' => true,
'retry_on_goal_incomplete' => true,
'goal_completion_variable' => '<string>',
'fallback_channel' => '<string>',
'fallback_whatsapp_sender_id' => 123,
'fallback_whatsapp_template_id' => 123,
'fallback_sms_from_phone_number_id' => 123,
'fallback_sms_body' => '<string>',
'fallback_variable_mapping' => [
],
'whatsapp_sender_id' => 123,
'whatsapp_template_id' => 123,
'text_variable_mapping' => [
],
'messages_per_minute' => 123,
'sms_from_phone_number_id' => 123,
'sms_body' => '<string>'
]),
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://app.revti.ai/api/user/campaign"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\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://app.revti.ai/api/user/campaign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.revti.ai/api/user/campaign")
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\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Campaign created successfully",
"data": {
"id": 1,
"name": "Product Demo Campaign",
"channel": "call",
"status": "draft",
"assistant_id": 42,
"timezone": "Europe/Bucharest",
"max_calls_in_parallel": 3,
"messages_per_minute": null,
"schedule_windows": [{ "start": "09:00", "end": "18:00" }],
"scheduled_start_at": null,
"allowed_hours_start_time": "09:00",
"allowed_hours_end_time": "18:00",
"allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
"max_retries": 3,
"retry_interval": 60,
"retry_on_voicemail": false,
"retry_on_goal_incomplete": false,
"goal_completion_variable": null,
"mark_complete_when_no_leads": true,
"phone_number_ids": [11, 12],
"whatsapp_sender_id": null,
"whatsapp_template_id": null,
"sms_from_phone_number_id": null,
"sms_body": null,
"text_variable_mapping": null,
"fallback_channel": "whatsapp",
"fallback_whatsapp_sender_id": 7,
"fallback_whatsapp_template_id": 15,
"fallback_sms_from_phone_number_id": null,
"fallback_sms_body": null,
"fallback_variable_mapping": { "1": "customer_name" },
"created_at": "2026-07-24 18:00:00",
"updated_at": "2026-07-24 18:00:00"
}
}
{
"message": "Campaign created successfully",
"data": {
"id": 2,
"name": "WhatsApp Follow-up",
"channel": "whatsapp",
"status": "draft",
"assistant_id": null,
"messages_per_minute": 10,
"schedule_windows": [{ "start": "09:00", "end": "20:00" }],
"whatsapp_sender_id": 7,
"whatsapp_template_id": 15,
"text_variable_mapping": { "1": "customer_name" },
"fallback_channel": null
}
}
Campaigns
Create campaign
Create a draft call, WhatsApp, or SMS campaign
POST
/
user
/
campaign
Create campaign
curl --request POST \
--url https://app.revti.ai/api/user/campaign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"channel": "<string>",
"timezone": "<string>",
"schedule_windows": [
{}
],
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"scheduled_start_at": "<string>",
"allowed_days": [
{}
],
"max_retries": 123,
"retry_interval": 123,
"mark_complete_when_no_leads": true,
"assistant_id": 123,
"max_calls_in_parallel": 123,
"phone_number_ids": [
{}
],
"retry_on_voicemail": true,
"retry_on_goal_incomplete": true,
"goal_completion_variable": "<string>",
"fallback_channel": "<string>",
"fallback_whatsapp_sender_id": 123,
"fallback_whatsapp_template_id": 123,
"fallback_sms_from_phone_number_id": 123,
"fallback_sms_body": "<string>",
"fallback_variable_mapping": {},
"whatsapp_sender_id": 123,
"whatsapp_template_id": 123,
"text_variable_mapping": {},
"messages_per_minute": 123,
"sms_from_phone_number_id": 123,
"sms_body": "<string>"
}
'import requests
url = "https://app.revti.ai/api/user/campaign"
payload = {
"name": "<string>",
"channel": "<string>",
"timezone": "<string>",
"schedule_windows": [{}],
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"scheduled_start_at": "<string>",
"allowed_days": [{}],
"max_retries": 123,
"retry_interval": 123,
"mark_complete_when_no_leads": True,
"assistant_id": 123,
"max_calls_in_parallel": 123,
"phone_number_ids": [{}],
"retry_on_voicemail": True,
"retry_on_goal_incomplete": True,
"goal_completion_variable": "<string>",
"fallback_channel": "<string>",
"fallback_whatsapp_sender_id": 123,
"fallback_whatsapp_template_id": 123,
"fallback_sms_from_phone_number_id": 123,
"fallback_sms_body": "<string>",
"fallback_variable_mapping": {},
"whatsapp_sender_id": 123,
"whatsapp_template_id": 123,
"text_variable_mapping": {},
"messages_per_minute": 123,
"sms_from_phone_number_id": 123,
"sms_body": "<string>"
}
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: '<string>',
channel: '<string>',
timezone: '<string>',
schedule_windows: [{}],
allowed_hours_start_time: '<string>',
allowed_hours_end_time: '<string>',
scheduled_start_at: '<string>',
allowed_days: [{}],
max_retries: 123,
retry_interval: 123,
mark_complete_when_no_leads: true,
assistant_id: 123,
max_calls_in_parallel: 123,
phone_number_ids: [{}],
retry_on_voicemail: true,
retry_on_goal_incomplete: true,
goal_completion_variable: '<string>',
fallback_channel: '<string>',
fallback_whatsapp_sender_id: 123,
fallback_whatsapp_template_id: 123,
fallback_sms_from_phone_number_id: 123,
fallback_sms_body: '<string>',
fallback_variable_mapping: {},
whatsapp_sender_id: 123,
whatsapp_template_id: 123,
text_variable_mapping: {},
messages_per_minute: 123,
sms_from_phone_number_id: 123,
sms_body: '<string>'
})
};
fetch('https://app.revti.ai/api/user/campaign', 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://app.revti.ai/api/user/campaign",
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' => '<string>',
'channel' => '<string>',
'timezone' => '<string>',
'schedule_windows' => [
[
]
],
'allowed_hours_start_time' => '<string>',
'allowed_hours_end_time' => '<string>',
'scheduled_start_at' => '<string>',
'allowed_days' => [
[
]
],
'max_retries' => 123,
'retry_interval' => 123,
'mark_complete_when_no_leads' => true,
'assistant_id' => 123,
'max_calls_in_parallel' => 123,
'phone_number_ids' => [
[
]
],
'retry_on_voicemail' => true,
'retry_on_goal_incomplete' => true,
'goal_completion_variable' => '<string>',
'fallback_channel' => '<string>',
'fallback_whatsapp_sender_id' => 123,
'fallback_whatsapp_template_id' => 123,
'fallback_sms_from_phone_number_id' => 123,
'fallback_sms_body' => '<string>',
'fallback_variable_mapping' => [
],
'whatsapp_sender_id' => 123,
'whatsapp_template_id' => 123,
'text_variable_mapping' => [
],
'messages_per_minute' => 123,
'sms_from_phone_number_id' => 123,
'sms_body' => '<string>'
]),
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://app.revti.ai/api/user/campaign"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\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://app.revti.ai/api/user/campaign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.revti.ai/api/user/campaign")
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\": \"<string>\",\n \"channel\": \"<string>\",\n \"timezone\": \"<string>\",\n \"schedule_windows\": [\n {}\n ],\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"scheduled_start_at\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"mark_complete_when_no_leads\": true,\n \"assistant_id\": 123,\n \"max_calls_in_parallel\": 123,\n \"phone_number_ids\": [\n {}\n ],\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"fallback_channel\": \"<string>\",\n \"fallback_whatsapp_sender_id\": 123,\n \"fallback_whatsapp_template_id\": 123,\n \"fallback_sms_from_phone_number_id\": 123,\n \"fallback_sms_body\": \"<string>\",\n \"fallback_variable_mapping\": {},\n \"whatsapp_sender_id\": 123,\n \"whatsapp_template_id\": 123,\n \"text_variable_mapping\": {},\n \"messages_per_minute\": 123,\n \"sms_from_phone_number_id\": 123,\n \"sms_body\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Campaign created successfully",
"data": {
"id": 1,
"name": "Product Demo Campaign",
"channel": "call",
"status": "draft",
"assistant_id": 42,
"timezone": "Europe/Bucharest",
"max_calls_in_parallel": 3,
"messages_per_minute": null,
"schedule_windows": [{ "start": "09:00", "end": "18:00" }],
"scheduled_start_at": null,
"allowed_hours_start_time": "09:00",
"allowed_hours_end_time": "18:00",
"allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
"max_retries": 3,
"retry_interval": 60,
"retry_on_voicemail": false,
"retry_on_goal_incomplete": false,
"goal_completion_variable": null,
"mark_complete_when_no_leads": true,
"phone_number_ids": [11, 12],
"whatsapp_sender_id": null,
"whatsapp_template_id": null,
"sms_from_phone_number_id": null,
"sms_body": null,
"text_variable_mapping": null,
"fallback_channel": "whatsapp",
"fallback_whatsapp_sender_id": 7,
"fallback_whatsapp_template_id": 15,
"fallback_sms_from_phone_number_id": null,
"fallback_sms_body": null,
"fallback_variable_mapping": { "1": "customer_name" },
"created_at": "2026-07-24 18:00:00",
"updated_at": "2026-07-24 18:00:00"
}
}
{
"message": "Campaign created successfully",
"data": {
"id": 2,
"name": "WhatsApp Follow-up",
"channel": "whatsapp",
"status": "draft",
"assistant_id": null,
"messages_per_minute": 10,
"schedule_windows": [{ "start": "09:00", "end": "20:00" }],
"whatsapp_sender_id": 7,
"whatsapp_template_id": 15,
"text_variable_mapping": { "1": "customer_name" },
"fallback_channel": null
}
}
Create a new campaign. Campaigns start in
draft — add leads, then start with Update campaign status.
Supported channels:
call(default) — outbound voice with an OUTBOUND assistantwhatsapp— approved WhatsApp template via one of your senderssms— SMS body from an SMS-capable number (may be temporarily unavailable on the platform)
Request body
Shared
string
required
Campaign name. Maximum 255 characters.
string
default:"call"
call, whatsapp, or sms.string
IANA timezone for the send/call window (e.g.
America/New_York). Defaults to the assistant timezone for call campaigns, otherwise your account timezone.array
Preferred schedule: one or more daily windows as objects with
start and end in HH:MM. Overnight windows are supported when end is earlier than start (e.g. 16:00 → 02:00).string
default:"00:00"
Legacy single-window start (
HH:MM). Used if schedule_windows is omitted.string
default:"23:59"
Legacy single-window end (
HH:MM). Overnight when end < start.string
Optional ISO datetime. When set, the campaign can be scheduled to auto-start at that time.
array
default:"all 7 days"
Weekdays:
monday … sunday.integer
default:"3"
Max retry attempts per lead. Range: 1–5.
integer
default:"60"
Minutes between retries. Range: 10–4320.
boolean
default:"true"
Automatically mark the campaign complete when no remaining work is left.
Call campaigns
integer
Required for
channel=call. Must be an OUTBOUND assistant you own.integer
default:"3"
Concurrent calls (plan-bounded, max 10).
array
Outbound from-number IDs available to your account.
boolean
Retry when a call hits voicemail.
boolean
Keep retrying until a boolean post-call goal variable is true.
string
Boolean post-call schema variable name used with
retry_on_goal_incomplete.string
Optional call→text follow-up after max call retries:
whatsapp or sms.integer
Required when
fallback_channel=whatsapp.integer
Required when
fallback_channel=whatsapp. Must be an approved template on that sender.integer
Required when
fallback_channel=sms.string
Required when
fallback_channel=sms. Supports {{variable}} placeholders.object
Maps WhatsApp template placeholders (e.g.
"1") to lead variable keys for the fallback send.WhatsApp campaigns
integer
Required for
channel=whatsapp. Sender you own.integer
Required for
channel=whatsapp. Approved template on that sender.object
Maps template placeholders (e.g.
"1") to lead variable keys.integer
Per-campaign send rate (1–10). WhatsApp campaigns also share a user-wide pool of 10 in-flight sends across all your active WhatsApp campaigns.
SMS campaigns
integer
Required for
channel=sms. Must be SMS-capable and available to you.string
Required for
channel=sms. Max 1600 characters. Supports {{variable}} placeholders.Response
string
Success message
object
Created campaign (same shape as Get campaign), including
channel, schedule, text config, and fallback fields.Error responses
Plan limit, invalid assistant/sender/template, disabled channel, or validation errors.
{
"message": "Campaign created successfully",
"data": {
"id": 1,
"name": "Product Demo Campaign",
"channel": "call",
"status": "draft",
"assistant_id": 42,
"timezone": "Europe/Bucharest",
"max_calls_in_parallel": 3,
"messages_per_minute": null,
"schedule_windows": [{ "start": "09:00", "end": "18:00" }],
"scheduled_start_at": null,
"allowed_hours_start_time": "09:00",
"allowed_hours_end_time": "18:00",
"allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
"max_retries": 3,
"retry_interval": 60,
"retry_on_voicemail": false,
"retry_on_goal_incomplete": false,
"goal_completion_variable": null,
"mark_complete_when_no_leads": true,
"phone_number_ids": [11, 12],
"whatsapp_sender_id": null,
"whatsapp_template_id": null,
"sms_from_phone_number_id": null,
"sms_body": null,
"text_variable_mapping": null,
"fallback_channel": "whatsapp",
"fallback_whatsapp_sender_id": 7,
"fallback_whatsapp_template_id": 15,
"fallback_sms_from_phone_number_id": null,
"fallback_sms_body": null,
"fallback_variable_mapping": { "1": "customer_name" },
"created_at": "2026-07-24 18:00:00",
"updated_at": "2026-07-24 18:00:00"
}
}
{
"message": "Campaign created successfully",
"data": {
"id": 2,
"name": "WhatsApp Follow-up",
"channel": "whatsapp",
"status": "draft",
"assistant_id": null,
"messages_per_minute": 10,
"schedule_windows": [{ "start": "09:00", "end": "20:00" }],
"whatsapp_sender_id": 7,
"whatsapp_template_id": 15,
"text_variable_mapping": { "1": "customer_name" },
"fallback_channel": null
}
}
⌘I

