Accept localization drafts
Turns ready drafts into tracked prompts, as versions of their source family, in one transaction: every draft lands or none does. Each accepted version consumes one active-prompt slot and starts executing immediately. Jobs that are not ready, or whose source wording changed since the draft was made, are skipped and listed; queue those again.
Each accepted version inherits its source prompt’s tags, as chosen when the drafts were made with Localize prompts. Pass copy_tags or exclude_tag_ids only to override that choice for every draft in the call. Copying only adds tags; a version keeps any tags it already has.
Short of tracking slots? Delete the prompts you no longer need with Delete prompts first, then accept. Drafts stay acceptable when the prompt they were made from is deleted.
Requires the write:localization scope, and the workspace must be enabled for API writes.
POST /v1/brands/{brand_id}/localization/acceptAuthorization
| 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 |
|---|---|---|---|
job_ids | uuid[], 1-200 | required | Ready jobs. From List localization jobs |
copy_tags | boolean | optional | Overrides the choice made when localizing. Omit to keep it |
exclude_tag_ids | uuid[], up to 500 | optional | Overrides the tags left out when localizing. From List tags. Omit to keep them |
Request
cURL
curl --request POST \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/localization/accept' \
--header 'Authorization: Bearer <api-key>' \
--header 'Idempotency-Key: 5b0e77d2-13a9-4f6a-8ce1-9a3f5e21c0aa' \
--header 'Content-Type: application/json' \
--data '{"job_ids": ["e1c2b3a4-5d6e-4f70-8192-a3b4c5d6e7f8"]}'Response
200
{
"data": {
"accepted_prompt_ids": [
"b6a0c2d4-1e3f-4a5b-8c7d-9e0f1a2b3c4d"
],
"accepted": 1,
"added_slots": 1,
"tags_copied": 2,
"runs": 1,
"skipped": [],
"dispatched": true
},
"request_id": "req_2f7b90c14ae8471da3cd"
}Response fields
| Field | Type | Description |
|---|---|---|
data.accepted_prompt_ids | uuid[] | required. The new tracked versions |
data.added_slots | integer | required. Active-prompt slots consumed |
data.tags_copied | integer | required. Tag assignments added to the accepted versions |
data.skipped | object[] | required. { job_id, reason } for jobs that were not accepted |
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | None of the jobs is ready; the message lists each with its reason |
| 403 | quota_exceeded | Accepting would exceed your active-prompt allowance. Nothing is accepted |
| 409 | conflict | The source, draft or market coverage changed since it was read |
| 503 | service_unavailable | Your allowance could not be checked. Nothing is accepted. Retry shortly |
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 403 | insufficient_scope | The key does not carry write:localization |
| 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 the per-minute limit for this endpoint |