Campaigns
Update campaign
Update a campaign’s settings. Only allowed in draft, scheduled, or paused status — pause first, update, then resume.
PATCH
/
campaigns
/
{id}
Update campaign
curl --request PATCH \
--url https://api.verbeo.ai/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"campaign_name": "<string>",
"max_retries": 123,
"retry_intervals": [
123
],
"scheduled_at": {},
"business_hours": {}
}
'import requests
url = "https://api.verbeo.ai/v1/campaigns/{id}"
payload = {
"campaign_name": "<string>",
"max_retries": 123,
"retry_intervals": [123],
"scheduled_at": {},
"business_hours": {}
}
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({
campaign_name: '<string>',
max_retries: 123,
retry_intervals: [123],
scheduled_at: {},
business_hours: {}
})
};
fetch('https://api.verbeo.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.verbeo.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([
'campaign_name' => '<string>',
'max_retries' => 123,
'retry_intervals' => [
123
],
'scheduled_at' => [
],
'business_hours' => [
]
]),
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.verbeo.ai/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\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.verbeo.ai/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.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 \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\n}"
response = http.request(request)
puts response.read_bodyA running campaign cannot be updated directly. Pause it first, update, then resume.
See Errors for the envelope.
Path parameters
string
required
UUID of the campaign.
Request body
All fields are optional, but at least one must be provided.string
number
number[]
string | null
ISO 8601 UTC timestamp, or
null to clear. If the campaign is currently draft and you set a future time, status moves to scheduled.object | null
Replace the campaign’s business-hours config. Send
null to clear (24/7 dispatch). See Create campaign for the shape.Request
curl -X PATCH "https://api.verbeo.ai/v1/campaigns/0175091d-2c3b-4aef-8c45-dbbe24f7b3ff" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"max_retries": 3,
"retry_intervals": [5, 30, 120]
}'
await fetch(`https://api.verbeo.ai/v1/campaigns/${campaignId}`, {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.VERBEO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ max_retries: 3, retry_intervals: [5, 30, 120] }),
});
requests.patch(
f"https://api.verbeo.ai/v1/campaigns/{campaign_id}",
headers={"Authorization": f"Bearer {os.environ['VERBEO_API_KEY']}"},
json={"max_retries": 3, "retry_intervals": [5, 30, 120]},
)
Response
200 OK. Returns the updated campaign.
{
"success": true,
"data": {
"campaign_id": "0175091d-2c3b-4aef-8c45-dbbe24f7b3ff",
"campaign_name": "Q2 Sales Outreach",
"status": "paused",
"max_retries": 3,
"retry_intervals": [5, 30, 120],
"scheduled_at": null,
"business_hours": null,
"updated_at": "2026-05-04T16:12:00.000Z"
}
}
Errors
| Code | Status | When it happens |
|---|---|---|
INVALID_STATUS | 409 | Campaign is running / dormant / completed / cancelled — pause first. |
CAMPAIGN_NOT_FOUND | 404 | The campaign doesn’t exist in your workspace. |
VALIDATION_FAILED | 422 | Request body failed schema validation (e.g. invalid business_hours, empty body). |
UPDATE_FAILED | 500 | Database error during update. |
Was this page helpful?
⌘I
Update campaign
curl --request PATCH \
--url https://api.verbeo.ai/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"campaign_name": "<string>",
"max_retries": 123,
"retry_intervals": [
123
],
"scheduled_at": {},
"business_hours": {}
}
'import requests
url = "https://api.verbeo.ai/v1/campaigns/{id}"
payload = {
"campaign_name": "<string>",
"max_retries": 123,
"retry_intervals": [123],
"scheduled_at": {},
"business_hours": {}
}
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({
campaign_name: '<string>',
max_retries: 123,
retry_intervals: [123],
scheduled_at: {},
business_hours: {}
})
};
fetch('https://api.verbeo.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.verbeo.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([
'campaign_name' => '<string>',
'max_retries' => 123,
'retry_intervals' => [
123
],
'scheduled_at' => [
],
'business_hours' => [
]
]),
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.verbeo.ai/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\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.verbeo.ai/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.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 \"campaign_name\": \"<string>\",\n \"max_retries\": 123,\n \"retry_intervals\": [\n 123\n ],\n \"scheduled_at\": {},\n \"business_hours\": {}\n}"
response = http.request(request)
puts response.read_body