The catalogue/Canva

Canva

app.canva

Create, export, and manage Canva designs, folders, assets, and brand templates

OAuth 2designRead the source
Version2.0.0
Categorydesign
AuthOAuth 2
Tools35
Transportstdio
LicenceMIT
01

What it does

The app, in its own words.

Canva design management — designs, exports, resizes, folders, assets, brand templates, autofill, and comments via the Canva Connect API.

canvadesigngraphicstemplatesexportresizecomments
02

Tools

35 tools the agent can call.

Every one is declared with typed parameters and returns structured results, so the host can render them instead of narrating them.

  • autofill-designCreate a design by autofilling a brand template with named fields. data keys must match the template dataset (call get-brand-template-dataset first). columnConfigs: optional chart-data field definitions. Async — returns curated job (poll get-autofill-job). Not retryable. Params: brandTemplateId, data, title?, columnConfigs?, fields?, includeRaw.
  • create-designCreate a new Canva design. Use designType=custom with width+height for a custom canvas, or one of the preset names (doc, whiteboard, presentation, email). Returns curated design. Not retryable. Params: designType, title?, width?, height?, assetId?, fields?, includeRaw.
  • create-folderCreate a new folder under a parent. Use parentFolderId="root" for top level. Returns curated folder. Not retryable. Params: name, parentFolderId, fields?, includeRaw.
  • create-replyReply to a comment thread. message ≤ 2048 chars. Returns curated reply. Not retryable. Params: designId, threadId, message, fields?, includeRaw.
  • create-resize-jobResize a design to a new size (preset or custom). Async — returns curated job (poll get-resize-job). Use designType="custom" with width+height OR a preset name. Output is a NEW design at top level. Not retryable. Params: designId, designType, width?, height?, fields?, includeRaw.
  • create-threadCreate a comment thread on a design. message ≤ 2048 chars. Returns curated thread. Not retryable. Params: designId, message, fields?, includeRaw.
  • delete-assetDelete an asset (moved to trash). Idempotent — repeated deletes return 404 (already deleted). Returns { assetId, deleted: true }. Params: assetId.
  • delete-folderDelete a folder. Items in the folder are moved to the parent. Idempotent — repeated deletes return 404. Returns { folderId, deleted: true }. Params: folderId.
  • export-designStart an export job for a design. Returns curated job (poll get-export-job by id). Formats: pdf, png, jpg, gif, pptx, mp4, html_bundle, html_standalone. transparentBackground only for png. Not retryable. Params: designId, format, quality?, width?, height?, pages?, transparentBackground?, fields?, includeRaw.
  • get-assetGet asset metadata. Returns curated { id, name, type, thumbnail*, tags, metadata, dates }. Params: assetId, fields?, includeRaw.
  • get-asset-upload-jobGet an asset URL upload job status/result. Returns curated job { id, status, error, result: {asset shape with thumbnailUrl}? }. Params: jobId, fields?, includeRaw.
  • get-autofill-jobGet an autofill job status/result. Returns curated job { id, status, error, result: design? }. Params: jobId, fields?, includeRaw.
  • get-brand-templateGet brand template metadata. Returns curated detail (id, title, thumbnailUrl, viewUrl, createUrl, dates). Params: brandTemplateId, fields?, includeRaw.
  • get-brand-template-datasetGet the autofill dataset (named fields like {title}, {body}, {image}) for a brand template. Returned shape mirrors Canva — useful before calling autofill-design. Params: brandTemplateId.
  • get-designGet a Canva design by ID. Returns curated detail (id, title, ownerUserId/teamId, thumbnail*, edit/view URLs, pageCount, dates). Params: designId, fields?, includeRaw.
  • get-design-export-formatsList the export formats supported by a specific design. Use this before export-design to avoid 400 errors on unsupported formats. Returns curated { formats: string[] }. Params: designId, fields?, includeRaw.
  • get-design-pagesGet pages of a Canva design with thumbnails (returns dimensions for bounded designs). Returns curated { pages: [{ index, thumbnailUrl, width, height }] }. Params: designId, fields?, includeRaw.
  • get-export-jobGet an export job status/result. Returns curated job { id, status, error, result.urls? }. Params: exportId, fields?, includeRaw.
  • get-folderGet folder metadata. Returns curated { id, name, thumbnailUrl, dates }. Params: folderId, fields?, includeRaw.
  • get-import-jobGet a URL design import job status/result. Returns curated job { id, status, error, result.designId? }. Params: jobId, fields?, includeRaw.
  • get-replyGet a single reply within a comment thread. Returns curated reply. Params: designId, threadId, replyId, fields?, includeRaw.
  • get-resize-jobGet a resize job status/result. Returns curated job { id, status, error, result: design? }. Params: jobId, fields?, includeRaw.
  • get-threadGet a comment thread by ID. Returns curated thread. Params: designId, threadId, fields?, includeRaw.
  • get-userGet the authenticated Canva user. Returns curated { userId, teamId }. Params: fields?, includeRaw.
  • get-user-capabilitiesGet the authenticated user capabilities (Canva plan + role gating). Returns curated { capabilities: string[] }. Use to decide whether features like brand templates or autofill are available before calling them. Params: fields?, includeRaw.
  • get-user-profileGet the authenticated user's profile. Returns curated { displayName }. Params: fields?, includeRaw.
  • import-designImport an external file (e.g. PDF, PPTX, DOCX) as a new Canva design. Async — returns curated job (poll get-import-job by id). url must be http/https. Not retryable. Params: title, url, mimeType?, fields?, includeRaw.
  • list-brand-templatesList brand templates the user can access (requires Canva Enterprise). Returns curated rows with thumbnail URL. Params: query?, ownership?, limit (1-100, def 25), continuation?, fields?, includeRaw.
  • list-designsList designs in the user's account with search/sort/pagination. Returns curated rows with thumbnail URL for inline preview. Params: query?, ownership? (any|owned|shared), sortBy?, limit (1-100, def 25), continuation?, fields?, includeRaw.
  • list-foldersList items in a folder (designs, sub-folders, images, videos). Use folderId="root" for top level. Returns curated rows with thumbnail URL. Params: folderId, itemTypes?, sortBy?, pinStatus? (pinned|unpinned), limit (1-100, def 50), continuation?, fields?, includeRaw.
  • list-repliesList replies to a comment thread. Returns curated rows. Params: designId, threadId, limit (1-100, def 50), continuation?, fields?, includeRaw.
  • move-itemMove an item (design / folder / asset) to another folder. Idempotent if target unchanged. Returns { itemId, toFolderId, moved: true }. Params: itemId, toFolderId.
  • update-assetUpdate asset metadata (rename, retag). Idempotent — same payload yields same final state. Returns curated asset. Params: assetId, name?, tags?, fields?, includeRaw.
  • update-folderRename a folder. Idempotent. Returns curated folder. Params: folderId, name, fields?, includeRaw.
  • upload-assetUpload an asset (image, video, audio) to the user library from a public URL. Async — returns curated job (poll get-asset-upload-job by id). url must be http/https. Not retryable. Params: name, url, fields?, includeRaw.
03

Auth and permissions

What it asks for.

Declared in the manifest, in advance. The app cannot reach anything it did not ask for here.

Scopes

design:content:readdesign:content:writedesign:meta:readdesign:permission:readdesign:permission:writefolder:readfolder:writefolder:permission:readfolder:permission:writeasset:readasset:writebrandtemplate:meta:readbrandtemplate:content:readcomment:readcomment:writeprofile:read

System secrets

CLIENT_IDCLIENT_SECRET

User secrets

ACCESS_TOKENREFRESH_TOKEN

Reading further

The manifest and the source for Canva live in the monorepo, alongside the other apps.

Read the sourceBack to the catalogue

Canva · Agent Apps