List mentions
Mentions matched to your keywords, filtered and paginated. Default order is newest match first; sort=priority ranks the last 30 days of matches by attention score. Page with nextCursor, passing the same filters and sort. A mention is one post matched to one keyword. alertId applies an alert rule's filter on top of the others: the same mentions that rule would send.
API key minted via POST /v1/api-keys (format mk_live_...)
In: header
Query Parameters
Only matches of this keyword.
Only posts from this platform.
"bluesky" | "hackernews" | "github" | "stackoverflow" | "devto" | "reddit" | "x" | "youtube" | "news" | "linkedin"Only mentions in this status. Omit for every status.
"open" | "ignored" | "done"true: only mentions the classifier scored relevant; false: only the rest (unclassified included).
Only this sentiment.
"positive" | "neutral" | "negative"Only mentions carrying this intent (buy_intent, question, complaint, praise, comparison).
true: only mentions that read as machine-made (a bot account, a scheduled or templated post, AI-written text); false: only the rest, mentions judged before this existed included. Omitted: everything.
Only this person (an id from /v1/people), merged accounts included. Implies includeMuted.
1 <= lengthtrue: include mentions by people you muted, hidden by default.
Only mentions assigned to this workspace member (user id).
1 <= lengthtrue: only mentions currently snoozed. Otherwise snoozed mentions stay out until they wake.
Hide these authors: display names, handles or profile URLs. Repeatable, or one comma-separated value.
items <= 200Only mentions scored at least this; unclassified ones are excluded.
0 <= value <= 100Only authors with at least this many followers. Unknown reach never passes.
0 <= valueOnly authors with at most this many followers. Unknown reach never passes.
0 <= valuetrue: only replies and comments (posts answering another post); false: only top-level posts. Omitted: both.
Apply an alert rule's filter (an id from GET /v1/alerts) on top of the other filters: the same mentions the rule would send, for a feed-shaped export or a preview. Unknown ids are a 404.
1 <= lengthOnly authors your workspace tagged with any of these (exact, case-sensitive). Repeatable, or comma-separated.
items <= 20Only posts linking to any of these hosts, the host itself or a subdomain of it (octolens.com also matches blog.octolens.com). Repeatable, or comma-separated.
items <= 20Only posts from any of these platforms.
items <= 20Never posts from these platforms.
items <= 20Only matches of any of these keywords.
items <= 50Never matches of these keywords.
items <= 50Only these sentiments.
items <= 3Never these sentiments. A mention the classifier has not scored yet still passes.
items <= 3Only mentions carrying any of these intents.
items <= 10Never mentions carrying these intents.
items <= 10Never posts linking to these hosts, the host itself or a subdomain of it.
items <= 20Never authors your workspace tagged with any of these.
items <= 20Only posts in any of these languages (ISO 639-1: en, es, de). A post whose language is unknown never passes.
items <= 20Never posts in these languages. A post whose language is unknown still passes.
items <= 20Substring search in the post text or the author's name.
Only posts published at or after this instant (ISO 8601, or epoch ms).
date-timeOnly posts published at or before this instant (ISO 8601, or epoch ms).
date-timenewest: by match time, newest first. priority: by attention score, highest first; priority ranks the last 30 days of matches only, older ones stay reachable under newest. Cursors are specific to a sort.
"newest""newest" | "priority"nextCursor from the previous page; pass the same filters and sort.
Page size, 1 to 100.
251 <= value <= 100Response Body
application/json
application/json
application/json
curl -X GET "https://api.mentio.dev/v1/mentions"{
"data": [
{
"id": "string",
"status": "open",
"relevant": true,
"delivered": true,
"priority": 0,
"keyword": {
"id": "string",
"term": "string"
},
"post": {
"platform": "bluesky",
"url": "string",
"text": "string",
"links": [
"string"
],
"publishedAt": "string",
"replyTo": {
"author": "string",
"url": "string",
"text": "string"
}
},
"author": {
"id": "string",
"name": "string",
"handle": "string",
"url": "string",
"avatarUrl": "string",
"followers": 0,
"tags": [
"string"
]
},
"classification": {
"relevance": 100,
"sentiment": "positive",
"intents": [
"string"
],
"automated": true,
"language": "string",
"note": "string",
"failed": true,
"feedback": {
"relevant": true,
"sentiment": "positive",
"at": "string",
"original": {
"relevance": 100,
"sentiment": "positive"
}
}
},
"triage": {
"assignee": {
"id": "string",
"name": "string",
"email": "string"
},
"snoozedUntil": "string",
"note": "string"
},
"createdAt": "string"
}
],
"nextCursor": "string"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}Get a mention GET
One mention by id, as it appears in the list: the post, its author with reach and your tags, the classification, the priority score and the triage fields. Ids belong to your organization; any other id is a 404.
Update a mention PATCH
The one write on a mention. Set status to ignored or done to handle it (open puts it back), assign it to a workspace member, snooze it out of the feed, leave an internal note, or correct the classifier: `relevant` true or false is your verdict (relevance becomes 100 or 0, and every list, filter, digest and report follows it), `sentiment` replaces the label; null withdraws a verdict and restores the classifier's value. Omitted fields are untouched. Delivery and billing never change.