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

# Get Canvas Link

> Get your own link to a canvas: its token, the version it shows and the project's share domain. Never another owner's link.



## OpenAPI

````yaml get /v2/api/projects/{projectId}/workspaces/{workspaceId}/canvases/{canvasId}/link
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/{canvasId}/link:
    get:
      summary: 'Get your own link to a canvas: its token, the ver…'
      description: >-
        Get your own link to a canvas: its token, the version it shows and the
        project's share domain. Never another owner's link.
      operationId: GetV2ApiProjectsProjectIdWorkspacesWorkspaceIdCanvasesCanvasIdLink
      parameters:
        - name: apiKey
          in: query
          required: false
          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.
          schema:
            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
        - name: organizationId
          in: query
          required: false
          description: >-
            The ID of the organization. Required when using Supabase JWT
            authentication.
          schema:
            type: string
            description: >-
              The ID of the organization. Required when using Supabase JWT
              authentication.
        - name: connectionId
          in: query
          required: false
          description: The ID of the connection a guest has access to
          schema:
            type: string
            description: The ID of the connection a guest has access to
        - 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: >-
            GET
            /v2/api/projects/:projectId/workspaces/:workspaceId/canvases/:canvasId/link
            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})$
        - name: canvasId
          in: path
          required: true
          description: >-
            GET
            /v2/api/projects/:projectId/workspaces/:workspaceId/canvases/:canvasId/link
            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})$
        - name: forProjectUserId
          in: query
          required: false
          description: >-
            With an organization credential: the owner of the canvas whose link
            this is (the Playground's previewed user). Omitted, it is the
            builders' link on a canvas no project user owns, which can only show
            saved rows. A project-user token always acts on its own link.
          schema:
            description: >-
              With an organization credential: the owner of the canvas whose
              link this is (the Playground's previewed user). Omitted, it is the
              builders' link on a canvas no project user owns, which can only
              show saved rows. A project-user token always acts on its own link.
            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})$
      responses:
        '200':
          description: >-
            GET
            /v2/api/projects/:projectId/workspaces/:workspaceId/canvases/:canvasId/link
            Positive response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    const: success
                  data:
                    type: object
                    properties:
                      link:
                        type:
                          - object
                          - 'null'
                        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})$
                            description: The link's ID.
                          token:
                            type: string
                            description: >-
                              The link's secret part: the link opens at
                              /shared/canvas/<token> on the share host (or on
                              `customShareDomain` as /<token>).
                          mode:
                            type: string
                            enum:
                              - live
                              - snapshot
                              - both
                            description: >-
                              What a visitor sees: `snapshot`, the charts' saved
                              rows (no query runs); `live`, every chart run when
                              the link is opened, as the link's owner; `both`, a
                              toggle between the two. Live and both need a
                              passkey.
                          hasPasskey:
                            type: boolean
                            description: >-
                              Whether a visitor must type a passkey. Always, on
                              a live link.
                          version:
                            type:
                              - integer
                              - 'null'
                            exclusiveMinimum: 0
                            maximum: 9007199254740991
                          aiChat:
                            type: boolean
                            description: >-
                              Whether the link offers its visitors a read-only
                              AI chat about the canvas. Only on a live or both
                              link: the chat's queries run as the link's owner,
                              like its live charts, and can read any data the
                              owner can, so it is off until the owner turns it
                              on.
                          expiresAt: {}
                          createdAt:
                            description: When the link was made.
                          updatedAt:
                            description: >-
                              When its passkey, mode, version or AI chat last
                              changed.
                        required:
                          - id
                          - token
                          - mode
                          - hasPasskey
                          - version
                          - aiChat
                          - expiresAt
                          - createdAt
                          - updatedAt
                        additionalProperties: false
                      customShareDomain:
                        type:
                          - string
                          - 'null'
                      liveAllowed:
                        type: boolean
                        description: >-
                          Whether this link can be live: only one a project user
                          owns, since a live link runs as them.
                    required:
                      - link
                      - customShareDomain
                      - liveAllowed
                    additionalProperties: false
                required:
                  - status
                  - data
                additionalProperties: false
        '400':
          description: >-
            GET
            /v2/api/projects/:projectId/workspaces/:workspaceId/canvases/:canvasId/link
            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.