curl --request GET \
--url https://api.syntalic.com/v1/marketing/brand-breakdownimport requests
url = "https://api.syntalic.com/v1/marketing/brand-breakdown"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/marketing/brand-breakdown', 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.syntalic.com/v1/marketing/brand-breakdown",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.syntalic.com/v1/marketing/brand-breakdown"
req, _ := http.NewRequest("GET", url, nil)
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.syntalic.com/v1/marketing/brand-breakdown")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/marketing/brand-breakdown")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"brand": "<string>",
"country": "<string>",
"breakdown": [
{
"category_root": "<string>",
"product_count": 123
}
],
"coverage": {
"products": 42,
"sufficient": true,
"note": "<string>",
"unpublished_note": "<string>",
"sku_note": "<string>",
"rank_note": "<string>"
},
"freshness": {
"observedThrough": "2023-11-07T05:31:56Z",
"staleHours": 6.5
},
"resolved": {
"input": "<string>",
"category_path": "<string>",
"department": "<string>",
"match_source": "<string>",
"match_confidence": 123,
"alternates": [
{}
]
},
"meta": {
"served_from": "<string>",
"freshness_seconds": 123,
"schema_version": "<string>",
"computed_at": "2023-11-07T05:31:56Z",
"price_observed_at_min": "2023-11-07T05:31:56Z",
"price_observed_at_max": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Payment Required",
"status": 402,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Not Found",
"status": 404,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Too Many Requests",
"status": 429,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Break a brand's assortment down by category
What a brand actually sells: a count of its distinct priced products under each category root, ranked. Answers ‘what is this brand’s product mix’ and ‘which categories does it really compete in’ - useful before a positioning or shelf question, so the comparison targets the category the brand is densest in rather than whichever one was guessed. Brand input matches case-insensitively and across normalization variants (jbl == JBL, tplink == TP-Link); placeholder brands are excluded. Counts only products carrying a current price in the requested country, so a brand present in the catalog but unpriced reads as empty coverage rather than as absent. Carries the coverage and freshness envelope: coverage.products is the total counted, and coverage.note explains an empty result rather than leaving an empty list to imply the brand sells nothing.
curl --request GET \
--url https://api.syntalic.com/v1/marketing/brand-breakdownimport requests
url = "https://api.syntalic.com/v1/marketing/brand-breakdown"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/marketing/brand-breakdown', 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.syntalic.com/v1/marketing/brand-breakdown",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.syntalic.com/v1/marketing/brand-breakdown"
req, _ := http.NewRequest("GET", url, nil)
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.syntalic.com/v1/marketing/brand-breakdown")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/marketing/brand-breakdown")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"brand": "<string>",
"country": "<string>",
"breakdown": [
{
"category_root": "<string>",
"product_count": 123
}
],
"coverage": {
"products": 42,
"sufficient": true,
"note": "<string>",
"unpublished_note": "<string>",
"sku_note": "<string>",
"rank_note": "<string>"
},
"freshness": {
"observedThrough": "2023-11-07T05:31:56Z",
"staleHours": 6.5
},
"resolved": {
"input": "<string>",
"category_path": "<string>",
"department": "<string>",
"match_source": "<string>",
"match_confidence": 123,
"alternates": [
{}
]
},
"meta": {
"served_from": "<string>",
"freshness_seconds": 123,
"schema_version": "<string>",
"computed_at": "2023-11-07T05:31:56Z",
"price_observed_at_min": "2023-11-07T05:31:56Z",
"price_observed_at_max": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Payment Required",
"status": 402,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Not Found",
"status": 404,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Too Many Requests",
"status": 429,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Query Parameters
Brand name (e.g., Sony, Samsung, Nike)
1Country (us or ca)
us, ca Response
Brand assortment composition
Show child attributes
Show child attributes
How much data backed this answer. sufficient is false when the slice is too thin to read as a market statement; the count is always reported so you can judge for yourself, and note explains an empty or thin result rather than leaving you to infer it.
Show child attributes
Show child attributes
How current the underlying observations are. observedThrough is the newest observation behind this answer; staleHours is its age. Both null when nothing was observed.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

