> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eversince.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# manage canvases

> Create, rename, open and delete canvases, and keep one as a template; get_canvas reads them. create: blank at a destination (a named size from get_canvas destinations: instagram-post is 1080 by 1350, the carousel size; instagram-square, instagram-story, youtube-thumbnail, a4 and more) or at a width and height; from_ref, an image item, at the picture's own size with it as the one layer; or from_canvas, another canvas, as a copy (a template is a canvas with a flag, so using one is a copy, and a shelf image template comes with its sample pictures) or, with a new size, as a resize laid out again, naming any layer it left off a slide. The response carries the canvas id, name, size, slide count and editor link; a new canvas has one slide, which addLayer uses unless slideId says otherwise. open opens a canvas in the user's app. delete takes one away; a picture exported from it stays in the library. Free.



## OpenAPI

````yaml /openapi.json post /tools/manage_canvases
openapi: 3.1.0
info:
  title: Eversince API
  version: '1'
  description: >-
    Every Eversince tool as one POST call, plus the routes beside them: the tool
    list, account and keys, uploads, webhooks and models. The prose is at
    https://docs.eversince.ai.
servers:
  - url: https://eversince.ai/api/v1
security:
  - bearer: []
tags:
  - name: Discovery
    description: The tool list, the same on the MCP server, the REST API and the CLI.
  - name: Workspace
    description: Jobs, balances, settings, templates, skills and the overview.
  - name: Library
    description: >-
      Items, search, import, reading media, comments, boards, calendars, the
      brand kit and public links.
  - name: Timeline
    description: 'Video editing: timelines, clips, captions, sound, language and rendering.'
  - name: Canvas
    description: 'Still editing: canvases, slides, layers and rendering.'
  - name: Generation
    description: Image, video and audio generation, upscaling, cutouts and models.
  - name: Research
    description: 'What platforms publish: pulling and keeping posts.'
  - name: Account
    description: Balances, keys, workspaces and script sessions.
  - name: Uploads
    description: Files into the library by presigned upload or by URL.
  - name: Webhooks
    description: Job results posted to a URL as they complete.
  - name: Models
    description: Generation models and cost estimates.
paths:
  /tools/manage_canvases:
    post:
      tags:
        - Canvas
      summary: manage canvases
      description: >-
        Create, rename, open and delete canvases, and keep one as a template;
        get_canvas reads them. create: blank at a destination (a named size from
        get_canvas destinations: instagram-post is 1080 by 1350, the carousel
        size; instagram-square, instagram-story, youtube-thumbnail, a4 and more)
        or at a width and height; from_ref, an image item, at the picture's own
        size with it as the one layer; or from_canvas, another canvas, as a copy
        (a template is a canvas with a flag, so using one is a copy, and a shelf
        image template comes with its sample pictures) or, with a new size, as a
        resize laid out again, naming any layer it left off a slide. The
        response carries the canvas id, name, size, slide count and editor link;
        a new canvas has one slide, which addLayer uses unless slideId says
        otherwise. open opens a canvas in the user's app. delete takes one away;
        a picture exported from it stays in the library. Free.
      operationId: manage_canvases
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                create:
                  type: object
                  properties:
                    name:
                      description: >-
                        What to call it, shown on its card: a short title for
                        the finished picture, like "Launch thumbnail" or "Spring
                        sale, 4:5". Not the words of the request. Left out, the
                        destination names it.
                      type: string
                      maxLength: 200
                    destination:
                      description: >-
                        A named size by its id, from get_canvas destinations:
                        instagram-post, youtube-thumbnail, a4…
                      type: string
                    width:
                      type: integer
                      minimum: 1
                      maximum: 8192
                    height:
                      type: integer
                      minimum: 1
                      maximum: 8192
                    dpi:
                      description: >-
                        For a canvas made at a physical size, so a print export
                        knows what it is: a blank canvas or a resize. A copy or
                        a picture's canvas keeps its own.
                      type: number
                      exclusiveMinimum: 0
                    from_ref:
                      description: >-
                        A library image: the canvas opens at its own size with
                        the picture as its one layer, and remembers the item it
                        came from.
                      type: string
                    from_canvas:
                      description: >-
                        Another canvas to start from. With no size, a copy,
                        which is how a template is used. With a destination or a
                        size, a resize: the layout carried over, scaled and
                        re-centred, as a starting point.
                      type: string
                rename:
                  type: object
                  properties:
                    canvas_id:
                      type: string
                      description: The canvas id.
                    name:
                      type: string
                      minLength: 1
                      maxLength: 200
                  required:
                    - canvas_id
                    - name
                template:
                  description: >-
                    Keep a canvas as a starting shape, or stop. Its image layers
                    are the ones a copy fills.
                  type: object
                  properties:
                    canvas_id:
                      type: string
                      description: The canvas id.
                    is_template:
                      type: boolean
                    description:
                      description: >-
                        What the template is for, in a sentence: the job, the
                        look, the pictures it wants. get_templates lists it and
                        searches it, so this is how another agent finds it. Left
                        off, whatever it says stays; null clears it.
                      anyOf:
                        - type: string
                          maxLength: 500
                        - type: 'null'
                  required:
                    - canvas_id
                    - is_template
                open:
                  description: >-
                    Show this canvas in the user's image editor. The call cannot
                    tell whether the app is open to receive it.
                  type: object
                  properties:
                    canvas_id:
                      type: string
                      description: The canvas id.
                  required:
                    - canvas_id
                delete:
                  description: >-
                    Take this canvas away. Every read leaves it out from then
                    on; a picture exported from it is a library item and stays.
                  type: object
                  properties:
                    canvas_id:
                      type: string
                      description: The canvas id.
                  required:
                    - canvas_id
                context:
                  description: 'Optional: one sentence shown to the user beside this action.'
                  type: string
                  maxLength: 600
      responses:
        '200':
          description: >-
            Done, or a job started for work that runs longer (follow it with
            get_jobs).
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                  - meta
                properties:
                  ok:
                    const: true
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                      cost:
                        $ref: '#/components/schemas/Cost'
                      cloud_processing:
                        $ref: '#/components/schemas/CloudProcessing'
                  media:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
      description: >-
        Retry a paid dispatch safely: the same key returns the job already
        dispatched instead of charging again.
    WorkspaceId:
      name: x-workspace-id
      in: header
      required: false
      schema:
        type: string
      description: The workspace this one call acts in, when it is not the key's own.
  schemas:
    Cost:
      type: object
      description: AI credits the call cost.
      additionalProperties: true
    CloudProcessing:
      type: object
      description: Cloud processing the call used, and what is left.
      properties:
        ran_on:
          const: cloud
        minutes:
          type: number
        queued_minutes:
          type: number
        left_minutes:
          type: number
        bought_minutes:
          type: number
        note:
          type: string
    Error:
      type: object
      required:
        - ok
        - error
      properties:
        ok:
          const: false
        error:
          type: object
          required:
            - code
            - message
            - retryable
          properties:
            code:
              type: string
            message:
              type: string
              description: What went wrong, in words to act on.
            retryable:
              type: boolean
            suggested_action:
              type: string
              description: The next step that works.
            cloud_processing:
              $ref: '#/components/schemas/CloudProcessing'
  responses:
    Error:
      description: The call was refused or failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        An API key (es_live_…) from Settings, under API keys, or an OAuth access
        token.

````