Skip to main content
GET
List brand mentions

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.

Query Parameters

q
string

JSON filter object, for example {"needs_response":true}.

sort_by
string

Field to sort on.

limit
integer

Maximum rows to return.

skip
integer

Rows to skip, for paging.

Response

Matching brand mentions.

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.