# How to connect Canva to OpenClaw (no API keys)

> Connect Canva to OpenClaw with ClawLink in one click — 46 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.

Web version: https://claw-link.dev/openclaw/canva

The usual route to Canva access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical Canva setup: install one ClawHub skill, connect Canva in the browser, and OpenClaw can call real Canva actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.

**Start here:** install the ClawLink plugin (`openclaw plugins install clawhub:clawlink-plugin`), pair it in the browser, then connect the app in the ClawLink dashboard. The interactive install prompt is on the web version of this page: https://claw-link.dev/openclaw/canva

## Setup

It takes three steps to connect OpenClaw to Canva.

1. **Install ClawLink** — add the plugin to OpenClaw once.
2. **Connect Canva** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask OpenClaw in plain English.

**Alternative for any agent (no plugin needed):** if the OpenClaw plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect canva  # connect Canva (browser OAuth)
npx -y @useclawlink/cli actions canva  # list available actions
npx -y @useclawlink/cli run canva <action> --input '<json>'  # execute (add --confirm for writes)
```

### Install by command

The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:

```bash
openclaw plugins install clawhub:clawlink-plugin
```

Then ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say `done`. Finally, connect Canva in the [ClawLink dashboard](https://claw-link.dev/dashboard) — a one-click OAuth approval, no API keys.

Verify the connection by asking OpenClaw:

> Create a new Canva design by importing the attached PDF (canva_create_design_import_job, title "Quarterly report", mime_type application/pdf), then poll canva_retrieve_design_import_job_status until it succeeds and show me the new design's id.

### Using a different agent?

The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

```bash
npx -y @useclawlink/cli login
```

`login` opens the same browser approval and stores a credential locally. Once Canva is connected in the dashboard, that agent calls the same 46 Canva tools over MCP. Full setup for MCP clients and shell agents: [connect apps to any AI agent](https://claw-link.dev/learn/connect-apps-to-any-ai-agent).

## Canva MCP for OpenClaw

Looking for a Canva MCP server for OpenClaw? ClawLink connects Canva to OpenClaw and exposes 46 Canva tools your agent can call over [MCP](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using Hermes instead? The [Hermes Canva integration](https://claw-link.dev/hermes/canva) works the same way.

This page is about Canva the design app, not OpenClaw's macOS Canvas panel, which shares the name and mixes into search results for "openclaw canva". On Canva itself, the official route inside an AI tool is Canva's own MCP server at `mcp.canva.com/mcp`, but getting your redirect URI onto its allowlist goes through a waitlist application that Canva reviews per company. Every other guide above this page in the search results either sends you through that waitlist, or has you register a Canva developer integration and hold your own OAuth credentials. ClawLink skips both: the connection is hosted, so you click Connect on Canva's consent screen and OpenClaw calls the tools from the next message: no waitlist, no developer app, no client secret on your machine. If a search answer tells you there is no official Canva integration for OpenClaw, it is counting only the waitlisted MCP server as official; the hosted connection on this page is available today.

## Canva MCP for OpenClaw: the three routes, and what each requires

The query "Canva MCP for OpenClaw" is answered three ways today, and they are genuinely different tradeoffs. Which one is right depends on whether you can wait for approval, hold developer credentials, or just want it working:

- **Canva's official MCP server** (`https://mcp.canva.com/mcp`) is the credible official answer: Canva hosts it, exposes ~27 tools (design generation, search, export, comments, autofill), and publishes per-tool rate limits and plan tiers. The catch: adding your redirect URI to its allowlist requires a waitlist application that Canva reviews for each company, and each user authenticates individually. Free plans export at standard quality; premium-element exports can fail with `license_required`.
- **ClawLink** — the same Canva API under the hood, with 46 tools and none of the setup: no waitlist application, no developer app registration, no client secret. Connect in the browser, call the tools from chat. What we do not serve: ClawLink does not expose Canva's design-editing transactions or AI design generation — for changing the content of an existing design or generating a design from a prompt, the official MCP is the route, and the tradeoff is its approval process.
- **A self-built integration** using the Connect API directly (register at canva.com/developers) gives you full control and no third party, at the cost of owning scopes, token refresh, and rate-limit handling. Note that private integrations are for Canva Enterprise teams, and public ones need Canva's review before other users can install them — a solo developer's app is a development app until then.

All three routes end at the same Canva Connect API, so the capability ceiling is Canva's, not the integrator's. The differences are the waitlist, the credentials, and the maintenance — which is why ClawLink's wedge is "connect in the browser and start" rather than "more tools than Canva".

## What the OpenClaw Canva integration can do

