---
title: "The campaign's send queue by status"
method: GET
path: "/business/campaigns/{campaignId}/scheduled-sends"
tags: ["Scheduled sends"]
---

# The campaign's send queue by status

`GET /business/campaigns/{campaignId}/scheduled-sends`

## Request

- Base URL: `https://api.tryfuse.ai/api/v1`
- URL: `https://api.tryfuse.ai/api/v1/business/campaigns/{campaignId}/scheduled-sends`
- Auth: HTTP basic

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/{sendId}) 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:
- `404` `CAMPAIGN_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.
- `422` `VALIDATION_FAILED` — `status` is missing or not one of the four buckets, `channel` is not one of the stored channels, or a paging value is out of range; `param` names the field.
- `429` `RATE_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).
- `500` `UNEXPECTED_ERROR` — An unhandled failure; the detail stays in our logs and is never returned.

Requires one of the following token scopes: campaigns.

## Path parameters

- `campaignId` string, required: 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

- `status` 'approval_required' | 'scheduled' | 'sent' | 'skipped' | 'stopped' | 'overwritten', required: 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}).
- `channel` 'email' | 'linkedin_connection' | 'linkedin_message' | 'linkedin_visit' | 'linkedin_like' | 'inmail' | 'dialer' | 'todo': 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.
- `limit` integer: Page size, 1-100 (default 25).
- `pageNum` integer: 1-based page number (default 1).

## Response `200`

Success

- object
  - `sends` object[], required
    - `id` string, nullable, required
    - `campaignId` string, nullable, required
    - `status` 'approval_required' | 'scheduled' | 'sent' | 'skipped' | 'stopped' | 'overwritten' | 'null', nullable, required
    - `channel` 'email' | 'linkedin_connection' | 'linkedin_message' | 'linkedin_visit' | 'linkedin_like' | 'inmail' | 'dialer' | 'todo' | 'null', nullable, required
    - `type` 'manual' | 'ai_generated' | 'ai_reply' | 'null', nullable, required: How the message was produced.
    - `subject` string, nullable, required: Null on channels that carry no subject.
    - `body` string, nullable, required: The exact message that will be sent, including the unsubscribe footer when the campaign appends one.
    - `scheduledAt` string, date-time, nullable, required: When the send is due, in UTC.
    - `sentAt` string, date-time, nullable, required: When it went out; null until then.
    - `outcome` string, nullable, required
    - `fromEmail` string, nullable, required: Sending mailbox for email/inmail rows.
    - `fromLinkedInAccount` string, nullable, required: Sending LinkedIn account for LinkedIn rows.
    - `cc` string[], required
    - `bcc` string[], required
    - `contact` object, required
      - `id` string, nullable, required
      - `name` string, nullable, required
      - `email` string, nullable, required
      - `linkedinUrl` string, nullable, required
  - `pagination` object, required
    - `page` integer, required: 1-based page number this response covers.
    - `pageSize` integer, required: Rows requested per page.
    - `total` integer, required: Total rows matching the query.
    - `totalPages` integer, required: Total pages at this page size.

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `403`: Error
- `404`: Error
- `409`: Error
- `422`: Error
- `429`: Error
- `500`: Error

---

[API](https://skmtc.dev/fuseai/apis/fuse-business-api.md) · [All operations](https://skmtc.dev/fuseai/apis/fuse-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fuseai/apis/fuse-business-api/revisions/50d95e0536f4?raw)
