curl --request GET \
--url https://api.snowseo.com/v3/ai-tracker/visibility/overview \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/ai-tracker/visibility/overview"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/ai-tracker/visibility/overview', 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.snowseo.com/v3/ai-tracker/visibility/overview",
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.snowseo.com/v3/ai-tracker/visibility/overview"
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.snowseo.com/v3/ai-tracker/visibility/overview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/ai-tracker/visibility/overview")
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{
"meta": {
"teamInfo": {},
"appliedFilters": {},
"totalPrompts": 123,
"activePrompts": 123,
"activeRegionRuns": 123,
"totalResponses": 123,
"promptStatus": {}
},
"overview": {}
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Overview
The full dashboard payload: brand leaderboard, trends, sentiment, platform rollups, and competitor comparison.
curl --request GET \
--url https://api.snowseo.com/v3/ai-tracker/visibility/overview \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/ai-tracker/visibility/overview"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/ai-tracker/visibility/overview', 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.snowseo.com/v3/ai-tracker/visibility/overview",
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.snowseo.com/v3/ai-tracker/visibility/overview"
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.snowseo.com/v3/ai-tracker/visibility/overview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/ai-tracker/visibility/overview")
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{
"meta": {
"teamInfo": {},
"appliedFilters": {},
"totalPrompts": 123,
"activePrompts": 123,
"activeRegionRuns": 123,
"totalResponses": 123,
"promptStatus": {}
},
"overview": {}
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}topBrands.
Time series are columnar - a shared dates array plus one numeric array per series - rather than one object per day.
The sentiment split comes as sentiment.shares and sentiment.changes, and the comparison rows as performanceRows keyed by metric. chartSeed holds your brand’s chart color, the competitor list that orders series colors, and the series keys your brand uses on each chart.
Scope filters are described on AI Visibility.Authorizations
Your SnowSEO API key (sk_...).
Query Parameters
Comma-separated AI platform names, or 'All Platforms' for no filter.
Comma-separated competitor names, or 'All Competitors' for no filter. Keeps prompts where ANY listed competitor appears.
Comma-separated ISO2 country codes, or 'All Countries' for no filter.
YYYY-MM-DD. Omit with endDate set for All Time (from the first answer, no previous-period comparison).
YYYY-MM-DD
Days back from today on the team's calendar, converted to startDate/endDate. Ignored when startDate or endDate is set. Defaults to 30.
x >= 1'branded', 'unbranded', or 'all'.
'tracked', 'untracked', or empty for both.
Comma-separated prompt intents, or empty for all.
Include previous-period comparison values alongside each data point (roughly doubles the time-series payload). Defaults to false.
Max leaderboard rows, or 'all'. Defaults to 25. Rows are ordered by mentions descending; the response reports topBrandsTotal and topBrandsTruncated.
Max brands to plot on the trend charts, or 'all'. Defaults to whatever topBrands is, which is what you want unless you need the full leaderboard alongside only a few chart lines.
Was this page helpful?

