Skip to main content
These endpoints read/write the shared 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

GET
auth
?page=1&limit=20{ footprints, total, page, limit, totalPages }. Proxies GET /api/v3/components/my?…&type=footprint (componentsfootprints).
PATCH
auth
Body { footprintId, ...updates } (e.g. is_public). Proxies PATCH /api/v3/components/generated/{footprintId}.
DELETE
auth
Body { footprintId }{ success: true }. Proxies DELETE /api/v3/components/generated/{footprintId}.
curl -H "Authorization: Bearer $TOKEN" \
  "https://footprints.buildwithtrace.com/api/my-footprints?page=1&limit=20"
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; componentsfootprints. The page also defensively filters to type === "footprint" client-side.

Comments — /api/comments

GET
public
?symbolId=<id>{ comments, total }.
POST
auth
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

GET
public
?symbolId=<id>{ up, down, total }.
POST
auth
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.