generated_components table (and component_comments
/ component_ratings). The footprints site passes type=footprint everywhere so only
footprints surface. Feed/comment/rating reads are public; user-owned actions need a token.
Saved footprints — /api/my-footprints
?page=1&limit=20 → { footprints, total, page, limit, totalPages }. Proxies
GET /api/v3/components/my?…&type=footprint (components → footprints).Body
{ footprintId, ...updates } (e.g. is_public). Proxies
PATCH /api/v3/components/generated/{footprintId}.Body
{ footprintId } → { success: true }. Proxies
DELETE /api/v3/components/generated/{footprintId}.The saved-items route is
/api/my-footprints (the body key is footprintId). The backend
target is the shared /api/v3/components/* family with type=footprint.Community feed — GET /api/community
?page=1&limit=20&q= → { footprints, total, page, limit, totalPages }. Proxies
GET /api/v3/components/community?…&type=footprint; components → footprints. The page
also defensively filters to type === "footprint" client-side.
Comments — /api/comments
?symbolId=<id> → { comments, total }.Body
{ component_id (or footprint_id), component_type, content, comment_type, parent_id }.
The proxy defaults component_type to "footprint" on this site.Ratings — /api/rating
?symbolId=<id> → { up, down, total }.Body
{ symbolId, rating }, rating ∈ {1,-1}.The comments/ratings query param is still named
symbolId (and the backend route family is
component-generic) — it accepts any component id, footprint or symbol.
