---
title: "Update a draft broadcast"
method: PATCH
path: "/broadcasts/{id}"
tags: ["Broadcasts"]
---

# Update a draft broadcast

`PATCH /broadcasts/{id}`

## Request

- Base URL: `https://api.poststack.dev`
- URL: `https://api.poststack.dev/broadcasts/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://poststack.dev/oauth/authorize`
    - Token URL: `https://poststack.dev/oauth/token`
- TypeScript: <https://skmtc.dev/poststack/apis/poststack-api/docs/broadcasts/:id/patch.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Request body

- UpdateBroadcastInput
  - `segment_id` string
  - `topic_id` string, nullable
  - `from` string
  - `subject` string
  - `html` string
  - `text` string
  - `reply_to` string, email
  - `name` string
  - `scheduled_at` union
    - string, date-time
    - string
  - `ab_test` object
    - `variants` object[], required
      - `name` string, required
      - `subject` string, required
      - `html` string
      - `text` string
      - `weight` integer, required
    - `test_sample_size` integer
    - `test_duration_minutes` integer

## Response `200`

Updated.

- object
  - `broadcast` Broadcast, required
    - `id` integer, required
    - `publicId` string, required: `bc_…` id used by broadcast endpoints.
    - `name` string, required
    - `fromAddress` string
    - `fromName` string, nullable
    - `subject` string, required
    - `htmlBody` string, nullable
    - `textBody` string, nullable
    - `replyTo` string[], nullable
    - `segmentId` integer, nullable
    - `segmentPublicId` string, nullable
    - `topicId` integer, nullable
    - `topicPublicId` string, nullable
    - `status` 'draft' | 'queued' | 'sending' | 'sent' | 'cancelled', required
    - `scheduledAt` string, date-time, nullable
    - `sentAt` string, date-time, nullable
    - `totalRecipients` integer
    - `deliveredCount` integer
    - `openedCount` integer
    - `clickedCount` integer
    - `bouncedCount` integer
    - `deferredCount` integer: Get only: messages still being retried.
    - `abTestEnabled` boolean
    - `winnerVariantId` integer, nullable
    - `testSampleSize` integer, nullable
    - `testDurationMinutes` integer, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400`: Validation failed — `error` names each offending field (`field: message`).
- `401`: Missing, malformed or unknown credentials (`WWW-Authenticate: Bearer …` is set).
- `403`: The credential lacks the `broadcasts:manage` scope (body `{ error: "insufficient_scope", required, missing }`), or the team is suspended.
- `404`: No such resource on this team.
- `422`: Only draft broadcasts can be updated, or variant weights do not sum to 100.
- `429`: Rate limited (30/min). `Retry-After` gives the seconds to wait; `X-RateLimit-*` headers are sent on every response.

## Changes

- **2026-11-12** `0d3971e3a670`: 2 warning
  - the `from` request property's maxLength was set to `998`
  - the `reply_to` request property's maxLength was set to `320`
- **2026-10-27** `52b7a6be08b3`: 1 breaking, 2 info
  - the `scheduled_at` request property type changed from `string` to no type, and format from `date-time` to no format
  - added `subschema #1, subschema #2` to the `scheduled_at` request property `anyOf` list
  - removed the pattern `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$` from the request property `scheduled_at`
- **2026-09-30** `4dc1e20989c8`: 18 warning
  - added the new `daily_limit_exceeded` enum value to the `anyOf[#/components/schemas/Error]/code` response property for the response status `403`
  - added the new `daily_limit_exceeded` enum value to the `code` response property for the response status `400`
  - added the new `daily_limit_exceeded` enum value to the `code` response property for the response status `401`
  - added the new `daily_limit_exceeded` enum value to the `code` response property for the response status `404`
  - …14 more
- **2026-09-29** `ef5b22b98333`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/poststack/apis/poststack-api/changes/broadcasts/:id/patch.md)

---

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