List prompt executions
Every AI answer to one specific prompt, newest first. What each engine actually said, and whether you were named or cited in it.
For the same data across every prompt at once, use List responses instead — calling this endpoint once per prompt is hundreds of round trips on a real brand.
GET /v1/brands/{brand_id}/prompts/{prompt_id}/executionsAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
prompt_id | uuid | required | From List prompts |
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. |
only_mentioned | boolean | optional | Only answers that mention your brand. |
only_cited | boolean | optional | Only answers that cite your brand. |
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. |
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. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/prompts/7c2f5a91-3b8e-4d06-9a44-1e7b30c9f852/executions?limit=20' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"execution_id": "e31a7c40-5b92-4f18-9d76-08c1fa2e6b53",
"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"
],
"country_code": "US"
}
],
"pagination": {
"limit": 20,
"has_more": true,
"next_cursor": "eyJ2IjoxLCJvIjoyMCwibCI6MjB9"
},
"meta": {
"period": {
"start_date": "2026-07-14",
"end_date": "2026-08-13"
}
},
"request_id": "req_6a2e93f70dc148b5a71f"
}Response fields
| Field | Type | Description |
|---|---|---|
data.period | object | required. { start_date, end_date } actually used. Defaults differ between endpoints, so read it before comparing |
data.executions | object[] | required |
data.executions[].execution_id | uuid | required |
data.executions[].execution_date | timestamptz | required |
data.executions[].provider | string | required |
data.executions[].model_used | string | required |
data.executions[].response_snippet | string | First 300 characters. Replaced by full_response with the flag |
data.executions[].our_brand_mentioned | boolean | required |
data.executions[].brand_cited | boolean | required |
data.executions[].total_citations_found | integer | required |
data.executions[].competitor_names | string[] | required |
data.executions[].country_code | string | null | |
data.total | 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
Full text caps limit at 5 deliberately. 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