Campaigns

Create, stop, and monitor distribution campaigns.

List Campaigns

GET /v1/campaigns
GET /v1/campaigns?brandId=brand_abc123&status=all
X-API-Key: dist_YOUR_KEY

Get Campaign

GET /v1/campaigns/:campaignId
X-API-Key: dist_YOUR_KEY

Create Campaign

POST /v1/campaigns
Content-Type: application/json
X-API-Key: dist_YOUR_KEY

{
  "name": "Q2 Sales Outreach",
  "workflowSlug": "sales-email-cold-outreach-apex-v4",
  "brandUrls": ["https://acme.com"],
  "featureInputs": {
    "target_audience": "CTOs at SaaS startups, 10-200 employees",
    "target_outcome": "Book sales demos",
    "value_for_target": "Enterprise analytics at startup pricing"
  },
  "maxBudgetDailyUsd": "10"
}

The campaign starts running immediately after creation.

Required Fields

FieldTypeDescription
namestringCampaign name
workflowSlugstringWorkflow to execute
brandUrlsstring[]Brand URLs (one or more)

Optional Fields

FieldTypeDescription
featureInputsobjectKey-value inputs for the feature
maxBudgetDailyUsdstringDaily budget cap in USD
maxBudgetWeeklyUsdstringWeekly budget cap
maxBudgetMonthlyUsdstringMonthly budget cap
maxBudgetTotalUsdstringTotal lifetime budget cap

Stop Campaign

POST /v1/campaigns/:campaignId/stop
X-API-Key: dist_YOUR_KEY

Campaign Stats

GET /v1/campaigns/:campaignId/stats
X-API-Key: dist_YOUR_KEY
{
  "campaignId": "camp_abc123",
  "totalCostInUsdCents": "423",
  "leadsServed": 150,
  "emailsSent": 247,
  "emailsDelivered": 231,
  "emailsOpened": 54,
  "emailsReplied": 12,
  "repliesInterested": 5,
  "repliesMeetingBooked": 3,
  "costBreakdown": [
    { "costName": "llm-email-generation", "totalCostInUsdCents": "200" },
    { "costName": "apollo-enrichment", "totalCostInUsdCents": "150" }
  ]
}

Batch Campaign Stats

GET /v1/campaigns/stats
GET /v1/campaigns/stats?brandId=brand_abc123
X-API-Key: dist_YOUR_KEY

Returns stats for all campaigns (or filtered by brand) in a single call.

TypeScript Client

const { campaigns } = await client.listCampaigns({ brandId: "brand_abc" });
const { campaign } = await client.createCampaign({
  name: "Q2 Outreach",
  workflowSlug: "sales-email-cold-outreach-apex-v4",
  brandUrls: ["https://acme.com"],
  maxBudgetDailyUsd: "10",
});
const stats = await client.getCampaignStats("camp_abc123");
await client.stopCampaign("camp_abc123");