Categories
Categories are the storefront's browsing tree — the sections customers navigate and products are assigned to. The Categories menu lists them (flat or as a nested tree), shows a single category, and creates / edits / deletes / moves them. It mirrors the admin Catalog → Categories screen.
Flat list vs. tree
Two read shapes for the same data:
- List (
GET /api/admin/catalog/categories) — a flat, paginated, filterable datagrid of categories. Each row carries the category's own fields plus itsparentId. - Tree (
GET /api/admin/catalog/categories/tree) — the full nested hierarchy, each node carrying itschildrenrecursively. Use this to render the category tree in one call.
Hierarchy, status, display
parentIdplaces a category under its parent. The root category (id = 1) and any channel's root category are structural and cannot be deleted.- Moving a category is just an update with a new
parentId(andposition) — there is no separate "move" endpoint. status(1 enabled / 0 disabled) andposition(sort order among siblings).displayMode— what the category page shows:products_and_description,products_only, ordescription_only.translationshold the per-localeslug,name,description, and meta fields.filterableAttributeIdsare the attributes used for this category's layered-navigation filters.
The single-category endpoint embeds the full translations and filterableAttributeIds inline; the listing leaves those two out (they're detail-only).
Endpoints in this menu
| Action | Endpoint |
|---|---|
| List categories | GET /api/admin/catalog/categories |
| Category tree | GET /api/admin/catalog/categories/tree |
| Category detail | GET /api/admin/catalog/categories/{id} |
| Create category | POST /api/admin/catalog/categories |
| Update / move category | PUT /api/admin/catalog/categories/{id} |
| Delete category | DELETE /api/admin/catalog/categories/{id} |
| Mass delete | POST /api/admin/catalog/categories/mass-delete |
| Mass update status | POST /api/admin/catalog/categories/mass-update-status |
All Categories endpoints require an admin Bearer token — see Authentication. Reads require catalog.categories.view; writes require the matching catalog.categories.create / .edit / .delete permission.

