Integrations Last updated March 16, 2026

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_userGet the authenticated user's Canva profile
list_designsList designs owned by or shared with the user, with optional search
get_designGet full details of a specific design by ID
create_designCreate a new design from a preset type or custom dimensions
export_designStart an export job (PDF, PNG, JPG, GIF, PPTX, MP4) — returns an export ID
get_exportPoll an export job and retrieve download URLs when complete
list_folder_itemsList designs and sub-folders inside a folder (use "root" for root)
create_folderCreate a new folder, optionally nested inside a parent folder
get_assetGet metadata for an uploaded asset
delete_assetDelete an uploaded asset
custom_requestMake 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;
  }
}