{
 "slug": "canva",
 "name": "Canva",
 "url": "https://canva.com",
 "domain": "canva.com",
 "category": "design",
 "category_name": "Design",
 "tested_at": "2026-10-16",
 "run": "20261016T053304Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T002754Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  },
  {
   "run": "20261012T090017Z",
   "date": "2026-10-12",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  },
  {
   "run": "20261016T053304Z",
   "date": "2026-10-16",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "none"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ],
   "docs": "unreachable"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "none",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "365f93123295",
  "kb_version": "3+overlay-83f4487de6",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 4,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip"
 },
 "same_level_drives": 3,
 "drives": 3,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare managed challenge (Turnstile interstitial)",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "edge"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-16"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": true
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "canva.dev docs answer Accept: text/markdown with text/markdown and Vary: Accept; OpenAPI 3.0.0 public. www.canva.com pages are behind a Cloudflare challenge; canva.dev robots.txt disallows its llms.txt and .md URLs."
  },
  "signup": {
   "status": "human",
   "cause": "check",
   "note": "Cloudflare 'Just a moment...' interstitial on www.canva.com/signup never cleared for our agent's browser."
  },
  "verify": {
   "status": "",
   "note": "No account (sign-up walled by the Cloudflare interstitial).",
   "reached": false
  },
  "credentials": {
   "status": "",
   "cause": "check",
   "note": "No API keys: REST, MCP and CLI need OAuth consent at www.canva.com/api/oauth/authorize, behind the same Cloudflare interstitial; no device flow.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "401 invalid_access_token 'Access token is missing' without a token.",
   "route": "account",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No token.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P0",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "none",
   "route": "none",
   "checkout": {
    "reached": "no",
    "processor": "none",
    "captcha": "visible",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "",
    "currency": "",
    "period": "",
    "plan": "",
    "last_button": ""
   },
   "person": "captcha",
   "ours": null,
   "note": "No 402 or agent rail. Pricing and checkout pages are behind the Cloudflare challenge and there was no account, so the walk stopped before a plan page; the processor and card-for-trial are unknown.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "Nothing started; cancel terms could not be read (pages behind Cloudflare).",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was made. One OAuth client registration (DCR) stays at mcp.canva.com: DELETE /register/{id} returned 404 and no registration_access_token was issued.",
   "account": false,
   "reached": false
  }
 },
 "routes": [
  {
   "route": "device_login",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 1
  },
  {
   "route": "oauth_consent",
   "offered": "seen",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": 2
  }
 ],
 "checkout": {
  "reached": "no",
  "processor": "none",
  "captcha": "visible",
  "three_ds": "not_seen",
  "phone_field": "none",
  "rail_offer": "none",
  "card_form": false
 },
 "docs": {
  "at": "2026-10-16",
  "read": 0,
  "listed": 0,
  "sampled": false,
  "overall": "unreachable",
  "getting_started": "missing",
  "auth": "missing",
  "errors": "missing",
  "examples": "none",
  "freshness": "unknown",
  "newest": null,
  "core_pages": "0 of 10",
  "capabilities": "none"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-16",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   },
   {
    "title": "Let a verified agent finish your checkout",
    "how": "Show signed agents no visible CAPTCHA at checkout, accept virtual and prepaid cards, and don't ask for a phone number to pay."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST at api.canva.com/rest, 60 paths, OAuth code + PKCE only",
  "openapi": "3.0.0, info.version 18 Jun 2024",
  "mcp": "official remote server mcp.canva.com/mcp, about 45 tools documented",
  "llms_txt": "referenced by every docs page but disallowed by canva.dev robots.txt"
 },
 "can_do": [
  "Read Canva's developer docs in Markdown via Accept: text/markdown",
  "Read the REST API's OpenAPI description",
  "Register an OAuth client for the MCP server headless (DCR)"
 ],
 "cannot_do": [
  {
   "what": "Create a Canva account",
   "why": "Cloudflare interstitial on www.canva.com/signup never clears for a signed automated browser"
  },
  {
   "what": "Get an API or MCP token",
   "why": "Only OAuth consent on www.canva.com, behind the same interstitial; no device flow or API keys"
  },
  {
   "what": "Any design work (create, edit, export, templates)",
   "why": "No token"
  },
  {
   "what": "See pricing or buy a plan",
   "why": "Pricing and checkout behind the Cloudflare challenge"
  }
 ],
 "blockers": [
  "Cloudflare managed challenge on every www.canva.com page, including sign-up and /api/oauth/authorize"
 ],
 "tips_for_owner": [
  "Let signed agents past the Cloudflare challenge",
  "Add a device flow for CLI and MCP",
  "Allow llms.txt and .md docs in robots.txt",
  "Answer MCP server/discover without a token",
  "Expose pricing and a billing API to agents"
 ],
 "tips_for_agents": [
  "All access is OAuth consent on www.canva.com: have the user consent in their own browser and hand over the MCP token",
  "mcp.canva.com supports CIMD and DCR; /authorize requests all 16 scopes",
  "Use Accept: text/markdown on canva.dev; .md URLs and llms.txt are robots-disallowed",
  "Once logged in, the CLI 'canva api ...' covers the REST API"
 ],
 "selfhost": null,
 "summary": "An agent cannot get into Canva: every www.canva.com page, including sign-up and the OAuth consent page that REST, MCP and the CLI all need, shows a Cloudflare interstitial that never cleared for our agent's browser. The developer surface around it is strong (Markdown docs, OpenAPI 3.0.0, an official MCP server with PRM, CIMD and DCR, a CLI wrapping the API), but none of it works without that token.",
 "wall": "Cloudflare interstitial on Canva sign-up",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Canva is a design tool with templates, AI image/video generation, and export to many formats. An agent testing it on its own could not even sign up: every Canva page, including sign-up and login, showed a Cloudflare security check that never let the automated browser through. So nothing beyond reading the public developer docs could be done.",
  "can_do": [
   "Read Canva's developer documentation and its API specification",
   "Start registering a developer app for the API (the registration step itself worked)"
  ],
  "cannot_do": [
   {
    "what": "Create a Canva account",
    "why": "A security check on the sign-up page never let the automated browser through"
   },
   {
    "what": "Get an API key or token",
    "why": "The only way to get one is through that same sign-up/login check"
   },
   {
    "what": "Create, edit, or export any design",
    "why": "No account or token could be obtained"
   },
   {
    "what": "See pricing or buy a plan",
    "why": "The pricing and checkout pages are behind the same security check"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Design creation",
   "capability": "Create a new design from scratch or a prompt",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/designs",
    "mcp": "generate-design",
    "cli": null,
    "ui": "canva.com home \"Create a design\""
   },
   "check": "GET /v1/designs/{designId} returns the new design metadata",
   "source": "https://www.canva.dev/docs/apps/rest-apis/reference/designs/create-design/; https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-02",
   "group": "Design editing",
   "capability": "Edit elements (text, images, shapes, tables) in a design",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/designs/{designId}/edit (editing transactions)",
    "mcp": "perform-editing-operations",
    "cli": null,
    "ui": "Canva editor canvas"
   },
   "check": "get-design-content / get-design-pages shows the edited element state after commit-editing-transaction",
   "source": "https://www.canva.dev/docs/apps/design-editing.md; https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-03",
   "group": "Templates",
   "capability": "Start a design from a template",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "search-brand-templates / create-design-from-brand-template",
    "cli": null,
    "ui": "canva.com/templates"
   },
   "check": "GET /v1/designs/{designId} shows template-derived design with matching layout",
   "source": "https://www.canva.com/pro/free-templates/; https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-04",
   "group": "AI generation",
   "capability": "Generate images from a text prompt (Text to Image)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/ai-image-generator"
   },
   "check": "design shows AI-generated image element inserted after prompt submission",
   "source": "https://www.canva.com/features/ (Text to Image spotlight)"
  },
  {
   "id": "cap-05",
   "group": "AI generation",
   "capability": "Generate video from text/script (AI Video Generator)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/ai-video-generator"
   },
   "check": "generated video asset appears in design timeline, playable",
   "source": "https://www.canva.com/features/ai-video-generator/"
  },
  {
   "id": "cap-06",
   "group": "Export",
   "capability": "Export/download a design in a chosen format (PDF, PNG, JPG, PPTX, MP4, etc.)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/exports",
    "mcp": "export-design",
    "cli": null,
    "ui": "editor Share > Download"
   },
   "check": "GET /v1/exports/{exportId} returns status 'success' with a download URL serving the file",
   "source": "https://www.canva.dev/docs/apps/exporting-designs.md; https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-07",
   "group": "Brand",
   "capability": "Set up a Brand Kit (logos, colors, fonts, imagery, guidelines)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "list-brand-kits",
    "cli": null,
    "ui": "canva.com/pro/brand-kit"
   },
   "check": "list-brand-kits / Brand Kit settings shows saved logo, palette, and font set",
   "source": "https://www.canva.com/pro/brand-kit/"
  },
  {
   "id": "cap-08",
   "group": "Social",
   "capability": "Schedule and publish social media posts across platforms",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Content Planner (canva.com/pro/content-planner)"
   },
   "check": "Content Planner calendar shows post with status 'scheduled' at the chosen date/time",
   "source": "https://www.canva.com/pro/content-planner/"
  },
  {
   "id": "cap-09",
   "group": "Resize",
   "capability": "Resize a design to a different format/platform (Magic Switch)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v1/resizes",
    "mcp": "resize-design",
    "cli": null,
    "ui": "editor Resize button"
   },
   "check": "GET /v1/resizes/{jobId} returns a new design id with the target dimensions",
   "source": "https://www.canva.dev/docs/apps/rest-apis/reference/resizes/; https://www.canva.com/pro/magic-switch/"
  },
  {
   "id": "cap-10",
   "group": "Autofill",
   "capability": "Autofill a Brand Template with data to bulk-generate on-brand designs",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v1/autofills",
    "mcp": "autofill-design",
    "cli": null,
    "ui": "Brand Templates > Autofill"
   },
   "check": "GET /v1/autofills/{jobId} returns a completed design populated with the supplied dataset values",
   "source": "https://www.canva.dev/docs/apps/rest-apis/autofill-guide.md"
  },
  {
   "id": "cap-11",
   "group": "Library",
   "capability": "Search and reuse existing designs, folders, and assets",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/designs?query=",
    "mcp": "search-designs / search-folders / get-assets",
    "cli": null,
    "ui": "canva.com Projects"
   },
   "check": "search-designs returns the design id/title matching the keyword",
   "source": "https://www.canva.dev/docs/apps/rest-apis/reference/designs/list-designs/; https://www.canva.dev/docs/apps/mcp/tools/search-designs/"
  },
  {
   "id": "cap-12",
   "group": "Assets",
   "capability": "Upload an asset (image/video/audio) from a file or URL",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/asset-uploads",
    "mcp": "upload-asset-from-url",
    "cli": null,
    "ui": "editor Uploads panel"
   },
   "check": "GET /v1/asset-uploads/{jobId} status 'success' and get-assets lists the new asset id",
   "source": "https://www.canva.dev/docs/apps/uploading-assets.md"
  },
  {
   "id": "cap-13",
   "group": "Organization",
   "capability": "Organize designs into folders and move items between folders",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/folders, POST /v1/folders/move",
    "mcp": "create-folder / move-item-to-folder / list-folder-items",
    "cli": null,
    "ui": "canva.com Projects sidebar"
   },
   "check": "list-folder-items shows the moved design inside the destination folder",
   "source": "https://www.canva.dev/docs/apps/platform-concepts-folders.md; https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-14",
   "group": "Collaboration",
   "capability": "Comment on a design and reply to comments",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/comments",
    "mcp": "comment-on-design / reply-to-comment / list-comments",
    "cli": null,
    "ui": "editor comment pins"
   },
   "check": "list-comments returns the posted comment thread with the new reply",
   "source": "https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-15",
   "group": "Sharing",
   "capability": "Create a custom short link to share a design",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "resolve-shortlink",
    "cli": null,
    "ui": "editor Share > Link settings"
   },
   "check": "resolve-shortlink resolves the custom short URL back to the design URL",
   "source": "https://www.canva.com/en_au/help/create-and-manage-short-links/#custom-short-links--for-pro--business--enterprise-"
  },
  {
   "id": "cap-16",
   "group": "Backgrounds",
   "capability": "Remove the background of an image",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/pro/background-remover"
   },
   "check": "edited image element shows transparent background in exported PNG",
   "source": "https://www.canva.com/pro/background-remover/"
  },
  {
   "id": "cap-17",
   "group": "Video editing",
   "capability": "Trim, split, or merge video clips",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/video-trimmer"
   },
   "check": "design timeline shows clip with reduced duration/split segments after edit",
   "source": "https://www.canva.com/features/video-trimmer/; https://www.canva.com/features/merge-videos/"
  },
  {
   "id": "cap-18",
   "group": "Captions",
   "capability": "Auto-generate captions/subtitles for a video",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/auto-caption"
   },
   "check": "video design shows caption text track synced to audio",
   "source": "https://www.canva.com/features/auto-caption/"
  },
  {
   "id": "cap-19",
   "group": "PDF",
   "capability": "Edit and convert a PDF into an editable design",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "import-design-from-url",
    "cli": null,
    "ui": "canva.com/pdf-editor"
   },
   "check": "get-design shows a new design created from the imported PDF content",
   "source": "https://www.canva.com/pdf-editor/"
  },
  {
   "id": "cap-20",
   "group": "Presentations",
   "capability": "Record/present a design with presenter notes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "get-presenter-notes",
    "cli": null,
    "ui": "editor Present mode"
   },
   "check": "get-presenter-notes returns the notes text saved per page",
   "source": "https://www.canva.dev/docs/apps/mcp/tools/"
  },
  {
   "id": "cap-21",
   "group": "Apps/Automation",
   "capability": "Build and install an app/integration inside Canva (Apps SDK)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "canva-cli",
    "ui": "editor Apps panel"
   },
   "check": "installed app appears in editor's Apps panel and can insert an app element",
   "source": "https://www.canva.dev/docs/apps/apps-inside-canva.md; https://www.canva.dev/docs/apps/canva-cli/"
  },
  {
   "id": "cap-22",
   "group": "Voice/Audio",
   "capability": "Generate AI voiceover or text-to-speech audio",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/text-to-speech"
   },
   "check": "audio track added to design plays generated speech matching input text",
   "source": "https://www.canva.com/features/text-to-speech/; https://www.canva.com/features/ai-voice-generator/"
  },
  {
   "id": "cap-23",
   "group": "AI apps",
   "capability": "Build a no-code interactive web app/page with Canva Code",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/ai/code"
   },
   "check": "generated Canva Code project is viewable/published as a live interactive page",
   "source": "https://www.canva.com/ai/code"
  },
  {
   "id": "cap-24",
   "group": "Ads",
   "capability": "Auto-generate ad creatives from a website URL (Canva Grow)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/grow"
   },
   "check": "Canva Grow project shows generated ad designs pulling brand visuals from the submitted URL",
   "source": "https://www.canva.com/grow/"
  },
  {
   "id": "cap-26",
   "group": "Offline",
   "capability": "Work on a design offline and sync when reconnected",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "desktop app Canva Offline"
   },
   "check": "offline edits appear in the design version history once connectivity resumes",
   "source": "https://www.canva.com/pro/ (Canva Offline section)"
  },
  {
   "id": "cap-27",
   "group": "Image editing",
   "capability": "Enhance/upscale image quality with AI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/image-enhancer"
   },
   "check": "exported image resolution/sharpness increased versus the original upload",
   "source": "https://www.canva.com/features/image-enhancer/"
  },
  {
   "id": "cap-28",
   "group": "Capabilities API",
   "capability": "Check which premium capabilities a user's plan unlocks",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/users/me/capabilities",
    "mcp": null,
    "cli": null,
    "ui": "account plan settings"
   },
   "check": "GET /v1/users/me/capabilities lists capability flags (e.g. resize, autofill) matching the account's plan",
   "source": "https://www.canva.dev/docs/apps/rest-apis/capabilities.md"
  },
  {
   "id": "cap-29",
   "group": "Teams",
   "capability": "Manage teams, groups, and member roles",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team settings"
   },
   "check": "team admin page shows the added member with assigned role",
   "source": "https://www.canva.dev/docs/apps/platform-concepts-teams-groups-and-users.md"
  },
  {
   "id": "cap-30",
   "group": "Multi-brand",
   "capability": "Manage multiple separate brands (up to 5+) within one account",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "list-brand-kits",
    "cli": null,
    "ui": "Brand Kit switcher"
   },
   "check": "list-brand-kits returns multiple distinct brand kit entries for the account",
   "source": "https://www.canva.com/pro/brand-kit/"
  },
  {
   "id": "cap-31",
   "group": "OAuth integrations",
   "capability": "Connect third-party accounts via OAuth for publishing/import",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "app authentication flow"
   },
   "check": "connected-accounts list shows the linked external provider after OAuth callback",
   "source": "https://www.canva.dev/docs/apps/authenticating-users/oauth.md"
  },
  {
   "id": "cap-32",
   "group": "Third-party app marketplace",
   "capability": "Install third-party apps from the Canva Apps marketplace",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "editor Apps panel / App directory"
   },
   "check": "installed third-party app element is insertable into the design canvas",
   "source": "https://www.canva.dev/docs/apps/apps-inside-canva.md"
  },
  {
   "id": "cap-33",
   "group": "Branding",
   "capability": "Apply watermarks to exported images/videos",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "canva.com/features/watermark-video"
   },
   "check": "exported file shows the applied watermark overlay",
   "source": "https://www.canva.com/features/watermark-video/; https://www.canva.com/features/watermark-photos/"
  },
  {
   "id": "cap-34",
   "group": "Content moderation",
   "capability": "Suspend/restrict an app's access when policy violations occur",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Developer Portal app status"
   },
   "check": "app status in Developer Portal shows 'suspended' and app calls return a suspension error",
   "source": "https://www.canva.dev/docs/apps/suspension.md"
  }
 ],
 "attempts": [
  {
   "t": "01:55",
   "cap": "discovery",
   "capability": "Docs and discovery",
   "task": "Read www.canva.com home and robots.txt",
   "route": "none",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "robots.txt 200: User-agent * group allows /, /join/* and /*/login/verify-email disallowed; GPTBot/ClaudeBot disallowed / except /create, /features, /help, /developers; no Content-Usage or Content-signal lines",
   "notes": "docs_pass found the marketing site unreachable (bot check); developer docs live on www.canva.dev"
  },
  {
   "t": "01:55",
   "cap": "discovery",
   "capability": "Docs and discovery",
   "task": "Read developer docs on canva.dev",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "canva.dev pages 200 (rest-apis, authentication, mcp, mcp/tools, create-design, exports). Accept: text/markdown -> content-type text/markdown; vary: Origin, Accept. .md URLs and /docs/llms.txt are disallowed for all user agents by canva.dev robots.txt (Disallow: /*/*.md, /*/llms.txt) so not opened. OpenAPI 3.0.0 at https://www.canva.dev/sources/connect/api/latest/api.yml (info.version 2024-06-18, 60 paths, 67 operationIds, server https://api.canva.com/rest)",
   "notes": "Docs pages each point to llms.txt that robots.txt forbids fetching"
  },
  {
   "t": "01:55",
   "cap": "discovery",
   "capability": "MCP discovery",
   "task": "POST server/discover to https://mcp.canva.com/mcp",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "401 application/json {error: invalid_token}; WWW-Authenticate: Bearer resource_metadata=https://mcp.canva.com/.well-known/oauth-protected-resource/mcp. PRM 200 (16 scopes). AS metadata: authorization_code, refresh_token, jwt-bearer; registration_endpoint (DCR) and client_id_metadata_document_supported: true (CIMD); PKCE plain and S256; id-jag grant profile",
   "notes": "auth-required before discover; retry with credentials after sign-in"
  },
  {
   "t": "01:55",
   "cap": "discovery",
   "capability": "Cards and preferences",
   "task": "Probe server card, AI catalog, A2A card, aipref",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "mcp.canva.com/mcp/server-card 401; /.well-known/ai-catalog.json 404 on mcp., www., canva.dev; /.well-known/agent-card.json 404; agent.json 404; mcp/server-card.json 404; no Content-Usage header on canva.dev; www.canva.com/llms.txt 403 (Cloudflare)"
  },
  {
   "t": "03:23",
   "cap": "signup",
   "way": "email_code",
   "capability": "Sign up",
   "task": "Open https://www.canva.com/signup in the browser to sign up with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "cause": "check",
   "evidence": "Page title 'Just a moment...', Cloudflare Turnstile interstitial 'Verifying...' ('We'll have you designing again soon'), did not clear after ~45 s (RayID a4b4b48dfdaad343).",
   "notes": "Cloudflare interstitial on every www.canva.com page"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "oauth_consent",
   "capability": "MCP OAuth sign-in",
   "task": "DCR-register an MCP client at mcp.canva.com/register and open /authorize in the browser",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "cause": "check",
   "evidence": "POST https://mcp.canva.com/register -> 201 client_id issued (headless). GET https://mcp.canva.com/authorize -> 302 to https://www.canva.com/api/oauth/authorize?client_id=OC-AZb1vOWcedZR... (requests all 16 scopes regardless of the scope asked); that page is the same Cloudflare 'Just a moment...' interstitial in the browser, did not clear",
   "notes": "CIMD advertised (client_id_metadata_document_supported: true) but we host no client metadata document; DCR used. Consent also needs an existing Canva account, which the sign-up wall prevents"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "device_login",
   "capability": "CLI login",
   "task": "canva login (CLI @canva/cli 2.14.1)",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "cause": "check",
   "evidence": "--mode manual: 'AUTHENTICATION_CANCELLED: Logging in can't prompt for a confirmation code when not running interactively'; --mode callback prints https://www.canva.com/api/oauth/authorize?... (PKCE, redirect 127.0.0.1:3030) -> same Cloudflare interstitial; no device flow (AS metadata lists no device_authorization_endpoint)",
   "notes": "Needs an existing account; browser consent page behind Cloudflare"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "keyless",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No documented no-account route: every REST and MCP call needs an OAuth token (api.canva.com/rest/v1/users/me 401, mcp 401)",
   "capability": "Sign up",
   "evidence": "No documented no-account route: every REST and MCP call needs an OAuth token (api.canva.com/rest/v1/users/me 401, mcp 401)"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "local",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No local edition",
   "capability": "Sign up",
   "evidence": "No local edition"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "claimable",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No claimable resources documented",
   "capability": "Sign up",
   "evidence": "No claimable resources documented"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "pay_per_call",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "pay_tx.json: no 402 on Canva's endpoints; nothing paid",
   "capability": "Sign up",
   "evidence": "pay_tx.json: no 402 on Canva's endpoints; nothing paid"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "api_signup",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No sign-up API documented; REST APIs need a Developer Portal app made in a Canva account",
   "capability": "Sign up",
   "evidence": "No sign-up API documented; REST APIs need a Developer Portal app made in a Canva account"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "authmd",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No /auth.md: canva.com/auth.md 403 (Cloudflare), no agent_auth block in mcp.canva.com AS metadata",
   "capability": "Sign up",
   "evidence": "No /auth.md: canva.com/auth.md 403 (Cloudflare), no agent_auth block in mcp.canva.com AS metadata"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "sso_agent",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "No Sign in with AgentID found (sign-in page unreachable)",
   "capability": "Sign up",
   "evidence": "No Sign in with AgentID found (sign-in page unreachable)"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "email_password",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "Same www.canva.com/signup page as email_code: Cloudflare interstitial before any form",
   "capability": "Sign up",
   "evidence": "Same www.canva.com/signup page as email_code: Cloudflare interstitial before any form"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "magic_link",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "Same www.canva.com/signup page: Cloudflare interstitial before any form",
   "capability": "Sign up",
   "evidence": "Same www.canva.com/signup page: Cloudflare interstitial before any form"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "sso_github",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "Whether Canva offers GitHub is unknown: the sign-in page with its buttons never loaded (Cloudflare interstitial); our GitHub sign-in would not change that",
   "capability": "Sign up",
   "evidence": "Whether Canva offers GitHub is unknown: the sign-in page with its buttons never loaded (Cloudflare interstitial); our GitHub sign-in would not change that"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "sso_google",
   "result": "skipped",
   "not_tried": "same_as",
   "notes": "The sign-in page with a Google button never loaded (Cloudflare interstitial)",
   "capability": "Sign up",
   "evidence": "The sign-in page with a Google button never loaded (Cloudflare interstitial)"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "stripe_projects",
   "result": "skipped",
   "not_tried": "no_kit",
   "notes": "Canva not in the Stripe Projects catalog (pay_probe registries empty)",
   "capability": "Sign up",
   "evidence": "Canva not in the Stripe Projects catalog (pay_probe registries empty)"
  },
  {
   "t": "04:59",
   "cap": "signup",
   "way": "id_assertion",
   "result": "skipped",
   "not_tried": "assisted_only",
   "notes": "AS metadata lists jwt-bearer grant and id-jag profile: needs an enterprise IdP set up by a person",
   "capability": "Sign up",
   "evidence": "AS metadata lists jwt-bearer grant and id-jag profile: needs an enterprise IdP set up by a person"
  },
  {
   "t": "05:26",
   "cap": "pay",
   "capability": "Pay step public probes",
   "task": "402 challenges on API paths, OpenAPI x-payment-info, registries",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /rest/v1/designs, POST /rest/v1/exports, GET /rest/v1/users/me/capabilities unauthenticated -> 401 application/json {code: invalid_access_token, message: 'Access token is missing'}; no 402, no PAYMENT-REQUIRED, no WWW-Authenticate Payment/L402. OpenAPI has no x402/x-payment-info. pay_probe.json: no 402 on canva.com/api.canva.com, x402./mpp./agents. hosts do not exist, not on mpp.dev, Bazaar or Stripe Projects; pay_tx.json: nothing paid ('no 402 on the product's own endpoint')"
  },
  {
   "t": "05:26",
   "cap": "pay",
   "step": "checkout",
   "capability": "Walk to the last click",
   "task": "Open the pricing page and the checkout for the cheapest paid plan",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://www.canva.com/pricing/ 403 cf-mitigated: challenge; without an account (sign-up walled by the same Cloudflare interstitial) the in-app checkout could not be opened",
   "notes": "Checkout never reached; processor unknown"
  },
  {
   "t": "05:26",
   "cap": "pay",
   "capability": "Trial card requirement",
   "task": "Does a trial ask for a card",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Pricing and trial pages on www.canva.com behind Cloudflare challenge; canva.dev docs say only 'Pro and above' per MCP tool; card requirement unknown"
  },
  {
   "t": "05:26",
   "cap": "credentials",
   "key": "create",
   "capability": "Scoped API key headless",
   "task": "Create a token through a documented API/CLI",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "cause": "check",
   "evidence": "Canva has no API keys: REST APIs and MCP use OAuth 2.0 authorization code + PKCE with consent at https://www.canva.com/api/oauth/authorize (docs: canva.dev/docs/apps/rest-apis/authentication/); REST needs a client id/secret from the Developer Portal (www.canva.com/developers/apps). Both pages are behind the Cloudflare interstitial and need an account"
  },
  {
   "t": "05:26",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /rest/v1/users/me without credentials",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "401 {code: invalid_access_token, message: 'Access token is missing'}; no account, so no token"
  },
  {
   "t": "05:49",
   "cap": "cap-28",
   "capability": "Check plan capabilities",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "GET /v1/users/me/capabilities documented in OpenAPI (operationId getUserCapabilities, scope profile:read, x-rate-limit-per-client-user 10); unauthenticated call 401 {code: invalid_access_token}",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-29",
   "capability": "Manage teams/roles",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No REST or MCP operation for team membership in OpenAPI (60 paths) or MCP tools page; UI only",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-30",
   "capability": "Multiple brands",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "MCP tool list-brand-kits documented, 'Pro and above' (canva.dev/docs/apps/mcp/tools/); no REST path",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-31",
   "capability": "Connect third-party accounts via OAuth",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Apps SDK OAuth for app developers; no REST/MCP operation listing connected accounts",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-32",
   "capability": "Install marketplace apps",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No REST/MCP operation; editor UI only",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-33",
   "capability": "Watermarks",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No REST/MCP operation; editor UI only",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:49",
   "cap": "cap-34",
   "capability": "App suspension",
   "task": "Check against the docs (no account: sign-up walled)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Developer Portal only; no API",
   "notes": "Checked in docs only; no account to call it on (Cloudflare interstitial on sign-up)"
  },
  {
   "t": "05:58",
   "cap": "cap-01",
   "capability": "Create a new design from scratch or a prompt",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "api",
   "claim": "POST /v1/designs",
   "doc_url": "https://www.canva.dev/sources/connect/api/latest/api.yml",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Create a new design from scratch or a prompt",
   "task": "POST /v1/designs",
   "route": "api",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "mcp",
   "claim": "generate-design",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Create a new design from scratch or a prompt",
   "task": "generate-design",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-02",
   "capability": "Edit elements (text, images, shapes, tables) in a design",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "api",
   "claim": "POST /v1/designs/{designId}/edit (editing transactions)",
   "doc_url": "https://www.canva.dev/sources/connect/api/latest/api.yml",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Edit elements (text, images, shapes, tables) in a design",
   "task": "POST /v1/designs/{designId}/edit (editing transactions)",
   "route": "api",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "mcp",
   "claim": "perform-editing-operations",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Edit elements (text, images, shapes, tables) in a design",
   "task": "perform-editing-operations",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-03",
   "capability": "Start a design from a template",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "mcp",
   "claim": "search-brand-templates / create-design-from-brand-template",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Start a design from a template",
   "task": "search-brand-templates / create-design-from-brand-template",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-04",
   "capability": "Generate images from a text prompt (Text to Image)",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "cap": "cap-05",
   "capability": "Generate video from text/script (AI Video Generator)",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "cap": "cap-06",
   "capability": "Export/download a design in a chosen format (PDF, PNG, JPG, PPTX, MP4, etc.)",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "api",
   "claim": "POST /v1/exports",
   "doc_url": "https://www.canva.dev/sources/connect/api/latest/api.yml",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Export/download a design in a chosen format (PDF, PNG, JPG, PPTX, MP4, etc.)",
   "task": "POST /v1/exports",
   "route": "api",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "mcp",
   "claim": "export-design",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Export/download a design in a chosen format (PDF, PNG, JPG, PPTX, MP4, etc.)",
   "task": "export-design",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-07",
   "capability": "Set up a Brand Kit (logos, colors, fonts, imagery, guidelines)",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-07",
   "surface": "mcp",
   "claim": "list-brand-kits",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Set up a Brand Kit (logos, colors, fonts, imagery, guidelines)",
   "task": "list-brand-kits",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-08",
   "capability": "Schedule and publish social media posts across platforms",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "cap": "cap-09",
   "capability": "Resize a design to a different format/platform (Magic Switch)",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-09",
   "surface": "api",
   "claim": "POST /v1/resizes",
   "doc_url": "https://www.canva.dev/sources/connect/api/latest/api.yml",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Resize a design to a different format/platform (Magic Switch)",
   "task": "POST /v1/resizes",
   "route": "api",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-09",
   "surface": "mcp",
   "claim": "resize-design",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Resize a design to a different format/platform (Magic Switch)",
   "task": "resize-design",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "cap": "cap-10",
   "capability": "Autofill a Brand Template with data to bulk-generate on-brand designs",
   "task": "Run the core chain",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "way": "email_code",
   "evidence": "No account: sign-up, login and OAuth consent on www.canva.com stop at a Cloudflare interstitial that never clears; REST and MCP need an OAuth token (401 without)",
   "notes": "behind the door"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-10",
   "surface": "api",
   "claim": "POST /v1/autofills",
   "doc_url": "https://www.canva.dev/sources/connect/api/latest/api.yml",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Autofill a Brand Template with data to bulk-generate on-brand designs",
   "task": "POST /v1/autofills",
   "route": "api",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "05:58",
   "kind": "claim",
   "cap": "cap-10",
   "surface": "mcp",
   "claim": "autofill-design",
   "doc_url": "https://www.canva.dev/docs/apps/mcp/tools/",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)",
   "capability": "Docs claim: Autofill a Brand Template with data to bulk-generate on-brand designs",
   "task": "autofill-design",
   "route": "mcp",
   "evidence": "Not callable without an OAuth token; account unobtainable (Cloudflare interstitial)"
  },
  {
   "t": "06:34",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Cancel what the drive started",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "notes": "Nothing started: no account, no plan, no trial"
  },
  {
   "t": "06:34",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete what the drive made",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "left": "nothing_made",
   "evidence": "No Canva account was made. One OAuth client registration (DCR) stays at mcp.canva.com: DELETE https://mcp.canva.com/register/FEfFRGq0LP3Mn6Tt -> 404 text/plain; the 201 gave no registration_access_token, so there is no documented way to remove it",
   "notes": "Client registration only, no user data"
  }
 ],
 "stale": false,
 "icon": "/logos/canva.png",
 "monitored": false,
 "verdict": null,
 "page": "https://agentdrives.com/tools/canva?via=api"
}