docs
/
AppEngine API

Creative Studio

The design library and the editor's save path — searched and paged listings, new designs, saves, copies, previews and uploaded images.

CreativeStudioModule backs the Creative Studio design editor and its library. Plain CRUD — opening or deleting a design — stays on the repository routes; these routes are the operations where the server has to compute something: searched and sorted pages, unique names, stored previews and copies.

A design is a creative_studio record. data.content holds the Fabric.js canvas JSON, data.workAreas the frames the user designs inside, and data.thumbnail a PNG preview kept in the platform's file storage. data.name is the record's unique slug; data.title is what people see and rename (older designs have only a name, so reads fall back to it).

Routes

POST/creative-studio/designs/listJWT
POST/creative-studio/designs/createJWT
POST/creative-studio/designs/:id/saveJWT
POST/creative-studio/designs/:id/renameJWT
POST/creative-studio/designs/:id/duplicateJWT
POST/creative-studio/designs/:id/thumbnailJWT
POST/creative-studio/assetsJWT

Library

designs/list takes { search, sort, type, page, pageSize }. search matches title, name and tags; sort is recent (default) · oldest · name; type is image or design. pageSize defaults to 24, capped at 100. Rows come back without the canvas JSON, as summaries: sk, name, title, type, status, thumbnail, width, height (from the first frame), frameCount, hasContent, createdate, modifydate. The response adds total, page, pageSize, hasNext.

Designs

  • create — { title?, size: { width, height, name?, platform? } }. Each side must be 16–10000 pixels. Makes a draft with one white frame of that size and a unique name built from the title.
  • save — the editor's save. Writes only content, workAreas, activeWorkAreaId, viewport, designSystem, externalContext, platform, format, tags, and title if sent; everything else is server-owned. width/height follow the first frame. A thumbnail data URL in the body is stored as the new preview.
  • rename — { title }; an empty title answers 400.
  • duplicate — a full copy under "‹title› (copy)", as a draft, with its own preview file so the two never share a picture. Export and finalized state are not copied.
  • thumbnail — { image }, a PNG, JPEG or WebP data URL. Resized to fit 640 pixels and stored as PNG; the URL carries a version so caches refresh.

Uploaded images

assets takes { path, url?, name? } for a file already uploaded to storage. It becomes a library item of type image: one frame the size of the picture with the picture waiting to be placed in it, and a preview made from the file. A file that is not an image answers 400.