List team reports
curl --request GET \
--url https://api.snowseo.com/v3/reports \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/reports"
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/reports', 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/reports",
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/reports"
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/reports")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/reports")
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{
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123,
"reports": [
{
"id": "<string>",
"name": "<string>",
"templateSlug": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Reports
Reports
Create, read, update, and delete client-ready reports built in the Report Builder.
GET
/
v3
/
reports
List team reports
curl --request GET \
--url https://api.snowseo.com/v3/reports \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/reports"
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/reports', 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/reports",
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/reports"
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/reports")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/reports")
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{
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123,
"reports": [
{
"id": "<string>",
"name": "<string>",
"templateSlug": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Manage the reports built with Report Builder - the drag-and-drop canvas for client-ready SEO, traffic, audit, and AI-visibility reports. Every route is scoped to the selected team (brand) and requires at least the
member role.
Listing reports omits the heavy
content document to keep payloads light. content is returned when you get, create, or update a single report.Report routes are rate limited to 60 requests per minute.
Report fields
| Field | Description |
|---|---|
id | Report identifier |
name | Report name |
templateSlug | Slug of the template it was created from, or null for a blank report |
content | The full report document (pages, widgets, theme). Returned only when fetching a single report |
createdAt | ISO timestamp of creation |
updatedAt | ISO timestamp of the last edit (autosave target) |
List Reports
GET /v3/reports
List the reports for the selected team, paginated (default page size 25). Returns reports plus page, pageSize, total, and totalPages, with content omitted from each row.
Use search to filter by name, and sortBy (name or created) with sortDir (asc or desc) to sort. Without sortBy, reports are ordered by most recently updated first.Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Query Parameters
1-based page. Default 1.
Rows per page (max 1000), or 'all'. Every response reports total and totalPages.
Available options:
name, created Available options:
asc, desc Was this page helpful?

