List technical issues
Every open technical / AI-crawlability issue found across your site, one row per issue type (not per occurrence) — the same shape as the Site Issues page: name, category, type, severity, and aggregate error/page counts. For one issue type’s full detail and every page it affects, see Get technical issue.
GET /brands/{brand_id}/technical/issuesAuthorization
| 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. |
issue_type | string | optional | Filter to one type. One of: critical, error, warning, opportunity. |
severity | string | optional | Filter to one severity. One of: high, medium, low. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/technical/issues?limit=20' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"id": "7b3f9c1a-4e6d-4a2b-8c5f-1d9a3b6e7f42",
"name": "Images with empty alt text",
"category": "Images",
"issue_type": "error",
"severity": "high",
"errors": 4,
"pages": 1
},
{
"id": "a26f456d-9e84-43e4-99d3-f933f2a96683",
"name": "Page has very few internal inlinks",
"category": "Links",
"issue_type": "opportunity",
"severity": "medium",
"errors": 44,
"pages": 44
}
],
"pagination": {
"limit": 20,
"has_more": false,
"next_cursor": null
},
"request_id": "req_2a7c5e91b8d04f36ac10"
}Response fields
| Field | Type | Description |
|---|---|---|
data[].id | uuid | required. The issue TYPE’s id — pass to Get technical issue |
data[].name | string | required |
data[].category | string | required. e.g. Images, Links, URL, Meta Desc |
data[].issue_type | string | required. One of critical, error, warning, opportunity |
data[].severity | string | required. One of high, medium, low |
data[].errors | integer | required. Total affected elements across every page (images, links, etc. — whichever this issue counts) |
data[].pages | integer | required. Distinct pages currently affected |
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
This lists open issues only. A resolved or auto-resolved issue drops off this list entirely;
there is no resolved filter on this endpoint.
An issue with no matching audit-rule definition is excluded, rather than returned with a null
id. This is a real, if currently empty, edge case: every issue in production today has one.
errors is not always one row per page. Some issue types can find several affected elements on
a single page (e.g. four images missing alt text on one page counts as 4 errors, 1 page); most
count exactly one error per affected page.
Ordering is fixed: type (critical > error > warning > opportunity), then severity
(high > medium > low), then most-affected pages first. There is no sort parameter.