---
title: "Protect a creator from GMV Max auto-exclusion"
method: POST
path: "/gmv-max/protected-creators"
tags: ["GMV Max"]
---

# Protect a creator from GMV Max auto-exclusion

`POST /gmv-max/protected-creators`

## Request

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

Add a creator (by TikTok `handle`) to this shop's GMV Max allow-list so the bottom-of-funnel auto-exclusion never re-excludes them. Also removes any existing exclusion and requests a one-time release of their already-excluded creatives back to spend. Idempotent on (shop, handle). Requires `read_write` scope and an `Idempotency-Key`. Single shop only.

## Headers

- `Idempotency-Key` string, nullable

## Request body

- GmvMaxProtectCreatorRequest: POST /gmv-max/protected-creators request body — protect a creator (by TikTok `handle`) so the shop's GMV Max BOF auto-exclusion never re-excludes them (CORE-8128). Idempotent on (shop, handle).
  - `handle` string, required: The creator's TikTok handle to protect from auto-exclusion. Adding them also removes any existing exclusion and requests a one-time release of their already-excluded creatives back to spend.

## Response `200`

Successful Response

- GmvMaxProtectCreatorWriteResponse: POST /gmv-max/protected-creators — echoes the protected creator row.
  - `data` GmvMaxProtectedCreatorItem, required: One creator on the shop's GMV Max allow-list — never auto-excluded. Mirrors the portal's `BofProtectedCreatorItem` shape 1:1.
    - `handle` string, required: The creator's TikTok handle.
    - `source` string, required: How the creator was protected: `manual` or `import` (bulk).
    - `reason` string, nullable: Optional free-text note.
    - `release_status` string, required: State of the one-time release of already-excluded creatives: `pending` (queued), `released` (put back on spend), `failed` (the ADD-back was rejected, e.g. campaign at TikTok's exclusion cap), or `none` (nothing was excluded).
    - `released_video_count` integer: How many of the creator's creatives were released back to spend.
    - `decided_by` string, nullable: Who protected the creator (`api_key:<prefix>` for public writes).
    - `created_at` string, nullable: When the creator was protected (ISO 8601 UTC).
    - `updated_at` string, nullable: When the row was last touched (ISO 8601 UTC).

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `409`: Conflict
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

> 76 revisions in range; 1 not diffed.

- **2026-09-29** `c8958a7038ec`: 1 info
  - endpoint added

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