---
title: "Duplicate campaign"
method: POST
path: "/campaigns/{campaignId}/duplicate"
tags: ["Campaigns"]
---

# Duplicate campaign

`POST /campaigns/{campaignId}/duplicate`

Creates a draft copy of a campaign. Optionally copies the campaign's A/B test or duplicates a single variant as a plain campaign.

## Path parameters

- `campaignId` string, required

## Request body

- object
  - `mode` 'campaign' | 'ab_test' | 'variant' — campaign copies the campaign email, ab_test also copies the linked A/B test and variants, variant copies one variant's content as a plain campaign.
  - `variantId` string — Variant ID to copy. Required when mode is variant.

## Response `200`

Campaign duplicated

- object
  - `success` boolean
  - `campaign` object
    - `id` string
    - `name` string
    - `subject` string
    - `status` string
    - `trackingCode` string, nullable — Campaign tracking code available to UTM templates as `{{campaign.trackingCode}}`.
    - `labels` string[] — Label names assigned to this campaign.
    - `scheduledAt` string, date-time, nullable
    - `sentAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `preheader` string
    - `blocks` EmailBlock[]
      - `id` string
      - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'card' | 'cta' | 'social' | 'logo' | 'footer' | 'video' | 'product', required
      - `content` string — Content for text, html, and heading-like blocks.
      - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
        - `paddingTop` number
        - `paddingBottom` number
        - `paddingLeft` number
        - `paddingRight` number
        - `backgroundColor` string
        - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
        - `textColor` string
        - `textAlign` 'left' | 'center' | 'right'
        - `borderRadius` number
        - `borderColor` string
        - `borderWidth` number
    - `campaignData` object, nullable
    - `computedLists` object[]
    - `replyProfileId` string, nullable
    - `replyToName` string, nullable
    - `replyToEmail` string, email, nullable
    - `emailId` string — ID of the duplicated email.

## Other responses

- `400` — Missing or invalid variantId for variant mode
- `401` — Unauthorized
- `404` — Campaign, campaign email, or A/B test not found
- `500` — Campaign could not be duplicated

## Changes

- **2026-06-11** `ad2d3114269a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/campaigns/:campaignId/duplicate/post.md)

---

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