GET /sites/sources
Returns citation domains from AI responses, showing which sources are most frequently cited.
Request
Endpoint
https://knowatoa.com/api/v2/sites/sources
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | string | Yes | Site prefix ID (e.g., tpc_abc123) - must be a target site |
| api_key | string | Yes | Your API authentication key |
| flat | string | No | Set to "true" for flat JSON format |
| format | string | No | Set to "csv" for CSV export |
| start_date | string | No | Period start (YYYY-MM-DD). With end_date, returns period metrics instead of the latest refresh. See Period Comparison |
| end_date | string | No | Period end (YYYY-MM-DD), inclusive |
| compare_start | string | No | Comparison period start. Defaults to the equal-length period before start_date |
| compare_end | string | No | Comparison period end, inclusive |
| group_by | string | No | Set to "category" to return one flat JSON or CSV row per citation category instead of per domain. Nested JSON always includes both |
Response
Nested JSON Format
{
"site": {
"id": "tpc_abc123",
"name": "Example Site",
"external_id": "example.com"
},
"refresh_date": "2025-01-15",
"sources": [
{
"domain": "wikipedia.org",
"count": 45,
"percentage": 22.5,
"category": "reference",
"relationship": "third_party"
},
{
"domain": "example.com",
"count": 30,
"percentage": 15.0,
"category": null,
"relationship": "you"
}
],
"categories": [
{
"category": "reference",
"label": "Reference",
"count": 45,
"domains": 1,
"percentage": 22.5
},
{
"category": "you",
"label": "You",
"count": 30,
"domains": 1,
"percentage": 15.0
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| domain | string | Citation domain |
| count | integer | Number of times cited |
| percentage | float | Percentage of total citations |
| category | string | The domain’s category (for example news, review, social, government, education, real_estate, marketplace). null until the domain is classified |
| relationship | string | you (your site’s domain), competitor (a tracked competitor’s domain), or third_party. Domains are reported at the registrable level (shop.example.com is cited as example.com). A domain matches a site when it is the registrable domain of the site’s URL, or when its name equals one of the site’s brand words. Shared platforms where many businesses have pages (for example google.com, yelp.com, zillow.com, apartments.com, rentcafe.com) are always third_party, even for a site saved on a subdomain of one, because its citations can’t be told apart from other tenants’. A domain used by more than one tracked site is also third_party |
Categories
categories rolls citations up by category across every cited domain. Your site’s and competitors’ domains are grouped as you and competitor first; other domains use their category, or other when unclassified. Each row has category, label, count (citations), domains (distinct cited domains), and percentage of all citations. With group_by=category, flat JSON and CSV return these rows (plus the site columns) instead of per-domain rows. In period CSV and flat rows, category and relationship come after the citation_count_* columns.
Period Comparison
Returns period, compare_to, metrics.citation_count (citations in completed AI responses to tracked questions, for the AI services on your plan), sources: every domain cited in either period with its category, relationship, and citation_count, sorted by the current count, and categories: per category, citation_count and domains (distinct cited domains), each with current, previous, change_points, and change_percent. A domain cited only in the comparison period shows current: 0.
Notes
- Only available for target sites (not competitors)
- Sources sorted by count (descending)
- Percentages rounded to 1 decimal place
- Returns 400 Bad Request if site is a competitor