consent/update-category changes how a category is presented: its name, its description, whether it appears in the preference centre, and where it sits in the order.
What it deliberately cannot change is whether the category is strictly necessary.
At a glance
| Ability | consent/update-category |
| Toolset | CookieYes — toolset/cookieyes |
| Group | CookieYes › Consent Categories |
| Requires | CookieYes, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Not idempotent — each call changes the row set, so re-running is not a no-op |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
The flag that is not here
The strictly necessary flag decides whether a category loads before a visitor has chosen anything. Flip it on and the category stops being a choice; flip it off and things that were loading immediately stop until someone consents.
Either direction is a decision about what the site is claiming and what law it is claiming it under. That is not a configuration change, and it is not something to do on an assistant’s reading of a sentence, so it is not exposed. The settings screen has it.
What is here is presentation. Renaming a category, improving its description, hiding one from the preference centre, reordering them — all real work, none of it changing what loads when.
The sell_personal_data flag is here, because it is a disclosure rather than a loading rule: it marks the category as counting as selling or sharing personal information, which is what several US state laws turn on.
Names and descriptions follow the same per-language rule as cookies: a string sets every language, a map sets the ones it names.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
id | integer | Yes | Category ID, from consent/list-categories. |
name | string | object | No | A plain string is applied to every language. A map keyed by language code sets them individually, and languages you leave out keep the text they already had. |
description | string | object | No | A plain string is applied to every language. A map keyed by language code sets them individually, and languages you leave out keep the text they already had. |
visible | boolean | No | Whether the category is shown in the preference centre. |
priority | integer | No | Ordering within the preference centre. |
sell_personal_data | boolean | No | Whether this category counts as selling or sharing personal information. |
What comes back
| Name | Type | What it is |
|---|---|---|
category | object | The category after the write. |
banner_refreshed | boolean | Whether the cached banner was rebuilt after the write. This is the field that says the change actually reached visitors. |
languages | array | The languages the banner is built for. |
rendered | object | The size of the built banner, per language. |
pending_rebuild | boolean | Whether the banner is still waiting to be rebuilt. True after a write means the change is stored but not yet being served. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Rename the “Advertisement” category to “Marketing” and move it last.
It resolves to one call:
{
"ability": "consent/update-category",
"parameters": {
"id": 4,
"name": "Marketing",
"priority": 90
}
}Worth knowing
- Strictly necessary is not changeable here, by design.
- Hiding a category removes a visitor’s ability to reject it. That is a bigger change than it looks.
- A string name overwrites every language’s name at once.
- Check
banner_refreshedbefore assuming visitors see the new wording.
Related abilities
- Get Consent Category — read the current presentation
- Get Banner Status — confirm it reached visitors
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category