Organize the catalog by sport and drive the configurator's sport selection screen.
Categories ("sports") are the top-level grouping of the catalog: Football, Running, Basketball, Cycling, Rugbyโฆ Each category has:
| Field | Meaning |
|---|---|
name + slug * | Display name and identifier. The slug is normalized to lowercase a-z0-9_-; products reference the category by slug. |
icon | Emoji shown on the category card (default ๐), used when no image is set. |
image | Optional card background image (PNG, JPEG, WebP or SVG, max 5 MB). |
color | Accent color of the card (default #0071e3). |
sort_order | Display order โ categories can be re-ordered from the admin. |
active | Only active categories are exposed publicly. |
Categories are managed centrally in the super-admin (/admin/categories.html); each product โ catalog or tenant โ carries a category slug.
The configurator's onboarding screen guides the end customer in two steps: pick a sport โ pick a product. It loads the public category list (GET /api/categories โ active categories sorted by sort_order then name) and the product catalog, then:
The same onboarding overlay runs inside the embedded configurator: when the widget is loaded with your embed_key and no product is preselected, the customer first sees your sport tabs, then the products available in each. The chosen product is passed as a ?product=slug URL parameter. To skip the selection entirely, embed with a specific product โ see Embed.
A category cannot be deleted while products still use it: the API refuses with HTTP 409 โ "Category used by N product(s) โ remove them first". Reassign or remove those products before deleting.
If you just want to hide a category without touching its products, deactivate it instead (active = 0): it disappears from the public list and the configurator, and can be re-enabled later.