---
title: "Bulk create step variants"
method: POST
path: "/v3/sequences/{id}/steps/{step_id}/variants/bulk"
tags: ["Sequence Steps"]
---

# Bulk create step variants

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

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

Creates multiple text variants for a sequence step at once. For email steps, each variant may carry up to **3** `attachmentIds` (upload first via `POST /v3/attachments`); inaccessible attachment IDs surface as a per-item `forbidden` result.

## Path parameters

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

## Request body

- object[]
  - `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 `200`

Array of per-item results, one per input variant (same order as request).

Possible per-item error codes:

| Error code | Meaning |
|-------|---------|
| `invalidInput` | Validation failed (e.g. more than 3 attachments) |
| `invalidStep` | Step type does not support this variant |
| `forbidden` | One or more attachment IDs are not accessible to the caller |
| `internalError` | Unexpected server error |

- object[]
  - `id` integer, nullable — ID of the created resource, null if creation failed
  - `error` integer, nullable — Error code if creation failed
  - `errorDetails` string, nullable — Human-readable error description if creation failed

## Other responses

- `400` — Invalid id parameters, or a business-rule rejection.
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — Caller does not have permission to modify this sequence. Per-item attachment-accessibility failures surface as `forbidden` entries in the 200 result array, not as a top-level 403.
- `404` — Step not found
- `409` — Step is locked and blocks bulk variant creation
- `429` — Too Many Requests

---

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