Get Perception Snapshot
curl --request GET \
--url https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId} \
--header 'Authorization: <authorization>'import requests
url = "https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}', 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/{brandId}/perception/{snapshotId}",
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.example.com/api/v1/brands/{brandId}/perception/{snapshotId}"
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.example.com/api/v1/brands/{brandId}/perception/{snapshotId}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}")
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{
"success": true,
"brand": {},
"snapshot": {
"snapshotId": "<string>",
"month": 123,
"year": 123,
"scores": {},
"attributes": [
{}
],
"attributeMetrics": {},
"insights": {},
"providers": [
{}
],
"createdAt": "<string>",
"completedAt": "<string>"
}
}Perception
Get Perception Snapshot
Full detail of a single perception snapshot: scores, attribute alignment and SWOT
GET
/
api
/
v1
/
brands
/
{brandId}
/
perception
/
{snapshotId}
Get Perception Snapshot
curl --request GET \
--url https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId} \
--header 'Authorization: <authorization>'import requests
url = "https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}', 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/{brandId}/perception/{snapshotId}",
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.example.com/api/v1/brands/{brandId}/perception/{snapshotId}"
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.example.com/api/v1/brands/{brandId}/perception/{snapshotId}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brandId}/perception/{snapshotId}")
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{
"success": true,
"brand": {},
"snapshot": {
"snapshotId": "<string>",
"month": 123,
"year": 123,
"scores": {},
"attributes": [
{}
],
"attributeMetrics": {},
"insights": {},
"providers": [
{}
],
"createdAt": "<string>",
"completedAt": "<string>"
}
}Retrieve the full detail of a single completed perception snapshot: the four scores, the attribute alignment breakdown and the SWOT insights. Get a
A
snapshotId from the Brand Perception endpoint’s history array.
string
required
Bearer token. Example:
Bearer qw-api-xxxPath Parameters
string
required
The unique identifier of the brand
string
required
The unique identifier of the perception snapshot
Response
boolean
Indicates if the request was successful
object
id, name, domainobject
Show Snapshot
Show Snapshot
string
Snapshot ID
number
Month (1-12)
number
Year
object
sentiment, alignment, consistency, factualAlignment (0-100 or null)array
Brand attributes evaluated by AI. Each object has
text (string) and status (aligned, partial, missing).object
Counts:
aligned, partial, missing, total.object
SWOT arrays of strings:
strengths, weaknesses, opportunities, threats.array
AI providers included in the analysis
string
Creation timestamp (ISO 8601)
string
Completion timestamp (ISO 8601) or
null404 RESOURCE_NOT_FOUND is returned if the snapshot does not exist, is not COMPLETED, or does not belong to the brand.
Example Request
curl -X GET "https://www.qwairy.co/api/v1/brands/cm1234567890abcdef/perception/snap_2026_05" \
-H "Authorization: Bearer qw-api-your-token-here"
Example Response
{
"success": true,
"brand": {
"id": "cm1234567890abcdef",
"name": "My Brand",
"domain": "mybrand.com"
},
"snapshot": {
"snapshotId": "snap_2026_05",
"month": 5,
"year": 2026,
"scores": {
"sentiment": 78,
"alignment": 65,
"consistency": 82,
"factualAlignment": 71
},
"attributes": [
{ "text": "Premium positioning", "status": "aligned" },
{ "text": "Sustainable materials", "status": "partial" },
{ "text": "Made in France", "status": "missing" }
],
"attributeMetrics": {
"aligned": 1,
"partial": 1,
"missing": 1,
"total": 3
},
"insights": {
"strengths": ["Strong brand recognition in core market"],
"weaknesses": ["Limited awareness of product range"],
"opportunities": ["Growing demand in adjacent category"],
"threats": ["Aggressive competitor messaging"]
},
"providers": ["chatgpt", "perplexity"],
"createdAt": "2026-05-01T03:00:00.000Z",
"completedAt": "2026-05-03T04:12:00.000Z"
}
}
⌘I

