https://dash.joinmarkt.com with:
{storeId}. Category scopes also require the key owner to have manageCategories on that store.
Successful list, get, create, and update responses are the JSON objects below. They are not wrapped in a data envelope. Errors use this shape:
- 401
Unauthorized, codeUNAUTHORIZED— missing bearer token, unknown key, revoked key, or the account deletion has completed. - 401
API key expired, codeUNAUTHORIZED. - 403
Forbidden, codeFORBIDDEN— the key cannot access this store, the scope is missing, or the owner lacksmanageCategories. - 429
Too many requests, codeRATE_LIMITED— more than 120 requests in 60 seconds. - 500 code
INTERNAL_ERROR, pluserrorId.erroris the fallback named on that method.
{categoryId} in a path is the category id, or a public id CAT- plus five groups of four characters from 23456789ABCDEFGHJKMNPQRSTUVWXYZ (for example CAT-2345-6789-ABCD-EFGH-JKMN). An unknown public id is looked up as a normal id and then follows the not-found errors below.
A JSON body must be an object. storeId inside the body is removed before validation. The store in the path is the one that is written. Fields other than name, description, and image are dropped.
List categories
category:read
Query:
page— integer, minimum 1, default 1limit— integer, 1–100, default 50
page or limit returns 400 with code BAD_REQUEST. The error text is the Zod issues joined with ; .
Categories are ordered by createdAt descending. A page past the end returns an empty categories array and the real total.
productCount is the number of products in the category.
Unexpected failures return 500 Failed to list categories.
Create a category
category:create · 201
Body:
name— required string, trimmed, 1–200 characters. Unique per storedescription— optional string, max 5000 characters, ornull. An empty string is stored asnullimage— optional string, max 500 characters, ornull. An empty string is stored asnull
productCount on create is 0.
Errors:
- 400 code
BAD_REQUEST— invalid JSON (Invalid JSON), a body that is not an object (JSON body must be an object), or Zod validation (name: …style, joined with;) - 400 code
category_name_duplicate—Category name already exists for this store - 400 code
category_validation— the category record fails the same name, description, and image checks after the merchant schema - 500
Failed to create category
Get a category
category:read
The response uses the same fields as a category in List categories. productCount is the current number of products in the category.
Errors:
- 404
Category not found, codeNOT_FOUND— unknown id, or the category belongs to another store - 500
Failed to load category
Update a category (PATCH)
category:update · 200
Same fields as create. Every field is optional. Omitted fields stay as they are. null clears description or image. An empty string is stored as an empty string. Create is the only write that stores an empty description or image as null.
productCount is the count loaded before the update.
Errors:
- 400 code
BAD_REQUEST— invalid JSON, a non-object body, or Zod validation - 400 code
category_name_duplicate—Category name already exists for this store - 400 code
category_validation— the saved name, description, or image fails validation - 404
Category not found, codeNOT_FOUND - 500
Failed to update category
Update a category (PUT)
category:update · 200
PUT calls the same update as PATCH. Send the same partial object. Omitted fields stay as they are.
Failed to update category.
Delete a category
category:delete · 200
No body. Delete succeeds only when the category has no products.
- 400 code
category_has_products—Cannot delete category with products. Please remove products first. - 404
Category not found, codeNOT_FOUND - 500
Failed to delete category

