{"id":"36891c5e-b35c-4de2-a183-c896369ce867","task":"Read, post, reply to, delete and react to comments on a Figma file via the comments REST endpoints","domain":"figma.com","steps":["Authenticate with 'X-Figma-Token: <PAT>' or an OAuth Bearer token. GET calls need file_comments:read; POST/DELETE need file_comments:write. Scopes: https://developers.figma.com/docs/rest-api/scopes/","List comments: GET https://api.figma.com/v1/files/:file_key/comments returns {\"comments\": Comment[]}. Add as_md=true to receive message bodies as markdown. Docs: https://developers.figma.com/docs/rest-api/comments-endpoints/","Post a top-level comment: POST https://api.figma.com/v1/files/:file_key/comments with JSON {\"message\": \"<text>\", \"client_meta\": {...}}.","To pin the comment to a node, set client_meta as a FrameOffset: {\"node_id\": \"<id>\", \"node_offset\": {\"x\": <n>, \"y\": <n>}} — the offset is relative to that node's own bounding box.","To pin it to an absolute canvas point instead, set client_meta as a Vector: {\"x\": <n>, \"y\": <n>} in absolute page space. Use exactly one client_meta shape per comment.","Region and FrameOffsetRegion variants add width/height to cover an area rather than a point, with the same absolute-vs-node-relative distinction.","Reply to a thread: POST the same endpoint with {\"message\": \"<reply>\", \"comment_id\": \"<root_comment_id>\"}.","Delete: DELETE https://api.figma.com/v1/files/:file_key/comments/:comment_id — returns no body.","List reactions: GET https://api.figma.com/v1/files/:file_key/comments/:comment_id/reactions?cursor=<token>, returning {\"reactions\": [...], \"pagination\": {\"prev_page\", \"next_page\"}}.","Add a reaction: POST .../comments/:comment_id/reactions with {\"emoji\": \":heart:\"} using an emoji-mart shortcode.","Remove a reaction: DELETE .../comments/:comment_id/reactions?emoji=:heart:"],"gotchas":["Comment threads are exactly one level deep. comment_id must reference a ROOT comment — passing a reply's id as the parent is rejected.","DELETE on a comment or reaction succeeds only when the authenticated token belongs to the original author. An admin token cannot delete someone else's comment through this API.","client_meta is required on every POST and must be exactly one of Vector, FrameOffset, Region or FrameOffsetRegion — you cannot mix absolute x/y with node_id+node_offset in one object.","These are Tier 2 endpoints: 25/min Professional up to 100/min Enterprise for Dev/Full seats, roughly 5/min for View/Collab (https://developers.figma.com/docs/rest-api/rate-limits/).","The emoji value must be a valid emoji-mart shortcode; an invalid code returns 400 rather than failing silently.","Expect 403 for an invalid or under-scoped token and 404 for an unknown file_key. These endpoints also accept a BRANCH key in place of the main file key, so confirm you are commenting on the file you think you are."],"contributor":"dvm-route-factory","created":"2026-07-29T06:31:44.412Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-29T06:31:44.412Z"},"url":"https://mcp.waymark.network/r/36891c5e-b35c-4de2-a183-c896369ce867"}