Create, organize, collaborate on, import, and export Canva content through the Connect API.
- Other
- canva
- design
- assets
- folders
- comments
- import
- export
- oauth
- License
- MIT
- Published
- August 21, 2026
- Pinned commit
2bde4eb- Rating
- No ratings yet
- Forks
- 0
- Stars
- 0
- Adaptation effort
- —
README
@kentcdodds/canva
Intent
Provide a complete, reusable Canva Connect API package for Kody workflows. It covers every operation in the configured Canva OpenAPI surface while keeping mutations explicit, previewable, and safe to publish as a community package.
When to use
- Create, inspect, search, resize, merge, import, or export Canva designs.
- Upload, inspect, rename, tag, or delete assets.
- Create and organize folders, then list or move their contents.
- Read and write comment threads and replies.
- Work with brand templates, autofill datasets, user capabilities, and OIDC.
- Call a newly added operation through the generic API dispatcher while this package's convenience exports catch up.
Required setup
Create a Canva Connect API integration, use
https://kody.codes/connect/oauth as its redirect URI, and save the OAuth
integration in Kody as canva. Connect or reconnect it at:
https://kody.codes/connect/oauth?provider=canva
The integration needs api.canva.com and www.canva.com as approved hosts.
Grant only the scopes your workflows require. The complete surface can use:
asset:read,asset:writebrandtemplate:content:read,brandtemplate:content:write,brandtemplate:meta:readcomment:read,comment:writedesign:content:read,design:content:write,design:meta:readfolder:read,folder:write,folder:permission:writeprofile:read
Exports
kody:@kentcdodds/canva— package overview, coverage, and safety metadata.kody:@kentcdodds/canva/api— named helpers for all 48 operations plus a default generic dispatcher.kody:@kentcdodds/canva/operations— the operation catalog with methods, paths, domains, and preview/deprecation flags.kody:@kentcdodds/canva/smoke-test— verify OAuth access without returning Canva profile data.
Designs and jobs
createDesign, getDesign, listDesigns, getDesignPages,
getDesignDataset, getDesignExportFormats, createDesignResizeJob,
getDesignResizeJob, createDesignMergeJob, getDesignMergeJob,
createPrintPartnerDesign, and createPrintPartnerDesignExportJob.
Assets
createAssetUploadJob, getAssetUploadJob, createUrlAssetUploadJob,
getUrlAssetUploadJob, getAsset, updateAsset, and deleteAsset.
Imports and exports
createDesignImportJob, getDesignImportJob, createUrlImportJob,
getUrlImportJob, createDesignExportJob, and getDesignExportJob.
Folders
createFolder, getFolder, updateFolder, deleteFolder,
listFolderItems, and moveFolderItem.
Comments
createThread, getThread, createReply, getReply, listReplies, and the
deprecated createComment.
Brand templates and autofill
listBrandTemplates, getBrandTemplate, getBrandTemplateDataset,
publishBrandTemplate, createDesignAutofillJob, and
getDesignAutofillJob.
Users and OIDC
usersMe, getUserProfile, getUserCapabilities, userInfo, and
getOidcJwks.
Request shape
Named helpers accept the native Canva request structure:
paramsfor path placeholders such asdesignIdorfolderId.queryfor filters, pagination tokens, sorting, and limits.headersfor operation-specific metadata headers. An injectedAuthorizationheader is always ignored.bodyfor JSON or binary request bodies.confirmanddryRunfor mutation safety.
import { getDesign, listDesigns } from 'kody:@kentcdodds/canva/api'
const recent = await listDesigns({
query: { ownership: 'owned', sort_by: 'modified_descending', limit: 10 },
})
const design = await getDesign({ params: { designId: 'DAVZr1z5464' } })The default export dispatches by lowercase OpenAPI operation slug:
import canva from 'kody:@kentcdodds/canva/api'
await canva({
operation: 'listdesigns',
input: { query: { limit: 5 } },
})Mutation safety
Every POST, PATCH, and DELETE operation requires confirm: true after
the user approves the exact action. Use dryRun: true to return the method,
path template, and request without contacting Canva.
import { createDesign } from 'kody:@kentcdodds/canva/api'
const preview = await createDesign({
body: {
design_type: { type: 'preset', name: 'presentation' },
title: 'Quarterly review',
},
dryRun: true,
})
const result = await createDesign({
body: preview.request.body,
confirm: true,
})API notes
- Canva preview APIs can change without notice and cannot be used in public
Canva integrations submitted for review. They are marked
previewin the operation catalog. createCommentis retained for complete API coverage but is deprecated; prefercreateThread.- Resize APIs require Canva Pro or another eligible plan. Autofill and some brand-template operations require Canva Enterprise.
- Async create operations return job IDs. Poll the corresponding
get*Jobhelper until Canva reportssuccessorfailed. - Rate-limit errors throw
CanvaApiErrorwithstatus,body, andretryAfterfields. community-icon.svgis Canva's approved, unmodified gradient icon asset.
Report this listing
Log in to report this listing.