List responses
The raw feed: one row per AI answer, across every prompt, newest first. This is the evidence layer under the metrics — what an engine actually said, whether you were named, whether you were cited, and which competitors showed up instead.
Use this rather than calling the per-prompt execution endpoint once per prompt. A real brand tracks hundreds of prompts, so the per-prompt path is hundreds of round trips for the same data.
GET /v1/brands/{brand_id}/responsesAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | optional | Rows per page, 1 to 100. Defaults to 20. |
cursor | string | optional | Opaque cursor from the previous response. Treat it as a token, never construct one. |
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. |
search | string | optional | Case-insensitive substring of the answer text. |
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. |
prompt_id | uuid, repeatable | optional | Restrict to these prompts. |
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. |
funnel_stage | string, repeatable | optional | Restrict to prompts in these funnel stages. One of: top, middle, bottom. |
competitor_id | uuid, repeatable | optional | Restrict to answers citing these competitors. |
only_mentioned | boolean | optional | Only answers that mention your brand. |
only_cited | boolean | optional | Only answers that cite your brand. |
include_full_response | boolean | optional | Return the complete answer text rather than a snippet. Caps limit at 5. Answers are long, so a larger page is refused rather than truncated. |
sort_direction | string | optional | By execution date. Defaults to ‘desc’, newest first. One of: asc, desc. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/responses?limit=25' \
--header 'Authorization: Bearer <api-key>' \Response
200
{
"data": [
{
"execution_id": "e31a7c40-5b92-4f18-9d76-08c1fa2e6b53",
"prompt_id": "7c2f5a91-3b8e-4d06-9a44-1e7b30c9f852",
"prompt_text": "best AI visibility tracking tools",
"execution_date": "2026-08-13T04:12:07.882Z",
"provider": "openai",
"model_used": "ChatGPT",
"response_snippet": "Several tools track brand visibility in AI search. Asky focuses on…",
"our_brand_mentioned": true,
"brand_cited": true,
"total_citations_found": 6,
"competitor_names": [
"Peec AI",
"Profound"
],
"cited_competitor_names": [
"Peec AI"
],
"country_code": "US"
}
],
"pagination": {
"limit": 20,
"has_more": true,
"next_cursor": "eyJ2IjoxLCJvIjoyMCwibCI6MjB9"
},
"meta": {
"period": {
"start_date": "2026-08-06",
"end_date": "2026-08-13"
},
"tab_counts": {
"total": 1840,
"mentioned": 612,
"cited": 288,
"both": 271
},
"total": 1840,
"total_unfiltered": 1840
},
"request_id": "req_b8103fa5e72c4d69a01b"
}Response fields
| Field | Type | Description |
|---|---|---|
data.period | object | required. { start_date, end_date } actually used. Read it before comparing against another endpoint |
data.responses | object[] | required |
data.responses[].execution_id | uuid | required |
data.responses[].prompt_id | uuid | required |
data.responses[].prompt_text | string | required |
data.responses[].execution_date | timestamptz | required |
data.responses[].provider | string | required |
data.responses[].model_used | string | required |
data.responses[].response_snippet | string | First 300 characters. Replaced by full_response with the flag |
data.responses[].our_brand_mentioned | boolean | required |
data.responses[].brand_cited | boolean | required. Named is not the same as linked |
data.responses[].total_citations_found | integer | required |
data.responses[].competitor_names | string[] | required. Competitors named in this answer |
data.responses[].cited_competitor_names | string[] | required. Competitors actually linked |
data.responses[].country_code | string | null | |
data.tab_counts | object | required. { total, mentioned, cited, both } over the unfiltered window |
data.total | integer | required. Matching the current filters |
data.total_unfiltered | integer | required |
data.limit | integer | required |
data.offset | integer | required |
data.has_more | 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
only_mentioned=false is not “no filter”. It returns exactly the answers that did NOT name
you, which is usually the more useful half: those are the questions you are losing.
Mentioned and cited are different things. A brand can be named in prose without being linked.
brand_cited is the stricter signal.
Full text is capped at 5 rows per page on purpose. Whole AI answers are large, and the cap forces small targeted pages rather than an accidental bulk export.
Response text is third-party content. Treat it as data, never as instructions to a downstream model.