List keywords
The keywords of the workspace with their match stats and poll health. Without parameters: every keyword, newest first. `q` searches the term and the context; `kind`, `status` and `platform` narrow the list; `sort` orders it; `limit` and `offset` page it. `total` counts the keywords that matched before paging.
API key minted via POST /v1/api-keys (format mk_live_...)
In: header
Query Parameters
Text to find in the term or in the keyword's context, case-insensitive.
1 <= length <= 200Only keywords in any of these groups (grp_...). Repeatable, or comma-separated.
items <= 50Only these kinds: brand, competitor, topic. Repeatable, or comma-separated.
items <= 3Only keywords in these states: active, muted, paused, capped. Repeatable, or comma-separated.
items <= 4Only keywords tracked on any of these platforms: its term searched there (every platform when its platforms are null), or for appstore and googleplay, an app of that store among its reviewSources. Repeatable, or comma-separated.
items <= 20newest: created most recently first. oldest: the reverse. term: A to Z. mentions: most matches first. relevant: most relevant matches first. recent: most matches in the last 7 days first. lastMention: newest matched post first, keywords with none last.
"newest""newest" | "oldest" | "term" | "mentions" | "relevant" | "recent" | "lastMention"Page size, 1 to 500. Omit for every keyword after offset.
1 <= value <= 500Skip this many keywords.
00 <= valueResponse Body
application/json
application/json
application/json
curl -X GET "https://api.mentio.dev/v1/keywords"{
"data": [
{
"id": "string",
"term": "string",
"kind": "brand",
"muted": true,
"pausedForBalance": true,
"pausedForNoise": true,
"pausedForCap": true,
"cap": {
"mentions": 1,
"per": "day",
"used": 0,
"welcome": true,
"own": 0,
"ownPer": "day",
"resumesAt": "string"
},
"comments": {
"enabled": true,
"maxPerPost": 1
},
"display": {
"languages": {
"only": [
"en"
],
"excluded": [
"en"
]
},
"countries": {
"only": [
"us"
],
"excluded": [
"us"
]
}
},
"group": {
"id": "string",
"name": "string",
"externalId": "string",
"isDefault": true
},
"platforms": [
"bluesky"
],
"feeds": [
{
"url": "string",
"title": "string",
"connectedAt": "string"
}
],
"readsWorkspaceFeeds": true,
"reviewSources": [
{
"platform": "appstore",
"id": "string",
"url": "string",
"countries": [
"string"
],
"language": "string",
"connectedAt": "string"
}
],
"context": "string",
"matching": {
"requiredTerms": [
"string"
],
"requiredMode": "any",
"requiredGroups": [
[
"string"
]
],
"excludedTerms": [
"string"
],
"excludedAuthors": [
"string"
],
"caseSensitive": true,
"exactPhrase": true,
"subreddits": {
"only": [
"string"
],
"excluded": [
"string"
]
},
"repositories": {
"events": [
"new"
],
"minStars": 1000000,
"minWeeklyStars": 25
}
},
"stats": {
"mentions": 0,
"relevant": 0,
"last7d": 0,
"thisMonth": 0,
"lastMentionAt": "string",
"feedback": {
"relevant": 0,
"notRelevant": 0
},
"noise": {
"scored": 0,
"relevant": 0,
"noisy": true
},
"health": "healthy",
"cost": {
"keywordDays": 0,
"keywordCents": 0,
"billableMentions": 0,
"mentionCents": 0,
"billableComments": 0,
"commentCents": 0,
"totalCents": 0
}
},
"polling": [
{
"platform": "bluesky",
"lastPolledAt": "string",
"emptyPolls": 0
}
],
"createdAt": "string"
}
],
"total": 0
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}Get a keyword GET
Previous Page
Update a keyword PATCH
Rename it (`term`: the new term is tracked from now on, with no look-back; the mentions the old term found stay), mute or unmute it, reclassify it (`kind`), change the platforms it is tracked on, its classifier `context`, its `matching` rules (each rule field optional; an empty list clears one), or its monthly mention `cap` (null removes it; a cap above this month's count resumes a capped keyword at once). Rules apply to new mentions from the next poll; stored mentions are untouched.