Canva Integration
The Canva integration lets AI agents list and create designs, trigger exports to PDF, PNG, PPTX and more, manage folders, and inspect uploaded assets — all through AgentBridge's unified execute endpoint.
Connecting Canva #
Go to Dashboard → Tools → Canva and click Connect. Complete the Canva OAuth flow to grant AgentBridge access to your Canva account.
Canva's API requires your app to be approved in the Canva Developer Portal. Make sure the OAuth scopes design:content:read, design:content:write, asset:read, asset:write, and folder:read are enabled for your Canva app.
Available Tools #
| Tool name | Description |
|---|---|
get_user | Get the authenticated user's Canva profile |
list_designs | List designs owned by or shared with the user, with optional search |
get_design | Get full details of a specific design by ID |
create_design | Create a new design from a preset type or custom dimensions |
export_design | Start an export job (PDF, PNG, JPG, GIF, PPTX, MP4) — returns an export ID |
get_export | Poll an export job and retrieve download URLs when complete |
list_folder_items | List designs and sub-folders inside a folder (use "root" for root) |
create_folder | Create a new folder, optionally nested inside a parent folder |
get_asset | Get metadata for an uploaded asset |
delete_asset | Delete an uploaded asset |
custom_request | Make any authenticated request to the Canva REST API |
Example — List Designs #
json — request
{
"tool": "canva.list_designs",
"params": {
"query": "Q1 Report",
"ownership": "owned"
}
}
json — 200 response
{
"status": "success",
"data": {
"items": [
{
"id": "DAFXqb7yzAB",
"title": "Q1 Report 2026",
"created_at": 1741910400,
"updated_at": 1741996800,
"thumbnail": { "url": "https://..." }
}
],
"continuation": "eyJwYWdlIjoy..."
}
}
Example — Create a Design #
json — request (preset type)
{
"tool": "canva.create_design",
"params": {
"design_type": "presentation",
"title": "Q2 Investor Update"
}
}
json — request (custom dimensions)
{
"tool": "canva.create_design",
"params": {
"width": 1080,
"height": 1080,
"title": "Instagram Post"
}
}
Example — Export a Design #
Exporting is a two-step async operation. First start the export, then poll until it completes.
json — step 1: start export
{
"tool": "canva.export_design",
"params": {
"design_id": "DAFXqb7yzAB",
"format": "pdf"
}
}
json — step 1 response
{
"status": "success",
"data": {
"job": {
"id": "Msd59349ff",
"status": "in_progress"
}
}
}
json — step 2: poll for result
{
"tool": "canva.get_export",
"params": { "export_id": "Msd59349ff" }
}
json — step 2 response (success)
{
"status": "success",
"data": {
"job": {
"id": "Msd59349ff",
"status": "success",
"urls": ["https://export.canva.com/..."]
}
}
}
SDK Example #
typescript
import { AgentBridge } from 'agentbridge-sdk';
const bridge = new AgentBridge(process.env.AGENTBRIDGE_API_KEY!);
// List designs matching a search query
const designs = await bridge.execute({
tool: 'canva.list_designs',
params: { query: 'Q1 Report' },
});
// Create a presentation
const created = await bridge.execute({
tool: 'canva.create_design',
params: { design_type: 'presentation', title: 'Q2 Investor Update' },
});
const designId = created.data.design.id;
// Export to PDF and poll until done
const exportJob = await bridge.execute({
tool: 'canva.export_design',
params: { design_id: designId, format: 'pdf' },
});
const exportId = exportJob.data.job.id;
let done = false;
while (!done) {
await new Promise(r => setTimeout(r, 2000));
const poll = await bridge.execute({
tool: 'canva.get_export',
params: { export_id: exportId },
});
if (poll.data.job.status === 'success') {
console.log('PDF ready:', poll.data.job.urls[0]);
done = true;
}
}
Was this page helpful?