API — Sets (Categories)
CRUD for Sets — the grouping resource that the product UI calls “Categories.” All endpoints require auth:api, auth_session, and audit middleware. Results are workspace-scoped.
💡 Tip: The database table and model are named
sets/Set. The product UI labels them “Categories.” When writing customer-facing copy, use “Categories.” When writing code or internal docs, use “sets.”
Endpoints
GET /sets
List all sets in the active workspace.
Query params: workspace_id
Response 200: Array of set objects { id, name, workspace_id, created_at, updated_at }.
GET /sets/{id}
Get a single set by numeric ID.
Response 200: Set object.
POST /sets
Create a new set (Category).
Body: { name, workspace_id }
Response 201: Created set object.
PUT /sets/{id}
Rename a set.
Body: { name }
Response 200: Updated set object.
DELETE /sets/{id}
Delete a set.
Response 204
⚠️ Warning: Deleting a set does not cascade-delete its associated locations or finders. The association is removed but the resources remain. Verify no active finders depend on the set before deleting.
Admin variants
The admin route group (role:admin) exposes the same operations under /admin/sets:
GET /admin/sets— list across all workspacesPOST /admin/sets,PUT /admin/sets/{set},DELETE /admin/sets/{set}— admin CRUD