API Reference · Campaigns
Update settings
Changes a campaign's settings — calling hours, retries, scheduled start — or how many calls it makes at once. It works in any state, and a running campaign uses the new settings from its next call.
PATCH
/campaigns/{campaign_id}https://calling.ubiqproject.com/api/v1/campaigns/{campaign_id} · Auth: API key (full access)
Request
Path parameters
campaign_idstring (UUID)requiredThe campaign's ID.
Body
configobjectSettings to change, with the same keys as Create a campaign → config. Each key you send replaces that key; keys you leave out are kept.
concurrencyintegerCalls at the same time. Values outside
1–20 are clamped to that range.The campaign's name, AI employee and caller number can't be changed after it's created.
Request
curl -X PATCH https://calling.ubiqproject.com/api/v1/campaigns/9b4e6f12-8a3c-4d71-b05e-2f6a8c1d7e93 \
-H "Authorization: Bearer vk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"concurrency": 8,
"config": {
"daily": { "enabled": true, "start": "09:30", "stop": "20:00", "timezone": "Asia/Kolkata" }
}
}'Response
The updated campaign.
Response · 200
{
"id": "9b4e6f12-8a3c-4d71-b05e-2f6a8c1d7e93",
"name": "October EMI reminders",
"agent_id": "3f8c2a1e-6b4d-4c7a-9e21-5d0f7b8a9c34",
"agent_name": "Priya",
"phone_number": "+918046801234",
"created_by": "",
"concurrency": 8,
"contacts_total": 3,
"contacts_done": 0,
"contacts_failed": 0,
"contacts_pending": 3,
"state": "draft",
"created_at": "2026-10-08T09:14:22.512341Z",
"started_at": null,
"config": {
"daily": {
"enabled": true,
"start": "09:30",
"stop": "20:00",
"timezone": "Asia/Kolkata"
},
"retry": {
"enabled": true,
"max_attempts": 3,
"schedule": "custom",
"days": 0,
"hours": 2
}
}
}Response fields
idstring (UUID)The campaign's ID.
namestringThe campaign's name.
agent_idstring (UUID)The AI employee that makes the calls.
agent_namestringThat AI employee's name.
phone_numberstring | nullThe number calls are made from. null when the AI employee's own number is used.
created_bystring | nullEmail of the dashboard user who created it. Empty when created with an API key.
concurrencyintegerHow many calls may run at the same time (1–20).
contacts_totalintegerEvery contact in the campaign, including ones your conditions filtered out.
contacts_doneintegerContacts whose call connected and finished.
contacts_failedintegerContacts that couldn't be reached after all attempts, plus contacts your conditions filtered out (never called).
contacts_pendingintegerContacts waiting to be called or on a call right now.
statestringdraft (not started), running, paused or done (every contact handled).created_atstring (ISO 8601)When it was created.
started_atstring | nullWhen it first started calling. null for a draft.
configobjectCalling hours, retries, conditions and more — see Create a campaign → config.
Send the whole object for a key
Merging is one level deep. Sending
{"daily": {"stop": "20:00"}} replaces the whole daily object, so enabled, start and timezone are lost. Send every field of the key you change.Cancel a scheduled start
Send
{"config": {"start_at": null}}, or call Pause.Errors
Responses
Campaign not found404No campaign with this ID in your company.
Invalid id400campaign_id isn't a UUID.