Separate Image Layers
separate-image-layersTurn a flat image already stored in the user's Canva account into a new Canva design in which the text, objects, and background become separate elements that can each be edited on their own.
Use to make the wording in a poster, banner, flyer, or social graphic editable; swap out or remove one object in a graphic while keeping the rest; recover an editable design from artwork the user only has as a PNG, JPEG, or WEBP; or rebuild a graphic made outside Canva so it can be resized, restyled, or exported from Canva.
Only call once the image is already stored in the user's Canva account. Flat graphics convert well; photographs convert poorly. Every call saves a brand-new design and leaves the source image untouched. Not for saving an image as-is, editing an existing Canva design, or using an image only as inspiration for a fresh layout.
Starts the conversion as a job rather than returning the design: the response carries a job_id and a continuation_token. When this tool's UI widget is shown, the widget polls get-separate-image-layers-job itself and displays the design when ready - do not poll it yourself. Only when no widget is shown, poll get-separate-image-layers-job with both, waiting the number of seconds in polling_policy.wait_seconds before each call, until the job completes and returns the design link to share with the user.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Title for the new design, e.g. 'Summer sale poster'. Use the user's wording when they gave one. | |
| asset_id | Yes | ID of a PNG, JPEG, or WEBP image asset in the user's Canva account, as returned when the image was uploaded or listed. Not a URL, a local file path, or a design ID. | |
| user_intent | No | Mandatory description of what the user is trying to accomplish with this tool call. This should always be provided by LLM clients. Please keep it concise (255 characters or less recommended). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | Stable ID of the layer-separation job. Pass it to get-separate-image-layers-job on every poll. | |
| status | Yes | Status of the newly queued job. 'pending' means the job was queued - this call never returns the finished design directly; poll get-separate-image-layers-job with the job_id and continuation_token for completion or failure. 'failed' means no job was queued and there is nothing to poll; the failure explains why. | |
| failure | No | Why no job was queued. Only present when status is 'failed', in which case there is no job_id or continuation_token to poll with. | |
| polling_policy | No | How and when to poll next. | |
| continuation_token | No | Opaque token to pass on the first poll to get-separate-image-layers-job. Always use the most recent token from the last response. |