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

# List project keywords



## OpenAPI

````yaml /openapi.snapshot.json get /projects/{project_id}/keywords
openapi: 3.1.0
info:
  description: >-
    Public REST API for bisibility keyword rank tracking. Clients may optionally
    declare v1 with the Bisibility-API-Version header. Resource IDs use strict
    v3 prefixed public IDs and list cursors are version 3.
  title: bisibility Public API
  version: 1.0.0
servers:
  - url: /api/v1
security: []
tags:
  - description: >-
      Discover the API contract, capabilities, health, and public provider
      pricing.
    name: discovery
    x-group: Discovery
  - description: Manage the authenticated account and personal access tokens.
    name: account-access
    x-group: Account & Access
  - description: Create projects and manage their core settings.
    name: projects
    x-group: Projects
  - description: Create, list, and revoke API keys.
    name: api-keys
    x-group: API Keys
  - description: Manage tracked keywords and exact keyword matching.
    name: keywords
    x-group: Keywords
  - description: Run rank checks and retrieve rank-check history.
    name: rank-checks
    x-group: Rank Checks
  - description: Research keywords, metrics, locations, and ranked keyword suggestions.
    name: keyword-research
    x-group: Keyword Research
  - description: Analyze backlinks and page through backlink snapshots.
    name: backlinks
    x-group: Backlinks
  - description: Analyze domain visibility and load its history, keywords, and pages.
    name: domain-overview
    x-group: Domain Overview
  - description: Read project analytics, traffic snapshots, and search-performance data.
    name: analytics
    x-group: Analytics
  - description: Manage alert rules, triggered alerts, and notification preferences.
    name: alerts
    x-group: Alerts
  - description: Manage project competitors.
    name: competitors
    x-group: Competitors
  - description: Inspect and configure project sitemap monitoring.
    name: sitemap-monitoring
    x-group: Sitemap Monitoring
  - description: Save keywords for later without putting them under rank tracking.
    name: saved-keywords
    x-group: Saved Keywords
  - description: Create, list, and delete saved views.
    name: saved-views
    x-group: Saved Views
  - description: Ingest and list project signals.
    name: signals
    x-group: Signals
  - description: Connect and configure external providers.
    name: providers
    x-group: Providers
  - description: Create and manage webhook endpoints.
    name: webhooks
    x-group: Webhooks
  - description: Manage team members and invitations.
    name: team
    x-group: Team
  - description: Manage migration tokens and instance import sessions.
    name: migration
    x-group: Migration
paths:
  /projects/{project_id}/keywords:
    get:
      tags:
        - keywords
      summary: List project keywords
      operationId: listKeywords
      parameters:
        - description: >-
            API contract version requested by the client. Omit this header to
            use the current backward-compatible behavior.
          in: header
          name: Bisibility-API-Version
          required: false
          schema:
            enum:
              - v1
            type: string
        - description: Maximum keywords to return. Defaults to 50.
          in: query
          name: limit
          schema:
            default: 50
            maximum: 200
            minimum: 1
            type: integer
        - description: >-
            Opaque v3 cursor returned as meta.next_cursor from the previous
            page.
          in: query
          name: cursor
          schema:
            type: string
        - description: Case-insensitive keyword text search. Also accepted as q.
          in: query
          name: search
          schema:
            type: string
        - description: Case-insensitive exact tag filter. Also accepted as filter[tag].
          in: query
          name: tag
          schema:
            type: string
        - description: Case-insensitive exact topic filter. Also accepted as filter[topic].
          in: query
          name: topic
          schema:
            maxLength: 80
            minLength: 1
            type: string
        - description: >-
            Case-insensitive exact intent filter. Also accepted as
            filter[intent].
          in: query
          name: intent
          schema:
            maxLength: 80
            minLength: 1
            type: string
        - description: Filter by SERP device. Also accepted as filter[device].
          in: query
          name: device
          schema:
            enum:
              - desktop
              - mobile
            type: string
        - description: >-
            Filter by canonical country or stored location alias. Also accepted
            as filter[country].
          in: query
          name: country
          schema:
            type: string
        - description: >-
            Match keywords with a rank check position greater than this number.
            Also accepted as filter[position_gt].
          in: query
          name: position_gt
          schema:
            type: number
        - description: >-
            Match keywords with a rank check position less than this number.
            Also accepted as filter[position_lt].
          in: query
          name: position_lt
          schema:
            type: number
        - description: Sort order for the keyword list.
          in: query
          name: sort
          schema:
            default: '-created_at'
            enum:
              - created_at
              - '-created_at'
              - keyword
              - '-keyword'
              - text
              - '-text'
              - updated_at
              - '-updated_at'
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: '#/components/schemas/Keyword'
                    type: array
                  meta:
                    properties:
                      next_cursor:
                        type:
                          - string
                          - 'null'
                    required:
                      - next_cursor
                    type: object
                required:
                  - data
                  - meta
                type: object
          description: JSON response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unsupported API version
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Rate limited
      security:
        - ProjectApiKey: []
        - PersonalAccessToken: []