46 Canva tools are ready for OpenClaw once the account is connected. The 30 below are the ones people reach for most; your agent can call all 46.

### 30 of 46 Canva tools for OpenClaw

| Tool | What it does |
|---|---|
| **Create asset upload job** `canva_create_asset_upload_job` | Upload an asset file to the Canva content library |
| **Create design import job** `canva_create_design_import_job` | Import an external file as a new Canva design |
| **Create design resize job** `canva_create_design_resize_job` | Create a resized copy of an existing design |
| **Create URL asset upload job** `canva_create_url_asset_upload_job` | Import an asset into Canva from a public URL |
| **Fetch asset upload job status** `canva_fetch_asset_upload_job_status` | Poll for asset upload job completion status |
| **Fetch current user details** `canva_fetch_current_user_details` | Get the current Canva user details |
| **Fetch design metadata and access information** `canva_fetch_design_metadata_and_access_information` | Get metadata for a Canva design |
| **Get design export job result** `canva_get_design_export_job_result` | Poll for design export job completion status |
| **Get designs designid export formats** `canva_get_designs_designid_export_formats` | List available export formats for a design |
| **Access user specific brand templates list** `canva_access_user_specific_brand_templates_list` | Lists brand templates available to the user (Canva Enterprise only) |
| **Fetch canva connect signing public keys** `canva_fetch_canva_connect_signing_public_keys` | The API for verifying Canva webhooks, 'connect/keys,' is in preview, meaning unstable, not for |
| **Get design comment replies** `canva_get_design_comment_replies` | Retrieves a list of replies for a comment or suggestion thread on a design |
| **Get design comment reply** `canva_get_design_comment_reply` | Retrieves a specific reply to a comment or suggestion thread on a design |
| **Get designs designid comments threadid** `canva_get_designs_designid_comments_threadid` | Retrieves metadata for a comment or suggestion thread on a design |
| **Get URL asset uploads jobid** `canva_get_url_asset_uploads_jobid` | Retrieve the status and result of a URL-based asset upload job |
| **Get URL imports jobid** `canva_get_url_imports_jobid` | Polls for URL import job completion status |
| **Get users me capabilities** `canva_get_users_me_capabilities` | Lists the API capabilities for the user account associated with the provided access token |
| **List design pages with pagination** `canva_list_design_pages_with_pagination` | Preview API for Canva: subject to unannounced changes and not for public integrations |
| **List folder items by type with sorting** `canva_list_folder_items_by_type_with_sorting` | Lists the items in a folder, including each item's `type` |
| **List user designs** `canva_list_user_designs` | Provides a summary of Canva user designs, includes search filtering, and allows showing both |
| **Retrieve app public key set** `canva_retrieve_app_public_key_set` | Returns the Json Web Key Set (public keys) of an app |
| **Retrieve asset metadata by ID** `canva_retrieve_asset_metadata_by_id` | You can retrieve the metadata of an asset by specifying its `assetId` |
| **Retrieve brand template dataset definition** `canva_retrieve_brand_template_dataset_definition` | Canva's brand template IDs will change later this year, including a 6-month integration |
| **Retrieve canva enterprise brand template metadata** `canva_retrieve_canva_enterprise_brand_template_metadata` | Upcoming update will change brand template IDs; integrations must migrate within 6 months |
| **Retrieve design autofill job status** `canva_retrieve_design_autofill_job_status` | API users with Canva Enterprise membership can retrieve design autofill job results |
| **Retrieve design import job status** `canva_retrieve_design_import_job_status` | Polls for design import job completion status |
| **Retrieve design resize job status** `canva_retrieve_design_resize_job_status` | Retrieves the status and results of a design resize job |
| **Retrieve folder details by ID** `canva_retrieve_folder_details_by_id` | Gets the name and other details of a folder using a folder's `folderID` |
| **Retrieve user profile data** `canva_retrieve_user_profile_data` | Currently, this returns the display name of the user account associated with the provided |
| **Validate oauth token properties** `canva_validate_oauth_token_properties` | Check an access token's validity and properties via introspection, requiring authentication |

## Example prompts

**Create a design from a document**

> Create a new Canva design by importing the attached PDF (canva_create_design_import_job, title "Quarterly report", mime_type application/pdf), then poll canva_retrieve_design_import_job_status until it succeeds and show me the new design's id.

**Export a design to PNG**

> Check which formats canva_get_designs_designid_export_formats returns for my most recent design, then export it as PNG with canva_post_exports and wait for canva_get_design_export_job_result before giving me the download link.

**Find and resize a design**

> List my designs with canva_list_user_designs sorted by modified_descending, take the newest one, and create a resized copy for Instagram with canva_create_design_resize_job — poll the job until it finishes and show me the new design id.

