Canva: Programmatically Create and Export Designs with Connect API

前言

做社媒物料的开发者常见的痛点:设计稿堆在 Canva 里,文案和素材散落在运营手上,每改一版都要人工导出、再发回群里。Canva Skill 的思路是把「创建设计、导出文件、上传素材」变成 API 调用,让 Agent 可以直接驱动 Canva 产出成品。下面介绍这个 Skill 的定位、安装和用法。

这是什么

Canva(坐标 @clawhub_abgohel/canva)是一个基于 SKILL.md 格式的 Agent Skill,由 abgohel 发布在 ClawHub,来源 clawhub,版本 1.0.0,分类 design-media。官方地址 https://api.skillhub.cn/zechuan-zhuchuang/canva,上游仓库 https://clawhub.ai/abgohel/canva。

它解决的问题:通过 Canva Connect API 创建、导出和管理 Canva 设计,以编程方式生成社交媒体帖子、轮播图及图形。Skill 页面评分 100000,下载 11787 次,安装 1425 次,标签 requires_api_key=true——意味着需要自备 Canva 凭据。

核心功能

Skill 的能力全部落在 Canva Connect API(Base URL https://api.canva.com/rest/v1)上:

  • 列出设计、读取单个设计详情
  • 基于品牌模板调用 autofills 接口填充内容,生成新设计
  • 发起导出任务(异步),支持 PNG、JPG、PDF、MP4、GIF 五种格式
  • 上传图片等素材到 Canva 资产库
  • 列出品牌模板(brand templates)

认证走 OAuth 2.0,Skill 自动处理 token 刷新,token 存储在 ~/.canva/tokens.json。

安装与启用

安装命令来自官方 Skill 页面:

openclaw skills install @abgohel/canva

装完还要自建 Canva Integration 并配置凭据。先到 https://www.canva.com/developers/ 创建新的 integration,拿到 Client ID 和 Client Secret,然后设置环境变量:

export CANVA_CLIENT_ID="your_client_id"
export CANVA_CLIENT_SECRET="your_client_secret"

首次使用先跑一遍授权流程拿 access token,之后按 Skill 提示调用即可:

# token 写入 ~/.canva/tokens.json
ACCESS_TOKEN=$(cat ~/.canva/tokens.json | jq -r '.access_token')

Cursor / Codex CLI / Claude Code 的接入方式官方资料未分别说明,这里不展开。

典型用法

下面几个例子来自官方 SKILL.md,可直接复现。

先看有哪些品牌模板可用:

curl -s "https://api.canva.com/rest/v1/brand-templates" \
  -H "Authorization: Bearer $ACCESS_TOKEN" | jq .

选定模板后,用 autofills 接口填入标题和正文,生成一张设计:

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"}
    }
  }'

导出是异步任务,先发起,再轮询状态,完成后下载:

# 发起导出
curl -X POST "https://api.canva.com/rest/v1/exports" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "design_id": "DESIGN_ID",
    "format": {"type": "png", "width": 1080, "height": 1080}
  }'

# 查询导出状态
curl -s "https://api.canva.com/rest/v1/exports/{jobId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN" | jq .

素材上传走同一个 API:

curl -X POST "https://api.canva.com/rest/v1/asset-uploads" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/octet-stream" \
  -H 'Asset-Upload-Metadata: {"name": "my-image.png"}' \
  --data-binary @image.png

官方还给了三个组合工作流:Instagram 帖子(列模板 → autofill → 导出 1080×1080 PNG → 下载)、轮播图(多次 autofill 生成多张 → 逐张导出 PNG)、批量导出(列全部设计 → 循环发起导出 → 下载所有文件)。

适用场景与注意

适合:需要在 Agent 流程或 CI 里批量产出社媒图、轮播图,且设计规范已沉淀在 Canva 品牌模板里的团队。前提是能自建 Canva Integration。

限制与坑:

  • 需要的 scope 包括 design:content:read/write、asset:read/write、brandtemplate:content:read,缺权限会报 403
  • 导出是异步任务,要轮询,不能发完就当完成
  • 速率限制:多数接口 100 次/分钟,上传和导出 30 次/分钟,批量操作需自行节流
  • 常见错误:401 token 过期需刷新、429 触发限流、404 设计或模板不存在
  • 官方建议:优先用品牌模板而非从零创建;缓存常用模板 ID;批量导出分组执行以避开限流

License 为 MIT-0。Skill 页面简介同时声明:内容由 AI 辅助生成,仅供参考,决策与落地由使用者自行负责。

结尾

这个 Skill 的价值在于把 Canva 的建设计、填内容、导出、素材管理收敛成一套带现成 curl 示例的 API 操作清单,适合做社媒内容批量生产的 Agent。官方地址:https://api.skillhub.cn/zechuan-zhuchuang/canva。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye