Canva Assets API

Upload and manage image and video assets

Documentation

📖
Documentation
https://www.canva.com/developers/docs/connect-api/
📖
Authentication
https://www.canva.com/developers/docs/connect-api/authentication/
📖
GettingStarted
https://www.canva.com/developers/docs/connect-api/get-started/
📖
APIReference
https://www.canva.com/developers/docs/connect-api/api-reference/
📖
Documentation
https://www.canva.dev/docs/connect/
📖
GettingStarted
https://www.canva.dev/docs/connect/quickstart/
📖
Authentication
https://www.canva.dev/docs/connect/authentication/
📖
Documentation
https://www.canva.dev/docs/connect/webhooks/
📖
RateLimits
https://www.canva.dev/docs/connect/api-requests-responses/
📖
Documentation
https://www.canva.dev/docs/connect/appendix/scopes/
📖
Documentation
https://www.canva.dev/docs/connect/canva-concepts/
📖
Documentation
https://www.canva.dev/docs/connect/autofill-guide/
📖
Documentation
https://www.canva.dev/docs/connect/creating-integrations/
📖
Documentation
https://www.postman.com/canva-developers/canva-developers/collection/oi7dfns/canva-connect-api
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/brand-templates/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/designs/create-design/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/resizes/create-design-resize-job/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/users/users-me/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/assets/get-asset/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/folders/get-folder/
📖
APIReference
https://www.canva.dev/docs/connect/api-reference/autofills/create-design-autofill-job/
📖
Documentation
https://www.canva.dev/docs/connect/mcp-server/

Specifications

SDKs

Schemas & Data

Other Resources

OpenAPI Specification

canva-assets-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Canva Connect Assets API
  description: The Canva Connect API enables developers to integrate Canva's design platform into their applications. It provides programmatic access to create and manage designs, upload and manage assets, organize content in folders, export designs in multiple formats, manage comments, work with brand templates, autofill designs, and resize designs.
  version: 1.0.0
  contact:
    name: Canva Developers
    url: https://www.canva.dev/docs/connect/
    email: developers@canva.com
  license:
    name: Canva Developer Terms
    url: https://www.canva.com/policies/canva-developer-terms/
  termsOfService: https://www.canva.com/policies/terms-of-use/
servers:
- url: https://api.canva.com/rest/v1
  description: Canva Production API
security:
- oauth2: []
tags:
- name: Assets
  description: Upload and manage image and video assets
paths:
  /assets/{assetId}:
    get:
      operationId: getAsset
      summary: Canva Get an Asset
      description: Retrieves metadata for a specific asset, including type, name, tags, owner, timestamps, thumbnail, and import status.
      tags:
      - Assets
      security:
      - oauth2:
        - asset:read
      parameters:
      - $ref: '#/components/parameters/AssetId'
      responses:
        '200':
          description: The asset metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
              examples:
                Getasset200Example:
                  summary: Default getAsset 200 response
                  x-microcks-default: true
                  value:
                    asset:
                      id: abc123
                      type: image
                      name: Example Title
                      tags:
                      - {}
                      created_at: '2026-01-15T10:30:00Z'
                      updated_at: '2026-01-15T10:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: deleteAsset
      summary: Canva Delete an Asset
      description: Deletes an asset from the authenticated user's account.
      tags:
      - Assets
      security:
      - oauth2:
        - asset:write
      parameters:
      - $ref: '#/components/parameters/AssetId'
      responses:
        '204':
          description: Asset deleted successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /asset-uploads:
    post:
      operationId: createAssetUploadJob
      summary: Canva Upload an Asset
      description: Uploads an image or video asset to the authenticated user's Canva account. The asset name is provided as a Base64-encoded string in the Asset-Upload-Metadata header. The request body contains the raw binary file content.
      tags:
      - Assets
      security:
      - oauth2:
        - asset:write
      parameters:
      - name: Asset-Upload-Metadata
        in: header
        required: true
        description: JSON object containing name_base64, the Base64-encoded asset name (1-50 characters before encoding)
        schema:
          type: string
        example: example_value
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
            examples:
              CreateassetuploadjobRequestExample:
                summary: Default createAssetUploadJob request
                x-microcks-default: true
                value: example_value
      responses:
        '200':
          description: The asset upload job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetUploadJobResponse'
              examples:
                Createassetuploadjob200Example:
                  summary: Default createAssetUploadJob 200 response
                  x-microcks-default: true
                  value:
                    job:
                      id: abc123
                      status: in_progress
                      asset:
                        id: abc123
                        type: image
                        name: Example Title
                        tags: {}
                        created_at: '2026-01-15T10:30:00Z'
                        updated_at: '2026-01-15T10:30:00Z'
                      error:
                        code: file_too_big
                        message: example_value
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /asset-uploads/{jobId}:
    get:
      operationId: getAssetUploadJob
      summary: Canva Get Asset Upload Job
      description: Retrieves the status of an asset upload job. When complete, includes the uploaded asset metadata.
      tags:
      - Assets
      security:
      - oauth2:
        - asset:read
      parameters:
      - $ref: '#/components/parameters/JobId'
      responses:
        '200':
          description: The asset upload job status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetUploadJobResponse'
              examples:
                Getassetuploadjob200Example:
                  summary: Default getAssetUploadJob 200 response
                  x-microcks-default: true
                  value:
                    job:
                      id: abc123
                      status: in_progress
                      asset:
                        id: abc123
                        type: image
                        name: Example Title
                        tags: {}
                        created_at: '2026-01-15T10:30:00Z'
                        updated_at: '2026-01-15T10:30:00Z'
                      error:
                        code: file_too_big
                        message: example_value
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  responses:
    Forbidden:
      description: Forbidden - insufficient permissions or scopes
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Too many requests - rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - missing or invalid authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request - invalid parameters or request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found - the requested resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    ImportStatus:
      type: object
      description: The import status of an asset (deprecated)
      deprecated: true
      properties:
        state:
          type: string
          description: The current import state
          enum:
          - failed
          - in_progress
          - success
          example: failed
        error:
          type: object
          description: Error details if the import failed
          properties:
            message:
              type: string
              description: Human-readable error message
            code:
              type: string
              description: Error code
              enum:
              - file_too_big
              - import_failed
          example: example_value
    AssetResponse:
      type: object
      properties:
        asset:
          $ref: '#/components/schemas/Asset'
      required:
      - asset
    AssetUploadJobResponse:
      type: object
      properties:
        job:
          type: object
          properties:
            id:
              type: string
              description: The upload job ID
            status:
              type: string
              description: The current status of the upload job
              enum:
              - in_progress
              - success
              - failed
            asset:
              $ref: '#/components/schemas/Asset'
            error:
              type: object
              properties:
                code:
                  type: string
                  enum:
                  - file_too_big
                  - import_failed
                  - fetch_failed
                message:
                  type: string
          required:
          - id
          - status
          example: example_value
      required:
      - job
    Owner:
      type: object
      description: The owner of a resource
      properties:
        user_id:
          type: string
          description: The user ID of the owner
          example: '500123'
        team_id:
          type: string
          description: The team ID of the owner
          example: '500123'
      required:
      - user_id
      - team_id
    Asset:
      type: object
      description: A Canva asset (image or video)
      properties:
        id:
          type: string
          description: The asset ID
          example: abc123
        type:
          type: string
          description: The asset type
          enum:
          - image
          - video
          example: image
        name:
          type: string
          description: The asset name
          example: Example Title
        tags:
          type: array
          description: User-facing tags for the asset
          items:
            type: string
          example: []
        created_at:
          type: integer
          description: Unix timestamp in seconds when the asset was created
          example: '2026-01-15T10:30:00Z'
        updated_at:
          type: integer
          description: Unix timestamp in seconds when the asset was last updated
          example: '2026-01-15T10:30:00Z'
        owner:
          $ref: '#/components/schemas/Owner'
        thumbnail:
          $ref: '#/components/schemas/Thumbnail'
        import_status:
          $ref: '#/components/schemas/ImportStatus'
      required:
      - id
      - type
      - name
      - created_at
      - updated_at
      - owner
    Error:
      type: object
      description: An error response
      properties:
        code:
          type: string
          description: Machine-readable error code
          example: example_value
        message:
          type: string
          description: Human-readable error message
          example: example_value
      required:
      - code
      - message
    Thumbnail:
      type: object
      description: A thumbnail image for a resource (URL expires in 15 minutes)
      properties:
        width:
          type: integer
          description: Thumbnail width in pixels
          example: 10
        height:
          type: integer
          description: Thumbnail height in pixels
          example: 10
        url:
          type: string
          format: uri
          description: Thumbnail URL (expires in 15 minutes)
          example: https://www.example.com
      required:
      - width
      - height
      - url
  parameters:
    JobId:
      name: jobId
      in: path
      required: true
      description: The job ID
      schema:
        type: string
    AssetId:
      name: assetId
      in: path
      required: true
      description: The asset ID
      schema:
        type: string
  securitySchemes:
    oauth2:
      type: oauth2
      description: Canva uses OAuth 2.0 with authorization code flow. Access tokens must be included in the Authorization header as a Bearer token.
      flows:
        authorizationCode:
          authorizationUrl: https://www.canva.com/api/oauth/authorize
          tokenUrl: https://api.canva.com/rest/v1/oauth/token
          scopes:
            design:meta:read: Read design metadata
            design:content:read: Read design content
            design:content:write: Create and modify designs
            asset:read: Read asset metadata
            asset:write: Upload and delete assets
            folder:read: Read folder metadata and contents
            folder:write: Modify folder contents
            comment:read: Read comments on designs
            comment:write: Create and manage comments
            brandtemplate:meta:read: Read brand template metadata
            brandtemplate:content:read: Read brand template content and datasets
externalDocs:
  description: Canva Connect API Documentation
  url: https://www.canva.dev/docs/connect/