POST/campaigns/:campaignId/start
Start outreach for a ready campaign, or resume a paused one. Same behavior as the dashboard Start / Resume controls.
0 credits. Kicks off real LinkedIn outbound — confirm before calling. The campaign must already have an agent assigned (assignedTemplateId). Create agents and connect LinkedIn in the dashboard.
| Current status | Behavior |
|---|---|
READY_TO_SEND | Start → CAMPAIGN_IN_PROGRESS (action: started) |
FAILED with leads | Start → CAMPAIGN_IN_PROGRESS (action: started) |
CAMPAIGN_PAUSED | Resume → CAMPAIGN_IN_PROGRESS (action: resumed) |
CAMPAIGN_IN_PROGRESS | No-op success (action: noop) |
COMPLETED / DONE | 409 conflict (API does not restart completed campaigns) |
FAILED with no leads | 409 conflict — add leads first |
| Other (e.g. still preparing) | 409 conflict |
Typical flow
- Dashboard: create campaign, assign an agent, connect LinkedIn
- API: add leads (POST …/leads) if needed
POST …/start→ outreach runs- POST …/pause /
POST …/startagain to pause / resume
POST /campaigns/search_abc/start
X-API-Key: sk_live_...
Content-Type: application/json
{}
Body must be empty or {}. Any other fields → 400 validation_error.
{
"campaignId": "search_abc",
"action": "started",
"status": "CAMPAIGN_IN_PROGRESS",
"campaign": {
"id": "search_abc",
"name": "Q3 outbound",
"status": "CAMPAIGN_IN_PROGRESS",
"totalLeads": 120,
"assignedTemplateId": "tpl_...",
"stats": {
"connectionRequestsSent": 80,
"connectionRequestsAccepted": 20,
"acceptanceRate": 25.0,
"messagesSent": 40,
"repliesReceived": 8,
"replyRate": 20.0
}
}
}
| Field | Values |
|---|---|
campaignId | Same as path |
action | started | resumed | noop |
status | Post-call status (usually CAMPAIGN_IN_PROGRESS) |
campaign | Same shape as GET /campaigns/:id |
| Error code | When |
|---|---|
validation_error | Body has extra fields, or no agent assigned |
not_found | Unknown campaign / template |
account_disconnected | Agent's LinkedIn account not connected |
plan_required | Plan inactive (usually blocked at auth) |
conflict | Wrong status / no leads on FAILED / completed |
rate_limited | Over the start/pause limit (30 / minute) |
upstream_unavailable | Temporary failure while resuming — retry |
MCP: start_campaign (campaignId only) — confirm with the user before calling.