Criar campanha
curl --request POST \
--url https://suasofia.online/api/user/campaign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"assistant_id": 123,
"timezone": "<string>",
"max_calls_in_parallel": 123,
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"allowed_days": [
{}
],
"max_retries": 123,
"retry_interval": 123,
"retry_on_voicemail": true,
"retry_on_goal_incomplete": true,
"goal_completion_variable": "<string>",
"mark_complete_when_no_leads": true,
"phone_number_ids": [
{}
]
}
'import requests
url = "https://suasofia.online/api/user/campaign"
payload = {
"name": "<string>",
"assistant_id": 123,
"timezone": "<string>",
"max_calls_in_parallel": 123,
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"allowed_days": [{}],
"max_retries": 123,
"retry_interval": 123,
"retry_on_voicemail": True,
"retry_on_goal_incomplete": True,
"goal_completion_variable": "<string>",
"mark_complete_when_no_leads": True,
"phone_number_ids": [{}]
}
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>',
assistant_id: 123,
timezone: '<string>',
max_calls_in_parallel: 123,
allowed_hours_start_time: '<string>',
allowed_hours_end_time: '<string>',
allowed_days: [{}],
max_retries: 123,
retry_interval: 123,
retry_on_voicemail: true,
retry_on_goal_incomplete: true,
goal_completion_variable: '<string>',
mark_complete_when_no_leads: true,
phone_number_ids: [{}]
})
};
fetch('https://suasofia.online/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://suasofia.online/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>',
'assistant_id' => 123,
'timezone' => '<string>',
'max_calls_in_parallel' => 123,
'allowed_hours_start_time' => '<string>',
'allowed_hours_end_time' => '<string>',
'allowed_days' => [
[
]
],
'max_retries' => 123,
'retry_interval' => 123,
'retry_on_voicemail' => true,
'retry_on_goal_incomplete' => true,
'goal_completion_variable' => '<string>',
'mark_complete_when_no_leads' => true,
'phone_number_ids' => [
[
]
]
]),
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://suasofia.online/api/user/campaign"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\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://suasofia.online/api/user/campaign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://suasofia.online/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 \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Campanha criada com sucesso",
"data": {
"id": 1,
"name": "Campanha de Demo do Produto",
"status": "draft",
"max_calls_in_parallel": 3,
"mark_complete_when_no_leads": true,
"allowed_hours_start_time": "09:00:00",
"allowed_hours_end_time": "17:00:00",
"allowed_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"max_retries": 3,
"retry_interval": 60,
"created_at": "2026-02-23T10:00:00.000000Z",
"updated_at": "2026-02-23T10:00:00.000000Z"
}
}
{
"message": "Você chegou ao número máximo de campanhas permitido pelo seu plano."
}
{
"message": "Assistente não encontrado ou não é um assistente de saída."
}
{
"message": "Os dados fornecidos eram inválidos.",
"errors": {
"name": [
"O campo nome é obrigatório."
],
"assistant_id": [
"O campo ID do assistente é obrigatório."
]
}
}
Campaigns
Criar campanha
Criar uma nova campanha de chamadas de saída
POST
/
user
/
campaign
Criar campanha
curl --request POST \
--url https://suasofia.online/api/user/campaign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"assistant_id": 123,
"timezone": "<string>",
"max_calls_in_parallel": 123,
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"allowed_days": [
{}
],
"max_retries": 123,
"retry_interval": 123,
"retry_on_voicemail": true,
"retry_on_goal_incomplete": true,
"goal_completion_variable": "<string>",
"mark_complete_when_no_leads": true,
"phone_number_ids": [
{}
]
}
'import requests
url = "https://suasofia.online/api/user/campaign"
payload = {
"name": "<string>",
"assistant_id": 123,
"timezone": "<string>",
"max_calls_in_parallel": 123,
"allowed_hours_start_time": "<string>",
"allowed_hours_end_time": "<string>",
"allowed_days": [{}],
"max_retries": 123,
"retry_interval": 123,
"retry_on_voicemail": True,
"retry_on_goal_incomplete": True,
"goal_completion_variable": "<string>",
"mark_complete_when_no_leads": True,
"phone_number_ids": [{}]
}
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>',
assistant_id: 123,
timezone: '<string>',
max_calls_in_parallel: 123,
allowed_hours_start_time: '<string>',
allowed_hours_end_time: '<string>',
allowed_days: [{}],
max_retries: 123,
retry_interval: 123,
retry_on_voicemail: true,
retry_on_goal_incomplete: true,
goal_completion_variable: '<string>',
mark_complete_when_no_leads: true,
phone_number_ids: [{}]
})
};
fetch('https://suasofia.online/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://suasofia.online/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>',
'assistant_id' => 123,
'timezone' => '<string>',
'max_calls_in_parallel' => 123,
'allowed_hours_start_time' => '<string>',
'allowed_hours_end_time' => '<string>',
'allowed_days' => [
[
]
],
'max_retries' => 123,
'retry_interval' => 123,
'retry_on_voicemail' => true,
'retry_on_goal_incomplete' => true,
'goal_completion_variable' => '<string>',
'mark_complete_when_no_leads' => true,
'phone_number_ids' => [
[
]
]
]),
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://suasofia.online/api/user/campaign"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\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://suasofia.online/api/user/campaign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://suasofia.online/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 \"assistant_id\": 123,\n \"timezone\": \"<string>\",\n \"max_calls_in_parallel\": 123,\n \"allowed_hours_start_time\": \"<string>\",\n \"allowed_hours_end_time\": \"<string>\",\n \"allowed_days\": [\n {}\n ],\n \"max_retries\": 123,\n \"retry_interval\": 123,\n \"retry_on_voicemail\": true,\n \"retry_on_goal_incomplete\": true,\n \"goal_completion_variable\": \"<string>\",\n \"mark_complete_when_no_leads\": true,\n \"phone_number_ids\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "Campanha criada com sucesso",
"data": {
"id": 1,
"name": "Campanha de Demo do Produto",
"status": "draft",
"max_calls_in_parallel": 3,
"mark_complete_when_no_leads": true,
"allowed_hours_start_time": "09:00:00",
"allowed_hours_end_time": "17:00:00",
"allowed_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"max_retries": 3,
"retry_interval": 60,
"created_at": "2026-02-23T10:00:00.000000Z",
"updated_at": "2026-02-23T10:00:00.000000Z"
}
}
{
"message": "Você chegou ao número máximo de campanhas permitido pelo seu plano."
}
{
"message": "Assistente não encontrado ou não é um assistente de saída."
}
{
"message": "Os dados fornecidos eram inválidos.",
"errors": {
"name": [
"O campo nome é obrigatório."
],
"assistant_id": [
"O campo ID do assistente é obrigatório."
]
}
}
Este endpoint permite criar uma nova campanha de chamadas de saída com a configuração especificada.
Corpo da Requisição
string
required
O nome da campanha. Máximo de 255 caracteres.
integer
required
O ID do assistente a ser usado para a campanha. Deve ser um assistente capaz de fazer chamadas de saída.
string
Identificador de fuso horário para a campanha (ex.:
America/Sao_Paulo, Europe/London). Padrão para o fuso horário da sua conta.integer
default:"3"
Número máximo de chamadas simultâneas. Mínimo: 1. Máximo depende do limite de chamadas paralelas do seu plano (até 10).
string
default:"00:00"
Início da janela de horário permitido para chamadas no formato
H:i (ex.: 09:00).string
default:"23:59"
Fim da janela de horário permitido para chamadas no formato
H:i (ex.: 17:00).array
default:"todos os 7 dias"
Array de nomes dos dias da semana quando as chamadas são permitidas. Valores válidos:
monday, tuesday, wednesday, thursday, friday, saturday, sunday.integer
default:"3"
Número máximo de tentativas de reenvio para chamadas falhadas. Faixa: 1-5.
integer
default:"60"
Intervalo em minutos entre tentativas de reenvio. Faixa: 10-4320 (até 3 dias).
boolean
Se deve tentar novamente chamadas que alcançaram a caixa postal.
boolean
Se deve tentar novamente chamadas onde o objetivo não foi completado.
string
Nome de uma variável booleana do esquema pós-chamada do seu assistente para rastrear a conclusão do objetivo. Máximo de 255 caracteres.
boolean
default:"true"
Se deve marcar automaticamente a campanha como concluída quando não há mais leads para ligar.
array
Array de IDs de números de telefone para usar na campanha. Cada ID deve ser um número inteiro distinto.
Resposta
string
Mensagem de sucesso confirmando que a campanha foi criada
object
Os dados da campanha criada
Show propriedades dos dados
Show propriedades dos dados
integer
O ID da campanha criada
string
O nome da campanha
string
O status da campanha (começa como
draft)integer
Número máximo de chamadas simultâneas
boolean
Se deve marcar a campanha como concluída quando não há leads
string
Início da janela de horário permitido para chamadas
string
Fim da janela de horário permitido para chamadas
array
Dias da semana quando as chamadas são permitidas
integer
Número máximo de tentativas de reenvio
integer
Intervalo em minutos entre tentativas
string
Timestamp de quando a campanha foi criada
string
Timestamp de quando a campanha foi atualizada pela última vez
Respostas de Erro
Show Resposta de Erro
Show Resposta de Erro
string
Mensagem de erro quando o usuário atingiu o limite de campanhas do plano
Show Resposta de Erro
Show Resposta de Erro
string
Mensagem de erro quando o assistente especificado não é encontrado ou não é um assistente de saída
{
"message": "Campanha criada com sucesso",
"data": {
"id": 1,
"name": "Campanha de Demo do Produto",
"status": "draft",
"max_calls_in_parallel": 3,
"mark_complete_when_no_leads": true,
"allowed_hours_start_time": "09:00:00",
"allowed_hours_end_time": "17:00:00",
"allowed_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"max_retries": 3,
"retry_interval": 60,
"created_at": "2026-02-23T10:00:00.000000Z",
"updated_at": "2026-02-23T10:00:00.000000Z"
}
}
{
"message": "Você chegou ao número máximo de campanhas permitido pelo seu plano."
}
{
"message": "Assistente não encontrado ou não é um assistente de saída."
}
{
"message": "Os dados fornecidos eram inválidos.",
"errors": {
"name": [
"O campo nome é obrigatório."
],
"assistant_id": [
"O campo ID do assistente é obrigatório."
]
}
}
⌘I

