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

# Create Canvas

> Create a canvas



## OpenAPI

````yaml post /v2/api/projects/{projectId}/workspaces/{workspaceId}/canvases
openapi: 3.1.0
info:
  title: Upsolve API
  version: 1.5.0
servers:
  - url: https://api.upsolve.ai
security: []
tags: []
paths:
  /v2/api/projects/{projectId}/workspaces/{workspaceId}/canvases:
    post:
      summary: Create a canvas
      description: Create a canvas
      operationId: PostV2ApiProjectsProjectIdWorkspacesWorkspaceIdCanvases
      parameters:
        - name: projectId
          in: path
          required: true
          description: The project in the URL. The caller's project user is read from it.
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
            description: The project in the URL. The caller's project user is read from it.
        - name: workspaceId
          in: path
          required: true
          description: >-
            POST /v2/api/projects/:projectId/workspaces/:workspaceId/canvases
            Parameter
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
      requestBody:
        description: >-
          POST /v2/api/projects/:projectId/workspaces/:workspaceId/canvases
          Request body
        content:
          application/json:
            schema:
              type: object
              properties:
                apiKey:
                  description: >-
                    Upsolve API key, generated under Account → Developer
                    settings in the Upsolve Hub. Keys are user-scoped: pass
                    organizationId alongside the key to select which org to act
                    on.
                  type: string
                  minLength: 1
                organizationId:
                  type: string
                  description: >-
                    The ID of the organization. Required when using Supabase JWT
                    authentication.
                connectionId:
                  type: string
                  description: The ID of the connection a guest has access to
                forProjectUserId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                name:
                  type: string
                  minLength: 1
              required:
                - name
        required: true
      responses:
        '201':
          description: >-
            POST /v2/api/projects/:projectId/workspaces/:workspaceId/canvases
            Positive response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    const: success
                  data:
                    type: object
                    properties:
                      canvas:
                        type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                          organization_id:
                            type: string
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                          name:
                            type: string
                          visibility:
                            type: string
                          created_by_project_user_id:
                            type:
                              - string
                              - 'null'
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                          has_link:
                            description: >-
                              Whether the caller has their own link to this
                              canvas (`…/canvases/:canvasId/link`).
                            type: boolean
                          has_design_file:
                            description: >-
                              Whether the canvas has a design file: when true it
                              is drawn from that file rather than as a plain
                              grid.
                            type: boolean
                          design_rev:
                            description: >-
                              The design file's revision; 0 when it was never
                              written.
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          created_at: {}
                          updated_at: {}
                          workspace_id:
                            type: string
                            format: uuid
                            pattern: >-
                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
                          is_starred:
                            type: boolean
                            description: >-
                              Whether the caller starred (favorited) this
                              canvas, which pins it to the top of their canvas
                              list. Personal to the caller; unrelated to
                              saved-chart favorites.
                          url:
                            type:
                              - string
                              - 'null'
                          role:
                            type: string
                            enum:
                              - viewer
                              - editor
                              - owner
                            description: >-
                              Your role on this canvas: owner (everything,
                              including sharing and deleting it), editor (change
                              it and save it), or viewer (read it, or make a
                              copy of your own).
                          live_only:
                            type: boolean
                            description: >-
                              True when you can open this canvas only because it
                              is shared with the whole workspace: it is shown
                              live, under your own access, never with its
                              owner's saved results.
                        required:
                          - id
                          - organization_id
                          - name
                          - created_at
                          - updated_at
                          - workspace_id
                          - is_starred
                          - url
                          - role
                          - live_only
                        additionalProperties: false
                    required:
                      - canvas
                    additionalProperties: false
                required:
                  - status
                  - data
                additionalProperties: false
        '400':
          description: >-
            POST /v2/api/projects/:projectId/workspaces/:workspaceId/canvases
            Negative response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    const: error
                  error:
                    type: object
                    properties:
                      message:
                        type: string
                      code:
                        type: string
                      details:
                        type: object
                        propertyNames:
                          type: string
                        additionalProperties: {}
                    required:
                      - message
                    additionalProperties: false
                required:
                  - status
                  - error
                additionalProperties: false
      security:
        - APIKEY_3: []
components:
  securitySchemes:
    APIKEY_3:
      type: apiKey
      in: header
      name: authorization

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.