---
title: "Create a step variant"
method: POST
path: "/v3/sequences/{id}/steps/{step_id}/variants"
tags: ["Sequence Steps"]
---

# Create a step variant

`POST /v3/sequences/{id}/steps/{step_id}/variants`

<small>_Requires the `sequences:write` scope (or a broader one that includes it)._</small>

Creates a new variant for a sequence step. Supports both text variants (`application/json`) and voice message variants (`multipart/form-data`).

For email-step text variants, the request may carry up to **3** `attachmentIds` (upload first via `POST /v3/attachments`). Inaccessible attachment IDs are rejected with `403 sequenceStep.forbidden`.

## Path parameters

- `id` integer, required
- `step_id` integer, required

## Request body

- object — Request body for creating or updating a text variant
  - `subject` string, nullable — Subject line of the variant
  - `message` string, required — Message content of the variant
  - `isEnabled` boolean — Whether the variant is enabled
  - `attachmentIds` integer[], nullable — IDs of previously uploaded attachments to attach to this variant. Upload files via `POST /v3/attachments` first to obtain attachment IDs. A variant may carry up to 3 attachments. Omit or pass `null` to leave attachments unchanged on update; pass an empty array to clear existing attachments.

## Response `201`

Variant created successfully

- object — A text variant for a sequence step
  - `id` integer — Unique identifier for the variant
  - `subject` string, nullable — Subject line of the variant
  - `message` string, nullable — Message content of the variant
  - `isEnabled` boolean — Whether the variant is enabled
  - `hasAttachments` boolean — Whether the variant has any attachments. To retrieve or modify attachments, use `GET /v3/attachments` and the `attachmentIds` field on create/update.

## Other responses

- `400` — Route/body validation failure, or a business-rule rejection (including more than 3 attachments).
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — User lacks the required feature scope to modify this sequence, or one or more of the supplied `attachmentIds` are not accessible to the caller.
- `404` — Step not found
- `409` — Step is locked and cannot accept new variants
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
