Campaigns API
Parent API: Tenant API URL Prefix: /api/v1/tenant/campaigns
Endpoints
List Campaigns
Method: GET URL: /api/v1/tenant/campaigns Purpose: Retrieve a paginated list of campaigns for a specific workspace.
Query Parameters:
-
workspace(string, required): Workspace slug -
status(string, optional): Filter by status (draft, active, paused, completed) -
limit(integer, optional): Default 20 -
offset(integer, optional): Default 0
Response:
{
"success": true,
"data": [
{
"id": "cmp_123",
"name": "Q4 Outreach",
"status": "active",
"stats": {
"sent": 150,
"opened": 45,
"replied": 12
},
"created_at": "2025-11-01T10:00:00Z"
}
],
"pagination": {
"total": 1,
"limit": 20,
"offset": 0,
"has_more": false
}
}
Create Campaign
Method: POST URL: /api/v1/tenant/campaigns Purpose: Create a new campaign draft.
Request:
{
"workspace_slug": "acme-corp",
"name": "New Campaign",
"goal": "lead_gen" // awareness, lead_gen, sales
}
Response:
{
"success": true,
"data": {
"id": "cmp_456",
"name": "New Campaign",
"status": "draft"
}
}
Get Campaign Details
Method: GET URL: /api/v1/tenant/campaigns/{id} Purpose: Get full details of a campaign, including sequence and settings.
Response:
{
"success": true,
"data": {
"id": "cmp_123",
"name": "Q4 Outreach",
"status": "active",
"sequence": [
{
"step": 1,
"type": "email",
"subject": "Hello ",
"body": "..."
}
],
"settings": {
"daily_limit": 50,
"track_opens": true
}
}
}
Update Campaign
Method: PATCH URL: /api/v1/tenant/campaigns/{id} Purpose: Update campaign details. Only allowed if campaign is not ‘completed’.
Request:
{
"name": "Updated Name",
"settings": {
"daily_limit": 100
}
}
Launch Campaign
Method: POST URL: /api/v1/tenant/campaigns/{id}/send Purpose: Trigger the campaign to start or resume sending.
Request:
{
"action": "start" // or "resume", "pause"
}