{
  "schemaVersion": "1.0",
  "item": {
    "slug": "canva",
    "name": "Canva",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/abgohel/canva",
    "canonicalUrl": "https://clawhub.ai/abgohel/canva",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/canva",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=canva",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "package.json",
      "scripts/canva-auth.sh",
      "scripts/canva.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/canva"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/canva",
    "agentPageUrl": "https://openagent3.xyz/skills/canva/agent",
    "manifestUrl": "https://openagent3.xyz/skills/canva/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/canva/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Canva Skill",
        "body": "Create, export, and manage Canva designs via the Connect API."
      },
      {
        "title": "When to Use",
        "body": "\"Create an Instagram post about [topic]\"\n\"Export my Canva design as PNG\"\n\"List my recent designs\"\n\"Create a carousel from these points\"\n\"Upload this image to Canva\""
      },
      {
        "title": "Prerequisites",
        "body": "Create a Canva Integration:\n\nGo to https://www.canva.com/developers/\nCreate a new integration\nGet your Client ID and Client Secret\n\n\n\nSet Environment Variables:\nexport CANVA_CLIENT_ID=\"your_client_id\"\nexport CANVA_CLIENT_SECRET=\"your_client_secret\"\n\n\n\nAuthenticate (first time):\nRun the auth flow to get access tokens (stored in ~/.canva/tokens.json)"
      },
      {
        "title": "API Base URL",
        "body": "https://api.canva.com/rest/v1"
      },
      {
        "title": "Authentication",
        "body": "Canva uses OAuth 2.0. The skill handles token refresh automatically.\n\n# Get access token (stored in ~/.canva/tokens.json)\nACCESS_TOKEN=$(cat ~/.canva/tokens.json | jq -r '.access_token')"
      },
      {
        "title": "List Designs",
        "body": "curl -s \"https://api.canva.com/rest/v1/designs\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq ."
      },
      {
        "title": "Get Design Details",
        "body": "curl -s \"https://api.canva.com/rest/v1/designs/{designId}\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq ."
      },
      {
        "title": "Create Design from Template",
        "body": "curl -X POST \"https://api.canva.com/rest/v1/autofills\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brand_template_id\": \"TEMPLATE_ID\",\n    \"data\": {\n      \"title\": {\"type\": \"text\", \"text\": \"Your Title\"},\n      \"body\": {\"type\": \"text\", \"text\": \"Your body text\"}\n    }\n  }'"
      },
      {
        "title": "Export Design",
        "body": "# Start export job\ncurl -X POST \"https://api.canva.com/rest/v1/exports\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"design_id\": \"DESIGN_ID\",\n    \"format\": {\"type\": \"png\", \"width\": 1080, \"height\": 1080}\n  }'\n\n# Check export status\ncurl -s \"https://api.canva.com/rest/v1/exports/{jobId}\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq ."
      },
      {
        "title": "Upload Asset",
        "body": "curl -X POST \"https://api.canva.com/rest/v1/asset-uploads\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/octet-stream\" \\\n  -H 'Asset-Upload-Metadata: {\"name\": \"my-image.png\"}' \\\n  --data-binary @image.png"
      },
      {
        "title": "List Brand Templates",
        "body": "curl -s \"https://api.canva.com/rest/v1/brand-templates\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq ."
      },
      {
        "title": "Export Formats",
        "body": "FormatOptionsPNGwidth, height, losslessJPGwidth, height, quality (1-100)PDFstandard, printMP4(for video designs)GIF(for animated designs)"
      },
      {
        "title": "Create Instagram Post",
        "body": "List brand templates: GET /brand-templates\nFind Instagram post template\nAutofill with content: POST /autofills\nExport as PNG 1080x1080: POST /exports\nDownload the exported file"
      },
      {
        "title": "Create Carousel",
        "body": "Create multiple designs using autofill\nExport each as PNG\nCombine for posting"
      },
      {
        "title": "Batch Export",
        "body": "List designs: GET /designs\nLoop through and export each\nDownload all files"
      },
      {
        "title": "Rate Limits",
        "body": "Most endpoints: 100 requests/minute\nUpload/Export: 30 requests/minute"
      },
      {
        "title": "Error Handling",
        "body": "Common errors:\n\n401 - Token expired, refresh needed\n403 - Missing required scope\n429 - Rate limit exceeded\n404 - Design/template not found"
      },
      {
        "title": "Scopes Required",
        "body": "design:content:read - Read designs\ndesign:content:write - Create/modify designs\nasset:read - Read assets\nasset:write - Upload assets\nbrandtemplate:content:read - Read brand templates"
      },
      {
        "title": "Tips",
        "body": "Use Brand Templates - Pre-designed templates are faster than creating from scratch\nBatch Operations - Group exports to avoid rate limits\nCache Template IDs - Store commonly used template IDs locally\nCheck Job Status - Exports are async; poll until complete"
      },
      {
        "title": "Resources",
        "body": "Canva Connect API Docs\nOpenAPI Spec\nStarter Kit\n\nBuilt by Meow 😼 for the Moltbook community 🦞"
      }
    ],
    "body": "Canva Skill\n\nCreate, export, and manage Canva designs via the Connect API.\n\nWhen to Use\n\"Create an Instagram post about [topic]\"\n\"Export my Canva design as PNG\"\n\"List my recent designs\"\n\"Create a carousel from these points\"\n\"Upload this image to Canva\"\nPrerequisites\n\nCreate a Canva Integration:\n\nGo to https://www.canva.com/developers/\nCreate a new integration\nGet your Client ID and Client Secret\n\nSet Environment Variables:\n\nexport CANVA_CLIENT_ID=\"your_client_id\"\nexport CANVA_CLIENT_SECRET=\"your_client_secret\"\n\n\nAuthenticate (first time): Run the auth flow to get access tokens (stored in ~/.canva/tokens.json)\n\nAPI Base URL\nhttps://api.canva.com/rest/v1\n\nAuthentication\n\nCanva uses OAuth 2.0. The skill handles token refresh automatically.\n\n# Get access token (stored in ~/.canva/tokens.json)\nACCESS_TOKEN=$(cat ~/.canva/tokens.json | jq -r '.access_token')\n\nCore Operations\nList Designs\ncurl -s \"https://api.canva.com/rest/v1/designs\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq .\n\nGet Design Details\ncurl -s \"https://api.canva.com/rest/v1/designs/{designId}\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq .\n\nCreate Design from Template\ncurl -X POST \"https://api.canva.com/rest/v1/autofills\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brand_template_id\": \"TEMPLATE_ID\",\n    \"data\": {\n      \"title\": {\"type\": \"text\", \"text\": \"Your Title\"},\n      \"body\": {\"type\": \"text\", \"text\": \"Your body text\"}\n    }\n  }'\n\nExport Design\n# Start export job\ncurl -X POST \"https://api.canva.com/rest/v1/exports\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"design_id\": \"DESIGN_ID\",\n    \"format\": {\"type\": \"png\", \"width\": 1080, \"height\": 1080}\n  }'\n\n# Check export status\ncurl -s \"https://api.canva.com/rest/v1/exports/{jobId}\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq .\n\nUpload Asset\ncurl -X POST \"https://api.canva.com/rest/v1/asset-uploads\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/octet-stream\" \\\n  -H 'Asset-Upload-Metadata: {\"name\": \"my-image.png\"}' \\\n  --data-binary @image.png\n\nList Brand Templates\ncurl -s \"https://api.canva.com/rest/v1/brand-templates\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" | jq .\n\nExport Formats\nFormat\tOptions\nPNG\twidth, height, lossless\nJPG\twidth, height, quality (1-100)\nPDF\tstandard, print\nMP4\t(for video designs)\nGIF\t(for animated designs)\nCommon Workflows\nCreate Instagram Post\nList brand templates: GET /brand-templates\nFind Instagram post template\nAutofill with content: POST /autofills\nExport as PNG 1080x1080: POST /exports\nDownload the exported file\nCreate Carousel\nCreate multiple designs using autofill\nExport each as PNG\nCombine for posting\nBatch Export\nList designs: GET /designs\nLoop through and export each\nDownload all files\nRate Limits\nMost endpoints: 100 requests/minute\nUpload/Export: 30 requests/minute\nError Handling\n\nCommon errors:\n\n401 - Token expired, refresh needed\n403 - Missing required scope\n429 - Rate limit exceeded\n404 - Design/template not found\nScopes Required\ndesign:content:read - Read designs\ndesign:content:write - Create/modify designs\nasset:read - Read assets\nasset:write - Upload assets\nbrandtemplate:content:read - Read brand templates\nTips\nUse Brand Templates - Pre-designed templates are faster than creating from scratch\nBatch Operations - Group exports to avoid rate limits\nCache Template IDs - Store commonly used template IDs locally\nCheck Job Status - Exports are async; poll until complete\nResources\nCanva Connect API Docs\nOpenAPI Spec\nStarter Kit\n\nBuilt by Meow 😼 for the Moltbook community 🦞"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/abgohel/canva",
    "publisherUrl": "https://clawhub.ai/abgohel/canva",
    "owner": "abgohel",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/canva",
    "downloadUrl": "https://openagent3.xyz/downloads/canva",
    "agentUrl": "https://openagent3.xyz/skills/canva/agent",
    "manifestUrl": "https://openagent3.xyz/skills/canva/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/canva/agent.md"
  }
}