Resolve technical issue
Mark one page’s occurrence of a technical issue resolved, or reopen it. Scoped to a single row
from Get technical issue’s data[], not the whole issue
group — resolving one affected page never touches the group’s other pages. A manual resolve
sticks until the issue is re-detected on that page by a future audit or discover run, which
reopens it automatically.
PATCH /brands/{brand_id}/technical/issue-pages/{page_issue_id}Authorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Idempotency-Key | string | required on every write. See Idempotency |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
page_issue_id | uuid | required | One row’s id from Get technical issue’s data[] |
Body parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
resolved | boolean | optional | true to resolve (default), false to reopen |
Request
cURL
curl --request PATCH \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/technical/issue-pages/bcb9c8a7-563e-47e9-90de-7f9b41348f8b' \
--header 'Authorization: Bearer <api-key>' \
--header 'Idempotency-Key: 5b0e77d2-13a9-4f6a-8ce1-9a3f5e21c0aa' \
--header 'Content-Type: application/json' \
--data '{"resolved": true}'Response
200
{
"data": {
"page_issue_id": "bcb9c8a7-563e-47e9-90de-7f9b41348f8b",
"resolved": true
},
"request_id": "req_5b0e77d213a94f6a8ce1"
}Response fields
| Field | Type | Description |
|---|---|---|
data.page_issue_id | uuid | required |
data.resolved | boolean | required. The state it was set to |
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 |
| 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 |
| 403 | insufficient_scope | The key does not carry write:website |
| 403 | plan_required | This workspace is not enabled for API writes |
| 404 | not_found | page_issue_id does not exist for this brand, or this key is not allowed to reach it |
| 429 | rate_limited | Over 60 requests per minute on write endpoints |
Notes
This is per-occurrence, not per-group. List technical issues
and Get technical issue work at the group level — one row per
issue type (e.g. “Links with no anchor text”), affecting many pages. This endpoint resolves exactly
one of those affected pages, identified by the id field on its row in data[]. Resolving every page
in a group individually is the only way to clear the whole group through this endpoint; there is no
bulk resolve-by-group action.
A resolve does not stick past the next detection. If a future audit or discover run re-detects the
same issue on the same page, it reopens automatically — resolved_at is cleared and auto_resolved is
set. This mirrors what “Mark as resolved” does in the app: it is a statement that the page is fixed
right now, not a permanent suppression.