Get Theme Keyword Sentiment
curl --request GET \
--url https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions', 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.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"keywordId": "<string>",
"keyword": "<string>",
"positiveSentiment": 123,
"neutralSentiment": 123,
"negativeSentiment": 123
}Sentiment
Get Theme Keyword Sentiment
Retrieve sentiment breakdown for keywords within a specific theme.
GET
/
ai-analytics-service
/
api
/
public
/
v1
/
sentiment
/
theme
/
{themeId}
/
keyword
/
mentions
Get Theme Keyword Sentiment
curl --request GET \
--url https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions', 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.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/{themeId}/keyword/mentions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"keywordId": "<string>",
"keyword": "<string>",
"positiveSentiment": 123,
"neutralSentiment": 123,
"negativeSentiment": 123
}Returns sentiment data for each keyword within a theme. Use this to identify which keywords drive positive or negative sentiment.
Parameters
string
required
Unique identifier for the theme.
string
required
Bearer token. Format:
Bearer slat_<your-token>.integer
Number of days for the analysis window. Range: 1–365. Default:
30.string
Start of date range. RFC 3339 timestamp (e.g.,
2026-02-01T00:00:00Z). Send together with to.string
End of date range. RFC 3339 timestamp. Send together with
from. Data through the end of this date (UTC) is included. The range can’t exceed 366 days.number
Filter by topic ID.
number
Filter by brand ID. If omitted, uses the brand of the workspace’s most recently updated prompt.
string
Filter by mentioned brand name. Case-insensitive exact match.
string[]
Filter by one or more platforms:
CHATGPT, PERPLEXITY, GOOGLE_AI_OVERVIEW, GOOGLE_AI_MODE, GEMINI, CLAUDE.string
Filter by ISO country code for region.
string
Filter by sentiment label. One of:
positive, neutral, negative (case-insensitive).integer
Page number (0-indexed). Default:
0.integer
Page size. Default:
200. Range: 1–200.number
Filter by a single prompt ID.
number[]
Filter by multiple prompt IDs. Maximum 500 values.
Response
Returns200 OK with a JSON array of keyword sentiment objects, most-mentioned keywords first. Each object has these fields:
string
required
Unique identifier for the keyword.
string
required
The keyword text.
integer
required
Positive mention count.
integer
required
Neutral mention count.
integer
required
Negative mention count.
Example
curl -s "https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/theme-abc-123/keyword/mentions?dateRange=30&topicId=42" \
-H "Authorization: Bearer slat_YOUR_TOKEN"
import requests
response = requests.get(
"https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/theme-abc-123/keyword/mentions",
headers={
"Authorization": "Bearer slat_YOUR_TOKEN",
},
params={
"dateRange": 30,
"topicId": 42,
},
)
keywords = response.json()
for kw in keywords:
print(kw["keyword"], kw["positiveSentiment"], kw["negativeSentiment"])
const params = new URLSearchParams({
dateRange: "30",
topicId: "42",
});
const response = await fetch(
`https://api.slatehq.ai/ai-analytics-service/api/public/v1/sentiment/theme/theme-abc-123/keyword/mentions?${params}`,
{
headers: {
"Authorization": "Bearer slat_YOUR_TOKEN",
},
}
);
const keywords = await response.json();
console.log(keywords.length, "keywords found");
Response
[
{
"keywordId": "kw-001",
"keyword": "ease of use",
"positiveSentiment": 28,
"neutralSentiment": 12,
"negativeSentiment": 3
},
{
"keywordId": "kw-002",
"keyword": "pricing",
"positiveSentiment": 10,
"neutralSentiment": 15,
"negativeSentiment": 18
}
]
Status codes
| Status | Description |
|---|---|
200 | Keyword sentiment data returned. |
400 | A filter is invalid, such as more than 500 promptIds, an unsupported platform, dateRange outside 1–365, an invalid from/to range, or a sentiment value other than positive, neutral, or negative. |
401 | Missing or invalid Bearer token. See Authentication. |
500 | Internal server error. |
503 | The analytics store is temporarily unavailable (analytics store unavailable). |
What’s next
- Get Keyword Mention Details — Drill into individual mentions for a keyword.
- Get Theme Sentiment — View sentiment at the theme level.
Was this page helpful?