Canva Connect
by @coolmanns
Manage Canva designs, assets, and folders via the Connect API. WHAT IT CAN DO: - List/search/organize designs and folders - Export finished designs (PNG/PDF/JPG) - Upload images to asset library - Autofill brand templates with data - Create blank designs (doc/presentation/whiteboard/custom) WHAT IT CANNOT DO: - Add content to designs (text, shapes, elements) - Edit existing design content - Upload documents (images only) - AI design generation Best for: asset pipelines, export automation, org
clawhub install canva-connectπ About This Skill
name: canva version: 1.0.0 description: | Manage Canva designs, assets, and folders via the Connect API. WHAT IT CAN DO: - List/search/organize designs and folders - Export finished designs (PNG/PDF/JPG) - Upload images to asset library - Autofill brand templates with data - Create blank designs (doc/presentation/whiteboard/custom) WHAT IT CANNOT DO: - Add content to designs (text, shapes, elements) - Edit existing design content - Upload documents (images only) - AI design generation Best for: asset pipelines, export automation, organization, template autofill. Triggers: /canva, "upload to canva", "export design", "list my designs", "canva folder". author: clawdbot license: MIT metadata: clawdbot: emoji: "π¨" triggers: ["/canva"] requires: env: - CANVA_CLIENT_ID - CANVA_CLIENT_SECRET primaryEnv: CANVA_CLIENT_ID homepage: https://canva.dev/docs/connect/
Canva Connect
Manage Canva designs, assets, and folders via the Connect API.
What This Skill Does (and Doesn't Do)
| β CAN DO | β CANNOT DO | |-----------|--------------| | List/search designs | Add content to designs | | Create blank designs | Edit existing design content | | Export designs (PNG/PDF/JPG) | Upload documents (images only) | | Create/manage folders | AI design generation | | Move items between folders | | | Upload images as assets | | | Autofill brand templates | |
Realistic Use Cases
1. Asset Pipeline πΌοΈ
Generate diagram β upload to Canva β organize in project folder
2. Export Automation π€
Design finished in Canva β export via CLI β use in docs/website
3. Design Organization π
Create project folders β move related designs β keep Canva tidy
4. Brand Template Autofill π
Set up template in Canva β pass data via API β get personalized output
Quick Start
# Authenticate (opens browser for OAuth)
{baseDir}/scripts/canva.sh authList your designs
{baseDir}/scripts/canva.sh designs listCreate a new design
{baseDir}/scripts/canva.sh designs create --type doc --title "My Document"Export a design
{baseDir}/scripts/canva.sh export --format pdf
Setup
1. Create Canva Integration
1. Go to canva.com/developers/integrations
2. Click Create an integration
3. Set scopes:
- design:content (Read + Write)
- design:meta (Read)
- asset (Read + Write)
- brandtemplate:meta (Read)
- brandtemplate:content (Read)
- profile (Read)
4. Set OAuth redirect: http://127.0.0.1:3001/oauth/redirect
5. Note Client ID and generate Client Secret
2. Configure Environment
Add to ~/.clawdbot/clawdbot.json under skills.entries:
{
"skills": {
"entries": {
"canva": {
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET"
}
}
}
}
Or set environment variables:
export CANVA_CLIENT_ID="your_client_id"
export CANVA_CLIENT_SECRET="your_client_secret"
3. Authenticate
{baseDir}/scripts/canva.sh auth
Opens browser for OAuth consent. Tokens stored in ~/.clawdbot/canva-tokens.json.
Commands
Authentication
| Command | Description | |---------|-------------| |auth | Start OAuth flow (opens browser) |
| auth status | Check authentication status |
| auth logout | Clear stored tokens |Designs
| Command | Description | |---------|-------------| |designs list [--limit N] | List your designs |
| designs get | Get design details |
| designs create --type --title | Create new design |
| designs delete | Move design to trash |Design types: doc, presentation, whiteboard, poster, instagram_post, facebook_post, video, logo, flyer, banner
Export
| Command | Description | |---------|-------------| |export --format | Export design |
| export status | Check export job status |Formats: pdf, png, jpg, gif, pptx, mp4
Assets
| Command | Description | |---------|-------------| |assets list | List uploaded assets |
| assets upload [--name ] | Upload asset |
| assets get | Get asset details |
| assets delete | Delete asset |Brand Templates
| Command | Description | |---------|-------------| |templates list | List brand templates |
| templates get | Get template details |
| autofill --data | Autofill template with data |Folders
| Command | Description | |---------|-------------| |folders list | List folders |
| folders create | Create folder |
| folders get | Get folder contents |User
| Command | Description | |---------|-------------| |me | Get current user profile |Examples
Create and Export a Poster
# Create
{baseDir}/scripts/canva.sh designs create --type poster --title "Event Poster"Export as PNG
{baseDir}/scripts/canva.sh export DAF... --format png --output ./poster.png
Upload Brand Assets
# Upload logo
{baseDir}/scripts/canva.sh assets upload ./logo.png --name "Company Logo"Upload multiple
for f in ./brand/*.png; do
{baseDir}/scripts/canva.sh assets upload "$f"
done
Autofill a Template
# List available templates
{baseDir}/scripts/canva.sh templates listAutofill with data
{baseDir}/scripts/canva.sh autofill TEMPLATE_ID --data '{
"title": "Q1 Report",
"subtitle": "Financial Summary",
"date": "January 2026"
}'
API Reference
Base URL: https://api.canva.com/rest
See references/api.md for detailed endpoint documentation.
Troubleshooting
Token Expired
{baseDir}/scripts/canva.sh auth # Re-authenticate
Rate Limited
The API has per-endpoint rate limits. The script handles backoff automatically.Missing Scopes
If operations fail with 403, ensure your integration has the required scopes enabled.Data Files
| File | Purpose |
|------|---------|
| ~/.clawdbot/canva-tokens.json | OAuth tokens (encrypted) |
| ~/.clawdbot/canva-cache.json | Response cache |
π‘ Examples
Create and Export a Poster
# Create
{baseDir}/scripts/canva.sh designs create --type poster --title "Event Poster"Export as PNG
{baseDir}/scripts/canva.sh export DAF... --format png --output ./poster.png
Upload Brand Assets
# Upload logo
{baseDir}/scripts/canva.sh assets upload ./logo.png --name "Company Logo"Upload multiple
for f in ./brand/*.png; do
{baseDir}/scripts/canva.sh assets upload "$f"
done
Autofill a Template
# List available templates
{baseDir}/scripts/canva.sh templates listAutofill with data
{baseDir}/scripts/canva.sh autofill TEMPLATE_ID --data '{
"title": "Q1 Report",
"subtitle": "Financial Summary",
"date": "January 2026"
}'
βοΈ Configuration
1. Create Canva Integration
1. Go to canva.com/developers/integrations
2. Click Create an integration
3. Set scopes:
- design:content (Read + Write)
- design:meta (Read)
- asset (Read + Write)
- brandtemplate:meta (Read)
- brandtemplate:content (Read)
- profile (Read)
4. Set OAuth redirect: http://127.0.0.1:3001/oauth/redirect
5. Note Client ID and generate Client Secret
2. Configure Environment
Add to ~/.clawdbot/clawdbot.json under skills.entries:
{
"skills": {
"entries": {
"canva": {
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET"
}
}
}
}
Or set environment variables:
export CANVA_CLIENT_ID="your_client_id"
export CANVA_CLIENT_SECRET="your_client_secret"
3. Authenticate
{baseDir}/scripts/canva.sh auth
Opens browser for OAuth consent. Tokens stored in ~/.clawdbot/canva-tokens.json.
π Tips & Best Practices
Token Expired
{baseDir}/scripts/canva.sh auth # Re-authenticate