Skip to main content
Before your first email reaches a prospect’s inbox, you need a campaign — a named container that holds your sequence steps, sending rules, and enrolled leads. This guide walks you through checking your sending capacity, drafting a multi-step sequence, and launching the campaign when you’re ready.
1

Check your sender pool capacity

Before creating a campaign, verify that your sender pool has enough remaining volume to handle your planned send. Call GET /v1/sender-pools to inspect available capacity across all pools assigned to your workspace.
curl https://app.leadterra.co/v1/sender-pools \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
{
  "pools": [
    {
      "id": "pool_01HZ9KQMX7T3VB2N",
      "name": "Primary Outbound",
      "senderCount": 8,
      "dailyCapacity": 1600,
      "remainingVolume": 1243
    },
    {
      "id": "pool_01HZ9KQMX8W4VC3P",
      "name": "Warm-Up Pool",
      "senderCount": 3,
      "dailyCapacity": 300,
      "remainingVolume": 300
    }
  ]
}
dailyCapacity is the maximum number of messages your pool can send in a rolling 24-hour window. remainingVolume tells you how many sends are still available today. If remainingVolume is low, wait until it resets or add more sender accounts via GET /v1/sender-accounts.
2

Create the campaign

Post a new campaign to POST /v1/campaigns with a descriptive name and a sequenceSteps array. Each step in the sequence is a separate email that goes out after a configurable delay. The example below creates a two-step sequence.
curl -X POST https://app.leadterra.co/v1/campaigns \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "VP Sales - AI Workflow Q3",
    "sequenceSteps": [
      {
        "subject": "Quick question, {{firstName}}",
        "bodyHtml": "<p>Hi {{firstName}},</p><p>Saw that {{company}} is scaling outbound — wanted to share how teams like yours are cutting research time in half with AI-assisted prospecting. Worth a 15-minute chat?</p><p>Best,<br>Jamie</p>",
        "delayDays": 0
      },
      {
        "subject": "Re: Quick question, {{firstName}}",
        "bodyHtml": "<p>Hi {{firstName}},</p><p>Just bumping this up in case it got buried. Happy to send over a quick demo video if that's easier than a call.</p><p>Best,<br>Jamie</p>",
        "delayDays": 3
      }
    ]
  }'
A successful request returns the new campaign object in draft status:
{
  "campaign": {
    "id": "camp_01HZA1TPNQ8RD4KF",
    "name": "VP Sales - AI Workflow Q3",
    "status": "draft",
    "stepCount": 2,
    "createdAt": "2025-06-10T14:22:07Z"
  }
}
Save the id — you’ll need it in every subsequent call for this campaign.
3

Review the draft

A campaign in draft status is completely inert — no emails are queued and no leads are contacted. This state gives you time to review your copy, adjust sequence timing, and enroll leads before anything goes out. You can update the campaign’s steps or metadata at any point while it remains a draft.Use GET /v1/campaigns/:id/stats at any time to confirm the campaign is still in draft and see a zero-send baseline you can compare against once you start.
4

Start the campaign

Once you’ve enrolled your leads and reviewed the sequence, call POST /v1/campaigns/:id/start to begin queueing messages. Replace :id with the campaign ID returned in Step 2.
curl -X POST https://app.leadterra.co/v1/campaigns/camp_01HZA1TPNQ8RD4KF/start \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
{
  "campaign": {
    "id": "camp_01HZA1TPNQ8RD4KF",
    "status": "running",
    "startedAt": "2025-06-10T14:35:00Z",
    "leadsEnrolled": 142,
    "queuedMessages": 142
  }
}
When status is running, Leadterra starts distributing messages across your sender pool according to each step’s delayDays setting. You can pause at any time with POST /v1/campaigns/:id/pause.
Enroll your leads before calling /start. A campaign started with zero leads will move to running but queue no messages until leads are added. See Enroll Leads for the bulk upsert workflow.