---
title: "Restore previously excluded videos"
method: POST
path: "/campaigns/{campaign_id}/content/exclusions/restore"
tags: ["Campaign Content & Challenges"]
---

# Restore previously excluded videos

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

## Request

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

Count one or more previously excluded videos toward the campaign again — the inverse of the exclude call, batched and re-aggregated the same way. Ids that were never excluded are simply no-ops.

Same 409 guards apply: a campaign whose results are final, or a LIVE campaign, cannot be changed.

Requires `read_write` scope and an `Idempotency-Key`; `X-Dry-Run: true` echoes the intended change without writing.

## Path parameters

- `campaign_id` integer, required

## Headers

- `Idempotency-Key` string, nullable
- `X-Dry-Run` string, nullable

## Request body

- RestoreVideosRequest: Restore one or more previously excluded videos to a campaign.
  - `video_ids` string[], required

## Response `200`

Successful Response

- union
  - RestoreVideosResponse
    - `success` boolean, required
    - `code` string, required
    - `data` RestoreVideosData, required
      - `restored_video_ids` string[], required
      - `not_excluded_video_ids` string[], required
  - RestoreVideosDryRunResponse
    - `dry_run` true, required
    - `would` RestoreVideosDryRunData, required
      - `action` 'restore', required
      - `campaign_id` integer, required
      - `video_ids` string[], required

## 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.

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-15** `1163780ede1d`: 1 info
  - added `#/components/schemas/RestoreVideosResponse, #/components/schemas/RestoreVideosDryRunResponse` to the response body `anyOf` list for the response status `200`

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/campaigns/:campaign_id/content/exclusions/restore/post.md)

---

[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)
