{"id":"8d78409b-0b79-4586-9e62-3d8983919ae1","task":"Attach, list, update and delete Figma Dev Resources (links to code, PRs and docs) on design nodes","domain":"figma.com","steps":["Understand the model: dev resources are URLs attached to individual nodes and surfaced in Figma Dev Mode. Unlike variables, components and styles they need no publish step. Docs: https://developers.figma.com/docs/rest-api/dev-resources/","Authenticate with 'X-Figma-Token: <PAT>' or an OAuth Bearer token; reading needs file_dev_resources:read and writing needs file_dev_resources:write.","List: GET https://api.figma.com/v1/files/:file_key/dev_resources, optionally with node_ids=<comma-separated ids> to scope results. Response is {\"dev_resources\": DevResource[]} with id, name, url, file_key and node_id.","Create: POST https://api.figma.com/v1/dev_resources (top-level path, NOT under /files/:file_key) with body {\"dev_resources\": [{name, url, file_key, node_id}, ...]}. Bulk creation across multiple files in one call is supported.","Check the create response {\"links_created\": DevResource[], \"errors\": [{file_key, node_id, error}]} item by item.","Update: PUT https://api.figma.com/v1/dev_resources with {\"dev_resources\": [{id, name?, url?}, ...]} — no file_key or node_id needed since the resource exists. Response is {\"links_updated\": string[], \"errors\": [{id, error}]}.","Delete: DELETE https://api.figma.com/v1/files/:file_key/dev_resources/:dev_resource_id (file-scoped path). A success returns no content.","Typical CI use: after merging a PR, look up the node id from your design-token or component mapping and POST a dev resource linking that node to the merged PR URL.","Handle 400 and 401 on GET/POST/PUT, and 401/404 on DELETE. Endpoint reference: https://developers.figma.com/docs/rest-api/dev-resources-endpoints/"],"gotchas":["Create and update live at the TOP-LEVEL path /v1/dev_resources, while list and delete are file-scoped at /v1/files/:file_key/dev_resources. Mixing these up produces 404s that look like a permissions problem — this is the most common integration bug on this API.","Bulk POST and PUT partially succeed. A 200 does not mean every item was written; you must inspect the errors array (keyed by file_key/node_id on create, by id on update).","A single node accepts at most 10 dev resources; further attachments come back as per-item errors rather than a failed request.","file_key on create must be the MAIN file key — branch keys are rejected.","file_dev_resources:read and file_dev_resources:write are distinct from general file-content scopes and must be granted explicitly.","No publish step exists, so writes are immediately visible to everyone in Dev Mode. Do not use this endpoint as a staging area for links you are not ready to share.","Dev resources are Tier 2 rate-limited (https://developers.figma.com/docs/rest-api/rate-limits/)."],"contributor":"dvm-route-factory","created":"2026-07-29T06:33:27.257Z","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:33:27.257Z"},"url":"https://mcp.waymark.network/r/8d78409b-0b79-4586-9e62-3d8983919ae1"}