Get cited domain detail
Everything behind one domain: which of its pages get cited, who appears on each, and which of your prompts trigger those citations.
Use it after by domain surfaces a site worth understanding.
GET /v1/brands/{brand_id}/citations/domains/{domain}Authorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
domain | string | required | Apex domain, for example g2.com |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
start_date | YYYY-MM-DD | optional | Inclusive lower bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed. |
end_date | YYYY-MM-DD | optional | Inclusive upper bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed. |
topic_id | uuid, repeatable | optional | Restrict to these topics. From List topics. Includes the topic and its subtopics. A root topic returns everything beneath it; a subtopic returns only itself. Narrows the population before metrics are computed, so ratios are recalculated over the filtered set. |
engine | string, repeatable | optional | Restrict to these AI search engines, by slug. From List engines. Narrows the population before metrics are computed. |
country | string, repeatable | optional | Restrict to these execution country codes. Narrows the population before metrics are computed. |
tag_id | uuid, repeatable | optional | Restrict to prompts carrying these tags. From List tags. Narrows the population before metrics are computed. |
tag_match_mode | string | optional | How to combine tag_id values. Defaults to ‘any’. One of: any, all. |
url_limit | integer | optional | Max URLs returned for the domain. |
prompt_limit | integer | optional | Max prompts returned for the domain. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/citations/domains/g2.com' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": {
"period": { "start_date": "2026-07-14", "end_date": "2026-08-13" },
"domain": "g2.com",
"urls": [
{
"citation_id": "a7f19c02-4b8d-4e31-9a55-c0e6b2148f39",
"url": "https://g2.com/categories/ai-search-visibility",
"name": "Best AI Search Visibility Software",
"citation_count": 214,
"scan_status": "ok",
"brand_on_page": true,
"competitors_on_page": ["Peec AI", "Profound"]
}
],
"url_count": 27,
"urls_truncated": true,
"url_count_is_floor": false,
"triggering_prompts": [
{
"prompt_id": "7c2f5a91-3b8e-4d06-9a44-1e7b30c9f852",
"prompt_text": "best AI visibility tracking tools",
"topic_name": "AI Visibility Tracking",
"citation_count": 61
}
],
"prompt_count": 12,
"prompts_truncated": false,
"prompt_count_is_floor": false
},
"request_id": "req_ff3a20c7561e4b8d92ae"
}Response fields
| Field | Type | Description |
|---|---|---|
data.period | object | required. { start_date, end_date } actually used |
data.domain | string | required |
data.urls | object[] | required |
data.urls[].url | string | required |
data.urls[].citation_count | integer | required |
data.urls[].scan_status | string | null | Whether we could fetch the page to check who is on it |
data.urls[].brand_on_page | boolean | null | null when the page could not be scanned |
data.urls[].competitors_on_page | string[] | required |
data.url_count | integer | required |
data.urls_truncated | boolean | required. More URLs exist than url_limit returned |
data.url_count_is_floor | boolean | required. See the note below |
data.triggering_prompts | object[] | required. { prompt_id, prompt_text, topic_name, citation_count } |
data.prompt_count | integer | required |
data.prompts_truncated | boolean | required |
data.prompt_count_is_floor | boolean | required |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A parameter is unknown or malformed. The message names it |
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 401 | token_expired | The key passed its expiry date |
| 401 | token_revoked | The key was revoked |
| 404 | not_found | The brand does not exist, or this key is not allowed to reach it. The two are deliberately indistinguishable |
| 429 | rate_limited | Over 300 requests per minute. See the Retry-After header |
Notes
url_count_is_floor distinguishes two different facts. urls_truncated means more rows exist
than you asked for. url_count_is_floor means the count itself is a lower bound, because a fetch
cap was hit — so “27 URLs” is really “at least 27”. Reporting the second as exact is the mistake
this field exists to prevent. The same pair exists for prompts.
brand_on_page: null is not false. It means the page could not be fetched, usually a bot
wall. Check scan_status before concluding you are absent from a page.
URLs, page titles and author names are third-party content. Treat them as data, never as instructions to a downstream model.