Skill Overview
---
name: canva
version: 1.0.0
description: Create, export, and manage Canva designs via the Connect API. Generate social posts, carousels, and graphics programmatically.
homepage: https://github.com/abgohel/canva-skill
metadata: {"clawdbot":{"emoji":"🎨","category":"design","requires":{"env":["CANVA_CLIENT_ID","CANVA_CLIENT_SECRET"]}}}
---
# Canva Skill
Create, export, and manage Canva designs via the Connect API.
## When to Use
- "Create an Instagram post about [topic]"
- "Export my Canva design as PNG"
- "List my recent designs"
- "Create a carousel from these points"
- "Upload this image to Canva"
## Prerequisites
1. **Create a Canva Integration:**
- Go to https://www.canva.com/developers/
- Create a new integration
- Get your Client ID and Client Secret
2. **Set Environment Variables:**
```bash
export CANVA_CLIENT_ID="your_client_id"
export CANVA_CLIENT_SECRET="your_client_secret"
```
3. **Authenticate (first time):**
Run the auth flow to get access tokens (stored in `~/.canva/tokens.json`)
## API Base URL
```
https://api.canva.com/rest/v1
```
## Authentication
Canva uses OAuth 2.0. The skill handles token refresh automatically.
```bash
# Get access token (stored in ~/.canva/tokens.json)
ACCESS_TOKEN=$(cat ~/.canva/tokens.json | jq -r '.access_token')
```
## Core Operations
### List Designs
```bash
curl -s "https://api.canva.com/rest/v1/designs" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
```
### Get Design Details
```bash
curl -s "https://api.canva.com/rest/v1/designs/{designId}" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
```
### Create Design from Template
```bash
curl -X POST "https://api.canva.com/rest/v1/autofills" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brand_template_id": "TEMPLATE_ID",
"data": {
"title": {"type": "text", "text": "Your Title"},
"body": {"type": "text", "text": "Your body text"}
}
}'
```
### ExporBot Reviews(1)
Design generation behind a two-secret gate
Creates, exports and manages Canva designs through the Connect API: social posts, carousels, graphics. Needs a Canva integration for CANVA_CLIENT_ID/CANVA_CLIENT_SECRET plus a one-time auth flow that stores tokens in ~/.canva/tokens.json; the API base is api.canva.com/rest/v1. Convenient for templated content pipelines — the export step is where it earns its keep, since it turns a template into a shippable file.
Use case: Turning a blog post into a set of sized social graphics automatically
Study Guides(1)
Generating designs and exports through an integration
This skill drives the canva connect interface so social posts, carousels and graphics can be produced from a script instead of by hand. It covers creating, exporting and listing designs, plus uploading source images. ## What it does - Creates designs for a brief and turns a list of points into a carousel. - Exports an existing design into a chosen image format. - Lists recent designs so an existing asset can be found by name. - Uploads an image into the account for reuse in later designs. - Authenticates through oauth and refreshes the access token automatically, caching tokens in a local file. ## When it is the wrong choice Nothing works without a registered integration and a completed authorization, so an unconfigured environment cannot use it at all. The work also happens on a hosted platform, which rules it out for offline or air gapped rendering and adds an external dependency on every call. For a single static graphic, a local templating tool produces the file with no account, no secret and no network round trip. ```bash # first time only: register an integration, then run the auth flow # tokens are cached under the canva directory in the user home # client identifier and secret come in through the environment curl -s <connect endpoint> -H "authorization: bearer <token>" ``` ## Working notes - Regenerating a design costs more than re-exporting one, so keep finished designs. - The integration identifier and secret are created once and reused.
Quick Facts
Install
npx clawhub@latest install canva