> ## 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.

# Get one brand mention

> Reads a single brand mention by id. Ids do not cross workspaces.



## OpenAPI

````yaml /openapi.json get /api/entities/Mention/{id}
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/Mention/{id}:
    get:
      tags:
        - Brand mentions
      summary: Get one brand mention
      description: Reads a single brand mention by id. Ids do not cross workspaces.
      operationId: getMention
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The brand mention id.
        - 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: The brand mention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mention'
        '401':
          description: Missing or invalid credential.
        '403':
          description: Not readable by this credential, or not in this workspace.
        '404':
          description: No such brand mention in this workspace.
components:
  schemas:
    Mention:
      type: object
      title: Mention
      properties:
        id:
          type: string
          description: Unique id.
        tracker_id:
          type: string
        location_id:
          type: string
        platform:
          type: string
          enum:
            - twitter
            - reddit
            - news
            - social
            - blog
            - web
            - forum
            - facebook_communities
        platform_post_id:
          type: string
        platform_post_url:
          type: string
        post_text:
          type: string
        post_language:
          type: string
        posted_at:
          type: string
        author_username:
          type: string
        author_display_name:
          type: string
        author_profile_image_url:
          type: string
        author_followers_count:
          type: integer
        author_is_verified:
          type: boolean
        is_retweet:
          type: boolean
        is_reply:
          type: boolean
        is_quote_tweet:
          type: boolean
        original_post_url:
          type: string
        like_count:
          type: integer
        retweet_count:
          type: integer
        reply_count:
          type: integer
        quote_count:
          type: integer
        impression_count:
          type: integer
        reach_estimate:
          type: integer
        sentiment:
          type: string
          enum:
            - positive
            - neutral
            - negative
            - mixed
        sentiment_score:
          type: number
        emotion:
          type: string
          enum:
            - joy
            - anger
            - sadness
            - fear
            - surprise
            - disgust
            - neutral
        key_topics:
          type: array
          items:
            type: string
        media_urls:
          type: array
          items:
            type: string
        is_flagged:
          type: boolean
        flag_reason:
          type: string
        is_read:
          type: boolean
        is_archived:
          type: boolean
        archive_reason:
          type: string
          description: >-
            Why the sync auto-archived this mention (e.g. 'geo_mismatch').
            Absent for user archives and pre-existing rows.
        mention_location:
          type: string
          description: >-
            The post's resolved place or market from the geo gate (e.g.
            'Hangzhou, China', 'US market (Zillow/FHA cues)'). Null when no
            signal resolved or the tracker has no geo scope.
        geo_match:
          type: string
          enum:
            - in_area
            - nearby
            - out_of_area
            - no_signal
          description: >-
            Geo verdict vs the business service area, set at analysis time for
            geo-scoped trackers. 'out_of_area' forces is_relevant=false;
            'no_signal' blocks Lead promotion at suburb/city/state scope.
        is_actioned:
          type: boolean
        action_note:
          type: string
        priority:
          type: string
          enum:
            - urgent
            - high
            - medium
            - low
        synced_at:
          type: string
        reddit_subreddit:
          type: string
        reddit_post_title:
          type: string
        reddit_post_selftext:
          type: string
        reddit_parent_post_url:
          type: string
        reddit_parent_post_id:
          type: string
        reddit_discovered_via:
          type: string
          enum:
            - comment
        reddit_post_type:
          type: string
          enum:
            - post
            - comment
        reddit_post_score:
          type: integer
        reddit_is_nsfw:
          type: boolean
        source_domain:
          type: string
        source_name:
          type: string
        source_favicon_url:
          type: string
        page_title:
          type: string
        page_snippet:
          type: string
        google_rank:
          type: integer
        ai_suggested_reply:
          type: string
          description: >-
            Latest AI-generated draft. Regenerating a draft overwrites this — no
            history kept. `reply_text` is the user-edited final version.
        reply_text:
          type: string
          description: >-
            The final reply the user actually copied/posted. For YouTube this is
            what the YouTube Data API comment_threads.insert request carried.
            For X/Reddit it's what went to the clipboard.
        reply_status:
          type: string
          enum:
            - draft
            - copied
            - posted
            - failed
          description: >-
            `draft` = AI draft generated, not posted yet. `copied` = user
            clicked Copy for X/Reddit intent flow but hasn't confirmed. `posted`
            = sent (API success for YouTube, or user-confirmed for X/Reddit).
            `failed` = API post failed and needs retry.
        reply_posted_at:
          type: string
        reply_posted_by:
          type: string
        reply_platform_id:
          type: string
          description: >-
            Platform-assigned ID of the reply itself (e.g. YouTube comment id
            returned by commentThreads.insert). Null for draft-assist platforms
            (X / Reddit).
        tracker_type:
          type: string
          enum:
            - brand
            - keyword
          description: >-
            Denormalized from BrandTracker at sync time. Powers the BrandFeed's
            tracker-type chip filter without joining.
        intent_score:
          type: number
          description: >-
            0-1 likelihood that the author is asking for a recommendation for
            this kind of business. Set by the sentiment LLM at sync time. Drives
            auto-promotion to /leads.
        intent_reason:
          type: string
          description: >-
            One-line 'why' from the LLM explaining the intent_score. Surfaced as
            a tooltip on Lead cards.
        competitors_mentioned:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              sentiment:
                type: string
          description: >-
            Other brands named in this post/comment, discovered by the sentiment
            LLM at sync time (the brand/topic analog of
            VisibilityRun.competitors_mentioned). `sentiment` is how THIS post
            portrays that competitor (positive|neutral|negative|mixed), which
            may differ from the mention's overall sentiment. Empty for rows
            synced before this feature and for mentions naming no other brand
            (the common case on brand trackers).
        first_run:
          type: boolean
          description: >-
            Ingested by the tracker's first-ever sync of this platform, i.e.
            part of the initial backlog. Leads still get created from these
            rows, but they never fire a notification — the posts are newly
            DISCOVERED, not newly posted. Set at ingest rather than derived at
            delivery time because by then the rows already exist and the fact is
            unrecoverable; it also has to survive Facebook's sweep promoting a
            stranded row days later. Distinct from is_backlog: see below.
        is_backlog:
          type: boolean
          description: >-
            No known post date, so the leads board sinks the row to the bottom
            of 'newest' instead of letting it fall back to created_at (~now) and
            bury genuinely-dated leads. CLEARED the moment a scrape supplies the
            real date (applyFbScrape) — which is exactly why it cannot double as
            the notification gate's first-run signal; use first_run for that.
            Set on any run, not just the first.
  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.

````