---
title: "Create a negative keyword list"
method: POST
path: "/v1/ads/accounts/negative-keyword-lists"
tags: ["Ad Accounts"]
---

# Create a negative keyword list

`POST /v1/ads/accounts/negative-keyword-lists`

Creates one Google Ads shared negative keyword list with optional initial keywords in a single atomic mutation. Daily quota is reserved for every mutate item, so large batches may return 429 before any change. This operation is not idempotent. The list is not attached to any campaign.

## Request body

- object
  - `accountId` string, required — Zernio SocialAccount id.
  - `adAccountId` string — Platform ad account ID (Google customer ID, digits only). Required when the connection has multiple customers.
  - `customerId` string — Alias of adAccountId, kept for existing callers
  - `platform` 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai' — Optional courtesy field. The resolved account or campaign determines support; other platforms return 501.
  - `name` string, required — Nonempty list name, trimmed before use.
  - `keywords` KeywordEntry[] — Full desired keyword set. Bare strings use broad match. Send [] to clear the list.
    - union — A Google Search keyword: a bare string (BROAD match), or an object naming the match type.
      - string — Keyword text; defaults to BROAD match
      - object
        - `text` string, required
        - `matchType` 'exact' | 'phrase' | 'broad'

## Response `201`

Successful response.

- object
  - `id` string — New shared set id.
  - `resourceName` string — New shared set resource name.
  - `created` integer — Number of initial keyword criteria created.
  - `customerId` string — Resolved Google Ads customer id.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Ads access and permission to the selected account are required.
- `404` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409` — Ambiguous campaign or account selection. Use a profile-scoped key. A list still attached to a campaign may also be rejected by Google. The account may also be inactive or need reconnection (code ads_connection_required). Reconnect it and read GET /v1/accounts for its current ID before retrying.
- `422` — Google Ads connection is missing or unavailable.
- `429` — Google Ads operations budget or platform quota exhausted.
- `501` — Available only on Google Ads.

## Changes

- **2026-09-23** `dd3865482f9f` — 2 info
  - added the new optional request property `adAccountId`
  - request property `customerId` deprecated
- **2026-09-16** `3e6ddf2a99ea` — 2 info
  - added the optional property `details/budgetScope` to the response with the `400` status
  - added the optional property `details/budgetScope` to the response with the `404` status
- **2026-09-15** `0dba7d004d75` — 4 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaScope` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `404` status
- **2026-09-10** `e70ed06e7150` — 6 info
  - added the optional property `code` to the response with the `404` status
  - added the optional property `details` to the response with the `404` status
  - added the optional property `param` to the response with the `404` status
  - added the optional property `platform` to the response with the `404` status
  - …2 more
- **2026-09-09** `222e3a38a382` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/accounts/negative-keyword-lists/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/dd3865482f9f?raw)
