curl --request GET \
--url https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation', 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/brand-reviews/advertisers/{advertiser_id}/reputation",
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: Bearer <token>"
],
]);
$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.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"generated_at": "2023-11-07T05:31:56Z",
"platform": "<string>",
"sample_size": 0,
"sample_is_platform_total": false,
"depth_capped": false,
"average_rating": 123,
"rating_distribution": [
{
"stars": 3,
"count": 0
}
],
"response": {
"answered": 0,
"response_rate": 0.5,
"median_response_hours": 123,
"latency_measured_over": 0,
"negatives": 0,
"unanswered_negatives": 0
},
"platforms": [
{
"platform": "<string>",
"sample_size": 0,
"average_rating": 123,
"answered": 0,
"last_collected_at": "2023-11-07T05:31:56Z",
"at_depth_cap": false,
"platform_reported_total": {
"provider_rating": 123,
"provider_votes_count": 123,
"listing_count": 0
}
}
],
"trend": [
{
"period": "2023-11-07T05:31:56Z",
"count": 0,
"average_rating": 123,
"answered": 0
}
],
"undated_reviews": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Advertiser Review Metrics Route
Measured review metrics for one advertiser.
Read-only and free: every figure is SQL over stored columns, so this is not gated behind the collection switch (which exists because acquisition SPENDS money) and needs no throttle.
Served on two paths. /reputation is the one the client calls; the
older /metrics stays registered because a URL ending in that segment
is a standing target for ad-blocker and privacy filter lists, which reject
the request in the browser before it is ever sent. The reader then sees a
failure indistinguishable from an outage on a page whose sibling requests
all succeed. The legacy path is kept — and hidden from the schema — so
that browser tabs still running a cached bundle keep working through a
deploy; it can be deleted once no client references it.
Brand Library tenancy (operator ruling 2026-08-17) applies the same as every other single-advertiser Brand Details read on this router.
curl --request GET \
--url https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation', 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/brand-reviews/advertisers/{advertiser_id}/reputation",
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: Bearer <token>"
],
]);
$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.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brand-reviews/advertisers/{advertiser_id}/reputation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"advertiser_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"generated_at": "2023-11-07T05:31:56Z",
"platform": "<string>",
"sample_size": 0,
"sample_is_platform_total": false,
"depth_capped": false,
"average_rating": 123,
"rating_distribution": [
{
"stars": 3,
"count": 0
}
],
"response": {
"answered": 0,
"response_rate": 0.5,
"median_response_hours": 123,
"latency_measured_over": 0,
"negatives": 0,
"unanswered_negatives": 0
},
"platforms": [
{
"platform": "<string>",
"sample_size": 0,
"average_rating": 123,
"answered": 0,
"last_collected_at": "2023-11-07T05:31:56Z",
"at_depth_cap": false,
"platform_reported_total": {
"provider_rating": 123,
"provider_votes_count": 123,
"listing_count": 0
}
}
],
"trend": [
{
"period": "2023-11-07T05:31:56Z",
"count": 0,
"average_rating": 123,
"answered": 0
}
],
"undated_reviews": 0
}{
"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
Query Parameters
Response
Successful Response
Measured review metrics. Every field is counted, none inferred.
x >= 0Show child attributes
Show child attributes
Reply behaviour, counted from stored columns only.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
x >= 0Was this page helpful?