curl --request POST \
--url https://api.mentionlab.io/api/analytics/themes/stance-distribution \
--header 'Content-Type: application/json' \
--header 'x-project-id: <x-project-id>' \
--data '
{
"startDate": "2025-01-01",
"endDate": "2025-01-31",
"countries": [
"BE",
"FR"
],
"languages": [
"en",
"fr"
],
"models": [
"gpt-4o",
"claude-3-5-sonnet"
],
"queryIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTagIds": [
"42"
],
"execTagIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTagGroupIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"execTagGroupIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTypes": [],
"timezone": "UTC",
"groupByEntityGroup": false,
"showAllEntities": false,
"entityId": "550e8400-e29b-41d4-a716-446655440000"
}
'import requests
url = "https://api.mentionlab.io/api/analytics/themes/stance-distribution"
payload = {
"startDate": "2025-01-01",
"endDate": "2025-01-31",
"countries": ["BE", "FR"],
"languages": ["en", "fr"],
"models": ["gpt-4o", "claude-3-5-sonnet"],
"queryIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTagIds": ["42"],
"execTagIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTagGroupIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"execTagGroupIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTypes": [],
"timezone": "UTC",
"groupByEntityGroup": False,
"showAllEntities": False,
"entityId": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
"x-project-id": "<x-project-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-project-id': '<x-project-id>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startDate: '2025-01-01',
endDate: '2025-01-31',
countries: ['BE', 'FR'],
languages: ['en', 'fr'],
models: ['gpt-4o', 'claude-3-5-sonnet'],
queryIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTagIds: ['42'],
execTagIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTagGroupIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
execTagGroupIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTypes: [],
timezone: 'UTC',
groupByEntityGroup: false,
showAllEntities: false,
entityId: '550e8400-e29b-41d4-a716-446655440000'
})
};
fetch('https://api.mentionlab.io/api/analytics/themes/stance-distribution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mentionlab.io/api/analytics/themes/stance-distribution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'startDate' => '2025-01-01',
'endDate' => '2025-01-31',
'countries' => [
'BE',
'FR'
],
'languages' => [
'en',
'fr'
],
'models' => [
'gpt-4o',
'claude-3-5-sonnet'
],
'queryIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTagIds' => [
'42'
],
'execTagIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTagGroupIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'execTagGroupIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTypes' => [
],
'timezone' => 'UTC',
'groupByEntityGroup' => false,
'showAllEntities' => false,
'entityId' => '550e8400-e29b-41d4-a716-446655440000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-project-id: <x-project-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mentionlab.io/api/analytics/themes/stance-distribution"
payload := strings.NewReader("{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-project-id", "<x-project-id>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mentionlab.io/api/analytics/themes/stance-distribution")
.header("x-project-id", "<x-project-id>")
.header("Content-Type", "application/json")
.body("{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mentionlab.io/api/analytics/themes/stance-distribution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-project-id"] = '<x-project-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}"
response = http.request(request)
puts response.read_body[
{
"entityId": "<string>",
"displayName": "Acme",
"isPrimary": true,
"mentions": 42,
"sentimentScore": 72,
"positive": 24,
"neutral": 14,
"negative": 4,
"chosen": 8,
"mentioned": 12,
"named": 10,
"negativeMentioned": 2,
"negativeNamed": 1,
"withStance": 33
}
]{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}Get per-brand stance distribution (Brand Intelligence)
Returns each brand mentioned in scope with its stance distribution (chosen / mentioned / named / negative_mentioned / negative_named) from EntityMentions.stance, plus total mentions for ranking. The five buckets are exclusive. Pass entityId to narrow to one brand. All standard analytics filters apply.
curl --request POST \
--url https://api.mentionlab.io/api/analytics/themes/stance-distribution \
--header 'Content-Type: application/json' \
--header 'x-project-id: <x-project-id>' \
--data '
{
"startDate": "2025-01-01",
"endDate": "2025-01-31",
"countries": [
"BE",
"FR"
],
"languages": [
"en",
"fr"
],
"models": [
"gpt-4o",
"claude-3-5-sonnet"
],
"queryIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTagIds": [
"42"
],
"execTagIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTagGroupIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"execTagGroupIds": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"queryTypes": [],
"timezone": "UTC",
"groupByEntityGroup": false,
"showAllEntities": false,
"entityId": "550e8400-e29b-41d4-a716-446655440000"
}
'import requests
url = "https://api.mentionlab.io/api/analytics/themes/stance-distribution"
payload = {
"startDate": "2025-01-01",
"endDate": "2025-01-31",
"countries": ["BE", "FR"],
"languages": ["en", "fr"],
"models": ["gpt-4o", "claude-3-5-sonnet"],
"queryIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTagIds": ["42"],
"execTagIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTagGroupIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"execTagGroupIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"queryTypes": [],
"timezone": "UTC",
"groupByEntityGroup": False,
"showAllEntities": False,
"entityId": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
"x-project-id": "<x-project-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-project-id': '<x-project-id>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startDate: '2025-01-01',
endDate: '2025-01-31',
countries: ['BE', 'FR'],
languages: ['en', 'fr'],
models: ['gpt-4o', 'claude-3-5-sonnet'],
queryIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTagIds: ['42'],
execTagIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTagGroupIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
execTagGroupIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
queryTypes: [],
timezone: 'UTC',
groupByEntityGroup: false,
showAllEntities: false,
entityId: '550e8400-e29b-41d4-a716-446655440000'
})
};
fetch('https://api.mentionlab.io/api/analytics/themes/stance-distribution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mentionlab.io/api/analytics/themes/stance-distribution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'startDate' => '2025-01-01',
'endDate' => '2025-01-31',
'countries' => [
'BE',
'FR'
],
'languages' => [
'en',
'fr'
],
'models' => [
'gpt-4o',
'claude-3-5-sonnet'
],
'queryIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTagIds' => [
'42'
],
'execTagIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTagGroupIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'execTagGroupIds' => [
'3fa85f64-5717-4562-b3fc-2c963f66afa6'
],
'queryTypes' => [
],
'timezone' => 'UTC',
'groupByEntityGroup' => false,
'showAllEntities' => false,
'entityId' => '550e8400-e29b-41d4-a716-446655440000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-project-id: <x-project-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mentionlab.io/api/analytics/themes/stance-distribution"
payload := strings.NewReader("{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-project-id", "<x-project-id>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mentionlab.io/api/analytics/themes/stance-distribution")
.header("x-project-id", "<x-project-id>")
.header("Content-Type", "application/json")
.body("{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mentionlab.io/api/analytics/themes/stance-distribution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-project-id"] = '<x-project-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startDate\": \"2025-01-01\",\n \"endDate\": \"2025-01-31\",\n \"countries\": [\n \"BE\",\n \"FR\"\n ],\n \"languages\": [\n \"en\",\n \"fr\"\n ],\n \"models\": [\n \"gpt-4o\",\n \"claude-3-5-sonnet\"\n ],\n \"queryIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagIds\": [\n \"42\"\n ],\n \"execTagIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"execTagGroupIds\": [\n \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\n ],\n \"queryTypes\": [],\n \"timezone\": \"UTC\",\n \"groupByEntityGroup\": false,\n \"showAllEntities\": false,\n \"entityId\": \"550e8400-e29b-41d4-a716-446655440000\"\n}"
response = http.request(request)
puts response.read_body[
{
"entityId": "<string>",
"displayName": "Acme",
"isPrimary": true,
"mentions": 42,
"sentimentScore": 72,
"positive": 24,
"neutral": 14,
"negative": 4,
"chosen": 8,
"mentioned": 12,
"named": 10,
"negativeMentioned": 2,
"negativeNamed": 1,
"withStance": 33
}
]{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}Headers
Project ID to specify the project context
Body
Start date (inclusive)
"2025-01-01"
End date (inclusive)
"2025-01-31"
Filter by country codes
["BE", "FR"]
Filter by language codes
["en", "fr"]
Filter by AI models
["gpt-4o", "claude-3-5-sonnet"]
Filter by query IDs
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
Filter by source presence: "sources" (only with sources), "no_sources" (only without), "all" (no filter). Legacy true/false values are still accepted.
all, sources, no_sources Filter by shopping presence: "shopping" (only with shopping), "no_shopping" (only without), "all" (no filter). Legacy true/false values are still accepted.
all, shopping, no_shopping Filter by sponsored-ad presence: "ads" (only with ads), "no_ads" (only without), "all" (no filter). Legacy true/false values are still accepted.
all, ads, no_ads Filter by query tag IDs (numeric — bigint column)
["42"]
Filter by execution tag IDs
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
Filter by query tag group IDs — matches rows carrying any tag filed under a selected group. Combines with queryTagIds per queryTagMode.
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
Filter by execution tag group IDs — matches rows carrying any tag filed under a selected group. Combines with execTagIds per execTagMode.
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
Filter by query type. Include "untyped" to also match queries without a type. Results from since-deleted queries are excluded when this filter is set.
comparative, informative, perception, untyped Query tag matching mode: "and" matches ALL tags (default, the dashboard's), "or" matches ANY tag.
and, or Execution tag matching mode: "and" matches ALL tags (default, the dashboard's), "or" matches ANY tag.
and, or Deprecated and ignored. Date bounds and buckets are always UTC. Accepted for backward compatibility only.
"UTC"
Row grouping level for entity results. "none" = one row per entity, "division" = one row per division (entities not in a division get their own row), "group" = one row per top-level group (divisions roll up into their group). Defaults to "none".
none, division, group Deprecated — use groupBy instead. true is equivalent to groupBy="group".
false
Include entities that have only ever been seen in a single AI response. These are mostly one-off extraction noise and are hidden by default.
false
Restrict to a single brand (entity) — omit for all brands.
"550e8400-e29b-41d4-a716-446655440000"
Response
Entity (brand) id.
Brand display name.
"Acme"
Whether this is a primary/owned brand.
Total entity_mentions in scope (classified or not).
42
Average brand sentiment score (1-100) across mentions.
72
Positive-sentiment mentions.
24
Neutral-sentiment mentions.
14
Negative-sentiment mentions.
4
The answer put the brand forward as the pick.
8
Arguments given about the brand, without being the pick.
12
Named only, no argument.
10
Arguments given against it.
2
Named among the negatives, no argument.
1
Sum of the five buckets (rows with a stance).
33