← Back to Skills
Media

canva-connect

coolmanns By coolmanns 👁 50 views ▲ 0 votes

Manage Canva designs, assets, and folders via the Connect API.

GitHub
---
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

```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 |
media

Comments

Sign in to leave a comment

Loading comments...