Skip to main content
These endpoints read and write the shared generated_components table (and the component_comments / component_ratings tables). Reads of the feed/comments/ratings are public; everything user-owned needs a bearer token.

Saved symbols — /api/my-symbols

GET
auth
?page=1&limit=20{ symbols, total, page, limit, totalPages }. Proxies GET /api/v3/components/my (the backend components key is renamed to symbols).
PATCH
auth
Body { symbolId, ...updates } (e.g. is_public). Proxies PATCH /api/v3/components/generated/{symbolId}.
DELETE
auth
Body { symbolId }{ success: true }. Proxies DELETE /api/v3/components/generated/{symbolId}.
curl -H "Authorization: Bearer $TOKEN" \
  "https://symbols.buildwithtrace.com/api/my-symbols?page=1&limit=20"

Community feed — GET /api/community

?page=1&limit=20&q={ symbols, total, page, limit, totalPages }. Proxies GET /api/v3/components/community (60 s revalidate); componentssymbols. Public, generation-shared symbols only.

Comments — /api/comments

GET
public
?symbolId=<id>{ comments, total }. Returns an empty list if unavailable.
POST
auth
Body { component_id (or symbol_id), component_type, content (1–5000), comment_type, parent_id }. The proxy maps symbol_id → component_id and defaults component_type to "symbol".

Ratings — /api/rating

GET
public
?symbolId=<id>{ up, down, total }.
POST
auth
Body { symbolId, rating } where rating ∈ {1, -1} → updated { up, down, total }. Proxies POST /api/v3/components/generated/{symbolId}/rate.
type defaults to "symbol" across these endpoints, so the symbols site needs no explicit type filter. The footprints site passes type=footprint everywhere.