---
title: "Remove many keywords from a topic cluster"
method: POST
path: "/v3/topic-clusters/topic-keywords/bulk-remove"
tags: ["Topic Clusters"]
---

# Remove many keywords from a topic cluster

`POST /v3/topic-clusters/topic-keywords/bulk-remove`

## Request

- Base URL: `https://api.snowseo.com`
- URL: `https://api.snowseo.com/v3/topic-clusters/topic-keywords/bulk-remove`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/snowseo/apis/snowseo-api/docs/v3/topic-clusters/topic-keywords/bulk-remove/post.ts> (a function with typed inputs; its response is checked against the schema)

Unlinks every selected keyword from the topic cluster. The keywords stay in the team's lists and keep any rank tracking. Confirm the selection with topic_keywords_bulk_preview first. Processes up to 50 rows per call: repeat with afterId set to the returned nextCursor until it is null.

## Request body

- object
  - `teamId` string
  - `selection` union, required
    - object
      - `mode` 'ids', required
      - `ids` string[], required
    - object
      - `mode` 'all', required
      - `filters` object, required
        - `search` string
        - `category` 'All' | 'Ranked' | 'Mentioned'
      - `excludedIds` string[], required
  - `afterId` string: The nextCursor from the previous call; omit on the first call.
  - `topicId` string, required: Topic cluster the rows belong to.
  - `startDate` string: Start of the metrics window the selection filters read (YYYY-MM-DD).
  - `endDate` string: End of the metrics window the selection filters read (YYYY-MM-DD).

## Response `200`

Default Response

- object
  - `success` boolean
  - `succeeded` number
  - `failed` number
  - `nextCursor` string, nullable
  - `eligibility` object
    - `selected` number, required
    - `eligible` number, required
    - `skipped` number, required
    - `byReason` object, required
  - `results` object[]
    - `id` string
    - `success` boolean
    - `error` string

## Other responses

- `500`: Default Response

## Changes

- **2026-11-03** `31b321592ad7`: 4 info
  - added the optional property `code` to the response with the `500` status
  - added the optional property `message` to the response with the `500` status
  - added the optional property `reference` to the response with the `500` status
  - added the optional property `success` to the response with the `500` status
- **2026-11-01** `6d1dc4928d97`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/snowseo/apis/snowseo-api/changes/v3/topic-clusters/topic-keywords/bulk-remove/post.md)

---

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