Skip to main content
GET
Get one brand mention

Authorizations

Authorization
string
header
required

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.

Headers

X-Workspace-Id
string

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.

Path Parameters

id
string
required

The brand mention id.

Response

The brand mention.

id
string

Unique id.

tracker_id
string
location_id
string
platform
enum<string>
Available options:
twitter,
reddit,
news,
social,
blog,
web,
forum,
facebook_communities
platform_post_id
string
platform_post_url
string
post_text
string
post_language
string
posted_at
string
author_username
string
author_display_name
string
author_profile_image_url
string
author_followers_count
integer
author_is_verified
boolean
is_retweet
boolean
is_reply
boolean
is_quote_tweet
boolean
original_post_url
string
like_count
integer
retweet_count
integer
reply_count
integer
quote_count
integer
impression_count
integer
reach_estimate
integer
sentiment
enum<string>
Available options:
positive,
neutral,
negative,
mixed
sentiment_score
number
emotion
enum<string>
Available options:
joy,
anger,
sadness,
fear,
surprise,
disgust,
neutral
key_topics
string[]
media_urls
string[]
is_flagged
boolean
flag_reason
string
is_read
boolean
is_archived
boolean
archive_reason
string

Why the sync auto-archived this mention (e.g. 'geo_mismatch'). Absent for user archives and pre-existing rows.

mention_location
string

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
enum<string>

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.

Available options:
in_area,
nearby,
out_of_area,
no_signal
is_actioned
boolean
action_note
string
priority
enum<string>
Available options:
urgent,
high,
medium,
low
synced_at
string
reddit_subreddit
string
reddit_post_title
string
reddit_post_selftext
string
reddit_parent_post_url
string
reddit_parent_post_id
string
reddit_discovered_via
enum<string>
Available options:
comment
reddit_post_type
enum<string>
Available options:
post,
comment
reddit_post_score
integer
reddit_is_nsfw
boolean
source_domain
string
source_name
string
source_favicon_url
string
page_title
string
page_snippet
string
google_rank
integer
ai_suggested_reply
string

Latest AI-generated draft. Regenerating a draft overwrites this — no history kept. reply_text is the user-edited final version.

reply_text
string

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
enum<string>

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.

Available options:
draft,
copied,
posted,
failed
reply_posted_at
string
reply_posted_by
string
reply_platform_id
string

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
enum<string>

Denormalized from BrandTracker at sync time. Powers the BrandFeed's tracker-type chip filter without joining.

Available options:
brand,
keyword
intent_score
number

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
string

One-line 'why' from the LLM explaining the intent_score. Surfaced as a tooltip on Lead cards.

competitors_mentioned
object[]

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
boolean

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
boolean

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.