edit_project_update
Save changes to an existing canvas project by id — the autosave door: send only the fields that changed (name, canvas_json, width, height, thumbnail_data_url), everything else on the row is left alone. A canvas_json you send goes through the same image-externalization and hygiene refusal as edit_project_create (embedded images become R2 keys; SVG, unrecognized types, oversized images, or a still-too-large canvas refuse the whole save). version is bumped by the door itself on every save and thumbnail_key is server-minted from thumbnail_data_url — both refuse if you pass them directly. NEXT: edit_project_read to confirm the saved version.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The edit_project id (edit_project_list shows them). | |
| name | No | ||
| width | No | ||
| height | No | ||
| version | No | ||
| canvas_json | No | ||
| thumbnail_key | No | ||
| thumbnail_data_url | No | Optional thumbnail as a data: URL (PNG/JPEG/WebP/GIF, max 2MB) — externalized into thumbnail_key the same way embedded canvas images are. Omit to skip thumbnail externalization (create: no thumbnail_key is set; update: the existing thumbnail_key is left unchanged). | |
| expected_updated_at | No | Optional compare-and-set guard: the updated_at you last read. Mismatch returns CONFLICT with the current value. |