Appearance
Content Import Pipeline
Bulk import content into Canva designs using the Connect API.
Overview
The Connect API's asset upload and design import endpoints enable programmatic content ingestion.
Asset Upload Flow
javascript
// 1. Create upload job
const uploadJob = await fetch('https://api.canva.com/rest/v1/assets/upload', {
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'my-asset.jpg',
asset_type: 'image',
}),
});
const { job_id } = await uploadJob.json();
// 2. Upload the file to the provided URL
// (Canva returns a pre-signed URL for direct upload)
// 3. Poll for completion
let asset;
while (!asset) {
await sleep(1000);
const statusRes = await fetch(
`https://api.canva.com/rest/v1/assets/upload/${job_id}`,
{ headers: { 'Authorization': `Bearer ${accessToken}` } }
);
const status = await statusRes.json();
if (status.status === 'success') {
asset = status.asset;
}
}
console.log('Asset ID:', asset.id);Design Import Flow
Import an existing file (PDF, PPTX, etc.) as a Canva design:
javascript
const importJob = await fetch('https://api.canva.com/rest/v1/designs/import', {
method: 'POST',
headers: { 'Authorization': `Bearer ${accessToken}` },
// multipart form with the file
});
// Poll until complete, then use design_idBatch Processing
For large volumes, implement a queue:
- Upload assets in parallel (up to 10 concurrent)
- Track job IDs
- Poll in batches
- Handle failures with retry logic
- Log all operations for auditing