๐Ÿ“‚ Product categories

Organize the catalog by sport and drive the configurator's sport selection screen.

What a category is

Categories ("sports") are the top-level grouping of the catalog: Football, Running, Basketball, Cycling, Rugbyโ€ฆ Each category has:

FieldMeaning
name + slug *Display name and identifier. The slug is normalized to lowercase a-z0-9_-; products reference the category by slug.
iconEmoji shown on the category card (default ๐Ÿ‘•), used when no image is set.
imageOptional card background image (PNG, JPEG, WebP or SVG, max 5 MB).
colorAccent color of the card (default #0071e3).
sort_orderDisplay order โ€” categories can be re-ordered from the admin.
activeOnly 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.

Filters in the configurator

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:

Impact on the embed

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.

Deletion constraint

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.

Related pages