---
title: "Decline broadcast flow"
method: POST
path: "/broadcastFlows/{broadcastFlowId}/review/decline"
tags: ["broadcastFlows"]
---

# Decline broadcast flow

`POST /broadcastFlows/{broadcastFlowId}/review/decline`

Declines a broadcast flow and requests edits. This endpoint creates a review event and updates the broadcast flow status to needs-edit.

**Requirements:**
- Only admins or managers can decline broadcast flows
- A `statusReason` must be provided explaining the required changes
- The `statusReason` must be between 1 and 400 characters
- Only the root broadcast flow (not child batches) can be reviewed

**Actions:**
- Creates a BroadcastEvent of type 'review' with declined status
- Updates the broadcast flow status to `needs-edit`
- Records the reviewer, review timestamp, and required changes

## Request body

- object
  - `statusReason` string, required — Required explanation of what changes are needed

## Response `200`

Broadcast flow declined successfully

- object
  - `broadcastFlow` BroadcastFlow, required — A BroadcastFlow represents a bulk patient outreach campaign that sends the same message via SMS, email, or voice to a batch of patients, either from an uploaded contact file, an SFTP feed, or a filtered set of appointments. It tracks the full lifecycle of that campaign including upload and column mapping, optional approval review, scheduling, batched message sending, and per-row success and failure statistics, and can be organized into parent and child flows for large batches, commonly used for patient recall and other mass communications.
    - `_id` string — Luma's internal ID of an object.
    - `user` string — The ID of the root account user.
    - `deleted` 0 | 1 — Flag for logical deletion where 1 means deleted.
    - `createdBy` string — The ID of the user who created this object.
    - `updatedBy` string — The ID of the user who updated this object.
    - `createdAt` string, date-time — The date/time when this object was created.
    - `updatedAt` string, date-time — The date/time when this object was updated.
    - `title` string
    - `type` 'scheduled' | 'uploaded' | 'sftp'
    - `parentBroadcastFlow` string — Luma's internal ID of an object.
    - `campaign` string — Luma's internal ID of an object.
    - `broadcastTemplate` string — Luma's internal ID of an object.
    - `patientMessageTemplate` string — Luma's internal ID of an object.
    - `review` object
      - `user` string — Luma's internal ID of an object.
      - `status` 'approved' | 'declined'
      - `declinedReason` string
    - `message` string
    - `messageOverrides` object[]
      - `text` string
      - `language` string
      - `channel` string
      - `subject` string
      - `patientMessageTemplate` string — Luma's internal ID of an object.
      - `secureChat` boolean
    - `sendAt` string, date-time
    - `sentAt` string, date-time
    - `configuration` object
      - `secureChat` boolean
      - `contactPreference` 'all-contacts' | 'primary-contact-only' | 'uploaded-contact-only'
      - `simulate` boolean
      - `shouldReprocessFilters` boolean
    - `processingStatus` 'pre-processing' | 'processing-upload' | 'rows-processed' | 'sending-messages' | 'success' | 'failure'
    - `upload` string — Luma's internal ID of an object.
    - `fileUpload` string — Luma's internal ID of an object.
    - `mapping` string — Luma's internal ID of an object.
    - `rowCount` integer
    - `stats` object
      - `totalMessagesSent` integer
      - `messagesSuccess` integer
      - `messagesFailed` integer
      - `messagesSkipped` integer
  - `broadcastEvent` BroadcastEvent, required — A BroadcastEvent records a single unit of work within a Luma broadcast flow, a bulk outbound messaging campaign sent to many patients at once (for example a recall or announcement uploaded as a spreadsheet). Each event tracks either a review action taken on the flow or the processing of one row or patient, including its current step (message queued, sent, failed, or skipped), any error encountered, and links to the associated patient and appointment.
    - `_id` string — Luma's internal ID of an object.
    - `user` string — The ID of the root account user.
    - `deleted` 0 | 1 — Flag for logical deletion where 1 means deleted.
    - `createdBy` string — The ID of the user who created this object.
    - `updatedBy` string — The ID of the user who updated this object.
    - `createdAt` string, date-time — The date/time when this object was created.
    - `updatedAt` string, date-time — The date/time when this object was updated.
    - `broadcastFlow` string — Luma's internal ID of an object.
    - `patient` string — Luma's internal ID of an object.
    - `statuses` object[]
      - `step` 'RowProcess' | 'MessageProcess'
      - `status` 'in-progress' | 'success' | 'failure' | 'skipped'
      - `stepCreatedAt` string, date-time
      - `stepUpdatedAt` string, date-time
      - `patient` string — Luma's internal ID of an object.
      - `retryCount` integer
    - `row` integer
    - `rowRecord` object

## Other responses

- `400` — Invalid request. Possible reasons: - Missing or invalid broadcast flow ID - Missing required changes text (statusReason) - Required changes text exceeds 400 characters
- `401` — Not authenticated
- `403` — Not authorized. Possible reasons: - User is not an admin or manager - Cannot review a child broadcast flow (must be root)
- `404` — Broadcast flow not found
- `500` — Internal server error

---

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