---
title: "Preview a bulk exclusion (writes nothing)"
method: POST
path: "/campaigns/{campaign_id}/content/exclusions/preview"
tags: ["Campaign Content & Challenges"]
---

# Preview a bulk exclusion (writes nothing)

`POST /campaigns/{campaign_id}/content/exclusions/preview`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/campaigns/{campaign_id}/content/exclusions/preview`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

Dry run for a batch of video ids: resolves which campaigns each id actually appears in and returns the summary — matched, unknown, and skipped-because-ended — WITHOUT writing anything.

`scope` defaults to `campaign` (act only on this campaign, what a brand expects from a button on one campaign's Content tab). `scope: shop` is the opt-in that also resolves every OTHER campaign the video appears in — far more destructive, so it is never implied. Always preview a `shop`-scoped batch before applying it.

Read-only, but gated on `read_write` scope: it is the first step of the bulk-exclusion write flow and reveals exactly what that flow would change. No `Idempotency-Key` needed (nothing is written).

## Path parameters

- `campaign_id` integer, required

## Request body

- BulkExclusionPreviewRequest: Dry run: what would an uploaded file change?
  - `video_ids` string[], required
  - `scope` 'campaign' | 'shop': How far an uploaded file reaches. ``campaign`` is the default: the button lives on one campaign's Content tab and acting only there is what a brand expects. ``shop`` is the opt-in that also excludes the video from every other campaign it appears in, which is the whole point of the upload but is far more destructive, so it is never implied.

## Response `200`

Successful Response

- unknown

## Other responses

- `400`: Validation error, multi-shop key, or missing `Idempotency-Key`.
- `403`: API key lacks `read_write` scope (`WRITE_NOT_PERMITTED`).
- `404`: Campaign / template / job not in this shop.
- `409`: Campaign results are final, campaign is LIVE-scored, template cap reached, or `Idempotency-Key` conflict.
- `422`: Validation Error
- `429`: Write-tier rate limit (10/min, 50/hr, 100/day) exceeded.

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) - [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/reacherapp/apis/reacher-data-api/revisions/63ce74b30b5a?raw)
