---
title: "Fill a campaign with people"
method: POST
path: "/api/v1/campaigns/{id}/source"
---

# Fill a campaign with people

`POST /api/v1/campaigns/{id}/source`

## Request

- Base URL: `https://www.easeclaw.com`
- URL: `https://www.easeclaw.com/api/v1/campaigns/{id}/source`
- Auth: HTTP bearer

Mine a competitor's audience, resolve a pasted list of profile URLs, import CSV rows, or re-run the campaign's saved search. `kind` must match how the campaign collects its people. Spends the account's daily data budget and is capped at 10 runs/hour per account, shared with the dashboard. A run that already spent money answers 200 with a partial summary (`summary.stopped` says why it ended); 402 is reserved for a refusal that spent nothing. Nothing sourced here is contacted until it passes the owner's approval or their autopilot limits. Requires an outreach-scope API key (Pro plan or higher).

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `kind` 'competitor_harvest' | 'profile_urls' | 'csv' | 'basic_search', required
  - `source_url` string: competitor_harvest: a one-off page to mine instead of the campaign's stored source
  - `slugs` string[]: profile_urls: the LinkedIn profile URLs or slugs to resolve
  - `rows` object[]: csv: rows to import. `url` is the only required column
    - `url` string, required
    - `fullName` string
    - `company` string
    - `position` string

## Response `200`

What the run found, filtered and queued for review

- object
  - `summary` object: Counts for the run: how many people were found, how many the targeting filtered out, how many were added, what it cost, and `stopped` (null when it ran to completion; otherwise why it ended early, e.g. budget).
    - `added` integer
    - `gated_out` integer
    - `cost_usd` number
    - `stopped` string, nullable

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `403`: The key is not outreach-scoped (code outreach_scope_required). Campaign paths need a key minted with the outreach scope at https://www.easeclaw.com/leads/api. The scope cannot be widened on an existing key.
- `404`: Error
- `429`: Rate limited (300/hour per account; drafting also 30/hour + daily AI budget). Retry-After header set when known.
- `500`: Error
- `503`: Error

---

[API](https://skmtc.dev/easeclaw/apis/easeclaw-api.md) · [All operations](https://skmtc.dev/easeclaw/apis/easeclaw-api/llms.txt) · [OpenAPI document](https://skmtc.dev/easeclaw/apis/easeclaw-api/revisions/79a190b20f61?raw)
