Run a campaign lifecycle action
Runs one lifecycle action on a campaign. publish launches it — if autoSend is on this starts sending real emails or texts immediately, and it's gated per channel: a campaign that includes EMAIL needs a verified sending domain for the client, and one that includes SMS needs a carrier-verified number for the location. Either gate failing returns an explanatory 422; provisioning a domain or phone number is a UI-only step, not something this API can do on your behalf. stop halts an active campaign. clone duplicates it as a new draft. autoSend turns automatic sending on or off for new recipients — pass on. archive archives a stopped campaign; on a still-active one this is a no-op, not an error — the response is {id, skipped: true} instead of the full campaign, so check for skipped rather than assuming data is always a Campaign. unarchive restores an archived campaign.
/api/v1/review-invites/campaigns/{id}/action{
"data": {
"id": "cm_campaign_1",
"agencyId": "cm_agency_1",
"locationId": "cm_loc_1",
"clientLocationId": "cm_loc_1",
"name": "Spring Checkup Follow-up (copy)",
"campaignType": "email_sms",
"channels": "EMAIL",
"status": "draft",
"fromEmail": null,
"replyToEmail": null,
"emailSubject": "How was your visit?",
"emailBody": null,
"smsBody": null,
"smsReviewSite": null,
"reviewSites": null,
"screeningEnabled": false,
"landingTitle": null,
"landingContent": null,
"hideAddress": false,
"hideBusinessName": false,
"followups": null,
"stopFollowupOnClick": false,
"scheduleAt": null,
"timezone": null,
"autoSend": false,
"staticUrl": null,
"launchedAt": null,
"emailHtml": null,
"thankYouEnabled": false,
"thankYouSubject": null,
"thankYouBody": null,
"thankYouDelayHours": 12,
"funnelThreshold": 4,
"funnelStyle": null,
"lowRankContent": null,
"hideFeedbackBox": false,
"ratingMechanism": null,
"askName": true,
"askFeedback": true,
"archivedAt": null,
"hideImage": false,
"clientId": "cm_client_1",
"createdAt": "2026-01-21T10:05:00.000Z",
"updatedAt": "2026-01-21T10:05:00.000Z",
"createdByUserId": null,
"createdByType": "user",
"archived": false
}
}