**Upload an image asset**

> Upload the attached image to my Canva content library with canva_create_asset_upload_job (name "hero-banner"), poll canva_fetch_asset_upload_job_status, and tell me the asset id.

## Canva tool arguments that trip agents up

These are the failures we actually see in production, with the argument names, defaults, and limits taken from the live tool schemas on 2026-08-02. Most Canva operations are asynchronous: the call returns a job id, and a separate status tool has to be polled until it reports `success` or `failed` before the result exists.

- **`canva_post_designs` requires `design_type`.** It accepts a preset name (`doc`, `whiteboard`, `presentation`) or a custom size; `title` is optional (1-255 chars). This is the tool to create a brand-new design — it is the second most-used Canva tool on ClawLink.
- **`canva_post_exports` requires `design_id` plus `format`, and the format must be one Canva supports for that design.** Formats are `jpg`, `png`, `gif`, `pptx`, `mp4`, `pdf`, `csv`, and HTML (`html_bundle`/`html_standalone`). Run `canva_get_designs_designid_export_formats` first, then poll `canva_get_design_export_job_result` with the returned `exportId`. Download URLs are valid for 24 hours.
- **Export rate limits are real and per-user.** Canva allows 75 exports per 5-minute window and 500 per 24 hours per user, and 75 per document per 5 minutes. An agent asked to export a whole library will hit `Too many requests. Try again shortly.` — the answer is spacing the exports, not retrying faster.
- **`canva_create_design_import_job` needs the actual file — a path on your machine does not work.** The tool takes `file` plus `title` (max 50 chars) and accepts PDF, Word, PowerPoint, Excel, PSD, AI, Keynote, Pages, Numbers, and OpenDocument formats up to 100MB. Local paths like `/home/user/media/slide.pptx` fail with `missing_file_bytes`; the file has to be attached to the call, or fetched from a public URL. The import is async — poll `canva_retrieve_design_import_job_status` with `jobId`.
- **`canva_create_design_resize_job` only works on Canva Pro and above.** It needs `design_id` plus `design_type`, resizes asynchronously, and is capped at 25,000,000 px² total area. Resizing always produces a new design; in-place resizing is not in the API. Free-plan accounts fail on this one with a permissions error, not a missing argument.
- **`canva_list_user_designs` filters by ownership.** Pass `ownership: "owned"`, `"shared"`, or `"any"` (default) and `sort_by` (`relevance`, `modified_descending`, `title_ascending`, ...). Long lists paginate with a `continuation` token — ask the agent to keep following it instead of stopping at the first page.
- **Autofill is an Enterprise-only feature.** `canva_initiate_canva_design_autofill_job` requires `brand_template_id` plus `data` and needs a Canva Enterprise account. Brand template IDs are also due to change later this year with a 6-month migration window — see the tool descriptions.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Canva working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Connection flow** | Register a Canva app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Canva through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Canva. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| **Agent usability** | You still need to expose the right Canva actions to the runtime in a format your agent can reliably use. | 46 tools for Canva are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Canva to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect Canva in the browser, and the 46 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### OpenClaw installed the Canva skill but can't call the tools
The ClawHub skill teaches OpenClaw about Canva, but the calls run through the ClawLink plugin and your connected account. Make sure Canva is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

### Connection succeeds but no tools appear
Reconnect Canva from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

### "Tool schema not loaded yet" error when calling Canva tools
Canva tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Canva call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

### Canva returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

### File bytes are missing for file. No attached bytes and s3key="…" is not a public URL the server can fetch
This is the most common Canva failure on ClawLink — more than half of all Canva errors we see. The agent passed a local file path (like `/home/user/.openclaw/media/inbound/poster.pptx`) to `canva_create_design_import_job` or `canva_create_asset_upload_job`, but the file never left your machine, so there is nothing to upload. The server needs the file's bytes attached to the call, or a URL it can fetch that is publicly accessible on the internet. Ask the agent to attach the file itself rather than naming a path; if it is working from a link, the link must not require login or a localhost address. The error names the offending `s3key` — check whether the agent invented it from a path on your disk.

Ask the agent to diagnose it:

```text
Retry the Canva import, but attach the actual file bytes to the `file` argument instead of passing a filesystem path. Show me the arguments you plan to send before you send them.
```

