Update a campaign
/v1/campaigns/{campaign_id}Change a campaign's name or description, activate or pause it with is_active, or turn the AI Appointment Setter on or off with responder_enabled. Fields you don't send are left unchanged.
Activating a campaign runs the readiness preflight first: the sequence and its step content, its variables and lead data, the assigned sender accounts, sender email authentication and the subscription. A blocking check answers 409 CAMPAIGN_NOT_READY, with every check listed in details.checks. Warnings alone answer 409 CAMPAIGN_ACTIVATION_WARNINGS until you repeat the request with ack_warnings: true. Pausing never runs the preflight. To see the verdict without activating, call Get the activation preflight.
Headers
AuthorizationstringRequiredBearerfollowed by a space and your API key, for exampleBearer vk_….
Path parameters
campaign_idstring · uuidRequiredID of the campaign.
Request body
ack_warningsboolean or nullWith is_active=true: accept the non-blocking warnings the preflight reported (a CAMPAIGN_ACTIVATION_WARNINGS response lists them under details.checks) and activate anyway.
Defaultfalsedescriptionstring or nullNew description
at most 2,000 charactersis_activeboolean or nullActivate (true) or pause (false) the campaign. Activation runs the readiness preflight: a blocking check answers 409 CAMPAIGN_NOT_READY, warnings alone answer 409 CAMPAIGN_ACTIVATION_WARNINGS until acknowledged with ack_warnings.
lead_database_filtersobject or nullReplace the campaign's saved lead-database ICP filters
namestring or nullNew campaign name
at most 2,000 charactersrefill_policyobject or nullReplace the auto-refill policy (send {enabled:false} to disable; null is ignored)
responder_enabledboolean or nullToggle the AI auto-responder
Response
200
campaignobject or nullThe updated campaign
Show 14 child attributesHide child attributes
idstringRequiredCampaign UUID
Example"550e8400-e29b-41d4-a716-446655440000"namestringRequiredCampaign name
Example"Q1 Enterprise Outreach"is_activebooleanRequiredWhether the campaign is currently active
Exampletruecreated_atstring · date-timeRequiredWhen the campaign was created
Example"2024-01-15T10:30:00+00:00"updated_atstring · date-timeRequiredWhen the campaign was last updated
Example"2024-01-20T14:45:00+00:00"ab_testing_enabledboolean or nullWhether A/B testing is enabled for message variations
Exampletruecustom_fieldsany or nullCustom fields — object on newer campaigns, list on legacy ones
descriptionstring or nullCampaign description
Example"Targeting enterprise accounts in the tech sector"enabled_accountsarray of strings or nullList of connected account IDs used for outreach
lead_database_filtersobject or nullLead-database search filters defining this campaign's ICP (same shape the lead database search accepts)
refill_policyobject or nullAutomatic lead-refill settings for the campaign:
enabled,min_backlog,target_backlog,max_add_per_run,max_tokens_per_run,cooldown_hoursandmode.responder_enabledboolean or nullWhether AI auto-responder is enabled
Exampletruesequenceany or nullCampaign sequence: an object with variation_a and variation_b message templates, or an empty list on a campaign with no sequence yet
traffic_splitinteger or nullTraffic split percentage for A/B testing (0-100)
Example50
messagestringDefault"Campaign updated"successbooleanDefaulttrue
Errors
Errors share one JSON body: success, error, message, optional details, and request_id.
| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_ERROR | The request didn't match the endpoint's schema: a missing or malformed field, a bad query parameter, or a value out of range. |
| 401 | UNAUTHORIZED | The |
| 401 | API_KEY_EXPIRED | The API key is past its expiry date. Create a new key in the Victoria AI app. |
| 403 | INSUFFICIENT_SCOPE | The API key doesn't have the scope this endpoint requires, such as |
| 403 | ORGANIZATION_DEACTIVATED | The organization that owns this API key has been deactivated. |
| 404 | CAMPAIGN_NOT_FOUND | No campaign with this ID exists in your organization. |
| 404 | NOT_FOUND | No endpoint matches the path. A resource ID in the path that isn't a valid UUID also answers |
| 409 | CAMPAIGN_NOT_READY | The campaign can't be activated: at least one readiness check is blocking, such as a step missing content, a variable with no personalization field, an unassigned or unauthenticated sender, or no enrolled leads. |
| 409 | CAMPAIGN_ACTIVATION_WARNINGS | The campaign's readiness checks passed with warnings only. |
| 413 | PAYLOAD_TOO_LARGE | The request body is larger than 1 MB. |
| 429 | RATE_LIMITED | Too many requests for this API key: more than 100 a minute to one endpoint, or 600 a minute in total. Retry after the number of seconds in the |
| 500 | INTERNAL_ERROR | Something failed on our side. The response never includes internal details; quote its |
| 503 | UPSTREAM_TIMEOUT | A service the API depends on timed out. The request is safe to retry. |
| 503 | AUTH_UNAVAILABLE | The API key couldn't be checked because the authentication service was unavailable. The request is safe to retry. |
Response headers
| Header | Description |
|---|---|
X-Request-ID | Correlation ID for the request, also returned as |
RateLimit-Limit | Requests allowed to this endpoint per minute. |
RateLimit-Remaining | Requests you can still send to this endpoint right now. |
RateLimit-Reset | Seconds until the endpoint's full limit is available again. |
Retry-After | On a |