Create a category
Optionally under a parent. Names are unique among siblings, not across the brand — two parents may each have a Boots.
Authorization
apiKey Your API key. X-Api-Key: <key> is accepted as an alternative.
A key belongs to an organization, not a user, so it outlives whoever created it. It carries two independent things, and both are checked: an org role (a member key cannot approve a publish or activate a mapping) and a set of scopes — catalog:read, catalog:write, enrichment:write, publishing:read, publishing:write, org:read, org:write. Holding a scope does not grant a role, and holding a role does not grant a scope.
GET /v1/me returns both for the key you are holding.
In: header
Path Parameters
The brand to read.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/brands/string/categories" \ -H "Content-Type: application/json" \ -d '{ "name": "string" }'{ "id": "string", "name": "string", "parentId": "string"}List a brand's categories GET
Flat, with `parentId` — the tree is derived, never stored, so a breadcrumb is built by walking parents (ADR-0027).
Delete a category DELETE
Its products move to its parent (uncategorized, if it was a root) and its subcategories move up one level (ADR-0027). **Never refused** — every product finds a home. A subcategory whose name is already taken at the destination cannot move up: two siblings may not share a name. That one is **removed as well, and its products move up too**, and the same rule then applies to its own children. `dropped` lists every category removed this way and `lifted` every one that moved up, so you never have to infer which categories still exist.