---
title: "Duplicate broadcast"
method: POST
path: "/v1/broadcasts/{id}/duplicate"
tags: ["Broadcasts"]
---

# Duplicate broadcast

`POST /v1/broadcasts/{id}/duplicate`

## Request

- Base URL: `https://smtpfa.st/api`
- URL: `https://smtpfa.st/api/v1/broadcasts/{id}/duplicate`
- Auth: HTTP bearer

Copy a broadcast into a new draft. Content and targeting carry over; the schedule, recipients and send history do not. Pass `name` to set the copy's name, otherwise it is the original's with "(copy)" appended.

## Path parameters

- `id` string, required

## Response `201`

The new draft broadcast

- object
  - `broadcast` Broadcast, required
    - `object` string
    - `id` string, required
    - `name` string, required
    - `audience` string
    - `audience_meta` AudienceMeta: Details of the audience, such as the segment_id
    - `from` string, nullable
    - `reply_to` string, nullable
    - `subject` string, nullable
    - `preview_text` string, nullable
    - `html` string, nullable
    - `text` string, nullable
    - `markdown` string, nullable
    - `status` 'draft' | 'scheduled' | 'queued' | 'sending' | 'sent' | 'paused' | 'canceled' | 'failed', required
    - `scheduled_at` string, date-time, nullable
    - `queued_at` string, date-time, nullable
    - `sent_at` string, date-time, nullable
    - `canceled_at` string, date-time, nullable
    - `archived_at` string, date-time, nullable: When the broadcast was archived. Archived broadcasts are left out of the list unless archived=true or archived=all.
    - `paused_at` string, date-time, nullable: Set when the campaign was stopped mid-send by the deliverability guard
    - `pause_reason` string, nullable: Why the campaign was paused, for example the complaint rate that tripped the guard
    - `fanout_completed_at` string, date-time, nullable: When every recipient of the send had been created
    - `expected_recipients` integer, nullable: Eligible recipients counted when the send was accepted
    - `send_over_minutes` integer: Minutes the send is spread over from its start (scheduled_at, else queued_at); 0 means all at once
    - `track_opens` boolean
    - `track_clicks` boolean
    - `recipient_count` integer
    - `metrics` BroadcastMetrics
      - `total` integer
      - `skipped` integer
      - `queued` integer
      - `sending` integer
      - `handed_off` integer: Recipients whose email the provider accepted, whatever happened next. Shows how far a send spread over send_over_minutes has got.
      - `sent` integer
      - `delivered` integer
      - `opened` integer
      - `clicked` integer
      - `unsubscribed` integer
      - `bounced` integer
      - `complained` integer
      - `failed` integer
      - `canceled` integer
      - `delivery_rate` number
      - `open_rate` number
      - `click_rate` number
      - `unsubscribe_rate` number
      - `bounce_rate` number
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `404`: Broadcast not found

---

[API](https://skmtc.dev/smtpfa/apis/smtpfast-api.md) · [All operations](https://skmtc.dev/smtpfa/apis/smtpfast-api/llms.txt) · [OpenAPI document](https://skmtc.dev/smtpfa/apis/smtpfast-api/revisions/79dda742f53e?raw)
