---
title: "Duplicate saved popup"
method: POST
path: "/popups/{popupId}/duplicate"
tags: ["Widgets"]
---

# Duplicate saved popup

`POST /popups/{popupId}/duplicate`

Copies a saved popup into a new draft with its own view and conversion counts. The original keeps its status and stats, so a live popup carries on showing while the copy is edited.

## Path parameters

- `popupId` string, required

## Request body

- object
  - `name` string — Name for the copy. Defaults to the original name with " (copy)" appended.

## Response `200`

Popup duplicated as a draft

- object
  - `success` boolean
  - `popup` SavedPopup — A saved on-site signup popup.
    - `id` string
    - `name` string
    - `status` 'draft' | 'published'
    - `content` object — Complete popup content - template, presentation, placement, theme, settings, trigger, targeting, schedule, frequency, visual, and blocks. Present on detail reads; omitted when listing unless `includeContent=true`.
    - `viewCount` integer — Times the popup was shown to a visitor.
    - `startCount` integer — Times a visitor began filling the popup in. Always between viewCount and conversionCount.
    - `conversionCount` integer — Times a visitor submitted the popup and became a subscriber.
    - `stats` SavedPopupStats — The popup funnel - shown, started, submitted - with rates derived from the raw counters. A rate is null rather than 0 when its denominator is zero, so "nobody has seen it yet" never reads as "nobody converted".
      - `views` integer
      - `starts` integer
      - `conversions` integer
      - `startRate` number, nullable — starts / views, 0-1. Null when the popup has no views.
      - `conversionRate` number, nullable — conversions / views, 0-1. Null when the popup has no views.
      - `completionRate` number, nullable — conversions / starts, 0-1. Null when nobody has started it.
    - `publishedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `url` string, uri — Dashboard URL for this popup.
  - `message` string

## Other responses

- `400` — Invalid name
- `401` — Unauthorized
- `403` — API key is missing widgets:write
- `404` — Popup not found
- `500` — Failed to duplicate popup

---

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