# Update only the call windows + timezone
curl -X PUT "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1" \
-H "Authorization: Bearer talq_your_environment_token_here" \
-H "Content-Type: application/json" \
-d '{
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}'
const response = await fetch('https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1', {
method: 'PUT',
headers: {
'Authorization': 'Bearer talq_your_environment_token_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
call_time_ranges: [
{ start: '10:00', end: '12:00' },
{ start: '14:00', end: '16:00' }
],
timezone: 'America/Sao_Paulo'
})
});
const result = await response.json();
import requests
url = "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1"
headers = {
"Authorization": "Bearer talq_your_environment_token_here",
"Content-Type": "application/json"
}
data = {
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}
response = requests.put(url, headers=headers, json=data)
result = response.json()
{
"success": true,
"data": {
"id": "campaign-uuid-1",
"name": "Sales Campaign Q1",
"campaign_type": "sales",
"status": "active",
"agent_id": "agent-uuid-1",
"start_date": "2024-01-01",
"end_date": null,
"days_of_week": [1, 2, 3, 4, 5],
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo",
"max_retries": 3,
"retry_cooldown_hours": 24,
"do_not_call_enabled": false,
"updated_at": "2024-01-15T11:30:00Z"
}
}
Calls & Campaigns
Update Campaign
Partially update a campaign’s configuration
PUT
/
api
/
v1
/
campaigns
/
{campaign_id}
# Update only the call windows + timezone
curl -X PUT "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1" \
-H "Authorization: Bearer talq_your_environment_token_here" \
-H "Content-Type: application/json" \
-d '{
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}'
const response = await fetch('https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1', {
method: 'PUT',
headers: {
'Authorization': 'Bearer talq_your_environment_token_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
call_time_ranges: [
{ start: '10:00', end: '12:00' },
{ start: '14:00', end: '16:00' }
],
timezone: 'America/Sao_Paulo'
})
});
const result = await response.json();
import requests
url = "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1"
headers = {
"Authorization": "Bearer talq_your_environment_token_here",
"Content-Type": "application/json"
}
data = {
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}
response = requests.put(url, headers=headers, json=data)
result = response.json()
{
"success": true,
"data": {
"id": "campaign-uuid-1",
"name": "Sales Campaign Q1",
"campaign_type": "sales",
"status": "active",
"agent_id": "agent-uuid-1",
"start_date": "2024-01-01",
"end_date": null,
"days_of_week": [1, 2, 3, 4, 5],
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo",
"max_retries": 3,
"retry_cooldown_hours": 24,
"do_not_call_enabled": false,
"updated_at": "2024-01-15T11:30:00Z"
}
}
Update Campaign
Partially update an existing campaign. All fields are optional — only the fields you send are updated. Use Update Campaign Status instead to change just the status (draft → active → paused → completed).
Endpoint
PUT /api/v1/campaigns/{campaign_id}
Path parameters
string
required
UUID of the campaign to update.
Request headers
string
required
Bearer token for authentication. Format:
Bearer talq_your_environment_token_herestring
required
Must be set to
application/jsonRequest body
All fields are optional. Send only what you want to change. Validation rules and ranges match Create Campaign.Identification
string
Campaign name. Max 255 characters.
string
Free-form description.
string
Campaign category. Options:
sales, follow_up, reminder, custom.string
UUID of the agent. Must exist in your environment.
Schedule
string
Format:
YYYY-MM-DD.string
Optional end date. Must be after
start_date. Format: YYYY-MM-DD. Send null to clear.array
Array of weekday numbers (
1–7, where 1 = Monday). Min 1 entry.array
Time windows. Array of
{start: "HH:MM", end: "HH:MM"} objects (24h format). Min 1 entry. Each window’s end must be after its start.string
IANA timezone (e.g.,
America/New_York). Max 50 characters.Retry & Cooldown
integer
Initial delay in seconds. Range:
0+.integer
Range:
0–10.integer
Range:
1–168.boolean
Auto-transition to
completed when all contacts are processed.boolean
Retry calls that completed without conversion.
boolean
integer
Range:
1–168.integer
Range:
1–168.integer
Range:
1–168.integer
Range:
1–168.integer
Range:
1–168.integer
Range:
1–168.Do-Not-Call (DNC)
boolean
string
Options:
environment, global, custom.array
Array of phone numbers (E.164). Used when
do_not_call_list_source is custom.boolean
array
array
Examples
# Update only the call windows + timezone
curl -X PUT "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1" \
-H "Authorization: Bearer talq_your_environment_token_here" \
-H "Content-Type: application/json" \
-d '{
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}'
const response = await fetch('https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1', {
method: 'PUT',
headers: {
'Authorization': 'Bearer talq_your_environment_token_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
call_time_ranges: [
{ start: '10:00', end: '12:00' },
{ start: '14:00', end: '16:00' }
],
timezone: 'America/Sao_Paulo'
})
});
const result = await response.json();
import requests
url = "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1"
headers = {
"Authorization": "Bearer talq_your_environment_token_here",
"Content-Type": "application/json"
}
data = {
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo"
}
response = requests.put(url, headers=headers, json=data)
result = response.json()
# Switch to custom DNC list and tighten retry policy
curl -X PUT "https://app.talkover.ai/api/v1/campaigns/campaign-uuid-1" \
-H "Authorization: Bearer talq_your_environment_token_here" \
-H "Content-Type: application/json" \
-d '{
"max_retries": 2,
"retry_cooldown_hours": 12,
"success_cooldown_hours": 168,
"do_not_call_enabled": true,
"do_not_call_list_source": "custom",
"do_not_call_custom_list": ["+15551234567"],
"auto_add_to_dnc_enabled": true,
"auto_dnc_trigger_statuses": ["completed"]
}'
Response
Success Response (200 OK)
{
"success": true,
"data": {
"id": "campaign-uuid-1",
"name": "Sales Campaign Q1",
"campaign_type": "sales",
"status": "active",
"agent_id": "agent-uuid-1",
"start_date": "2024-01-01",
"end_date": null,
"days_of_week": [1, 2, 3, 4, 5],
"call_time_ranges": [
{"start": "10:00", "end": "12:00"},
{"start": "14:00", "end": "16:00"}
],
"timezone": "America/Sao_Paulo",
"max_retries": 3,
"retry_cooldown_hours": 24,
"do_not_call_enabled": false,
"updated_at": "2024-01-15T11:30:00Z"
}
}
Error responses
422 Validation Error
{
"success": false,
"message": "The given data was invalid.",
"errors": {
"call_time_ranges.0.end": [
"The call time ranges.0.end must be a date after call time ranges.0.start."
]
}
}
404 Not Found
{
"success": false,
"message": "Campaign not found"
}
409 Conflict — Active Calls
{
"success": false,
"message": "Cannot update schedule while there are queued calls. Pause the campaign first.",
"code": "CAMPAIGN_HAS_ACTIVE_CALLS"
}
Notes
- Use
PATCH /v1/campaigns/{id}/statusto change status — it’s a separate endpoint with its own validation. - Updating
call_time_rangesortimezonewhile the campaign isactivemay delay queued calls until they fall back into the new windows. - Sending
"end_date": nullclears a previously set end date.
Related endpoints
Was this page helpful?