List leads in campaign
Returns a paginated list of leads within a campaign. Each lead includes its campaign-specific status, sequence progress, email history, and populated lead details (email, name, company).
curl -X GET "https://api.sendkit.ai/v1/campaigns/example_string/leads?status=pending&cursor=666a1b2c3d4e5f6a7b8c9d01&limit=42" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY"
import requests
import json
url = "https://api.sendkit.ai/v1/campaigns/example_string/leads?status=pending&cursor=666a1b2c3d4e5f6a7b8c9d01&limit=42"
headers = {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://api.sendkit.ai/v1/campaigns/example_string/leads?status=pending&cursor=666a1b2c3d4e5f6a7b8c9d01&limit=42", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.sendkit.ai/v1/campaigns/example_string/leads?status=pending&cursor=666a1b2c3d4e5f6a7b8c9d01&limit=42", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.sendkit.ai/v1/campaigns/example_string/leads?status=pending&cursor=666a1b2c3d4e5f6a7b8c9d01&limit=42')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['X-Api-Key'] = 'YOUR_API_KEY'
response = http.request(request)
puts response.body
{
"success": true,
"data": [
{
"_id": "666a1b2c3d4e5f6a7b8c9d01",
"leadId": {
"_id": "665d4e5f6a7b8c9d0e1f2a3b",
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp"
},
"status": "active",
"currentSequenceStep": 1,
"emailsSent": [
{
"sequenceStep": 0,
"variant": null,
"sentAt": "2025-06-16T10:30:00.000Z",
"opened": true,
"clicked": false,
"bounced": false
}
],
"replied": false,
"repliedAt": null,
"aiTag": null,
"addedAt": "2025-06-15T09:00:00.000Z"
},
{
"_id": "666a1b2c3d4e5f6a7b8c9d02",
"leadId": {
"_id": "665d4e5f6a7b8c9d0e1f2a3c",
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
},
"status": "replied",
"currentSequenceStep": 0,
"emailsSent": [
{
"sequenceStep": 0,
"variant": null,
"sentAt": "2025-06-16T11:00:00.000Z",
"opened": true,
"clicked": true,
"bounced": false
}
],
"replied": true,
"repliedAt": "2025-06-17T08:30:00.000Z",
"aiTag": "interested",
"addedAt": "2025-06-15T09:00:00.000Z"
}
],
"pagination": {
"limit": 25,
"total": 2,
"hasMore": false,
"nextCursor": "666a1b2c3d4e5f6a7b8c9d02"
}
}
/v1/campaigns/{campaignId}/leadsPlatform API key (sk_user_...) or Workspace API key (sk_...)
Campaign ID
Filter by campaign lead status
Cursor for pagination - use the nextCursor value from the previous response to fetch the next page
Items per page (default 25, max 100)
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)
Path Parameters
Campaign ID
Query Parameters
Filter by campaign lead status
pendingactivepausedcompletedbouncedunsubscribedrepliedremovedCursor for pagination - use the nextCursor value from the previous response to fetch the next page
Items per page (default 25, max 100)
Responses
Campaign lead record ID
Populated lead data
pendingactivepausedcompletedbouncedunsubscribedrepliedremovedZero-based index of the current sequence step
History of emails sent to this lead in the campaign
Last updated today
Built with Documentation.AI