curl --request POST \
--url https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"all_aspect_platforms": false
}
'import requests
url = "https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights"
payload = {
"advertiser_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"all_aspect_platforms": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
advertiser_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
group_label: '<string>',
reference_advertiser_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
all_aspect_platforms: false
})
};
fetch('https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights', 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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights",
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([
'advertiser_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'group_label' => '<string>',
'reference_advertiser_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'all_aspect_platforms' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights"
payload := strings.NewReader("{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}"
response = http.request(request)
puts response.read_body{
"generated_at": "2023-11-07T05:31:56Z",
"group_key": "<string>",
"coverage": {
"status": "ok",
"reason": "",
"bucket_size": "week",
"window_start": "2023-11-07T05:31:56Z",
"window_end": "2023-11-07T05:31:56Z",
"bucket_count": 0,
"excluded_advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"depth_capped_advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sample_is_platform_total": false,
"cohort": {
"brand_count": 0,
"measured_brand_count": 0,
"total_reviews": 0,
"median_rating": 2.5,
"lowest_rating": 2.5,
"highest_rating": 2.5,
"previous_measured_brand_count": 1,
"previous_total_reviews": 1,
"previous_median_rating": 2.5
},
"brands": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"avatar_url": "<string>",
"industry": "<string>",
"review_count": 0,
"average_rating": 2.5,
"positive": 0,
"neutral": 0,
"negative": 0,
"platforms": [
{
"platform": "<string>",
"reviews": 0,
"answered": 0,
"reply_rate": 0.5,
"negatives": 0,
"negatives_answered": 0,
"median_response_hours": 123,
"latency_measured_over": 0,
"previous_reviews": 1,
"previous_answered": 1,
"previous_negatives": 1,
"previous_negatives_answered": 1,
"previous_reply_rate": 0.5
}
],
"oldest_review_at": "2023-11-07T05:31:56Z",
"newest_review_at": "2023-11-07T05:31:56Z",
"depth_capped": false,
"rating_vs_cohort": 123,
"previous_review_count": 1,
"previous_average_rating": 2.5,
"previous_positive": 1,
"previous_neutral": 1,
"previous_negative": 1
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"avatar_url": "<string>",
"industry": "<string>",
"review_count": 0,
"average_rating": 2.5,
"positive": 0,
"neutral": 0,
"negative": 0,
"platforms": [
{
"platform": "<string>",
"reviews": 0,
"answered": 0,
"reply_rate": 0.5,
"negatives": 0,
"negatives_answered": 0,
"median_response_hours": 123,
"latency_measured_over": 0,
"previous_reviews": 1,
"previous_answered": 1,
"previous_negatives": 1,
"previous_negatives_answered": 1,
"previous_reply_rate": 0.5
}
],
"oldest_review_at": "2023-11-07T05:31:56Z",
"newest_review_at": "2023-11-07T05:31:56Z",
"depth_capped": false,
"rating_vs_cohort": 123,
"previous_review_count": 1,
"previous_average_rating": 2.5,
"previous_positive": 1,
"previous_neutral": 1,
"previous_negative": 1
},
"available_aspect_platforms": [
"trustpilot"
],
"aspect_matrix": {
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
},
"aspect_matrices": [
{
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
}
],
"previous_aspect_matrix": {
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
},
"previous_period": {
"bucket_size": "week",
"cutoff": "2023-11-07T05:31:56Z",
"bucket_count": 3
},
"findings": [
{
"rule_id": "<string>",
"module": "seo",
"panel": "<string>",
"title": "<string>",
"detail": "<string>",
"severity": "info",
"evidence_refs": [
"<string>"
]
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Review Group Insights Route
Measured cohort analytics for a tracked Brand Group.
POST rather than GET: the cohort is a client-curated set of advertiser ids (groups live client-side until the server-groups flag is on), and a set of up to 60 UUIDs does not belong in a query string. Mirrors the Paid Media group-insights and board-insights routes.
brand_id scopes the request to a brand the caller owns; the cohort
itself is a set of PUBLIC advertisers, and the owned brand is never
silently added to it — see reference_advertiser_id.
curl --request POST \
--url https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"all_aspect_platforms": false
}
'import requests
url = "https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights"
payload = {
"advertiser_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"all_aspect_platforms": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
advertiser_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
group_label: '<string>',
reference_advertiser_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
all_aspect_platforms: false
})
};
fetch('https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights', 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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights",
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([
'advertiser_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'group_label' => '<string>',
'reference_advertiser_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'all_aspect_platforms' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights"
payload := strings.NewReader("{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brand_id}/brand-intelligence/review-group-insights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"advertiser_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"group_label\": \"<string>\",\n \"reference_advertiser_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"all_aspect_platforms\": false\n}"
response = http.request(request)
puts response.read_body{
"generated_at": "2023-11-07T05:31:56Z",
"group_key": "<string>",
"coverage": {
"status": "ok",
"reason": "",
"bucket_size": "week",
"window_start": "2023-11-07T05:31:56Z",
"window_end": "2023-11-07T05:31:56Z",
"bucket_count": 0,
"excluded_advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"depth_capped_advertiser_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"group_label": "<string>",
"reference_advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sample_is_platform_total": false,
"cohort": {
"brand_count": 0,
"measured_brand_count": 0,
"total_reviews": 0,
"median_rating": 2.5,
"lowest_rating": 2.5,
"highest_rating": 2.5,
"previous_measured_brand_count": 1,
"previous_total_reviews": 1,
"previous_median_rating": 2.5
},
"brands": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"avatar_url": "<string>",
"industry": "<string>",
"review_count": 0,
"average_rating": 2.5,
"positive": 0,
"neutral": 0,
"negative": 0,
"platforms": [
{
"platform": "<string>",
"reviews": 0,
"answered": 0,
"reply_rate": 0.5,
"negatives": 0,
"negatives_answered": 0,
"median_response_hours": 123,
"latency_measured_over": 0,
"previous_reviews": 1,
"previous_answered": 1,
"previous_negatives": 1,
"previous_negatives_answered": 1,
"previous_reply_rate": 0.5
}
],
"oldest_review_at": "2023-11-07T05:31:56Z",
"newest_review_at": "2023-11-07T05:31:56Z",
"depth_capped": false,
"rating_vs_cohort": 123,
"previous_review_count": 1,
"previous_average_rating": 2.5,
"previous_positive": 1,
"previous_neutral": 1,
"previous_negative": 1
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"avatar_url": "<string>",
"industry": "<string>",
"review_count": 0,
"average_rating": 2.5,
"positive": 0,
"neutral": 0,
"negative": 0,
"platforms": [
{
"platform": "<string>",
"reviews": 0,
"answered": 0,
"reply_rate": 0.5,
"negatives": 0,
"negatives_answered": 0,
"median_response_hours": 123,
"latency_measured_over": 0,
"previous_reviews": 1,
"previous_answered": 1,
"previous_negatives": 1,
"previous_negatives_answered": 1,
"previous_reply_rate": 0.5
}
],
"oldest_review_at": "2023-11-07T05:31:56Z",
"newest_review_at": "2023-11-07T05:31:56Z",
"depth_capped": false,
"rating_vs_cohort": 123,
"previous_review_count": 1,
"previous_average_rating": 2.5,
"previous_positive": 1,
"previous_neutral": 1,
"previous_negative": 1
},
"available_aspect_platforms": [
"trustpilot"
],
"aspect_matrix": {
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
},
"aspect_matrices": [
{
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
}
],
"previous_aspect_matrix": {
"platform": "trustpilot",
"aspects": [
"<string>"
],
"aspect_slugs": [
"<string>"
],
"vocabulary_is_core_only": false,
"vocabulary_assumed": [
"<string>"
],
"vocabulary_mixed": [
"<string>"
],
"min_mentions": 0,
"brands_total": 0,
"brands_examined": 0,
"reviews_total": 0,
"reviews_classified_total": 0,
"reviews_examined_total": 0,
"basis_notice": "Computed over AITasker's depth-capped sample of collected reviews, and within that only the reviews we classified — not the platform's full review population. Unclassified and uncollected reviews are excluded from every figure rather than counted as zero.",
"rows": [
{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"reference_brand": {
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"reviews_total": 0,
"reviews_classified": 0,
"reviews_examined": 0,
"reviews_unclassified": 0,
"reviews_not_examined": 0,
"reviews_no_aspect_found": 0,
"segment": "<string>",
"segment_source": "<string>",
"cells": [
{
"aspect": "<string>",
"mentions": 0,
"positive": 0,
"negative": 0,
"mixed": 0,
"neutral": 0,
"positive_pct": 50,
"negative_pct": 50,
"cohort_median_positive_pct": 50,
"cohort_median_negative_pct": 50,
"positive_delta_pp": 0,
"negative_delta_pp": 0,
"benchmark_brand_count": 0,
"not_measured_reason": "brand_not_classified",
"evidence": [
{
"review_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sentiment": "positive",
"evidence": "<string>",
"evidence_rank": 2,
"platform": "<string>",
"source_url": "<string>",
"reviewer_name": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
},
"previous_period": {
"bucket_size": "week",
"cutoff": "2023-11-07T05:31:56Z",
"bucket_count": 3
},
"findings": [
{
"rule_id": "<string>",
"module": "seo",
"panel": "<string>",
"title": "<string>",
"detail": "<string>",
"severity": "info",
"evidence_refs": [
"<string>"
]
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
The cohort to analyse.
Response
Successful Response
What the cohort can honestly be charted over.
status != "ok" is a measured outcome with prose, not a failure — the
caller renders the reason instead of an empty chart.
Show child attributes
Show child attributes
Cohort-level statistics, over GROUP MEMBERS ONLY.
The user's own brand is never included here even when one is selected — see the module docstring.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
One brand's measured position in the cohort.
Show child attributes
Show child attributes
trustpilot, google The comparable grid, plus what stops it being over-read.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The comparable grid, plus what stops it being over-read.
Show child attributes
Show child attributes
What every previous_* field on this response was measured over.
Present ONLY when the cohort's coverage plan holds two or more calendar
buckets. Its absence is the first-measurement state, and it is the single
switch the client reads: no descriptor, no delta chips anywhere on the
page — a "First measurement" badge instead. There is no code path that
emits a previous_* figure without this block beside it.
Definition, and why it is not a new versioning concept. The bucket
ladder is the one review_coverage.build_coverage_plan already chose for
this exact cohort, and cutoff is the start of its most recent bucket —
the same boundary review_trends already compares across for the
rating-movement panel. Extending it to the KPI tiles is plumbing, not a
second notion of "a period".
Basis, stated plainly because it is a floor, not a total. Current
figures count the whole collected corpus; previous figures count that
corpus MINUS the reviews we can prove arrived on or after cutoff. A
review we hold with no reviewed_at cannot be proven to have arrived
this period, so it sits on both sides and contributes nothing to any
delta. The delta is therefore a floor on real movement — consistent with
every other count on this surface, which REVIEW_SAMPLE_BASIS_NOTICE
already discloses as a sample rather than a platform total.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?