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

# List brand trackers

> Reads brand trackers in the selected workspace. Filter with `q`, a JSON object of field matches. Reads only: writes through this route are refused for every entity and every credential.



## OpenAPI

````yaml /openapi.json get /api/entities/BrandTracker
openapi: 3.1.0
info:
  title: Reputably API
  version: 1.0.0
  description: >-
    The HTTP surface an agent credential can reach. It is read plus safe writes:
    you can read your reputation data, generate drafts, queue reports and run
    first-time tracking setup. You cannot send anything to an external platform,
    trigger syncs, touch billing or manage credentials.


    The same endpoints back the MCP server, so anything documented here is
    reachable both ways.
servers:
  - url: https://app.reputably.net
    description: Reputably
  - url: https://your-domain.example
    description: Your own verified white-label domain
security:
  - agentKey: []
tags:
  - name: Businesses
    description: The locations you track, their plan usage and AI-generated insights.
  - name: Reviews
    description: Google and Facebook reviews, including which still need a reply.
  - name: Brand mentions
    description: Mentions across X, Reddit, YouTube, Facebook communities and the open web.
  - name: Brand tracking
    description: The trackers that find mentions, and competitor share of voice.
  - name: Leads
    description: Buying signals detected in mentions, with the public post to reply to.
  - name: AI Visibility
    description: >-
      Whether AI assistants recommend the business, what they cite, and how it
      moves.
  - name: AI Traffic
    description: Which AI crawlers read the website, and who arrives from an AI answer.
  - name: Posts
    description: Google Business Profile posts and drafts.
  - name: Reports
    description: Queued report renders and their CSV output.
  - name: Setup
    description: First-time tracking configuration.
  - name: Account
    description: Workspaces, notifications, sync status and prospect audits.
paths:
  /api/entities/BrandTracker:
    get:
      tags:
        - Brand tracking
      summary: List brand trackers
      description: >-
        Reads brand trackers in the selected workspace. Filter with `q`, a JSON
        object of field matches. Reads only: writes through this route are
        refused for every entity and every credential.
      operationId: listBrandTracker
      parameters:
        - name: q
          in: query
          required: false
          schema:
            type: string
          description: JSON filter object, for example {"needs_response":true}.
        - name: sort_by
          in: query
          required: false
          schema:
            type: string
          description: Field to sort on.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
          description: Maximum rows to return.
        - name: skip
          in: query
          required: false
          schema:
            type: integer
          description: Rows to skip, for paging.
        - name: X-Workspace-Id
          in: header
          required: false
          schema:
            type: string
          description: >-
            Which workspace to read. Omit it and you get the account’s home
            workspace, which on an agency account is often not where the live
            businesses are. A workspace this credential cannot read is refused
            with 403 rather than quietly answered from the default.
      responses:
        '200':
          description: Matching brand trackers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BrandTracker'
        '401':
          description: Missing or invalid credential.
        '403':
          description: Not readable by this credential, or not in this workspace.
components:
  schemas:
    BrandTracker:
      type: object
      title: BrandTracker
      properties:
        id:
          type: string
          description: Unique id.
        location_id:
          type: string
        tracker_name:
          type: string
        search_query:
          type: string
        search_keywords:
          type: array
          items:
            type: string
        exclude_keywords:
          type: array
          items:
            type: string
        platforms:
          type: array
          items:
            type: string
        is_active:
          type: boolean
        last_synced_at:
          type: string
        last_tweet_id:
          type: string
        last_tweet_time:
          type: string
        total_mentions:
          type: integer
        sync_frequency_minutes:
          type: integer
        include_retweets:
          type: boolean
        auto_archive_irrelevant:
          type: boolean
        language_filter:
          type: array
          items:
            type: string
        lookback_hours:
          type: integer
        reddit_search_query:
          type: string
        reddit_subreddits:
          type: array
          items:
            type: string
        reddit_include_comments:
          type: boolean
        reddit_last_synced_at:
          type: string
        reddit_last_post_id:
          type: string
        web_monitoring_enabled:
          type: boolean
        web_search_query:
          type: string
        web_last_synced_at:
          type: string
        news_last_synced_at:
          type: string
        web_sync_frequency_minutes:
          type: integer
        news_sync_frequency_minutes:
          type: integer
        excluded_domains:
          type: array
          items:
            type: string
        monitored_source_types:
          type: array
          items:
            type: string
        tracker_type:
          type: string
          enum:
            - brand
            - keyword
          description: >-
            'brand' = matches exact brand mentions (existing behavior).
            'keyword' = matches topical mentions scoped to the attached
            BusinessLocation's geography (or globally for online-only
            businesses).
        topic_keywords:
          type: array
          items:
            type: string
          description: >-
            For tracker_type='keyword' only. Topical phrases to track.
            Semantically distinct from search_keywords (exact-match brand
            terms). Example: ['car accident', 'auto collision', 'DUI accident'].
            Joined as OR on each platform's search syntax.
        required_terms:
          type: array
          items:
            type: string
          description: >-
            For tracker_type='keyword' only, opt-in. A fetched post/comment is
            dropped at sync time unless its text (title + body + subreddit name)
            contains at least one of these terms, case-insensitive. Fixes the
            Reddit over-fetch where the partial-match ranker drops the
            discriminating token from a multi-word keyword ('sell property
            Kellyville' matching worldwide 'sell property' posts). Empty =
            filter off. Currently enforced on the Reddit fetch; other platforms
            rely on the relevance LLM (their fetch text can be a truncated SERP
            snippet, so a hard drop there would false-positive).
        geo_inheritance:
          type: string
          enum:
            - inherit
            - global
            - custom
          description: >-
            How this tracker derives its geographic search context from the
            attached business.
        geo_scope:
          type: string
          enum:
            - global
            - country
            - state
            - city
            - suburb
        lead_detection_enabled:
          type: boolean
          description: >-
            When true, mentions whose intent_score meets lead_intent_threshold
            are auto-promoted to the /leads kanban as Lead rows in stage=new.
            Default ON so every tracker contributes to the Leads inbox; users
            can opt out per-tracker in the wizard.
        lead_intent_threshold:
          type: number
          description: >-
            Minimum intent_score (0-1) from the sentiment LLM for a mention to
            become a Lead. Lower = more sensitive, higher = stricter.
        lead_categories:
          type: array
          items:
            type: string
          description: >-
            Recommendation requests for any of these categories qualify. Falls
            back to BusinessLocation.business_category when empty.
        lead_notify_max_post_age_days:
          type: number
          description: >-
            Per-tracker override for how old a post may be and still fire a lead
            notification. Unset falls back to env LEAD_NOTIFY_MAX_POST_AGE_DAYS,
            then to 7. 0 or less disables the age gate for this tracker (notify
            at any age) — it never means 'block everything'. Only affects
            DELIVERY: leads are created at any age regardless. See
            lib/notificationChannels.js.
  securitySchemes:
    agentKey:
      type: http
      scheme: bearer
      description: >-
        An agent key (`rpk_...`) created in Settings → API & MCP, sent as
        `Authorization: Bearer rpk_...`. Bearer only: a cookie session can never
        drive this API. An OAuth 2.1 access token obtained from the same host
        works identically and lands on the same ceiling.

````