Reject alignment suggestions
Rejects one or more suggestions. They stay in the review queue’s history (never deleted) and stop
appearing in List alignment suggestions’ default
status=proposed view.
Nothing is created and no quota is consumed.
Bulk-shaped only. There is no single-suggestion reject endpoint; send one id for the single-row case.
Requires the write:alignment scope, and the workspace must be enabled for API writes.
POST /v1/brands/{brand_id}/alignment/suggestions/rejectAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Idempotency-Key | string | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
Body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
suggestion_ids | uuid[], 1-200 | required | From List alignment suggestions |
reason | string, up to 280 chars | optional | Recorded on every rejected row |
Request
cURL
curl --request POST \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/alignment/suggestions/reject' \
--header 'Authorization: Bearer <api-key>' \
--header 'Idempotency-Key: 5b0e77d2-13a9-4f6a-8ce1-9a3f5e21c0aa' \
--header 'Content-Type: application/json' \
--data '{"suggestion_ids": ["e4a2c8f0-6b1d-4a9e-9c3f-1d8b5a2e7f60"], "reason": "Too close to an existing prompt"}'Response
200
{
"data": {
"rejected": ["e4a2c8f0-6b1d-4a9e-9c3f-1d8b5a2e7f60"],
"already_rejected": []
},
"request_id": "req_5b0e77d213a94f6a8ce1"
}Response fields
| Field | Type | Description |
|---|---|---|
data.rejected | uuid[] | required. Ids actually rejected by this call |
data.already_rejected | uuid[] | required. Ids that were already rejected before this call — a no-op |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | suggestion_ids is empty, over 200 entries, contains an id not found for this brand, or contains an id that is promoted/accepted (and not already rejected) |
| 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:alignment |
| 403 | plan_required | This workspace is not enabled for API writes |
| 404 | not_found | The brand does not exist, or this key is not allowed to reach it |
| 429 | rate_limited | Over 60 requests per minute |
Notes
Validation is all-or-nothing. An id that is missing, belongs to another brand, or was already
accepted refuses the entire call and names every offender — unlike the app’s own bulk reject,
which reports per-row failures under a 200.
Replaying an already-rejected id is safe. It comes back in already_rejected rather than
causing an error, so this endpoint is safe to retry after a timeout.
Rejecting a promoted suggestion always fails. Once a suggestion created a tracked alignment prompt, the decision is final on this endpoint. There is currently no way to delete an alignment prompt through this API; remove it from the app if it needs to go away.