curl --request GET \
--url https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"leads": [
{
"id": "6a8da79aafc401ca94530c9d",
"contactId": "6777d930c5c5e1865dc3f562",
"name": "Imogen Low",
"email": "imogen@brightpay.com",
"linkedinUrl": "linkedin.com/in/imogen-low",
"companyName": "BrightPay",
"companyUrl": "brightpay.com",
"status": "stopped",
"outcome": null,
"sentSteps": 1,
"totalSteps": 2,
"openCount": 2,
"clickCount": 0,
"hasOpened": true,
"hasClicked": false,
"hasReplied": true,
"hasConnected": false,
"firstMessageReceivedAt": "2026-08-25T15:04:11.000Z",
"firstSentBy": {
"name": "Sam Rivera",
"email": "sam@yourcompany.com",
"channel": "email"
}
}
],
"pagination": {
"page": 1,
"pageSize": 25,
"total": 9,
"totalPages": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}The campaign's leads with their per-step state
Lists the contacts enrolled in the campaign with their progress through the sequence. id is the campaign-membership row and contactId is the underlying contact, so you can cross-reference the contacts API. status is the state the app shows for the lead (it reads stopped or completed once the campaign itself stops), sentSteps/totalSteps show progress, and firstSentBy names the account and channel that first reached the lead. Only the token owner’s own campaigns resolve: a campaign delegated to you, one shared by your team’s visibility settings, and a deleted one all answer 404. Rate limit: 30 requests/minute and 1,000/day per token owner, shared by every campaign, scheduled-send, campaign-template and knowledge-hub endpoint.
Errors:
404CAMPAIGN_NOT_FOUND— No campaign with this id exists, it belongs to another account (including a campaign delegated to you or shared by your team’s visibility settings), or it has been deleted.422VALIDATION_FAILED— A query parameter is out of range, or campaignId is not a 24-character hex id.429RATE_LIMITED— More than 30 campaign requests in a minute, or 1,000 in a day, for this token owner (the bucket is shared by every /business/campaigns, /business/scheduled-sends, /business/campaign-templates and /business/knowledge-hubs call).500UNEXPECTED_ERROR— An unhandled failure; the detail stays in our logs and is never returned.
Requires one of the following token scopes: campaigns.
curl --request GET \
--url https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/leads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"leads": [
{
"id": "6a8da79aafc401ca94530c9d",
"contactId": "6777d930c5c5e1865dc3f562",
"name": "Imogen Low",
"email": "imogen@brightpay.com",
"linkedinUrl": "linkedin.com/in/imogen-low",
"companyName": "BrightPay",
"companyUrl": "brightpay.com",
"status": "stopped",
"outcome": null,
"sentSteps": 1,
"totalSteps": 2,
"openCount": 2,
"clickCount": 0,
"hasOpened": true,
"hasClicked": false,
"hasReplied": true,
"hasConnected": false,
"firstMessageReceivedAt": "2026-08-25T15:04:11.000Z",
"firstSentBy": {
"name": "Sam Rivera",
"email": "sam@yourcompany.com",
"channel": "email"
}
}
],
"pagination": {
"page": 1,
"pageSize": 25,
"total": 9,
"totalPages": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Authorizations
Your API token (af_…) as the Basic-auth username, with an empty password.
Path Parameters
The campaign's id (24-character hex ObjectId), as returned by POST /business/campaigns or as the campaignId of a GET /business/campaigns row.
Query Parameters
Page size, 1-100 (default 25).
1 <= x <= 1001-based page number (default 1).
x >= 1Free text matched case-insensitively against the lead's full name or their company name (1-200 characters); any string is accepted, and regex metacharacters are escaped for you, so it behaves as a literal substring match. A term that matches no lead returns an empty page, not an error.
1 - 200