components:
  schemas:
    Keyword:
      properties:
        country:
          description: Resolved keyword location display name.
          example: Austin, Texas, United States
          type: string
        created_at:
          format: date-time
          type: string
        device:
          enum:
            - desktop
            - mobile
          type: string
        id:
          example: kw_a00000000000000000000000
          pattern: ^kw_[a-z][a-z0-9]{23}$
          type: string
        intent:
          type:
            - string
            - 'null'
        language_code:
          example: en
          type: string
        language_label:
          example: English
          type: string
        latest_position:
          type:
            - integer
            - 'null'
        location:
          description: Resolved keyword location display name.
          example: Austin, Texas, United States
          type: string
        location_key:
          description: >-
            Canonical country, region, or city key, optionally qualified with
            @language. The default language normalizes to the unqualified key.
          example: ES/Andalusia/Malaga@en
          type: string
        previous_position:
          type:
            - integer
            - 'null'
        project_id:
          example: prj_a00000000000000000000000
          pattern: ^prj_[a-z][a-z0-9]{23}$
          type: string
        ranking_url:
          type:
            - string
            - 'null'
        schedule:
          properties:
            cron_expression:
              type:
                - string
                - 'null'
            frequency:
              enum:
                - paused
                - manual
                - daily
                - weekly
                - monthly
                - custom_cron
              type: string
            jitter_minutes:
              description: >-
                Whole-minute random delay from 0 to 120. Set 0 to disable
                jitter.
              maximum: 120
              minimum: 0
              type: integer
            last_checked_at:
              format: date-time
              type:
                - string
                - 'null'
            next_check_at:
              format: date-time
              type:
                - string
                - 'null'
            timezone:
              description: >-
                IANA time zone that anchors monthly and custom cron wall-clock
                schedules. Daily and weekly use a stable keyword-specific
                interval phase that timezone does not move.
              type: string
          required:
            - frequency
            - cron_expression
            - timezone
            - jitter_minutes
            - last_checked_at
            - next_check_at
          type:
            - object
            - 'null'
        tags:
          items:
            type: string
          type: array
        target_url:
          type:
            - string
            - 'null'
        text:
          example: rank tracker api
          type: string
        topic:
          type:
            - string
            - 'null'
        updated_at:
          format: date-time
          type: string
      required:
        - id
        - project_id
        - text
        - country
        - location
        - device
        - latest_position
        - language_code
        - language_label
        - location_key
        - previous_position
        - ranking_url
        - schedule
        - tags
        - target_url
        - topic
        - intent
        - created_at
        - updated_at
      type: object
    Problem:
      properties:
        detail:
          type: string
        docs_url:
          type: string
        errors: {}
        instance:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      required:
        - type
        - title
        - status
        - detail
        - instance
        - docs_url
      type: object
  securitySchemes:
    ProjectApiKey:
      bearerFormat: bsb_key_live_...
      description: >-
        Project-scoped API key. It cannot access account routes or create
        additional projects.
      scheme: bearer
      type: http
    PersonalAccessToken:
      bearerFormat: bsb_pat_live_...
      description: >-
        Personal access token for account routes and projects visible to the
        authenticated user.
      scheme: bearer
      type: http

````