### Unsupported file type: application/octet-stream. Supported types: PDF, DOC/DOCX, PPT/PPTX, XLS/XLSX, PSD, AI, KEY, PAGES, NUMBERS, ODT, ODP, ODS, ODG on parameter `file`
The agent sent a file whose detected type is a generic binary (`application/octet-stream`) rather than one of the formats Canva's import accepts. This usually means a local file was referenced without its real MIME type, or a file was uploaded from a source that strips the extension. Have the agent set the correct `mime_type` explicitly on the call (the import and URL-import tools both accept an optional `mime_type` override) and confirm the file is actually one of the listed types — a `.pdf` renamed from something else will not convert.

Ask the agent to diagnose it:

```text
Retry with the explicit mime_type matching the file's real format (e.g. application/pdf). If the file is not genuinely a PDF/PPTX/Word/Excel/PSD/AI/Keynote file, tell me before retrying.
```

### Too many requests. Try again shortly.
A Canva rate limit. Canva throttles per user: 75 exports per 5 minutes and 500 per 24 hours, plus 75 exports per document per 5 minutes; other operations carry their own per-minute limits (most read tools 100/min, `generate-design` 20/min, exports 20/min). This error clears on its own — wait at least a minute, then retry. If the agent is looping, tell it to stop and space the calls out; retrying faster cannot outrun a per-user limit. It can also appear if the same design is exported repeatedly in a loop.

Ask the agent to diagnose it:

```text
Stop and wait 60 seconds. Then continue the remaining exports one at a time, waiting between each, and tell me how many are left.
```

### Tool 'canva_upload_media' not found
There is no Canva tool called `canva_upload_media` — the agent guessed a name from another integration. The real tool is `canva_create_asset_upload_job` (with `canva_fetch_asset_upload_job_status` to poll it). ClawLink returns a "Did you mean" suggestion listing the closest real names on every miss; ask the agent to read that line and retry with the suggested tool, or run `clawlink_list_tools` first and pick from the actual catalog. The same pattern hits `canva_list_designs` (real name: `canva_list_user_designs`) and `canva_list_folder_items` (real name: `canva_list_folder_items_by_type_with_sorting`).

Ask the agent to diagnose it:

```text
Run clawlink_list_tools for canva and show me the exact tool names. Then retry with the real name, not a guess.
```

### Multiple canva connections match this request. Specify a connectionId.
The account has more than one Canva connection, and the agent did not say which one to use. Every tool call can take a `connectionId`; pass the one for the Canva account you mean. If the wrong connection keeps being picked, check the dashboard for duplicate Canva connections and remove the stale ones, or set the one you want as default.

Ask the agent to diagnose it:

```text
List my Canva connections, show me their ids and labels, and re-run the request with the connectionId for the account I pick.
```

### Canva 403 or "permission denied" on one action while others work
Two usual causes, and both are about the request rather than the connection. First, the connected account may not have edit access to that specific design, folder, or brand template — Canva gates operations by the user's permission on the item, and a shared design you can view is not necessarily one you can modify; templates also need the right plan (resize needs Pro+, autofill needs Enterprise). Second, the agent may have sent a placeholder or guessed id (like "YOUR_ID" or a sample design id from documentation) instead of a real one: ask it to run `canva_list_user_designs` or `canva_fetch_design_metadata_and_access_information` first and use the real `designId` from the result. If the tool says a specific design was not found or not allowed, start there rather than reconnecting.

Ask the agent to diagnose it:

```text
Run canva_list_user_designs and show me the real design ids. Then retry the failing action with a real id from that list, and check whether my plan covers the operation.
```

### OAuth finished in the browser but the account is still missing
Try reconnecting Canva and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

### Is there a OpenClaw Canva integration?
Yes. ClawLink is the fastest way to connect OpenClaw to Canva: link your Canva account once in the browser and OpenClaw can call the Canva API through 46 ready-made tools — no custom code or token handling.

### How do I add Canva to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink Canva skill from ClawHub, then you click Connect in the dashboard to authorize Canva. OpenClaw calls the tools from the next message — no config files or API keys to manage.

### How long does it take to connect Canva to OpenClaw?
About two minutes. Sign in, click Connect next to Canva in the dashboard, authenticate, and OpenClaw can use it from the next chat message.

### Why use ClawLink instead of wiring Canva up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Canva working from chat.

### OpenClaw installed the Canva skill but can't call the tools
The ClawHub skill teaches OpenClaw about Canva, but the calls run through the ClawLink plugin and your connected account. Make sure Canva is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

## Related

- [Cloudinary](https://claw-link.dev/openclaw/cloudinary) — Cloudinary is a cloud-based media management platform for uploading, storing, transforming, and delivering images and videos via CDN.
- [Connect Penpot](https://claw-link.dev/openclaw/penpot) — Open-source design and prototyping platform for collaborative design workflows.
- [Figma](https://claw-link.dev/openclaw/figma) — Design files, prototypes, comments, and developer resources
