framer_canvas
Framer CANVAS READS and low-level node ops. For DESIGN work (layout, typography, styling) use framer_design instead — set_attributes/set_text below bypass the design layer. action: 'pages' (list web pages: id, path, draft), 'children' (node_id — list direct children; run this on a page id to find the 'Desktop' breakpoint frame, which is the real render root you must parent sections to), 'node_info' (node_id — resolved attributes of one node; use it to tell a rejected attribute from an applied one), 'text_styles' (list existing text style presets — read before creating more, duplicate names get auto-renamed), 'text_nodes' (list text nodes with content; args: search, limit — find the headline to change), 'set_text' (node_id + text — rewrite a heading/paragraph), 'set_attributes' (node_id + attributes_json of Framer node attributes, e.g. '{"backgroundColor":"#0E2F54","visible":true}'), 'set_custom_code' (html + location headStart|headEnd|bodyStart|bodyEnd — JSON-LD schema, meta tags, analytics). Read text_nodes first, then edit by node id. NOT live until framer_publish.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | HTML snippet (set_custom_code) | |
| text | No | New text (set_text) | |
| limit | No | Max text nodes (default 300) | |
| action | Yes | pages | children | node_info | node_dump | text_styles | text_nodes | set_text | set_attributes | set_custom_code | |
| search | No | Filter text_nodes by substring | |
| node_id | No | Target node id (set_text / set_attributes) | |
| location | No | headStart | headEnd | bodyStart | bodyEnd (set_custom_code, default headEnd) | |
| framer_site_id | Yes | From connect_framer | |
| attributes_json | No | JSON object of node attributes (set_attributes) |