Skip to Content
APIEndpointsList responses

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}/responses

Authorization

HeaderTypeRequired
AuthorizationBearer asky_sk_…required

Path parameters

ParameterTypeRequiredDescription
brand_iduuidrequiredFrom List brands

Query parameters

ParameterTypeRequiredDescription
limitintegeroptionalRows per page, 1 to 100. Defaults to 20.
cursorstringoptionalOpaque cursor from the previous response. Treat it as a token, never construct one.
start_dateYYYY-MM-DDoptionalInclusive lower bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed.
end_dateYYYY-MM-DDoptionalInclusive upper bound, YYYY-MM-DD in UTC. Narrows the population before metrics are computed.
searchstringoptionalCase-insensitive substring of the answer text.
topic_iduuid, repeatableoptionalRestrict 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_iduuid, repeatableoptionalRestrict to these prompts.
enginestring, repeatableoptionalRestrict to these AI search engines, by slug. From List engines. Narrows the population before metrics are computed.
countrystring, repeatableoptionalRestrict to these execution country codes. Narrows the population before metrics are computed.
tag_iduuid, repeatableoptionalRestrict to prompts carrying these tags. From List tags. Narrows the population before metrics are computed.
tag_match_modestringoptionalHow to combine tag_id values. Defaults to ‘any’. One of: any, all.
funnel_stagestring, repeatableoptionalRestrict to prompts in these funnel stages. One of: top, middle, bottom.
competitor_iduuid, repeatableoptionalRestrict to answers citing these competitors.
only_mentionedbooleanoptionalOnly answers that mention your brand.
only_citedbooleanoptionalOnly answers that cite your brand.
include_full_responsebooleanoptionalReturn 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_directionstringoptionalBy execution date. Defaults to ‘desc’, newest first. One of: asc, desc.

Request

curl --request GET \ --url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/responses?limit=25' \ --header 'Authorization: Bearer <api-key>' \

Response

{ "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

FieldTypeDescription
data.periodobjectrequired. { start_date, end_date } actually used. Read it before comparing against another endpoint
data.responsesobject[]required
data.responses[].execution_iduuidrequired
data.responses[].prompt_iduuidrequired
data.responses[].prompt_textstringrequired
data.responses[].execution_datetimestamptzrequired
data.responses[].providerstringrequired
data.responses[].model_usedstringrequired
data.responses[].response_snippetstringFirst 300 characters. Replaced by full_response with the flag
data.responses[].our_brand_mentionedbooleanrequired
data.responses[].brand_citedbooleanrequired. Named is not the same as linked
data.responses[].total_citations_foundintegerrequired
data.responses[].competitor_namesstring[]required. Competitors named in this answer
data.responses[].cited_competitor_namesstring[]required. Competitors actually linked
data.responses[].country_codestring | null
data.tab_countsobjectrequired. { total, mentioned, cited, both } over the unfiltered window
data.totalintegerrequired. Matching the current filters
data.total_unfilteredintegerrequired
data.limitintegerrequired
data.offsetintegerrequired
data.has_morebooleanrequired
request_idstringrequired. Also returned as the x-request-id header. Quote it when contacting support

Errors

StatusCodeWhen
400invalid_requestA parameter is unknown or malformed. The message names it
401invalid_tokenThe key is missing, malformed, or does not exist
401token_expiredThe key passed its expiry date
401token_revokedThe key was revoked
404not_foundThe brand does not exist, or this key is not allowed to reach it. The two are deliberately indistinguishable
429rate_limitedOver 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.

Last updated on