Brand against competitors
Every keyword matched in the window with its counts and its share of brand plus competitor matches; topic keywords are counted but stay out of the split. The window is `range` (7d, 30d, 90d, 365d, ending today) or `from` and `to`, cut into days in `timezone` (UTC by default); `keywordIds` and `platforms` narrow it; `compare=true` adds the period of the same length right before it. Time axis is the publish date.
API key minted via POST /v1/api-keys (format mk_live_...)
In: header
Query Parameters
Preset window ending today. Ignored when from or to is given. Default 30d.
"7d" | "30d" | "90d" | "365d"First day, YYYY-MM-DD, inclusive, in timezone.
^\d{4}-\d{2}-\d{2}$Last day, YYYY-MM-DD, inclusive, in timezone. Default today.
^\d{4}-\d{2}-\d{2}$Only these keyword ids. Repeatable, or comma-separated; omit for every keyword.
items <= 50Only these platforms. Repeatable, or comma-separated; omit for every platform.
items <= 20true adds the period of the same length right before the window as previous.
IANA zone the days are cut in (Europe/Madrid). Default UTC. One offset, the zone's at the end of the window, applies to the whole window.
length <= 64Response Body
application/json
application/json
application/json
curl -X GET "https://api.mentio.dev/v1/analytics/share-of-voice"{
"window": {
"from": "string",
"to": "string",
"days": 0,
"timezone": "string"
},
"data": [
{
"keyword": {
"id": "string",
"term": "string",
"kind": "brand"
},
"matched": 0,
"relevant": 0,
"negative": 0,
"buyIntent": 0,
"share": 0,
"previous": {
"matched": 0
}
}
]
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"retryAfterSeconds": 0
}
}Headline counts for a window GET
Matched and relevant mentions, distinct posts and people, sentiment, buying intent and questions, estimated reach, and where the matches stand in triage. The window is `range` (7d, 30d, 90d, 365d, ending today) or `from` and `to`, cut into days in `timezone` (UTC by default); `keywordIds` and `platforms` narrow it; `compare=true` adds the period of the same length right before it. Time axis is the publish date.
Introspect the credential GET
The workspace this credential acts on, how the request authenticated (an API key, an OAuth access token from an MCP sign-in, or the dashboard session), whether it may write, and for a key its id and expiry. Run it first: a read key answers 403 read_only_key on every write, and a wrong workspace is the classic scripting mistake.