Skip to content

Update or move a category

PUT
/content/management/v1/taxonomy/categories/{id}
curl --request PUT \
--url https://api.ebitex.io/content/management/v1/taxonomy/categories/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "key": "example", "value": "example", "isSelectable": true, "metadata": {}, "parentCategoryId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "rowVersion": 1 }'

Changes a category’s key, value, isSelectable or metadata, and moves it within its group. Omitted key, value, isSelectable and metadata stay as they are, but parentCategoryId is always applied: omitting it or sending null moves the category to the top of its group. Send the current parent to keep it in place. A category cannot move to another group.

So renaming a category in place is { "key": "new-key", "parentCategoryId": "<its current parent>" } — send only key and you will also have moved it. Read the category first if you do not already hold its parent. This is the one field that behaves this way; it exists so that a move needs no separate route.

Renaming or moving a category changes its path everywhere at once, including delivery, with no republish. Content refers to categories by id, so nothing that uses it breaks. Making a category non-selectable is refused while anything still uses it.

Key: a management key with content.management.authoring.

id
required
string format: uuid
Media typeapplication/json
object
key
required
null | string
value
required
One of:
null
isSelectable
required
null | boolean
metadata
required
One of:
null
parentCategoryId
required
null | string format: uuid
rowVersion
required
null | integer | string format: uint32
/^-?(?:0|[1-9]\d*)$/
Examplegenerated
{
"key": "example",
"value": "example",
"isSelectable": true,
"metadata": {},
"parentCategoryId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"rowVersion": 1
}

The updated category, shaped as in the group’s category list.

validation_failed: errors names each problem, such as an invalid key, a sibling with the same key at the destination, a parent not in this group, or metadata that does not satisfy the group’s fields. cycle: the new parent is the category itself or one of its descendants.

missing_api_key or invalid_api_key: no key was sent, or it is unknown, revoked or expired.

payment_required: the organization’s subscription needs attention.

permission_denied: the key’s role lacks content.taxonomy.manage.

scope_denied: the key lacks this route’s scope. tier_required: the Content Management API needs the Pro plan or above. ip_denied: the caller’s address is outside the key’s allowed ranges. app_not_available: Content is not enabled for the organization.

No category has this id in the key’s environment.

category_in_use: isSelectable: false was sent for a category that child categories, classification or field values still use; usages lists each as { sourceKind, sourceId }. concurrency_conflict: the rowVersion sent is not the category’s current one, so someone else has changed it; currentRowVersion is what it is now. taxonomy_read_only: the group or category comes from a content provider and changes only when that provider is refreshed. inherited_read_only: the item is inherited from another environment and can only be changed there; sourceEnvironmentId names it.

Rate limit or quota exceeded; Retry-After says how long to wait. too_many_failed_authentications: too many bad keys from this address.