curl --request GET \
--url https://api.peec.ai/customer/v1/brand-perception/attribute-history \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.peec.ai/customer/v1/brand-perception/attribute-history"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.peec.ai/customer/v1/brand-perception/attribute-history', 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.peec.ai/customer/v1/brand-perception/attribute-history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.peec.ai/customer/v1/brand-perception/attribute-history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.peec.ai/customer/v1/brand-perception/attribute-history")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peec.ai/customer/v1/brand-perception/attribute-history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"attribute": "Racing Heritage",
"points": [
{
"date": "2026-09-01",
"score": 29
}
]
}
],
"total_count": 8,
"brand": "Ferrari",
"industry": "Luxury Sports Cars",
"target_market": "Germany",
"industries": [
{
"name": "Athleisure",
"has_completed_run": true
}
]
}Get Brand Perception Attribute History
How one brand’s prominence on each brand-perception attribute has moved over time: one series per attribute, each point a day and the brand’s average prominence (0-100) across that day’s AI answers about the attribute. These are the same scores as the competitive breakdown, split by day instead of aggregated. The brand defaults to the project’s own brand. The data covers the brand-perception runs of one industry and one target market. Pass industry to pick the industry; omitted, it is the one with the most recent completed run. The target market is always the industry’s most recently completed one and cannot be picked. Both are returned as industry and target_market. Pagination applies to attributes.
curl --request GET \
--url https://api.peec.ai/customer/v1/brand-perception/attribute-history \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.peec.ai/customer/v1/brand-perception/attribute-history"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.peec.ai/customer/v1/brand-perception/attribute-history', 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.peec.ai/customer/v1/brand-perception/attribute-history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.peec.ai/customer/v1/brand-perception/attribute-history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.peec.ai/customer/v1/brand-perception/attribute-history")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peec.ai/customer/v1/brand-perception/attribute-history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"attribute": "Racing Heritage",
"points": [
{
"date": "2026-09-01",
"score": 29
}
]
}
],
"total_count": 8,
"brand": "Ferrari",
"industry": "Luxury Sports Cars",
"target_market": "Germany",
"industries": [
{
"name": "Athleisure",
"has_completed_run": true
}
]
}Authorizations
Query Parameters
Required if using a company api key
"or_f45b94ba-5e35-4982-93ed-285e72ee14eb"
The brand whose history to read, spelled as the competitive-breakdown endpoint reports it. Omit to read the project's own brand.
1"Porsche"
Only include answers from these AI engine channels (repeat the parameter for multiple values). Omit to aggregate across all tracked channels.
openai-0, openai-1, qwen-0, openai-2, perplexity-0, perplexity-1, google-0, google-1, google-2, google-3, google-4, anthropic-0, anthropic-1, anthropic-2, anthropic-3, deepseek-0, meta-0, meta-1, xai-0, xai-1, microsoft-0, amazon-0, mistral-0, mistral-1, naver-0, openai-3, openai-4, openai-5 Only read the runs dispatched for this industry, as returned by the brand-perception industries endpoint. Omit to read the industry marked is_default there — the one with the most recent completed run.
"Luxury Sports Cars"
1 <= x <= 100000 <= x <= 9007199254740991Response
Success
Success
Attributes sorted by the brand's score on the latest day, strongest first.
Show child attributes
Show child attributes
Total number of attributes, ignoring pagination
8
The brand the series describe; null when no brand was passed and the project has no own brand.
"Ferrari"
The industry the data was read from; null when the project has no brand-perception runs yet.
"Luxury Sports Cars"
The target market the read narrowed to within that industry — its most recently completed one. Runs dispatched for the industry's other markets are not included.
"Germany"
Every industry the project has runs for, latest-started first — present only when there is more than one. Pass a name as industry to read that one instead.
Show child attributes
Show child attributes
