---
title: "Review Campaign Negative Keywords"
method: POST
path: "/api/v1/google-ad-manager/campaigns/negative-keyword-review"
tags: ["googleAdCampaign"]
---

# Review Campaign Negative Keywords

`POST /api/v1/google-ad-manager/campaigns/negative-keyword-review`

## Request

- Base URL: `https://api.brandbooster.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.brandbooster.ai/api/v1/google-ad-manager/campaigns/negative-keyword-review`
- Auth: none declared

Negative keywords for a live campaign, from the search terms it paid for in the
last `days` (7 by default, for a weekly review). Writes nothing: the approved
suggestions go to /keywords/negative/add, and `draft` is that request body minus
client_id and email.

## Request body

- NegativeKeywordReviewRequest: Which campaign to review and over how many days. Nothing here writes to Google Ads: the approved suggestions go to /keywords/negative/add as `draft`.
  - `client_id` string, required
  - `email` string, required
  - `campaign_id` string, required
  - `days` integer: Search terms from the last N days
  - `min_clicks_without_conversion` integer
  - `max_suggestions` integer
  - `final_url` string, uri, nullable
  - `business_description` string, nullable

## Response `200`

Successful Response

- NegativeKeywordReviewResponse
  - `campaign_id` string, required
  - `campaign_name` string, nullable
  - `currency_code` string, nullable
  - `date_range` object, required
  - `search_terms_reviewed` integer, required
  - `cost_reviewed` number, required
  - `cost_blockable` number, required
  - `suggestions` ReviewedNegativeKeyword[], required
    - `text` string, required
    - `match_type` 'EXACT' | 'PHRASE' | 'BROAD', required: Keyword match type enum
    - `level` 'CAMPAIGN' | 'AD_GROUP': Keyword level enum
    - `category` string, required
    - `source` string, required
    - `reason` string, nullable
    - `blocked_search_terms` BlockedSearchTerm[], required
      - `search_term` string, required
      - `impressions` integer, required
      - `clicks` integer, required
      - `cost` number, required
      - `conversions` number, required
    - `impressions` integer, required
    - `clicks` integer, required
    - `cost` number, required
  - `draft` object, required
  - `dropped` DroppedSuggestion[]
    - `text` string, required
    - `reason` string, required
  - `warnings` string[]
  - `sources` object

## Other responses

- `422`: Validation Error

## Changes

> 35 revisions in range; 1 not diffed.

- **2026-09-30** `05ad3a41b4cf`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/brandbooster/apis/fastapi/changes/api/v1/google-ad-manager/campaigns/negative-keyword-review/post.md)

---

[API](https://skmtc.dev/brandbooster/apis/fastapi.md) - [All operations](https://skmtc.dev/brandbooster/apis/fastapi/llms.txt) - [OpenAPI document](https://skmtc.dev/brandbooster/apis/fastapi/revisions/8e8c18c2dc35?raw)
