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=25" \
-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=25"
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=25", {
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=25", 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=25')
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}/leadsTarget server for requests. Edit to use your own host.
Platform 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
666a1b2c3d4e5f6a7b8c9d01Items 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