List alignment suggestions
Alignment prompts the platform has generated (or that you added by hand) but have not yet been decided on. Each carries the category it targets, or a brand-new category it proposes, plus the reasoning behind it when the agent generated it.
This is the review queue for the alignment side: review what Generate alignment
suggestions proposed and accept the ones worth
tracking with Accept alignment suggestions. It is
also how a caller learns that a generation run has finished, since there is no separate run-status
endpoint: poll this with request_id and the default status=proposed filter until rows stop
arriving.
Requires only read:alignment. Acting on suggestions needs write:alignment.
GET /v1/brands/{brand_id}/alignment/suggestionsAuthorization
| 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. |
request_id | uuid | optional | Restrict to one generation batch (from Generate alignment suggestions). |
status | string, repeatable | optional | Filter by status. One of: proposed, accepted, rejected, promoted. Defaults to proposed (the review queue) when omitted. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/alignment/suggestions?limit=50' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"id": "e4a2c8f0-6b1d-4a9e-9c3f-1d8b5a2e7f60",
"request_id": "7f3ab21c-9e4d-4b8a-8f1a-2c9d6e4b7a30",
"suggested_prompt": "Does this brand publish third-party verified sustainability claims?",
"language": "en",
"country_codes": ["US"],
"category_id": "b8d4f261-3a9c-4e17-8f52-6d1a9c4e8b30",
"proposed_category_name": null,
"proposed_category_slug": null,
"proposed_category_description": null,
"agent_reasoning": "This category has no active prompts probing third-party verification, a common trust signal in this vertical.",
"status": "proposed",
"promoted_to_prompt_id": null,
"rejected_reason": null,
"created_at": "2026-08-30T09:16:47.118Z"
}
],
"pagination": {
"limit": 20,
"has_more": false,
"next_cursor": null
},
"request_id": "req_2f7b90c14ae8471da3cd"
}Response fields
| Field | Type | Description |
|---|---|---|
data[].id | uuid | required. Use it with Accept / Reject / Edit alignment suggestions |
data[].request_id | uuid | required. The generation batch this suggestion came from, or the batch it was added into by Add alignment suggestion |
data[].suggested_prompt | string | required |
data[].language | string | required |
data[].country_codes | string[] | required |
data[].category_id | uuid | null | Set when this suggestion targets an existing category, from List alignment categories |
data[].proposed_category_name | string | null | Set when this suggestion proposes a brand-new category instead |
data[].proposed_category_slug | string | null | The slug the new category will get, materialized only once a suggestion in it is accepted |
data[].proposed_category_description | string | null | |
data[].agent_reasoning | string | null | Why the agent proposed this prompt. null for hand-written suggestions |
data[].status | string | required. One of proposed, accepted, rejected, promoted |
data[].promoted_to_prompt_id | uuid | null | Set once accepted |
data[].rejected_reason | string | null | Set only when rejected with a reason |
data[].created_at | timestamptz | 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 |
| 403 | insufficient_scope | The key does not carry read:alignment |
| 404 | not_found | The brand does not exist, or this key is not allowed to reach it |
| 429 | rate_limited | Over 300 requests per minute |
Notes
Defaults to proposed. Pass status explicitly to see suggestions you already decided on —
useful for auditing what was accepted or rejected and why.
accepted vs promoted. Both mean the suggestion was accepted. promoted created a new
alignment prompt; accepted means the suggested text already matched an existing active alignment
prompt, so it was linked to that prompt instead of creating a duplicate. promoted_to_prompt_id
is set either way.
A category never has both fields set. category_id (an existing category) and
proposed_category_name/proposed_category_slug/proposed_category_description (a brand-new
one) are mutually exclusive per row. A suggestion with neither is uncategorised.