Sapilon becomes publicly available on 1 December 2026: 42 days to go. The core goes open source the same day →

Canva integration

In short

Create designs, export them and fill brand templates. Connect it on the Integrations page; your app then calls Canva through Sapilon without ever holding a Canva credential.

Lets your app list and create Canva designs, export them as PDF or images, upload assets and — on Canva Enterprise — fill brand templates with data.

Connecting

On the Integrations page choose Connect on Canva, sign in to Canva and allow access. Under Advanced you can use your own Canva OAuth app instead of Sapilon’s.

You choose these permissions while connecting:

  • Read brand templates (Canva Enterprise)

  • Fill brand templates (Canva Enterprise)

  • Sapilon’s own Canva app is being registered. Until it is, Advanced → Bring your own OAuth app connects today.

What your app can do

Only these requests are available; anything else is refused.

  • GET /users/me
  • GET /users/me/profile
  • GET|POST /designs
  • GET /designs/*
  • POST /exports
  • GET /exports/*
  • POST /asset-uploads
  • GET /asset-uploads/*
  • GET /brand-templates
  • GET /brand-templates/*/dataset
  • POST /autofills
  • GET /autofills/*

How the agent uses it

Use integrations.request('canva', …); paths are relative to https://api.canva.com/rest/v1.

  • GET /users/me, GET /users/me/profile.
  • GET|POST /designs — list (query: { query: 'menu' }) or create. Example: { method: 'POST', path: '/designs', body: { design_type: { type: 'preset', name: 'presentation' }, title: 'Q3 review' } }. GET /designs/{id} — with its edit and view URLs.
  • POST /exports — body: { design_id, format: { type: 'pdf' } } starts a job; poll GET /exports/{jobId} until status is success, then download urls.
  • POST /asset-uploads — the file as the body, with header Asset-Upload-Metadata: {"name_base64":"…"}; poll GET /asset-uploads/{jobId}.
  • Canva Enterprise only: GET /brand-templates, GET /brand-templates/{id}/dataset (the fields to fill), POST /autofills (body: { brand_template_id, data: { title: { type: 'text', text: 'Hello' } } }), poll GET /autofills/{jobId}.

Deleting is not allowed.

More from Canva: https://www.canva.dev/docs/connect/

Last updated .

Was this page helpful?