curl --request POST \
--url https://api.athenahq.ai/api/v1/content \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"filters": {
"start_date": "2024-01-01T00:00:00.000Z",
"end_date": "2024-01-31T23:59:59.999Z"
},
"sheet_id": "00000000-0000-4000-8000-000000000001",
"page_size": 50
}
'import requests
url = "https://api.athenahq.ai/api/v1/content"
payload = {
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"filters": {
"start_date": "2024-01-01T00:00:00.000Z",
"end_date": "2024-01-31T23:59:59.999Z"
},
"sheet_id": "00000000-0000-4000-8000-000000000001",
"page_size": 50
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
website_id: '123e4567-e89b-12d3-a456-426614174000',
filters: {start_date: '2024-01-01T00:00:00.000Z', end_date: '2024-01-31T23:59:59.999Z'},
sheet_id: '00000000-0000-4000-8000-000000000001',
page_size: 50
})
};
fetch('https://api.athenahq.ai/api/v1/content', 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.athenahq.ai/api/v1/content",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'website_id' => '123e4567-e89b-12d3-a456-426614174000',
'filters' => [
'start_date' => '2024-01-01T00:00:00.000Z',
'end_date' => '2024-01-31T23:59:59.999Z'
],
'sheet_id' => '00000000-0000-4000-8000-000000000001',
'page_size' => 50
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/content"
payload := strings.NewReader("{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.athenahq.ai/api/v1/content")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}"
response = http.request(request)
puts response.read_body{
"content": [
{
"content_id": "11111111-2222-3333-4444-555555555555",
"title": "Best CRMs for Startups, Reviewed",
"url": "example.com/blog/crm-roundup",
"normalized_url": "example.com/blog/crm-roundup",
"type": "external",
"topic_name": "CRM Software",
"sheet_id": "00000000-0000-4000-8000-000000000001",
"sheet_name": "3rd-Party Placements",
"citations": 42,
"citation_percent": 12.5,
"estimated_impressions": 18400,
"total_responses": 336,
"mark_as_done_time": "2024-01-15T00:00:00.000Z",
"created_at": "2024-01-10T00:00:00.000Z"
}
],
"pagination": {
"page_num": 0,
"page_size": 50,
"has_more": true
}
}List Tracked Content
Returns paginated tracked content with citation, impression, and response metrics joined for the requested date range. Hidden content (is_hidden = true) is excluded.
Pagination uses page_size + 1 lookahead — pagination.has_more === true means the next page exists; there is no total-count field.
Use the sheet_id, content_type, and standard filters knobs to scope the result. Pass an unknown sheet_id (or one from another website) and the endpoint returns 403.
curl --request POST \
--url https://api.athenahq.ai/api/v1/content \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"filters": {
"start_date": "2024-01-01T00:00:00.000Z",
"end_date": "2024-01-31T23:59:59.999Z"
},
"sheet_id": "00000000-0000-4000-8000-000000000001",
"page_size": 50
}
'import requests
url = "https://api.athenahq.ai/api/v1/content"
payload = {
"website_id": "123e4567-e89b-12d3-a456-426614174000",
"filters": {
"start_date": "2024-01-01T00:00:00.000Z",
"end_date": "2024-01-31T23:59:59.999Z"
},
"sheet_id": "00000000-0000-4000-8000-000000000001",
"page_size": 50
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
website_id: '123e4567-e89b-12d3-a456-426614174000',
filters: {start_date: '2024-01-01T00:00:00.000Z', end_date: '2024-01-31T23:59:59.999Z'},
sheet_id: '00000000-0000-4000-8000-000000000001',
page_size: 50
})
};
fetch('https://api.athenahq.ai/api/v1/content', 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.athenahq.ai/api/v1/content",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'website_id' => '123e4567-e89b-12d3-a456-426614174000',
'filters' => [
'start_date' => '2024-01-01T00:00:00.000Z',
'end_date' => '2024-01-31T23:59:59.999Z'
],
'sheet_id' => '00000000-0000-4000-8000-000000000001',
'page_size' => 50
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/content"
payload := strings.NewReader("{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.athenahq.ai/api/v1/content")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"website_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"filters\": {\n \"start_date\": \"2024-01-01T00:00:00.000Z\",\n \"end_date\": \"2024-01-31T23:59:59.999Z\"\n },\n \"sheet_id\": \"00000000-0000-4000-8000-000000000001\",\n \"page_size\": 50\n}"
response = http.request(request)
puts response.read_body{
"content": [
{
"content_id": "11111111-2222-3333-4444-555555555555",
"title": "Best CRMs for Startups, Reviewed",
"url": "example.com/blog/crm-roundup",
"normalized_url": "example.com/blog/crm-roundup",
"type": "external",
"topic_name": "CRM Software",
"sheet_id": "00000000-0000-4000-8000-000000000001",
"sheet_name": "3rd-Party Placements",
"citations": 42,
"citation_percent": 12.5,
"estimated_impressions": 18400,
"total_responses": 336,
"mark_as_done_time": "2024-01-15T00:00:00.000Z",
"created_at": "2024-01-10T00:00:00.000Z"
}
],
"pagination": {
"page_num": 0,
"page_size": 50,
"has_more": true
}
}Body
Request body for listing tracked content.
The website to list tracked content for.
"123e4567-e89b-12d3-a456-426614174000"
Filters for querying responses and metrics. Pass location filters in the JSON body as filters.location_ids.
Show child attributes
Show child attributes
Restrict to a single content type. manual is user-authored content created directly in the editor (the Blank Editor flow). athena_created is a shortcut for the four Athena-generated subtypes (draft, snipe, optimize, slice). Omit to span every type. This endpoint lists tracked (published) content, so a draft-state row — manual, draft, snipe, optimize, or slice — appears only after it is published.
external, imported, manual, athena_created, draft, snipe, optimize, slice Restrict to content on a single Content Hub tab. Use GET /api/v1/content/sheets to discover IDs. Omit to span every tab.
If true, only count responses that mention your brand. If false, only count responses that do not. Omit to count every response.
Zero-indexed page number.
x >= 0Number of items per page (1–100).
1 <= x <= 100Response
Successful response with the page of tracked content.
Was this page helpful?