> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Campaign Variations

> List the alternative versions of a campaign email

Variations are alternative versions of a campaign's email that you compare side by side on the editor's Canvas tab. The campaign keeps sending its email until you [use a variation](/api-reference/campaigns/variations-use).

This lists the campaign's variations, oldest first. Discarded variations are not listed. While a variation is generating, poll this endpoint (or [Get Variation](/api-reference/campaigns/variations-get)) until its `status` is `ready` or `failed`.

## Request

<ParamField path="campaignId" type="string" required>
  Campaign ID. Email campaigns only.
</ParamField>

```bash theme={null}
curl "https://api.sequenzy.com/api/v1/campaigns/camp_abc123/variations" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Response

<ResponseField name="variations" type="array">
  The variations, oldest first.
</ResponseField>

## The variation object

<ResponseField name="id" type="string">
  Variation ID.
</ResponseField>

<ResponseField name="label" type="string">
  Canvas label: `V1`, `V2`, ... for versions of the email, `V2.1`, `V2.2`, ...
  for branches of `V2`. Labels are never reused, even after a discard.
</ResponseField>

<ResponseField name="name" type="string">
  Short name, such as the direction it was generated in.
</ResponseField>

<ResponseField name="summary" type="string | null">
  What changed, in a sentence.
</ResponseField>

<ResponseField name="prompt" type="string | null">
  The request that generated it. `null` for variations you saved yourself.
</ResponseField>

<ResponseField name="status" type="string">
  `generating`, `ready` or `failed`. A variation still generating after 10
  minutes is reported as `failed`.
</ResponseField>

<ResponseField name="error" type="string | null">
  Why generation failed.
</ResponseField>

<ResponseField name="parentId" type="string | null">
  The nearest variation it descends from that has not been discarded. `null`
  when it was derived from the email.
</ResponseField>

<ResponseField name="subject" type="string | null">
  The subject this variation uses. `null` keeps the email's subject.
</ResponseField>

<ResponseField name="previewText" type="string | null">
  The preview text this variation uses. `null` keeps the email's.
</ResponseField>

<ResponseField name="style" type="string | null">
  How far it was asked to move from its source (`close`, `fresh` or `bold`)
  when AI generated it.
</ResponseField>

<ResponseField name="blocks" type="array | null">
  The variation's [email blocks](/api-reference/campaigns/update). `null` while
  generating or after a failure.
</ResponseField>

<ResponseField name="emailTheme" type="object | null">
  The variation's own email theme. `null` means it uses the email's theme.
</ResponseField>

<ResponseField name="fontFamily" type="string | null">
  The variation's own body font stack. `null` means it uses the email's font.
</ResponseField>

<ResponseField name="position" type="object | null">
  Where the user placed it on the editor canvas, as `{ "x", "y" }` in canvas
  pixels. `null` means the canvas places it automatically.
</ResponseField>

<ResponseField name="inUse" type="boolean">
  Whether using this variation would leave the campaign email unchanged: the
  same blocks, and its own subject, preview text, theme and font when it has
  them. When several variations match, only the one used most recently is in
  use.
</ResponseField>

<ResponseField name="usedAt" type="string | null">
  When this variation was last put in the campaign email, as an ISO 8601
  timestamp.
</ResponseField>

<ResponseField name="createdAt" type="string">
  ISO 8601 timestamp.
</ResponseField>

<ResponseField name="updatedAt" type="string">
  ISO 8601 timestamp.
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "variations": [
      {
        "id": "var_9xk2",
        "emailId": "email_abc123",
        "parentId": null,
        "label": "V2",
        "name": "Warm and personal",
        "summary": "Rewrote the opening in a friendlier voice and shortened the body.",
        "prompt": "Three warmer, shorter versions",
        "style": "fresh",
        "status": "ready",
        "error": null,
        "subject": "A quick note about our pricing",
        "previewText": null,
        "blocks": [
          { "id": "h1", "type": "heading", "content": "A quick note about pricing", "level": 1 }
        ],
        "emailTheme": null,
        "fontFamily": null,
        "position": null,
        "inUse": false,
        "usedAt": null,
        "createdAt": "2026-10-14T09:12:00.000Z",
        "updatedAt": "2026-10-14T09:12:41.000Z"
      }
    ]
  }
  ```

  ```json 400 theme={null}
  {
    "error": "This is an SMS campaign. SMS campaigns are managed from the dashboard; this endpoint only supports email campaigns."
  }
  ```

  ```json 401 theme={null}
  {
    "error": "Invalid API key"
  }
  ```

  ```json 404 theme={null}
  {
    "error": "Campaign not found"
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.