---
title: "Assign many tracked prompts to a topic cluster"
method: POST
path: "/v3/topic-clusters/prompt-assignments/bulk-assign"
tags: ["Topic Clusters"]
---

# Assign many tracked prompts to a topic cluster

`POST /v3/topic-clusters/prompt-assignments/bulk-assign`

## Request

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

Links every selected prompt that is not yet in any topic cluster to the given cluster, with its regional variants. Prompts already in a cluster are skipped. With track set, also turns tracking on, which uses credits. Confirm the selection with prompt_assignments_bulk_preview first. Processes up to 10 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
        - `platform` string
        - `competitor` string
        - `country` string
        - `startDate` string
        - `endDate` string
        - `promptBrand` string
        - `tracking` string
        - `intent` string
        - `search` string
      - `excludedIds` string[], required
  - `afterId` string: The nextCursor from the previous call; omit on the first call.
  - `topicId` string, required: Topic cluster ID.
  - `track` boolean: Also enable tracking on the newly linked prompts.

## 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/prompt-assignments/bulk-assign/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)
