GET/campaigns/:campaignId/leads
Credits: 0
LinkedIn risk: None
Rate limit: Global only
Purpose
Paginated list of leads in a campaign. Allowlisted CRM fields only.
Request
GET /campaigns/search_abc/leads?tag=Interested&sort=taggedAt&limit=50
X-API-Key: sk_live_...
| Query | Notes |
|---|---|
tag | Optional exact tag filter (see PATCH …/leads/:leadId) |
replied | Optional boolean |
needsReply | Optional — leads waiting on a reply |
sort | Optional; always desc. Default createdAt. See matrix below |
limit | Optional; default 50, max 100 |
cursor | From previous nextCursor. Invalid, missing sort field, or filter mismatch → 400 |
Filter rule: use at most one of tag, replied, needsReply per request.
sort matrix
sort | Allowed with |
|---|---|
createdAt (default) | any / none |
taggedAt | requires tag=… |
repliedAt | requires replied=true or replied=false |
lastInboundMessageAt | none, or replied=… (not with tag) |
needsReply only supports sort=createdAt. Invalid combo → 400.
Leads missing the chosen sort timestamp are omitted from that sort (they are not sorted last). Prefer GET /activity?type=reply_received for “last reply.”
Changing sort or filters mid-pagination requires a fresh cursor.
Response 200
{
"leads": [
{
"id": "lead_xyz",
"fullName": "Jane Doe",
"firstName": "Jane",
"lastName": "Doe",
"linkedinUrl": "https://www.linkedin.com/in/jane-doe/",
"jobTitle": "VP Sales",
"location": "London, UK",
"companyName": "Acme",
"companyLinkedin": "https://www.linkedin.com/company/acme/",
"website": "https://acme.com",
"email": "jane@acme.com",
"tag": "Interested",
"replied": true,
"needsReply": true,
"stage": "tagged",
"repliedAt": "2026-03-01T12:00:00.000Z",
"lastInboundMessageAt": "2026-03-02T15:30:00.000Z",
"taggedAt": "2026-03-02T15:31:00.000Z"
}
],
"nextCursor": null
}
Timestamps (ISO or null)
| Field | Notes |
|---|---|
repliedAt | When the lead was marked replied (can move on later writes) |
lastInboundMessageAt | Best lead-level signal for recent inbound content |
taggedAt | When the current tag was set |
stage
new · connection_sent · connected · messaged · replied · tagged · excluded · failed · handed_off
Allowlisted fields only — never drafts, message logs, or provider ids. See get lead for the richer single-lead shape.
Errors
error.code | When |
|---|---|
unauthorized | Missing/invalid API key |
not_found | Unknown campaign |
validation_error | Bad filter combo, sort, or cursor |
rate_limited | Global RPM exceeded |
MCP
Tool: list_leads (same filter + sort rules).
See also
- Get lead
- GET /activity (
type=reply_received) - GET /insights/overview