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)required
The campaign's ID.

Body

configobject
Settings to change, with the same keys as Create a campaign → config. Each key you send replaces that key; keys you leave out are kept.
concurrencyinteger
Calls 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.
namestring
The campaign's name.
agent_idstring (UUID)
The AI employee that makes the calls.
agent_namestring
That AI employee's name.
phone_numberstring | null
The number calls are made from. null when the AI employee's own number is used.
created_bystring | null
Email of the dashboard user who created it. Empty when created with an API key.
concurrencyinteger
How many calls may run at the same time (1–20).
contacts_totalinteger
Every contact in the campaign, including ones your conditions filtered out.
contacts_doneinteger
Contacts whose call connected and finished.
contacts_failedinteger
Contacts that couldn't be reached after all attempts, plus contacts your conditions filtered out (never called).
contacts_pendinginteger
Contacts waiting to be called or on a call right now.
statestring
draft (not started), running, paused or done (every contact handled).
created_atstring (ISO 8601)
When it was created.
started_atstring | null
When it first started calling. null for a draft.
configobject
Calling 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 found404
No campaign with this ID in your company.
Invalid id400
campaign_id isn't a UUID.