Introduction
# 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
```bash # Authenticate (opens browser for OAuth) {baseDir}/scripts/canva.sh auth
# List your designs {baseDir}/scripts/canva.sh designs list
# Create a new design {baseDir}/scripts/canva.sh designs create --type doc --title "My Document"
# Export a design {baseDir}/scripts/canva.sh export <design_id> --format pdf ```
## Setup
### 1. Create Canva Integration
1. Go to [canva.com/developers/integrations](https://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`:
```json { "skills": { "entries": { "canva": { "clientId": "YOUR_CLIENT_ID", "clientSecret": "YOUR_CLIENT_SECRET" } } } } ```
Or set environment variables: ```bash export CANVA_CLIENT_ID="your_client_id" export CANVA_CLIENT_SECRET="your_client_secret" ```
### 3. Authenticate
```bash {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 <id>` | Get design details | | `designs create --type <type> --title <title>` | Create new design | | `designs delete <id>` | Move design to trash |
**Design types:** `doc`, `presentation`, `whiteboard`, `poster`, `instagram_post`, `facebook_post`, `video`, `logo`, `flyer`, `banner`
### Export | Command | Description | |---------|-------------| | `export <design_id> --format <fmt>` | Export design | | `export status <job_id>` | Check export job status |
**Formats:** `pdf`, `png`, `jpg`, `gif`, `pptx`, `mp4`
### Assets | Command | Description | |---------|-------------| | `assets list` | List uploaded assets | | `assets upload <file> [--name <name>]` | Upload asset | | `assets get <id>` | Get asset details | | `assets delete <id>` | Delete asset |
### Brand Templates | Command | Description | |---------|-------------| | `templates list` | List brand templates | | `templates get <id>` | Get template details | | `autofill <template_id> --data <json>` | Autofill template with data |
### Folders | Command | Description | |---------|-------------| | `folders list` | List folders | | `folders create <name>` | Create folder | | `folders get <id>` | Get folder contents |
### User | Command | Description | |---------|-------------| | `me` | Get current user profile |
## Examples
### Create and Export a Poster ```bash # 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 ```bash # 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 ```bash # List available templates {baseDir}/scripts/canva.sh templates list
# Autofill 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](references/api.md) for detailed endpoint documentation.
## Troubleshooting
### Token Expired ```bash {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 |