Update a keyword
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.
API key minted via POST /v1/api-keys (format mk_live_...)
In: header
Path Parameters
Keyword id (kw_...).
1 <= lengthRenames the keyword: the new term is tracked from now on, with no look-back, and the keyword keeps its id, its settings and the mentions the old term found. Wrap it in double quotes for the exact phrase only. A 409 when its group already tracks the new term.
2 <= length <= 80Reclassify it as brand, competitor or topic.
"brand" | "competitor" | "topic"A muted keyword stops polling and matching; its mentions stay.
Replaces the platform list; null means every platform, [] none (reviews only, when the keyword has reviewSources).
A sentence the classifier reads for this keyword only, on top of the company profile or the group's own description (at most 300 characters): what the term means here, what to ignore. "Arc is our browser; ignore the geometry word." Null clears it.
length <= 300Omitted fields are untouched; an empty list clears one.
Replaces the mention cap and its period (per, default month); null removes it. A cap above the current period's count resumes a capped keyword at once, one at or under it pauses it.
Comments under this keyword's mentions; omitted fields are untouched (on create: off, 20 per post).
Which of this keyword's mentions you see, by language and country; each list is replaced when sent, kept when omitted. Hidden mentions are still billed.
Moves the keyword to this group (grp_...). A 409 when that group already tracks the term.
1 <= lengthReplaces the list of apps whose reviews this keyword collects; [] disconnects them all (their reviews stay). An app or country added here gets the free 30-day look-back; one already listed keeps its place.
items <= 10Replaces the feeds this keyword reads; [] disconnects them all (their mentions stay). A feed added here is checked now and brings its newest 10 matching items of the last 30 days; one already listed keeps its place.
items <= 20true: the keyword also reads the workspace's feeds (GET /v1/feeds), live from now on. false: its own feeds alone.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://api.mentio.dev/v1/keywords/kw_abc123" \ -H "Content-Type: application/json" \ -d '{}'{
"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"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}List keywords GET
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.
Export mentions as CSV GET
The same mentions GET /v1/mentions would list for these filters, as CSV, newest matched first (the order they entered your feed, which can differ from the post date): id, published_at, platform, keyword, author, author_url, author_followers, relevance, sentiment, intents (pipe-separated), language, confidence, status, relevant, delivered, url, links (pipe-separated), text (first 1,000 characters), group, group_external_id, rating and app_id (app store reviews only), title and image_url (where the platform has them), duplicate_of (the mention a cross-post copies; the CSV keeps one row per mention, copies included; with includeHidden=true, the mentions a keyword hides by language or country too, it adds up to the bill), kind (post, comment or repository), parent_url (the post a comment answers), comments (comments of it delivered to you), subreddit and flair (Reddit only), country (where the author is, ISO 3166-1 alpha-2, empty when unknown) and organization (true when a company or organization posted). Capped at 10,000 rows; the X-Mentions-Truncated header says when the cap cut the list. At most 6 exports per minute per workspace; a 429 carries Retry-After.