---
title: "List a campaign's sequence steps"
method: GET
path: "/business/campaigns/{campaignId}/steps"
tags: ["Campaigns"]
---

# List a campaign's sequence steps

`GET /business/campaigns/{campaignId}/steps`

## Request

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

Lists the campaign's sequence steps in `sequenceNumber` order (0-based). A campaign created through this API starts with one empty step per requested channel, so this is how you discover the ids to write content into with PATCH /business/campaigns/{campaignId}/steps/{stepId}. `type` tells you what to write: `manual` needs `subject` and `body`, `ai_generated` and `ai_reply` write from `topic`. Only the token owner's own campaigns resolve here. 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` — campaignId is not a 24-character hex id.
- `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.

## Response `200`

Success

- object
  - `steps` object[], required
    - `id` string, 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 step's message is produced.
    - `sequenceNumber` integer, nullable, required: 0-based slot in the sequence.
    - `daysBetween` integer, nullable, required: Whole days to wait after the previous step.
    - `title` string, nullable, required: Editor label; set from the subject on a manual step and generated with the topic on an AI step.
    - `topic` string, nullable, required: Brief an AI step writes each message from; null on an unwritten manual step.
    - `subject` string, nullable, required: Manual subject line; null when the step has no template yet or is AI-written.
    - `body` string, nullable, required: Manual message body; null when the step has no template yet or is AI-written.
    - `cc` string[], required: Addresses copied on every send of this step (email only).

## 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)
