Source domain evolution
curl --request GET \
--url https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Sources
Source domain evolution
Track how a source’s citation metrics change over time.
GET
https://www.qwairy.co
/
api
/
v1
/
brands
/
{brandId}
/
source-domains
/
{sourceId}
/
evolution
Source domain evolution
curl --request GET \
--url https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.qwairy.co/api/v1/brands/{brandId}/source-domains/{sourceId}/evolution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Returns daily citation occurrences and average citation position for one source domain.
See Rate limits for retry behavior.
Path parameters
string
required
The unique identifier of the brand
string
required
The unique identifier of the source
Query parameters
number
Number of days to include. If not specified, returns all data.
string
Start date in
YYYY-MM-DD. Provide it with endDate; a lone boundary is currently ignored. Choose either period or the complete date pair.string
End date in
YYYY-MM-DD. Provide it with startDate; a lone boundary is currently ignored. Do not combine the complete date pair with period.string
Filter by AI provider. Supports comma-separated multi-select (e.g.,
chatgpt,claude).string
Filter by topic ID. Supports comma-separated multi-select (e.g.,
id1,id2).string
Filter by tag ID. Supports comma-separated multi-select (e.g.,
id1,id2).Synthetic request
curl "https://www.qwairy.co/api/v1/brands/YOUR_BRAND_ID/source-domains/SOURCE_ID/evolution?period=7" \
-H "Authorization: Bearer $QWAIRY_API_TOKEN"
Synthetic response
{
"success": true,
"source": {
"id": "source_01",
"domain": "publisher.example",
"isSelf": false
},
"evolution": [
{
"date": "2026-07-01",
"mentions": 5,
"avgPosition": 3.1
},
{
"date": "2026-07-02",
"mentions": 8,
"avgPosition": 2.9
}
]
}
Errors
| Status | Code | Description |
|---|---|---|
| 401 | gateway error | Missing or invalid API token |
| 404 | BRAND_NOT_FOUND | Brand doesn’t exist or not accessible |
| 404 | SOURCE_NOT_FOUND | Source doesn’t exist |
| 429 | gateway error | Rate limit exceeded; honor Retry-After |

