> ## Documentation Index
> Fetch the complete documentation index at: https://snowseo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Topic Keywords

> Add a keyword to a topic cluster.

Add a keyword to an existing topic cluster. If the keyword doesn't exist yet, it will be created automatically. Keyword metrics (volume, competition) are fetched in the background.


## OpenAPI

````yaml POST /v3/topic-clusters/{topicId}/keywords
openapi: 3.0.0
info:
  title: SnowSEO API
  description: API documentation for SnowSEO
  version: 1.0.0
servers:
  - url: https://api.snowseo.com
    description: Production server
security: []
tags:
  - name: Keywords
    description: Keyword research and suggestion end-points
  - name: Onboarding
    description: Brand onboarding and strategy end-points
  - name: Brands
    description: Brand management end-points
  - name: Organizations
    description: Organization and member end-points
  - name: Integrations
    description: Google Search Console and other integrations
  - name: Utilities
    description: Common utility end-points like screenshots and uploads
externalDocs:
  url: https://snowseo.com/docs
  description: Find more info here
paths:
  /v3/topic-clusters/{topicId}/keywords:
    post:
      tags:
        - Topic Clusters
      summary: Add keyword to topic cluster
      description: >-
        Links a keyword to a topic cluster, optionally tracking it for rank
        monitoring.
      parameters:
        - schema:
            type: string
          in: path
          name: topicId
          required: true
          description: Topic cluster ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                teamId:
                  type: string
                  description: Team ID
                keyword:
                  type: string
                  description: Keyword text to add
                countryId:
                  type: string
                  nullable: true
                languageId:
                  type: string
                  nullable: true
                locationCriteriaId:
                  type: number
                  nullable: true
                  description: >-
                    Google Ads location criteria ID for city/region-level
                    tracking. Omit/null for country-only.
                locationCanonicalName:
                  type: string
                  nullable: true
                  description: Canonical location name paired with locationCriteriaId.
                items:
                  type: array
                  description: >-
                    Bulk mode: one item per keyword. Items already linked to
                    another topic are skipped.
                  items:
                    type: object
                    required:
                      - keyword
                    properties:
                      keyword:
                        type: string
                      countryId:
                        type: string
                        nullable: true
                      languageId:
                        type: string
                        nullable: true
                      locationCriteriaId:
                        type: number
                        nullable: true
                      locationCanonicalName:
                        type: string
                        nullable: true
                track:
                  type: boolean
                  description: Whether to also track this keyword for rank monitoring
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  keywordId:
                    type: string
                  countryId:
                    type: string
                    nullable: true
                  languageId:
                    type: string
                    nullable: true
                  locationCriteriaId:
                    type: number
                    nullable: true
                  locationCanonicalName:
                    type: string
                    nullable: true
                  requested:
                    type: number
                  added:
                    type: number
                  alreadyHere:
                    type: number
                  skipped:
                    type: number
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '409':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '500':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string

````