> ## 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.

# render canvas

> Export slides to the library: PNG or JPEG images at a scale, one slide, several or all, twelve a call; or pdf, one document holding every slide asked for as a page at the canvas's size and dpi, the whole canvas by default. Each image lands as an item filed in Canvas exports, a PDF as one document item there, with lineage to the pictures drawn and the canvas as provenance, and the same pixels rendered again come back as the item that already holds them. The answer names what was filed, with urls, and a picture it could not fetch in not_drawn; a cloud pdf over twelve pages is a job, and get_jobs names its item. inspect_canvas is for looking. Cloud processing per slide.



## OpenAPI

````yaml /openapi.json post /tools/render_canvas
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/render_canvas:
    post:
      tags:
        - Canvas
      summary: render canvas
      description: >-
        Export slides to the library: PNG or JPEG images at a scale, one slide,
        several or all, twelve a call; or pdf, one document holding every slide
        asked for as a page at the canvas's size and dpi, the whole canvas by
        default. Each image lands as an item filed in Canvas exports, a PDF as
        one document item there, with lineage to the pictures drawn and the
        canvas as provenance, and the same pixels rendered again come back as
        the item that already holds them. The answer names what was filed, with
        urls, and a picture it could not fetch in not_drawn; a cloud pdf over
        twelve pages is a job, and get_jobs names its item. inspect_canvas is
        for looking. Cloud processing per slide.
      operationId: render_canvas
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                canvas_id:
                  type: string
                  description: The canvas id.
                slides:
                  description: >-
                    Which slides, by id or by place from 0. Default: every slide
                    that is not hidden. For images a canvas with more than
                    twelve of those is refused with how to ask for the rest,
                    never trimmed; a pdf takes them all.
                  maxItems: 50
                  type: array
                  items:
                    anyOf:
                      - type: string
                      - type: integer
                        minimum: 0
                format:
                  description: >-
                    Default png. jpeg for a photograph where the file size
                    matters. pdf is one file for the slides asked for, every
                    slide by default, a page each: a LinkedIn document carousel
                    or a deck leaves this way, an Instagram carousel as images.
                  type: string
                  enum:
                    - png
                    - jpeg
                    - pdf
                scale:
                  description: >-
                    A multiple of the canvas's own size, drawn again at that
                    size rather than enlarged. Default 1. It multiplies what the
                    slide draws, so a 2x slide uses about four times the cloud
                    processing of a 1x one.
                  type: number
                  minimum: 0.1
                  maximum: 4
                transparent:
                  description: >-
                    PNG only: draw the ground as transparent whatever the canvas
                    says.
                  type: boolean
                quality:
                  description: JPEG only, 0.1–1. Default 0.9.
                  type: number
                  minimum: 0.1
                  maximum: 1
                title:
                  description: >-
                    What the file is called. Default: the canvas, and the slide
                    where there is more than one.
                  type: string
                  maxLength: 120
                folder:
                  description: >-
                    Library folder the finished files land in, by path
                    ("campaigns/july"), name or id. It has to exist already.
                    Left out, they land in Canvas exports.
                  type: string
                context:
                  description: 'Optional: one sentence shown to the user beside this action.'
                  type: string
                  maxLength: 600
              required:
                - canvas_id
      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.

````