List a keyword's mentions
get_keyword_resultsThe same mentions as list_mentions, scoped to one keyword and carrying the bucket each was sorted into. Use it for "what has my monitor caught?" and, with bucket=, for "show me the pricing complaints". Free in the default text mode — these are your own rows. mode="semantic" asks the embedding index and charges 1 credit per question, then answers the same question free for 10 minutes, paging included. Do not set it to filter by keyword: that is what q= in text mode already does, for nothing. Cursor-paged: pass nextCursor back unchanged.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search text, matched per mode= (default: free substring search) | |
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| mode | No | How q= is matched. "text" (the default) scans the window for the substring and is free. "semantic" asks the embedding index — it finds "this thing keeps crashing" for q="reliability complaints" — and charges. Never set it to do a keyword filter. | |
| limit | No | How many mentions to return, 1-100. Defaults to 25 here, a page a model can actually read. Never page to count: mentions_stats counts the whole window in one free call. | |
| since | No | ISO 8601 instant. Only mentions after it; defaults to the last 24 hours. | |
| until | No | ISO 8601 instant, inclusive. Only mentions before it. Use with since= to ask about a closed interval — a single day, or the week of a launch — instead of everything since a date. Absent means up to now. | |
| bucket | No | A bucket id from list_keyword_buckets, or the literal "uncategorised", which is a real destination (nothing matched), not a missing value. | |
| cursor | No | The previous response's nextCursor, passed back unchanged, for the next page. Its absence from a response means that was the last page. | |
| intent | No | Only mentions read as one of these intents. Several are OR'd, so ["purchase_intent", "comparison"] is the leads view for this keyword. "unread" is what nothing has classified yet. | |
| source | No | Only these Sources. Several are OR'd, so ["reddit", "hackernews"] is both in one call. Absent means every Source this keyword polls. | |
| sentiment | No | Only mentions read as one of these sentiments. Several are OR'd, so ["negative", "question"] is "what needs an answer" for this keyword. "unread" is what nothing has classified yet. | |
| engagement | No | A per-Source rule, repeatable: "<source|*>:<metric><operator><number>" — ["x:likes>=100", "reddit:score>50"] is "what landed, judged by what landing means where it was posted". Metrics are likes, replies, reposts, comments, score, views, plus total for the same interaction sum engagement_min reads. Operators are >=, >, =, <, <=; the number is whole and may be negative (Reddit and Lemmy net downvotes out). A Source no rule names PASSES — ["x:likes>=100"] narrows X and leaves Hacker News alone — a named rule overrides * for its own Source, and several rules on one Source are ANDed; use source to ask for one Source. A metric that was never counted satisfies NOTHING, < included: YouTube reports no likes, RSS and AI answers report no audience, and mentions recorded before 2026-09-04 predate the field, so ["youtube:likes<10"] returns none of them rather than all of them. Send this or engagement_min, never both. | |
| opportunity | No | true keeps only opportunities: mentions of a topic or competitor keyword that are highly relevant to it and whose author is someone to answer (the keyword's agent step says problem_fit true, or, without that field, the intent is purchase_intent, comparison or question). Use it for "who should I answer today?". An own keyword has none. Free. | |
| engagement_min | No | Only mentions with at least this many interactions — likes, replies, reposts, comments or score, depending on the Source. Never counts views. Mentions with no counters at all (RSS, AI answers, anything recorded before 2026-09-04) are left out rather than treated as zero. Counters are captured when the item is collected and never refreshed, so a threshold reads against recent mentions. For a threshold on one metric on one Source, use engagement instead. |