---
title: "Edit a sequence step"
method: PATCH
path: "/business/campaigns/{campaignId}/steps/{stepId}"
tags: ["Campaigns"]
---

# Edit a sequence step

`PATCH /business/campaigns/{campaignId}/steps/{stepId}`

## Request

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

Writes one sequence step's content. Send `subject` and `body` together for a manual step (the pair replaces the step's whole template), `topic` for an `ai_generated` or `ai_reply` step - setting a topic also regenerates the step's title with AI - and `daysBetween` to change the wait before the step. At least one field must be present. A manual campaign cannot be approved until every step has a subject and body, which is what makes this endpoint the missing piece for a machine caller. Only the token owner may edit steps. 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.
- `404` `SEQUENCE_STEP_NOT_FOUND` — No step with this id belongs to this campaign.
- `422` `CONNECTION_NOTE_TOO_LONG` — The step is a linkedin_connection, whose body is the invitation note LinkedIn caps at 200 characters, and the body sent is longer.
- `422` `VALIDATION_FAILED` — Empty body, unknown key, subject without body (or the reverse), or a value 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.
- `stepId` string, required: The sequence step's id, as returned by GET /business/campaigns/{campaignId}/steps (24-character hex ObjectId).

## Request body

- object
  - `subject` string: New subject line for a manual step (up to 500 characters, may be empty); must be sent together with body because the pair replaces the step's whole template. Silently ignored on ai_generated / ai_reply steps.
  - `body` string: New message body for a manual step (up to 50000 characters, may be empty; HTML is allowed on email steps, {Variable} tokens and spintax substitute at send time); must be sent together with subject. On a linkedin_connection step this is the invitation note LinkedIn caps at 200 characters — a longer body answers 422 CONNECTION_NOTE_TOO_LONG. Silently ignored on ai_generated / ai_reply steps.
  - `topic` string: Free text: what this step should say, in your own words — there is no fixed set of topics. Up to 1000 characters. An AI step writes each message from it, and setting it also regenerates the step's title with AI. Stored but not rendered for manual steps.
  - `daysBetween` integer: Whole days to wait after the previous step (or after the campaign start for the first step) before this step is due, 0-365.

## Response `200`

Success

- object
  - `stepId` string, required: The step that was updated.

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