---
title: "Copy campaign"
method: POST
path: "/campaigns/{id}/copy"
tags: ["Campaigns"]
---

# Copy campaign

`POST /campaigns/{id}/copy`

## Request

- Base URL: `https://api.omnisend.com/api`
- URL: `https://api.omnisend.com/api/campaigns/{id}/copy`
- Auth: one of:
  - OAuth 2
    - Client credentials
    - Token URL: `https://app.omnisend.com/oauth2/token` scopes: `campaigns.write`
  - API key in header `Authorization`

Create a draft copy of an existing campaign, copying content, audience, and settings from the original.
The copy is a new draft campaign with its own ID; the original campaign is left unchanged.
The copied campaign name will be prefixed with "Copy of: ".

**Scopes:**
`campaigns.write`

**Rate Limiting:**
This endpoint is rate limited to 400 requests per minute.

## Path parameters

- `id` string, required

## Headers

- `Omnisend-Version` string, required

## Response `201`

Created draft copy of the campaign

- Campaign: Campaign resource. When `type` is `booster`, the `boosterSettings` field is populated, identifying the parent campaign and the conditions under which the booster targets recipients of that parent.
  - `abTest` ABTest: A/B test configuration. Variants are keyed by "a" and "b"; the parent campaign's `content` field is omitted because variants carry their own content. `result` is populated once a winner is selected and is `null` otherwise.
    - `result` ABTestResult: A/B test result (read-only).
      - `isManuallySelected` boolean: Whether the winner was manually selected (read-only)
      - `selectedAt` string: When the winner was selected (read-only)
      - `winnerVariantID` string: Campaign ID of the winning variant (read-only). Matches variants.a.id or variants.b.id.
    - `settings` ABTestSettings: A/B test settings.
      - `decisionTime` ABTestDecisionTime: Decision time before selecting a winner. Same shape as booster delay.
        - `amount` integer: Amount of time units to wait
        - `unit` 'h' | 'd': Time unit: "h" for hours, "d" for days
      - `testSizePercent` integer: Percentage of audience for the test phase (10-100)
      - `winningMetric` 'openRate' | 'clickRate': Winner determination metric
    - `variants` ABTestVariants: A/B test variants object with keys "a" and "b".
      - `a` ABTestVariant: A/B test variant. Email-specific fields live under `content.email`.
        - `content` ABTestVariantContent: A/B test variant content grouped by channel.
          - `email` ABTestVariantEmail: Email content fields for an A/B test variant.
            - `contentID` string: Email content unique identifier referencing the variant's email design
            - `preheader` string: Preheader text
            - `replyToEmail` string: Reply-to email address
            - `senderEmail` string: Sender email address
            - `senderName` string: Sender display name
            - `subject` string: Email subject line
        - `id` string: Variant campaign ID (read-only). Used for reporting API access.
      - `b` ABTestVariant: A/B test variant. Email-specific fields live under `content.email`.
        - `content` ABTestVariantContent: A/B test variant content grouped by channel.
          - `email` ABTestVariantEmail: Email content fields for an A/B test variant.
            - `contentID` string: Email content unique identifier referencing the variant's email design
            - `preheader` string: Preheader text
            - `replyToEmail` string: Reply-to email address
            - `senderEmail` string: Sender email address
            - `senderName` string: Sender display name
            - `subject` string: Email subject line
        - `id` string: Variant campaign ID (read-only). Used for reporting API access.
  - `audience` Audience: Campaign audience
    - `excludedCountries` string[]: Countries excluded from the SMS audience, as ISO 3166-1 alpha-2 codes (e.g. "US"). Only applicable to SMS campaigns. Recipients in these countries are not sent to.
    - `excludedSegmentIDs` string[]: Segments to exclude from the audience
    - `includedSegmentIDs` string[]: Segments to include. Empty includes all subscribers
  - `boosterSettings` BoosterSettings: Booster-specific settings.
    - `campaignID` string, required: Parent campaign ID this booster follows up on
    - `delay` BoosterDelay: Delay between the parent campaign send and the booster send.
      - `amount` integer: Amount of time units before the booster is sent
      - `unit` 'h' | 'd': Time unit: "h" for hours, "d" for days
    - `sendTo` 'nonOpeners' | 'nonClickers', required: Audience selector. The booster targets recipients of the parent who did NOT perform the implied action (`nonOpeners` did not open; `nonClickers` did not click).
  - `brandID` string: Brand unique identifier (read-only)
  - `channel` 'email' | 'push' | 'sms': Campaign message channel
  - `content` Content: Campaign content
    - `email` Email: Email content
      - `contentID` string: Email content unique identifier referencing the campaign's email design
      - `preheader` string: Email preheader text displayed after the subject line in the recipient's inbox
      - `replyToEmail` string: Reply-to email address for recipient responses
      - `senderEmail` string: Sender email address shown in the recipient's inbox
      - `senderName` string: Sender display name shown in the recipient's inbox
      - `subject` string: Email subject line displayed in the recipient's inbox
    - `sms` SMS: SMS message content
      - `compliance` SMSCompliance: SMS compliance text settings
        - `stopKeywordText` string: STOP keyword text for US/CA recipients. Max 250 chars
        - `unsubscribeLinkText` string: Unsubscribe link text for non-US/CA recipients. Max 250 chars
      - `imageID` string: Image ID obtained from the Images API. When set, the message is delivered as MMS to US/CA recipients; other countries receive SMS without the image. Image must be JPEG, JPG, PNG, or GIF and not exceed 500 KB
      - `isLinkShorteningEnabled` boolean: Auto-shorten links in message body
      - `message` string: SMS message body. When sent as SMS, the message (including the appended compliance text and unsubscribe link/keyword) must not exceed 9 SMS segments for either US/CA or other-country recipients. When sent as MMS, the message (including the appended compliance text) must not exceed 1600 characters for US/CA recipients.
      - `senderName` string: Sender display name. Max 250 chars
  - `createdAt` string: Campaign creation timestamp (read-only)
  - `endedAt` string: Campaign end timestamp (read-only)
  - `id` string: Campaign unique identifier (read-only)
  - `language` string: Campaign language locale in xx_XX format
  - `name` string: Campaign name
  - `sendingSettings` SendingSettings: Campaign sending settings
    - `isTZOptimizationEnabled` boolean: Whether timezone optimization is enabled. Only available with immediate or scheduled strategy, and only in email campaigns
    - `optimizeFor` 'opens' | 'clicks' | 'orders': Optimization objective for personalized sends. Present when strategy is personalized
    - `respectQuietHours` boolean: Whether personalized sends avoid contact-local hours from 22:00 through 06:59
    - `scheduledAt` string: Scheduled send time in RFC 3339 format. Present when strategy is scheduled or personalized
    - `strategy` 'immediate' | 'scheduled' | 'personalized': Sending strategy
  - `startedAt` string: Campaign start timestamp (read-only)
  - `status` 'draft' | 'scheduled' | 'started' | 'sent' | 'error' | 'canceled' | 'paused' | 'onHold' | 'expired' | 'stopped': Campaign status
  - `type` 'regular' | 'abTest' | 'booster': Campaign type
  - `updatedAt` string: Campaign last update timestamp (read-only)
  - `url` string: Link to the campaign in the Omnisend app (read-only): the settings page of a draft campaign (for a booster, the parent campaign's booster page) or the report of a started, sent, canceled, stopped or expired campaign. Omitted for scheduled, paused, on-hold and error campaigns.

## Other responses

- `400`: Request contains invalid or missing fields
- `401`: Authentication is missing or invalid
- `403`: Insufficient permissions for this operation
- `404`: Campaign not found
- `410`: API version has been retired
- `422`: Campaign type is not supported
- `429`: Rate limit exceeded
- `500`: Unexpected error occurred

---

[API](https://skmtc.dev/omnisend/apis/campaigns-api.md) - [All operations](https://skmtc.dev/omnisend/apis/campaigns-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omnisend/apis/campaigns-api/revisions/fef4d9467305?raw)
