curl --request GET \
--url https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/scheduled-sends \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/scheduled-sends"
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}/scheduled-sends', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"sends": [
{
"id": "6a8da7adafc401ca94530e14",
"campaignId": "6a8da7718707dbcfb4448b96",
"status": "scheduled",
"channel": "email",
"type": "manual",
"subject": "Quick question about BrightPay",
"body": "<p>Hi Imogen, saw BrightPay is scaling its finance team. Worth a 15-minute chat next week?</p>",
"scheduledAt": "2026-08-26T00:00:00.000Z",
"sentAt": null,
"outcome": null,
"fromEmail": "sam@yourcompany.com",
"fromLinkedInAccount": null,
"cc": [],
"bcc": [],
"contact": {
"id": "7cc23aea89efde515f9b865e",
"name": "Imogen Low",
"email": "imogen@brightpay.com",
"linkedinUrl": null
}
}
],
"pagination": {
"page": 1,
"pageSize": 25,
"total": 8,
"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 send queue by status
Lists one bucket of the campaign’s send queue. status=approval_required returns AI-drafted messages waiting for your decision through POST /business/scheduled-sends/approve or /decline; scheduled is the upcoming queue, each row due at scheduledAt (UTC); sent, skipped, stopped (declined - terminal for that contact) and overwritten (replaced by a newer row through PATCH /business/scheduled-sends/) are history. body is the exact message that will go out, including the unsubscribe footer when the campaign appends one. Add channel to narrow to one channel, named exactly as a step’s channel is. 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—statusis missing or not one of the four buckets,channelis not one of the stored channels, or a paging value is out of range;paramnames the field.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}/scheduled-sends \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/scheduled-sends"
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}/scheduled-sends', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"sends": [
{
"id": "6a8da7adafc401ca94530e14",
"campaignId": "6a8da7718707dbcfb4448b96",
"status": "scheduled",
"channel": "email",
"type": "manual",
"subject": "Quick question about BrightPay",
"body": "<p>Hi Imogen, saw BrightPay is scaling its finance team. Worth a 15-minute chat next week?</p>",
"scheduledAt": "2026-08-26T00:00:00.000Z",
"sentAt": null,
"outcome": null,
"fromEmail": "sam@yourcompany.com",
"fromLinkedInAccount": null,
"cc": [],
"bcc": [],
"contact": {
"id": "7cc23aea89efde515f9b865e",
"name": "Imogen Low",
"email": "imogen@brightpay.com",
"linkedinUrl": null
}
}
],
"pagination": {
"page": 1,
"pageSize": 25,
"total": 8,
"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
Queue bucket to list: approval_required (AI-drafted sends waiting for your approval), scheduled (queued, goes out at scheduledAt), sent (delivered by Fuse or marked done), skipped (passed over, the contact moved on), stopped (declined, terminal for that contact) or overwritten (replaced by a newer row through PATCH /business/scheduled-sends/{sendId}).
approval_required, scheduled, sent, skipped, stopped, overwritten Restrict rows to one channel, named exactly as the queue stores it (the same values a step's channel uses): email, linkedin_connection, linkedin_message, linkedin_visit, linkedin_like, inmail, dialer or todo. Omit to include every channel.
email, linkedin_connection, linkedin_message, linkedin_visit, linkedin_like, inmail, dialer, todo Page size, 1-100 (default 25).
1 <= x <= 1001-based page number (default 1).
x >= 1