---
title: "List GMV Max excluded videos"
method: GET
path: "/gmv-max/excluded-videos"
tags: ["GMV Max"]
---

# List GMV Max excluded videos

`GET /gmv-max/excluded-videos`

## Request

- Base URL: `https://api.reacherapp.com/public/v1`
- URL: `https://api.reacherapp.com/public/v1/gmv-max/excluded-videos`
- Auth: API key in header `x-api-key` and API key in header `x-shop-id`

List the individual videos (creatives) excluded from this shop's GMV Max delivery. Unlike creator exclusions, a video exclusion takes ONE creative off spend and leaves the creator's other videos live. Ordered applied first, then pending, then failed; newest first within each status. `applied_status` tells you whether TikTok has confirmed the exclusion (`applied`), it is waiting for the 4-hourly reconcile (`pending`), the video is not in any active campaign (`no_creatives`), or an actively delivering placement could not be excluded (`failed`). Single shop only.

## Response `200`

Successful Response

- GmvMaxExcludedVideosListResponse: GET /gmv-max/excluded-videos — applied first, then pending, then failed.
  - `data` GmvMaxExcludedVideoItem[], required
    - `video_id` string, required: The TikTok video id (== creative material_id).
    - `source` string, required: How the exclusion was created: `manual` (API or portal), `auto_rule`, or `auto_ai` (the shop's AI-labelled video auto-exclude).
    - `reason` string, nullable: Free-text note stored with the exclusion.
    - `excluded_campaign_count` integer: How many campaigns the video is confirmed EXCLUDED from after the last reconcile.
    - `applied_status` string, required: Whether the exclusion has taken effect on spend: `applied` (live), `pending` (armed, reconcile job hasn't run yet or the video has no known product yet), `no_creatives` (the video is not in any active campaign right now), `attempted`, or `failed` (an actively delivering placement could not be excluded).
    - `decided_by` string, nullable: Who created the exclusion (`api_key:<prefix>` for public-API writes).
    - `created_at` string, nullable
    - `updated_at` string, nullable: When the reconcile job last touched this row.

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-19** `291230805105`: 2 breaking, 1 info
  - the `data/items/created_at/anyOf[subschema #1]/` response's property format changed from `date-time` to no format for status `200`
  - the `data/items/updated_at/anyOf[subschema #1]/` response's property format changed from `date-time` to no format for status `200`
  - api operation id `list_excluded_videos_gmv_max_excluded_videos_get` removed and replaced with `gmv_max_excluded_videos_list`
- **2026-09-12** `19eefbad93ec`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/reacherapp/apis/reacher-data-api/changes/gmv-max/excluded-videos/get.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)
