curl --request POST \
--url https://api.athenahq.ai/api/v1/sources \
--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"
},
"page_size": 30,
"sort_field": "citation_percentage",
"sort_direction": "desc"
}
'import requests
url = "https://api.athenahq.ai/api/v1/sources"
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"
},
"page_size": 30,
"sort_field": "citation_percentage",
"sort_direction": "desc"
}
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'},
page_size: 30,
sort_field: 'citation_percentage',
sort_direction: 'desc'
})
};
fetch('https://api.athenahq.ai/api/v1/sources', 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/sources",
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'
],
'page_size' => 30,
'sort_field' => 'citation_percentage',
'sort_direction' => 'desc'
]),
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/sources"
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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\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/sources")
.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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/sources")
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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\n}"
response = http.request(request)
puts response.read_bodyList Sources (by root domain)
Returns the top cited sources for a website, grouped by root domain. Each row carries citation, mention, brand-mention, and impression metrics for the requested date range, plus a default_source_type classification (owned / competitor / partner / third_party).
Companion to POST /api/v1/source-pages, which returns the same data grouped per URL (one row per cited page) instead of per root domain.
curl --request POST \
--url https://api.athenahq.ai/api/v1/sources \
--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"
},
"page_size": 30,
"sort_field": "citation_percentage",
"sort_direction": "desc"
}
'import requests
url = "https://api.athenahq.ai/api/v1/sources"
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"
},
"page_size": 30,
"sort_field": "citation_percentage",
"sort_direction": "desc"
}
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'},
page_size: 30,
sort_field: 'citation_percentage',
sort_direction: 'desc'
})
};
fetch('https://api.athenahq.ai/api/v1/sources', 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/sources",
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'
],
'page_size' => 30,
'sort_field' => 'citation_percentage',
'sort_direction' => 'desc'
]),
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/sources"
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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\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/sources")
.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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/sources")
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 \"page_size\": 30,\n \"sort_field\": \"citation_percentage\",\n \"sort_direction\": \"desc\"\n}"
response = http.request(request)
puts response.read_bodyBody
Request body for listing domain-grouped sources.
The website to list sources 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
Zero-indexed page number.
x >= 0Number of rows per page (1–100).
1 <= x <= 100Column to sort by.
citation_percentage, mention_percentage, competitor_mention_percentage, brand_mention_percentage, estimated_impressions, total_mentions, domain_count, mentions_count, root_domain, response_count, first_seen asc, desc Substring filter on normalized_root_domain. Protocol (https://), www., path, query, and fragment are stripped before matching, so a full URL like https://www.example.com/foo collapses to example.com.
If yes, only count sources where your brand was mentioned in the citing response. If no, only count sources where your brand was NOT mentioned. Omit the field to count every cited source.
yes, no If yes, only count sources where your brand was mentioned in the citing response. If no, only count sources where your brand was NOT mentioned. Omit the field to count every cited source.
yes, no Response
Successful response with the page of sources.
Show child attributes
Show child attributes
Pagination metadata. Unlike Pagination (which uses has_more lookahead), the sources surfaces expose a precise total count — the underlying ClickHouse query computes it as a window function in the same scan, so there's no extra round-trip cost.
Show child attributes
Show child attributes
Was this page helpful?