{ "campaignId": "43150de2-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "name": "Al-Falah credit card payment reminder", "state": "draft", "mode": "bounded", "config": { "goal": "payment_reminder", "assistant": { "assistantId": "452dda41-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "schedule": { "scheduledFor": "2027-01-15T09:00:00.000Z", "callingWindow": { "from": "10:00", "to": "18:00", "tz": "Asia/Karachi" } }, "dialing": { "lines": 6, "fromNumber": "+924238900100" }, "scorecard": { "rubricVersionId": "alfalah-reminder-v1", "rules": [ { "ruleId": "identified_bank", "title": "بینک کا تعارف", "instruction": "ایجنٹ نے کال کے آغاز میں الفلاح بینک کا نام لیا", "points": 30, "scoringType": "binary", "evidenceRequired": true }, { "ruleId": "stated_due_date", "title": "آخری تاریخ بتائی", "instruction": "ایجنٹ نے واجب الادا رقم اور ادائیگی کی آخری تاریخ بتائی", "points": 40, "scoringType": "binary", "evidenceRequired": true }, { "ruleId": "logged_promise", "title": "ادائیگی کا وعدہ", "instruction": "اگر کسٹمر ادائیگی کا وعدہ کرے تو ایجنٹ نے تاریخ نوٹ کی", "points": 30, "scoringType": "binary", "evidenceRequired": false } ] } }, "trigger": { "kind": "list" }, "steps": [ "call" ], "createdAt": "2026-08-18T05:15:42.611Z", "updatedAt": "2026-08-18T05:22:25.445Z", "version": 12}
Campaigns
Update a campaign
What you can edit depends on the state:
draft, launch_failed — everything
scheduled — everything except goal and assistant
launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too
completed — nothing
Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.
Fixed at create. bounded snapshots the contact list at launch and completes itself once the queue empties; continuous keeps accepting appended contacts and completes only after a close. Absent on older campaigns; read that as bounded.
Set when the platform acts on its own, and says why. Expect Paused: out of credits, or Paused: assistant version not found when the campaign's assistant was deleted. The assistant can't be changed after launch, so a resume won't fix that one. Cleared on resume.
Increments on every accepted write — compare it across reads to tell a real change from an unchanged poll.
{"docsConfig":{"theme":"mint","$schema":"https://leaves.mintlify.com/schema/docs.json","name":"Uplift AI API Docs","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9","dark":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9"},"favicon":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/favicon.ico?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=a680f5e0b8dc59015e866648796975b1","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"mailto:founders@upliftai.org","label":"Support"}],"primary":{"type":"button","label":"Sign Up","href":"https://upliftai.org"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/upliftai"}},"integrations":{"posthog":{"apiKey":"phc_EGK5H7jrhZrIhLXWfAWCmjjljJQwF6ejp1P73EtmG7q","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upliftai","hasAudioNarration":false,"actualSubdomain":"upliftai","customDomains":["docs.upliftai.org"],"gitSource":{"type":"github","owner":"uplift-initiative","repo":"runtime-api-mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae19c28ba4b20fd94ecdb26","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Voice Agents","count":81},{"language":"default","tag":"API Reference","count":51},{"language":"default","tag":"Orator API","count":25},{"language":"default","tag":"SDKs","count":18},{"language":"default","tag":"Assistants","count":16},{"language":"default","tag":"Campaigns","count":11},{"language":"default","tag":"Contacts","count":11},{"language":"default","tag":"Orator REST API","count":9},{"language":"default","tag":"Node.js SDK","count":8},{"language":"default","tag":"Campaign outcomes","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".urdu{font-family:'Noto Nastaliq Urdu', sans-serif;font-size:1.2em;line-height:1.5em;text-align:justify;direction:rtl;unicode-bidi:embed;font-weight:normal;font-style:normal;font-variant:normal;text-transform:none}"}],"page":{"pagePath":"api-reference/campaigns/update-a-campaign","slug":"/api-reference/campaigns/update-a-campaign","pageMetadata":{"title":"Update a campaign","description":"What you can edit depends on the state:\n\n- `draft`, `launch_failed` — everything\n- `scheduled` — everything except `goal` and `assistant`\n- `launching`, `running`, `paused`, `draining` — only `assistantVersion`, `schedule.callingWindow`, `dialing`, `tools` and `delivery`; `name` is frozen too\n- `completed` — nothing\n\nConfig sections replace rather than merge, so send each section back whole. `schedule` is the exception: `scheduledFor` and `callingWindow` are kept independently.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"What you can edit depends on the state:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"draft\"\n }), \", \", _jsx(_components.code, {\n children: \"launch_failed\"\n }), \" — everything\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"scheduled\"\n }), \" — everything except \", _jsx(_components.code, {\n children: \"goal\"\n }), \" and \", _jsx(_components.code, {\n children: \"assistant\"\n })]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"launching\"\n }), \", \", _jsx(_components.code, {\n children: \"running\"\n }), \", \", _jsx(_components.code, {\n children: \"paused\"\n }), \", \", _jsx(_components.code, {\n children: \"draining\"\n }), \" — only \", _jsx(_components.code, {\n children: \"assistantVersion\"\n }), \", \", _jsx(_components.code, {\n children: \"schedule.callingWindow\"\n }), \", \", _jsx(_components.code, {\n children: \"dialing\"\n }), \", \", _jsx(_components.code, {\n children: \"tools\"\n }), \" and \", _jsx(_components.code, {\n children: \"delivery\"\n }), \"; \", _jsx(_components.code, {\n children: \"name\"\n }), \" is frozen too\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"completed\"\n }), \" — nothing\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Config sections replace rather than merge, so send each section back whole. \", _jsx(_components.code, {\n children: \"schedule\"\n }), \" is the exception: \", _jsx(_components.code, {\n children: \"scheduledFor\"\n }), \" and \", _jsx(_components.code, {\n children: \"callingWindow\"\n }), \" are kept independently.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update a campaign","description":"What you can edit depends on the state:\n\n- `draft`, `launch_failed` — everything\n- `scheduled` — everything except `goal` and `assistant`\n- `launching`, `running`, `paused`, `draining` — only `assistantVersion`, `schedule.callingWindow`, `dialing`, `tools` and `delivery`; `name` is frozen too\n- `completed` — nothing\n\nConfig sections replace rather than merge, so send each section back whole. `schedule` is the exception: `scheduledFor` and `callingWindow` are kept independently.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upliftai/ed1a602c792dd94e/data/voices.js"],"openApiReferenceData":{"operation":{"operationId":"updateCampaign","tags":["Campaigns"],"summary":"Update a campaign","description":"What you can edit depends on the state:\n\n- `draft`, `launch_failed` — everything\n- `scheduled` — everything except `goal` and `assistant`\n- `launching`, `running`, `paused`, `draining` — only `assistantVersion`, `schedule.callingWindow`, `dialing`, `tools` and `delivery`; `name` is frozen too\n- `completed` — nothing\n\nConfig sections replace rather than merge, so send each section back whole. `schedule` is the exception: `scheduledFor` and `callingWindow` are kept independently.","parameters":["05a2d60a-6d9e-4bb4-b90e-2d90c4a66220"],"requestBody":"ca3a62fd-13a1-4aab-9c8d-a0b24e4cac2a","responses":{"200":"0c6ba081-4d7a-4083-82d8-f0443ad870ce","400":"2cbe1e26-bb49-48ec-9b46-0d5c80216c3a","401":"b9d5f997-f0da-471d-8347-08c0af6ef71d","403":"af93a132-70bd-467e-804d-db27afe1db2c","404":"8fbc9748-3667-4544-8d5c-450620d899a2"},"method":"patch","type":"path","servers":["f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef"],"security":["73bac4ee-98c5-4fa2-834c-9f180d41c637"],"path":"/campaigns/{campaignId}","baseUrlOptions":["https://api.upliftai.org/v1"],"title":"Update a campaign","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"05a2d60a-6d9e-4bb4-b90e-2d90c4a66220":{"name":"campaignId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"43150de2-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Both keys are optional and an empty body is a no-op. Unknown keys are dropped silently rather than rejected — `mode` in particular is fixed at create.","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"Trimmed before storage; whitespace-only is rejected.","uniqueKey":"name","typeLabel":"string"},"config":{"type":"object","additionalProperties":true,"description":"Returned exactly as stored — a section never set is absent rather than filled in with defaults.","properties":{"goal":{"type":"string","enum":["appointment","event","lead","order_confirmation","payment_reminder","outreach","reservation_confirmation"],"description":"What the calls are for. Picks the outcome-recording tool handed to the assistant.","uniqueKey":"config.goal","typeLabel":"enum\u003cstring>"},"assistant":{"type":"object","description":"The assistant that dials. Frozen once the campaign leaves `draft`.","properties":{"assistantId":{"type":"string","format":"uuid","uniqueKey":"config.assistant.assistantId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"config.assistant","typeLabel":"object"},"assistantVersion":{"oneOf":[{"type":"string","description":"Which version of the assistant the calls run. Absent means `prod`, so a publish reaches the next dial. A number pins a published version, needs `assistant` set, and is a 400 if that version was never published. Editable while the campaign runs.","enum":["prod","draft"],"uniqueKey":"config.assistantVersion.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"integer","description":"Which version of the assistant the calls run. Absent means `prod`, so a publish reaches the next dial. A number pins a published version, needs `assistant` set, and is a 400 if that version was never published. Editable while the campaign runs.","minimum":1,"uniqueKey":"config.assistantVersion.oneOf.1","typeLabel":"integer"}],"uniqueKey":"config.assistantVersion","typeLabel":"enum\u003cstring> | integer"},"contacts":{"type":"object","description":"The contact list this campaign dials, created via [`/contact-lists`](/api-reference/contacts/create-a-contact-list). All the ways contacts get into a campaign: [Contacts](/voice-agents/campaigns/contacts).","properties":{"listId":{"type":"string","format":"uuid","uniqueKey":"config.contacts.listId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"config.contacts","typeLabel":"object"},"schedule":{"type":"object","properties":{"scheduledFor":{"type":"string","format":"date-time","description":"When a scheduled launch fires. Set by the schedule endpoint.","uniqueKey":"config.schedule.scheduledFor","typeLabel":"string\u003cdate-time>"},"callingWindow":{"type":"object","description":"Local hours during which this campaign may dial; omit it and the campaign dials around the clock. Retries falling outside the window wait until it next opens. There is no per-weekday control. The shape is not validated — a malformed window misbehaves at dial time instead of erroring here.","properties":{"from":{"type":"string","description":"24-hour local time, `HH:MM`.","example":"10:00","isRequired":true,"uniqueKey":"config.schedule.callingWindow.from","typeLabel":"string"},"to":{"type":"string","description":"24-hour local time, `HH:MM`. A `to` earlier than `from` wraps past midnight.","example":"19:00","isRequired":true,"uniqueKey":"config.schedule.callingWindow.to","typeLabel":"string"},"tz":{"type":"string","description":"IANA timezone.","example":"Asia/Karachi","isRequired":true,"uniqueKey":"config.schedule.callingWindow.tz","typeLabel":"string"}},"required":["from","to","tz"],"uniqueKey":"config.schedule.callingWindow","typeLabel":"object"}},"uniqueKey":"config.schedule","typeLabel":"object"},"dialing":{"type":"object","properties":{"lines":{"type":"integer","description":"Requested concurrent calls. Unset defaults to 1, and an explicit value below 1 fails the launch. Your account's own limit caps it: 1 call at a time by default, shared with direct calls and inbound, so a larger number only dials faster once that limit is raised. See [Phone numbers \u0026 concurrency](/voice-agents/calling/concurrency).","uniqueKey":"config.dialing.lines","typeLabel":"integer"},"fromNumber":{"type":"string","description":"Caller id the calls are placed from.","example":"+924232567890","uniqueKey":"config.dialing.fromNumber","typeLabel":"string"},"redialCallbacks":{"type":"boolean","default":true,"description":"When a contact asks to be called later, requeue them for that time, up to 3 dial cycles per contact. `false` ends the contact as before, and the callback stays `open` for a person. It applies to new callbacks only: contacts already requeued are still called.","uniqueKey":"config.dialing.redialCallbacks","typeLabel":"boolean"},"retryPolicy":{"type":"object","description":"Applied all or nothing. Unless `maxAttempts`, `retryOn` and `backoffMinutes` are all present and usable, every field falls back to its default below — a partial policy is ignored, not merged.","properties":{"maxAttempts":{"type":"integer","minimum":1,"default":3,"description":"Dials per contact, the first attempt included.","isRequired":true,"uniqueKey":"config.dialing.retryPolicy.maxAttempts","typeLabel":"integer"},"retryOn":{"type":"array","default":["no_answer","busy","voicemail","failed","silent_pickup","unreachable"],"description":"Outcomes worth dialing again. `booked`, `callback`, `not_interested` and `wrong_number` never retry, even if listed here. A contact who asked to be called later is requeued for that time instead, unless `dialing.redialCallbacks` is `false`. `unreachable` (phone off or out of coverage) is usually brief here, so the default retries it.","items":{"type":"string","enum":["no_answer","busy","voicemail","failed","silent_pickup","unreachable","wrong_person","booked","callback","not_interested","wrong_number"],"uniqueKey":"config.dialing.retryPolicy.retryOn.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"config.dialing.retryPolicy.retryOn","typeLabel":"enum\u003cstring>[]"},"backoffMinutes":{"type":"array","default":[10,60],"description":"Minutes to wait before each following attempt; the last value repeats for any attempts beyond the list.","items":{"type":"integer","minimum":0,"uniqueKey":"config.dialing.retryPolicy.backoffMinutes.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"config.dialing.retryPolicy.backoffMinutes","typeLabel":"integer[]"}},"required":["maxAttempts","retryOn","backoffMinutes"],"uniqueKey":"config.dialing.retryPolicy","typeLabel":"object"}},"uniqueKey":"config.dialing","typeLabel":"object"},"calendar":{"type":"object","description":"Booking calendar for `appointment` campaigns. Supplying `connectionId`, a Google Calendar connection from the [portal](https://upliftai.org/app/calling/webhooks), adds the booking tools to the call.","properties":{"connectionId":{"type":"string","uniqueKey":"config.calendar.connectionId","typeLabel":"string"},"calendarId":{"type":"string","uniqueKey":"config.calendar.calendarId","typeLabel":"string"}},"uniqueKey":"config.calendar","typeLabel":"object"},"scorecard":{"type":"object","description":"The rubric every call on this campaign is graded against. It freezes once any call has been graded, so revise it before launching.","properties":{"rubricVersionId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rubricVersionId","typeLabel":"string"},"rules":{"type":"array","minItems":1,"description":"Rule ids must be unique and their `points` must total exactly 100.","items":{"type":"object","properties":{"ruleId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].ruleId","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].title","typeLabel":"string"},"instruction":{"type":"string","minLength":1,"description":"What the grader looks for in the transcript to award this rule.","isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].instruction","typeLabel":"string"},"scoringType":{"type":"string","enum":["binary"],"description":"Each rule is earned in full or not at all.","isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].scoringType","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].points","typeLabel":"integer"},"evidenceRequired":{"type":"boolean","description":"When true, the grader must cite a transcript quote to award the rule.","uniqueKey":"config.scorecard.rules.items.[INDEX].evidenceRequired","typeLabel":"boolean"}},"required":["ruleId","title","instruction","scoringType","points"],"uniqueKey":"config.scorecard.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"config.scorecard.rules","typeLabel":"object[]"}},"required":["rubricVersionId","rules"],"uniqueKey":"config.scorecard","typeLabel":"object"},"tools":{"type":"object","description":"Extra tools stamped onto the assistant for this campaign's calls.","uniqueKey":"config.tools","typeLabel":"object"},"delivery":{"type":"object","description":"Where call outcomes are delivered.","uniqueKey":"config.delivery","typeLabel":"object"},"economics":{"type":"object","description":"Per-conversion values that turn campaign stats counts into money.","additionalProperties":{"type":"number","uniqueKey":"config.economics.additionalProperties","typeLabel":"number"},"uniqueKey":"config.economics","typeLabel":"object"}},"uniqueKey":"config","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"config":{"dialing":{"lines":6,"fromNumber":"+924238900100"},"schedule":{"callingWindow":{"from":"10:00","to":"18:00","tz":"Asia/Karachi"}}}},"examples":{"Example":{"title":"Example","value":{"config":{"dialing":{"lines":6,"fromNumber":"+924238900100"},"schedule":{"callingWindow":{"from":"10:00","to":"18:00","tz":"Asia/Karachi"}}}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"0c6ba081-4d7a-4083-82d8-f0443ad870ce":{"description":"The whole campaign as stored after the update, not just the sections you sent.","content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","uniqueKey":"campaignId","typeLabel":"string\u003cuuid>"},"organizationId":{"type":"string","format":"uuid","uniqueKey":"organizationId","typeLabel":"string\u003cuuid>"},"projectId":{"type":"string","format":"uuid","uniqueKey":"projectId","typeLabel":"string\u003cuuid>"},"name":{"type":"string","maxLength":120,"uniqueKey":"name","typeLabel":"string"},"state":{"type":"string","enum":["draft","scheduled","launching","launch_failed","running","paused","draining","completed"],"description":"Where the campaign is in its lifecycle:\n\n- `draft` — created, nothing dials\n- `scheduled` — the platform launches it at `config.schedule.scheduledFor`\n- `launching` — the contact list is being materialized into a run; transient\n- `launch_failed` — materialization failed; `lastError` says which phase, and launching again retries it\n- `running` — the dialer is placing calls\n- `paused` — no new dials; calls already in flight run to their end\n- `draining` — closed to new work, waiting only on in-flight calls\n- `completed` — terminal","uniqueKey":"state","typeLabel":"enum\u003cstring>"},"mode":{"type":"string","enum":["bounded","continuous"],"description":"Fixed at create. `bounded` snapshots the contact list at launch and completes itself once the queue empties; `continuous` keeps accepting appended contacts and completes only after a close. Absent on older campaigns; read that as `bounded`.","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"config":{"type":"object","additionalProperties":true,"description":"Returned exactly as stored — a section never set is absent rather than filled in with defaults.","properties":{"goal":{"type":"string","enum":["appointment","event","lead","order_confirmation","payment_reminder","outreach","reservation_confirmation"],"description":"What the calls are for. Picks the outcome-recording tool handed to the assistant.","uniqueKey":"config.goal","typeLabel":"enum\u003cstring>"},"assistant":{"type":"object","description":"The assistant that dials. Frozen once the campaign leaves `draft`.","properties":{"assistantId":{"type":"string","format":"uuid","uniqueKey":"config.assistant.assistantId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"config.assistant","typeLabel":"object"},"assistantVersion":{"oneOf":[{"type":"string","description":"Which version of the assistant the calls run. Absent means `prod`, so a publish reaches the next dial. A number pins a published version, needs `assistant` set, and is a 400 if that version was never published. Editable while the campaign runs.","enum":["prod","draft"],"uniqueKey":"config.assistantVersion.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"integer","description":"Which version of the assistant the calls run. Absent means `prod`, so a publish reaches the next dial. A number pins a published version, needs `assistant` set, and is a 400 if that version was never published. Editable while the campaign runs.","minimum":1,"uniqueKey":"config.assistantVersion.oneOf.1","typeLabel":"integer"}],"uniqueKey":"config.assistantVersion","typeLabel":"enum\u003cstring> | integer"},"contacts":{"type":"object","description":"The contact list this campaign dials, created via [`/contact-lists`](/api-reference/contacts/create-a-contact-list). All the ways contacts get into a campaign: [Contacts](/voice-agents/campaigns/contacts).","properties":{"listId":{"type":"string","format":"uuid","uniqueKey":"config.contacts.listId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"config.contacts","typeLabel":"object"},"schedule":{"type":"object","properties":{"scheduledFor":{"type":"string","format":"date-time","description":"When a scheduled launch fires. Set by the schedule endpoint.","uniqueKey":"config.schedule.scheduledFor","typeLabel":"string\u003cdate-time>"},"callingWindow":{"type":"object","description":"Local hours during which this campaign may dial; omit it and the campaign dials around the clock. Retries falling outside the window wait until it next opens. There is no per-weekday control. The shape is not validated — a malformed window misbehaves at dial time instead of erroring here.","properties":{"from":{"type":"string","description":"24-hour local time, `HH:MM`.","example":"10:00","isRequired":true,"uniqueKey":"config.schedule.callingWindow.from","typeLabel":"string"},"to":{"type":"string","description":"24-hour local time, `HH:MM`. A `to` earlier than `from` wraps past midnight.","example":"19:00","isRequired":true,"uniqueKey":"config.schedule.callingWindow.to","typeLabel":"string"},"tz":{"type":"string","description":"IANA timezone.","example":"Asia/Karachi","isRequired":true,"uniqueKey":"config.schedule.callingWindow.tz","typeLabel":"string"}},"required":["from","to","tz"],"uniqueKey":"config.schedule.callingWindow","typeLabel":"object"}},"uniqueKey":"config.schedule","typeLabel":"object"},"dialing":{"type":"object","properties":{"lines":{"type":"integer","description":"Requested concurrent calls. Unset defaults to 1, and an explicit value below 1 fails the launch. Your account's own limit caps it: 1 call at a time by default, shared with direct calls and inbound, so a larger number only dials faster once that limit is raised. See [Phone numbers \u0026 concurrency](/voice-agents/calling/concurrency).","uniqueKey":"config.dialing.lines","typeLabel":"integer"},"fromNumber":{"type":"string","description":"Caller id the calls are placed from.","example":"+924232567890","uniqueKey":"config.dialing.fromNumber","typeLabel":"string"},"redialCallbacks":{"type":"boolean","default":true,"description":"When a contact asks to be called later, requeue them for that time, up to 3 dial cycles per contact. `false` ends the contact as before, and the callback stays `open` for a person. It applies to new callbacks only: contacts already requeued are still called.","uniqueKey":"config.dialing.redialCallbacks","typeLabel":"boolean"},"retryPolicy":{"type":"object","description":"Applied all or nothing. Unless `maxAttempts`, `retryOn` and `backoffMinutes` are all present and usable, every field falls back to its default below — a partial policy is ignored, not merged.","properties":{"maxAttempts":{"type":"integer","minimum":1,"default":3,"description":"Dials per contact, the first attempt included.","isRequired":true,"uniqueKey":"config.dialing.retryPolicy.maxAttempts","typeLabel":"integer"},"retryOn":{"type":"array","default":["no_answer","busy","voicemail","failed","silent_pickup","unreachable"],"description":"Outcomes worth dialing again. `booked`, `callback`, `not_interested` and `wrong_number` never retry, even if listed here. A contact who asked to be called later is requeued for that time instead, unless `dialing.redialCallbacks` is `false`. `unreachable` (phone off or out of coverage) is usually brief here, so the default retries it.","items":{"type":"string","enum":["no_answer","busy","voicemail","failed","silent_pickup","unreachable","wrong_person","booked","callback","not_interested","wrong_number"],"uniqueKey":"config.dialing.retryPolicy.retryOn.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"config.dialing.retryPolicy.retryOn","typeLabel":"enum\u003cstring>[]"},"backoffMinutes":{"type":"array","default":[10,60],"description":"Minutes to wait before each following attempt; the last value repeats for any attempts beyond the list.","items":{"type":"integer","minimum":0,"uniqueKey":"config.dialing.retryPolicy.backoffMinutes.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"config.dialing.retryPolicy.backoffMinutes","typeLabel":"integer[]"}},"required":["maxAttempts","retryOn","backoffMinutes"],"uniqueKey":"config.dialing.retryPolicy","typeLabel":"object"}},"uniqueKey":"config.dialing","typeLabel":"object"},"calendar":{"type":"object","description":"Booking calendar for `appointment` campaigns. Supplying `connectionId`, a Google Calendar connection from the [portal](https://upliftai.org/app/calling/webhooks), adds the booking tools to the call.","properties":{"connectionId":{"type":"string","uniqueKey":"config.calendar.connectionId","typeLabel":"string"},"calendarId":{"type":"string","uniqueKey":"config.calendar.calendarId","typeLabel":"string"}},"uniqueKey":"config.calendar","typeLabel":"object"},"scorecard":{"type":"object","description":"The rubric every call on this campaign is graded against. It freezes once any call has been graded, so revise it before launching.","properties":{"rubricVersionId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rubricVersionId","typeLabel":"string"},"rules":{"type":"array","minItems":1,"description":"Rule ids must be unique and their `points` must total exactly 100.","items":{"type":"object","properties":{"ruleId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].ruleId","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].title","typeLabel":"string"},"instruction":{"type":"string","minLength":1,"description":"What the grader looks for in the transcript to award this rule.","isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].instruction","typeLabel":"string"},"scoringType":{"type":"string","enum":["binary"],"description":"Each rule is earned in full or not at all.","isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].scoringType","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"config.scorecard.rules.items.[INDEX].points","typeLabel":"integer"},"evidenceRequired":{"type":"boolean","description":"When true, the grader must cite a transcript quote to award the rule.","uniqueKey":"config.scorecard.rules.items.[INDEX].evidenceRequired","typeLabel":"boolean"}},"required":["ruleId","title","instruction","scoringType","points"],"uniqueKey":"config.scorecard.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"config.scorecard.rules","typeLabel":"object[]"}},"required":["rubricVersionId","rules"],"uniqueKey":"config.scorecard","typeLabel":"object"},"tools":{"type":"object","description":"Extra tools stamped onto the assistant for this campaign's calls.","uniqueKey":"config.tools","typeLabel":"object"},"delivery":{"type":"object","description":"Where call outcomes are delivered.","uniqueKey":"config.delivery","typeLabel":"object"},"economics":{"type":"object","description":"Per-conversion values that turn campaign stats counts into money.","additionalProperties":{"type":"number","uniqueKey":"config.economics.additionalProperties","typeLabel":"number"},"uniqueKey":"config.economics","typeLabel":"object"}},"uniqueKey":"config","typeLabel":"object"},"closedAt":{"type":"string","format":"date-time","description":"When the campaign was closed to new work. Continuous campaigns only; closing does not change `state`, so expect `running` until the drain begins.","uniqueKey":"closedAt","typeLabel":"string\u003cdate-time>"},"currentRunId":{"type":"string","format":"uuid","description":"The single run created at first launch; a retried launch reuses it.","uniqueKey":"currentRunId","typeLabel":"string\u003cuuid>"},"runStartedAt":{"type":"string","format":"date-time","description":"First launch. Unchanged by pauses, resumes and launch retries.","uniqueKey":"runStartedAt","typeLabel":"string\u003cdate-time>"},"lastError":{"type":"object","description":"Why the last launch failed. Cleared by a launch that gets further.","properties":{"phase":{"type":"string","description":"The launch step that threw, e.g. `materialize`.","uniqueKey":"lastError.phase","typeLabel":"string"},"message":{"type":"string","uniqueKey":"lastError.message","typeLabel":"string"},"at":{"type":"string","format":"date-time","uniqueKey":"lastError.at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"lastError","typeLabel":"object"},"statusMessage":{"type":"string","description":"Set when the platform acts on its own, and says why. Expect `Paused: out of credits`, or `Paused: assistant version not found` when the campaign's assistant was deleted. The assistant can't be changed after launch, so a resume won't fix that one. Cleared on resume.","example":"Paused: out of credits","uniqueKey":"statusMessage","typeLabel":"string"},"hasGradedCall":{"type":"boolean","description":"True once any call has been graded, after which `config.scorecard` is frozen. Absent until then.","uniqueKey":"hasGradedCall","typeLabel":"boolean"},"trigger":{"type":"object","description":"How the campaign takes work. Always `{\"kind\": \"list\"}` today.","properties":{"kind":{"type":"string","enum":["list"],"uniqueKey":"trigger.kind","typeLabel":"enum\u003cstring>"}},"uniqueKey":"trigger","typeLabel":"object"},"steps":{"type":"array","description":"What each contact goes through. Always `[\"call\"]` today.","items":{"type":"string","uniqueKey":"steps.items.[INDEX]","typeLabel":"string"},"uniqueKey":"steps","typeLabel":"string[]"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"version":{"type":"integer","description":"Increments on every accepted write — compare it across reads to tell a real change from an unchanged poll.","uniqueKey":"version","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"campaignId":"43150de2-xxxx-xxxx-xxxx-xxxxxxxxxxxx","organizationId":"a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","projectId":"c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx","name":"Al-Falah credit card payment reminder","state":"draft","mode":"bounded","config":{"goal":"payment_reminder","assistant":{"assistantId":"452dda41-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},"schedule":{"scheduledFor":"2027-01-15T09:00:00.000Z","callingWindow":{"from":"10:00","to":"18:00","tz":"Asia/Karachi"}},"dialing":{"lines":6,"fromNumber":"+924238900100"},"scorecard":{"rubricVersionId":"alfalah-reminder-v1","rules":[{"ruleId":"identified_bank","title":"بینک کا تعارف","instruction":"ایجنٹ نے کال کے آغاز میں الفلاح بینک کا نام لیا","points":30,"scoringType":"binary","evidenceRequired":true},{"ruleId":"stated_due_date","title":"آخری تاریخ بتائی","instruction":"ایجنٹ نے واجب الادا رقم اور ادائیگی کی آخری تاریخ بتائی","points":40,"scoringType":"binary","evidenceRequired":true},{"ruleId":"logged_promise","title":"ادائیگی کا وعدہ","instruction":"اگر کسٹمر ادائیگی کا وعدہ کرے تو ایجنٹ نے تاریخ نوٹ کی","points":30,"scoringType":"binary","evidenceRequired":false}]}},"trigger":{"kind":"list"},"steps":["call"],"createdAt":"2026-08-18T05:15:42.611Z","updatedAt":"2026-08-18T05:22:25.445Z","version":12},"examples":{"Example":{"title":"Example","value":{"campaignId":"43150de2-xxxx-xxxx-xxxx-xxxxxxxxxxxx","organizationId":"a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","projectId":"c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx","name":"Al-Falah credit card payment reminder","state":"draft","mode":"bounded","config":{"goal":"payment_reminder","assistant":{"assistantId":"452dda41-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},"schedule":{"scheduledFor":"2027-01-15T09:00:00.000Z","callingWindow":{"from":"10:00","to":"18:00","tz":"Asia/Karachi"}},"dialing":{"lines":6,"fromNumber":"+924238900100"},"scorecard":{"rubricVersionId":"alfalah-reminder-v1","rules":[{"ruleId":"identified_bank","title":"بینک کا تعارف","instruction":"ایجنٹ نے کال کے آغاز میں الفلاح بینک کا نام لیا","points":30,"scoringType":"binary","evidenceRequired":true},{"ruleId":"stated_due_date","title":"آخری تاریخ بتائی","instruction":"ایجنٹ نے واجب الادا رقم اور ادائیگی کی آخری تاریخ بتائی","points":40,"scoringType":"binary","evidenceRequired":true},{"ruleId":"logged_promise","title":"ادائیگی کا وعدہ","instruction":"اگر کسٹمر ادائیگی کا وعدہ کرے تو ایجنٹ نے تاریخ نوٹ کی","points":30,"scoringType":"binary","evidenceRequired":false}]}},"trigger":{"kind":"list"},"steps":["call"],"createdAt":"2026-08-18T05:15:42.611Z","updatedAt":"2026-08-18T05:22:25.445Z","version":12}}},"exampleType":"examples"}},"exampleType":"examples"},"2cbe1e26-bb49-48ec-9b46-0d5c80216c3a":{"description":"Editing a section frozen in this state, a blank `name`, an invalid `scorecard`, an `assistantVersion` the assistant never published, or an `appointment` campaign whose calendar connection is missing.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"frozenSection":{"title":"frozenSection","value":{"message":"Field 'goal' is not editable while campaign is 'running'","error":"Bad Request","statusCode":400}},"blankName":{"title":"blankName","value":{"message":"Campaign name cannot be blank","error":"Bad Request","statusCode":400}},"rubricPoints":{"title":"rubricPoints","value":{"message":"rubric: points sum to 70, must be 100","error":"Bad Request","statusCode":400}},"unpublishedVersion":{"title":"unpublishedVersion","value":{"message":"Assistant 452dda41-xxxx-xxxx-xxxx-xxxxxxxxxxxx has no published version 7","error":"Bad Request","statusCode":400}}},"exampleType":"examples"}},"exampleType":"examples"},"b9d5f997-f0da-471d-8347-08c0af6ef71d":{"description":"A bearer key was sent but is not recognized.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"invalid authorization","error":"Unauthorized","statusCode":401},"examples":{"Example":{"title":"Example","value":{"message":"invalid authorization","error":"Unauthorized","statusCode":401}}},"exampleType":"examples"}},"exampleType":"examples"},"af93a132-70bd-467e-804d-db27afe1db2c":{"description":"No API key sent, or the key lacks permission for this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Forbidden resource","error":"Forbidden","statusCode":403},"examples":{"Example":{"title":"Example","value":{"message":"Forbidden resource","error":"Forbidden","statusCode":403}}},"exampleType":"examples"}},"exampleType":"examples"},"8fbc9748-3667-4544-8d5c-450620d899a2":{"description":"No such campaign in the API key's project — or the `contacts.listId` you sent names no list in it.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Campaign not found: 00000000-0000-4000-8000-000000000000","error":"Not Found","statusCode":404},"examples":{"Example":{"title":"Example","value":{"message":"Campaign not found: 00000000-0000-4000-8000-000000000000","error":"Not Found","statusCode":404}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"73bac4ee-98c5-4fa2-834c-9f180d41c637":{"apiKey":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"}}},"servers":{"f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef":{"url":"https://api.upliftai.org/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Project API key (`sk_api_…`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"voice-agents/api-reference/openapi.yaml"},"subdomain":"upliftai","siteName":"Uplift AI API Docs","title":"Update a campaign - Uplift AI API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T06:54:41.231Z","originalFileLocation":"api-reference/campaigns/update-a-campaign.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"What you can edit depends on the state: - draft, launch_failed — everything - scheduled — everything except goal and assistant - launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too - completed — nothing Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update a campaign - Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"What you can edit depends on the state: - draft, launch_failed — everything - scheduled — everything except goal and assistant - launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too - completed — nothing Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Update+a+campaign\u0026amp;description=What+you+can+edit+depends+on+the+state%3A%0A%0A-+%60draft%60%2C+%60launch_failed%60+%E2%80%94+everything%0A-+%60scheduled%60+%E2%80%94+everything+except+%60goal%60+and+%60assistant%60%0A-+%60launching%60%2C+%60runnin\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=59ec9cf7b373638912a0a9b84c642b1cf1e457f5f08917b51e32b7177bc9ec7b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update a campaign - Uplift AI API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What you can edit depends on the state: - draft, launch_failed — everything - scheduled — everything except goal and assistant - launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too - completed — nothing Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Update+a+campaign\u0026amp;description=What+you+can+edit+depends+on+the+state%3A%0A%0A-+%60draft%60%2C+%60launch_failed%60+%E2%80%94+everything%0A-+%60scheduled%60+%E2%80%94+everything+except+%60goal%60+and+%60assistant%60%0A-+%60launching%60%2C+%60runnin\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=59ec9cf7b373638912a0a9b84c642b1cf1e457f5f08917b51e32b7177bc9ec7b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/campaigns/update-a-campaign.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.upliftai.org/#organization\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.upliftai.org#website\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign#webpage\",\"url\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign\",\"name\":\"Update a campaign\",\"description\":\"What you can edit depends on the state: - draft, launch_failed — everything - scheduled — everything except goal and assistant - launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too - completed — nothing Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.\",\"dateModified\":\"2026-10-28T06:54:41.231Z\",\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.upliftai.org/voice-agents/api-reference/limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Campaigns\",\"item\":\"https://docs.upliftai.org/api-reference/campaigns/create-a-campaign\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update a campaign\",\"item\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign#apireference\",\"headline\":\"Update a campaign\",\"name\":\"Update a campaign\",\"description\":\"What you can edit depends on the state: - draft, launch_failed — everything - scheduled — everything except goal and assistant - launching, running, paused, draining — only assistantVersion, schedule.callingWindow, dialing, tools and delivery; name is frozen too - completed — nothing Config sections replace rather than merge, so send each section back whole. schedule is the exception: scheduledFor and callingWindow are kept independently.\",\"url\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://docs.upliftai.org/api-reference/campaigns/update-a-campaign#webpage\"},\"dateModified\":\"2026-10-28T06:54:41.231Z\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Uplift AI API Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Uplift AI API Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/campaigns/update-a-campaign.md","siteName":"Uplift AI API Docs","nav":{"global":null,"tabs":[{"tab":"Orator API","pages":[{"title":"Orator API","href":"/introduction"}]},{"tab":"Voice Agents","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/voice-agents/getting-started/overview"},{"title":"Quickstart: Web","href":"/voice-agents/getting-started/quickstart-web"},{"title":"Quickstart: Phone","href":"/voice-agents/getting-started/quickstart-phone"}]},{"group":"Concepts","pages":[{"title":"How it works","href":"/voice-agents/concepts/how-it-works"},{"title":"Tools overview","href":"/voice-agents/concepts/tools-overview"},{"title":"Phone call states","href":"/voice-agents/concepts/phone-call-states"},{"title":"Pricing","href":"/voice-agents/concepts/pricing"}]},{"group":"Assistants","pages":[{"title":"Working with assistants","href":"/voice-agents/assistants/working-with-assistants"},{"title":"Draft and publish","href":"/voice-agents/assistants/versions"},{"title":"Transient vs stored assistants","href":"/voice-agents/assistants/transient-vs-stored"},{"title":"Provider \u0026 model reference","href":"/voice-agents/assistants/providers-and-models"},{"title":"Recommended stack","href":"/voice-agents/assistants/recommended-stack"},{"title":"Voice prompting","href":"/voice-agents/assistants/voice-prompting"},{"title":"Build, refine \u0026 simulate","href":"/voice-agents/assistants/build-refine-simulate"},{"title":"Scorecards","href":"/voice-agents/assistants/scorecards"}]},{"group":"Tools","pages":[{"title":"Client tools","href":"/voice-agents/tools/client-tools"},{"title":"Webhook tools","href":"/voice-agents/tools/webhook-tools"},{"title":"End call","href":"/voice-agents/tools/system/end-call"}]},{"group":"Personalization","pages":[{"title":"Variables","href":"/voice-agents/personalization/variables"},{"title":"Per-call instructions","href":"/voice-agents/personalization/per-call-instructions"}]},{"group":"Calling","pages":[{"title":"Outbound calls","href":"/voice-agents/calling/outbound"},{"title":"Inbound calls","href":"/voice-agents/calling/inbound"},{"title":"Phone numbers \u0026 concurrency","href":"/voice-agents/calling/concurrency"},{"title":"Call end reasons","href":"/voice-agents/calling/call-end-reasons"},{"title":"Session details \u0026 transcripts","href":"/voice-agents/calling/session-details"},{"title":"Live listen","href":"/voice-agents/calling/live-listen"}]},{"group":"Campaigns","pages":[{"title":"Getting started with batch calling","href":"/voice-agents/campaigns/getting-started"},{"title":"[ ] Static vs continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/static-vs-continuous"},{"title":"[ ] Static campaigns","hidden":true,"href":"/voice-agents/campaigns/static"},{"title":"[ ] Continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/continuous"},{"title":"[ ] Contacts","hidden":true,"href":"/voice-agents/campaigns/contacts"},{"title":"[ ] Scheduling \u0026 retries","hidden":true,"href":"/voice-agents/campaigns/scheduling-and-retries"},{"title":"[ ] Goals \u0026 scorecards","hidden":true,"href":"/voice-agents/campaigns/goals-and-scorecards"},{"title":"[ ] Results \u0026 stats","hidden":true,"href":"/voice-agents/campaigns/results"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","href":"/voice-agents/webhooks/overview"},{"title":"Event reference","href":"/voice-agents/webhooks/events"}]},{"group":"Frontend","pages":[{"title":"[ ] Architecture","hidden":true,"href":"/voice-agents/frontend/architecture"},{"title":"[ ] React","hidden":true,"href":"/voice-agents/frontend/react"},{"title":"[ ] Widget embed","hidden":true,"href":"/voice-agents/frontend/widget"},{"title":"[ ] Monitoring UI","hidden":true,"href":"/voice-agents/frontend/monitoring-ui"}]},{"group":"Testing","pages":[{"title":"Simulating conversations","href":"/voice-agents/testing/simulation"}]},{"group":"Guides","pages":[{"title":"[ ] Appointment scheduling","hidden":true,"href":"/voice-agents/guides/appointment-scheduling"},{"title":"[ ] Event invitation","hidden":true,"href":"/voice-agents/guides/event-invitation"},{"title":"[ ] Sales / lead qualification","hidden":true,"href":"/voice-agents/guides/lead-qualification"},{"title":"[ ] Payment reminder","hidden":true,"href":"/voice-agents/guides/payment-reminder"},{"title":"[ ] Order confirmation","hidden":true,"href":"/voice-agents/guides/order-confirmation"}]},{"group":"API Reference","pages":[{"title":"Phone numbers \u0026 limits","href":"/voice-agents/api-reference/limits"},{"group":"Assistants","pages":[{"title":"Create an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants","href":"/api-reference/assistants/create-an-assistant"},{"title":"List assistants","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants","href":"/api-reference/assistants/list-assistants"},{"title":"Get an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/get-an-assistant"},{"title":"Update an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/update-an-assistant"},{"title":"Delete an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml delete /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/delete-an-assistant"},{"title":"Publish an assistant version","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/publish","href":"/api-reference/assistants/publish-an-assistant-version"},{"title":"List published versions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/versions","href":"/api-reference/assistants/list-published-versions"},{"title":"Get an assistant's publish state","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/metadata","href":"/api-reference/assistants/get-an-assistants-publish-state"}]},{"group":"Authoring an assistant","pages":[{"title":"Build an assistant from a brief","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds","href":"/api-reference/authoring-an-assistant/build-an-assistant-from-a-brief"},{"title":"Poll a build's progress","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/status/{buildId}","href":"/api-reference/authoring-an-assistant/poll-a-builds-progress"},{"title":"Rehearse a call against a persona","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/simulate","href":"/api-reference/authoring-an-assistant/rehearse-a-call-against-a-persona"},{"title":"Refine a built assistant's prompt","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/refine","href":"/api-reference/authoring-an-assistant/refine-a-built-assistants-prompt"},{"title":"Get an assistant's build record","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/{assistantId}","href":"/api-reference/authoring-an-assistant/get-an-assistants-build-record"}]},{"group":"Starting a conversation","pages":[{"title":"Create a web session token","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/session","href":"/api-reference/starting-a-conversation/create-a-web-session-token"},{"title":"Open a session without an API key","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/public-session","href":"/api-reference/starting-a-conversation/open-a-session-without-an-api-key"},{"title":"Start a session from inline config","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/adhoc/session","href":"/api-reference/starting-a-conversation/start-a-session-from-inline-config"},{"title":"Dispatch a call from this assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/call","href":"/api-reference/starting-a-conversation/dispatch-a-call-from-this-assistant"}]},{"group":"Sessions \u0026 call records","pages":[{"title":"List an assistant's sessions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/sessions","href":"/api-reference/sessions-\u0026-call-records/list-an-assistants-sessions"},{"title":"Get a session's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}","href":"/api-reference/sessions-\u0026-call-records/get-a-sessions-status"},{"title":"Get a call's transcript and outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}/detail","href":"/api-reference/sessions-\u0026-call-records/get-a-calls-transcript-and-outcomes"},{"title":"Listen in on a live call","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/sessions/{sessionId}/listen","href":"/api-reference/sessions-\u0026-call-records/listen-in-on-a-live-call"}]},{"group":"Campaigns","pages":[{"title":"Create a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"List campaigns","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Get a campaign","description":"Read a campaign's `state` here before calling pause, resume, launch or close — each of those only works from specific states (pause needs `running`, resume needs `paused`) and returns a 409 from any other. Polling a running campaign also catches a scheduled launch firing, or a pause the platform applied on its own.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}","href":"/api-reference/campaigns/get-a-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"Schedule a campaign launch","description":"The campaign moves to `scheduled` and sits there until `scheduledFor`, when the platform launches it — even outside the calling window; dialing then waits for the window to open. The contact list is snapshotted at that launch moment, not now: edits to the list before `scheduledFor` make it in, edits after never reach the campaign. Only a `draft` campaign can be scheduled — to move a time already set, PATCH `config.schedule.scheduledFor`.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/schedule","href":"/api-reference/campaigns/schedule-a-campaign-launch"},{"title":"Launch a campaign now","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/launch","href":"/api-reference/campaigns/launch-a-campaign-now"},{"title":"Append contacts to a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/contacts","href":"/api-reference/campaigns/append-contacts-to-a-campaign"},{"title":"Pause campaign dialing","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/pause","href":"/api-reference/campaigns/pause-campaign-dialing"},{"title":"Resume a paused campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/resume","href":"/api-reference/campaigns/resume-a-paused-campaign"},{"title":"Close a continuous campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/close","href":"/api-reference/campaigns/close-a-continuous-campaign"}]},{"group":"Campaign outcomes","pages":[{"title":"Aggregate stats for a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/stats","href":"/api-reference/campaign-outcomes/aggregate-stats-for-a-campaign"},{"title":"List a campaign's outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/results","href":"/api-reference/campaign-outcomes/list-a-campaigns-outcomes"},{"title":"List a campaign's calls","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/calls","href":"/api-reference/campaign-outcomes/list-a-campaigns-calls"},{"title":"List a campaign's callback requests","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/callbacks","href":"/api-reference/campaign-outcomes/list-a-campaigns-callback-requests"},{"title":"Update a callback's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/callbacks/{callbackId}","href":"/api-reference/campaign-outcomes/update-a-callbacks-status"},{"title":"Add a note to a callback","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/callbacks/{callbackId}/notes","href":"/api-reference/campaign-outcomes/add-a-note-to-a-callback"},{"title":"List a campaign's conversion records","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/conversions","href":"/api-reference/campaign-outcomes/list-a-campaigns-conversion-records"}]},{"group":"Contacts","pages":[{"title":"Upload a contact file","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads","href":"/api-reference/contacts/upload-a-contact-file"},{"title":"Re-preview an upload with a mapping","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads/{uploadId}/preview","href":"/api-reference/contacts/re-preview-an-upload-with-a-mapping"},{"title":"Dry-run a contact import","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/preview","href":"/api-reference/contacts/dry-run-a-contact-import"},{"title":"Create a contact list","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists","href":"/api-reference/contacts/create-a-contact-list"},{"title":"List contact lists","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists","href":"/api-reference/contacts/list-contact-lists"},{"title":"Get a contact list's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}","href":"/api-reference/contacts/get-a-contact-lists-metadata"},{"title":"Page through a list's contacts","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}/contacts","href":"/api-reference/contacts/page-through-a-lists-contacts"},{"group":"Google Sheet sources","pages":[{"title":"Register a Google Sheet as a source","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources","href":"/api-reference/google-sheet-sources/register-a-google-sheet-as-a-source"},{"title":"List registered contact sources","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources","href":"/api-reference/google-sheet-sources/list-registered-contact-sources"},{"title":"Get a contact source's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources/{sourceId}","href":"/api-reference/google-sheet-sources/get-a-contact-sources-metadata"},{"title":"Re-check a registered sheet","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/{sourceId}/preview","href":"/api-reference/google-sheet-sources/re-check-a-registered-sheet"}]}]},{"group":"Integrations \u0026 delivery health","pages":[{"title":"Webhooks on the portal","href":"/voice-agents/api-reference/webhooks-on-the-portal"}]}]}]},{"tab":"Integration API","hidden":true,"pages":[{"title":"Integration API","href":"/voice-agents/api-reference/integration-api"}]},{"tab":"Realtime Assistants","hidden":true,"pages":[{"title":"Realtime Assistants","href":"/assistants/introduction"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials/livekit-voice-agent"}]},{"tab":"Syngenta Assistant","hidden":true,"pages":[{"title":"Syngenta Assistant","href":"/syngenta/authentication"}]}]},"basePath":"","title":"Update a campaign - Uplift AI API Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}