Categories & Collections API
Hierarchical product categories and curated collections.
Base: /api/v1/ | X-Tenant-ID required | All read endpoints public
GET
/api/v1/categories
Public
Return the full category tree (parents + children nested).
Response
{ "success": true, "data": { "categories": [ { "id","name","slug","image_url","children": [ ... ] } ] } }
GET
/api/v1/categories/:slug
Public
Single category with its products.
Response
{ "success": true, "data": { "category": { "id","name","slug","products": [ ... ] } } }
GET
/api/v1/collections
Public
List all active collections.
Response
{ "success": true, "data": { "collections": [ { "id","name","slug","banner_url","sort_order" } ] } }
GET
/api/v1/collections/:slug
Public
Single collection with its associated products.
Response
{ "success": true, "data": { "collection": { "id","name","slug","products": [ ... ] } } }
Admin — Categories /api/v1/admin/categories
All admin endpoints require
Authorization: Bearer <admin_token> and X-Tenant-ID.
POST
/api/v1/admin/categories
🔒 Auth Required
Create a new category.
Request Body
{ "name": "T-Shirts", "parent_id": null, "image_url": "...", "description": "...", "sort_order": 0 }
Response
{ "success": true, "data": { "category": { "id","name","slug","parent_id","sort_order" } } }
PUT
/api/v1/admin/categories/:id
🔒 Auth Required
Update a category.
Request Body
{ "name": "Tees", "sort_order": 1 }
Response
{ "success": true, "data": { "category": { ... } } }
DELETE
/api/v1/admin/categories/:id
🔒 Auth Required
Delete a category. Will fail if products are linked.
Response
{ "success": true, "data": null }
Admin — Collections /api/v1/admin/collections
POST
/api/v1/admin/collections
🔒 Auth Required
Create a collection.
Request Body
{ "name": "Summer Picks", "description": "...", "banner_url": "..." }
Response
{ "success": true, "data": { "collection": { ... } } }
POST
/api/v1/admin/collections/:id/products
🔒 Auth Required
Add a product to a collection.
Request Body
{ "product_id": "uuid", "sort_order": 0 }
Response
{ "success": true, "data": null }
DELETE
/api/v1/admin/collections/:id/products/:pid
🔒 Auth Required
Remove a product from a collection.
Response
{ "success": true, "data": null }