Men → Kaftan. The taxonomy is one level
deep: a top-level category may have children, and a child never has children of its own. Every
category has a workspace-unique slug (like kaftan) that you can use anywhere an id is accepted.
Categories ride the product scope, since they’re product metadata.
Categories differ from the other two ways to group products. A category is taxonomy (where a
product belongs), a tag is a free-form label, and a collection is
merchandising (a storefront grouping, hand-picked or rule-driven).
Reading the taxonomy
parent: null is a root, and every other category is a
child of the parent id (parent_slug is there so you can render a breadcrumb without a second
lookup).
product_count
product_count rolls up the category and its children, counting each product once. A product
filed under both Men and Kaftan adds 1 to Men, not 2.
It counts raw membership, so it includes products a storefront wouldn’t show (drafts, hidden). For a
buyable count, filter the products endpoint instead — see below.
Filtering products by category
Pass slugs (or ids) toGET /products:
GET /products
defaults to status=ACTIVE, so this is also how you get a storefront-accurate count — read
total from the page.
An unrecognized term yields an empty page, never an error.
Filing a product
There are no category write endpoints on the public API — categories are managed in the dashboard. You assign them when you write a product, by slug or id, with the first entry as the primary category:categories replaces the product’s whole category set ([] clears it). An unknown slug or id
fails the write with 422 unprocessable and nothing is applied — so read the taxonomy first when
you’re mapping an external catalog onto it.
Good to know
- Slugs are stable addresses; names are not. Address categories by
slug(or id) in stored mappings — a merchant renaming a category doesn’t change its slug. - A UUID in the path wins. If a path segment is a UUID, it’s matched as an id first, then as a slug.
- One level, always. If you’re modelling a deeper tree from another platform, flatten it — a child category can’t take children.

