An event-driven integration between AWS S3 and Canva โ so marketing teams stop manually uploading files and start focusing on what they actually love doing.
Large marketing teams manage thousands of approved assets in S3. This eliminates the manual middle step.
S3 PutObject fires EventBridge, which triggers Lambda, which calls Canva โ all without a human touching anything.
Amazon Bedrock generates business-context tags like brand_tier: premium and approved_for: social_media โ not just "beach" or "sunset".
Canva Webhooks push finished designs back to S3. The loop closes automatically โ from raw asset to published design and back.
Serverless, event-driven AWS infrastructure + Canva Connect API. Toggle between phases.
Backend REST API (API Gateway + Lambda) plus key Canva Connect API endpoints.
| Header | Value |
|---|---|
| Authorization | Bearer {access_token} |
| Asset-Upload-Metadata | JSON with name_base64 โ filename Base64-encodede.g. {"name_base64": "b2NlYW5fMS5wbmc="} |
| Content-Type | application/octet-stream |
{ "job": { "id": "ded634f4-650c-4a16-8317-06ae058731fd", "status": "in_progress" } }
# Poll every 3s until status == "success" (max 10 attempts) for attempt in range(10): time.sleep(3) res = canva_get(f"/v1/asset-uploads/{job_id}") status = res["job"]["status"] if status == "success": asset_id = res["job"]["asset"]["id"] break elif status == "failed": raise Exception("Upload failed")
{ "job": { "id": "ded634f4-650c-4a16-8317-06ae058731fd", "status": "success", "asset": { "id": "MAHDuGNfRwQ", "name": "snowy_mountain_3.jpg", "type": "image" ...: "..." } } }
{ "team_user": { "user_id": "oUgaASGNYnVze12572GURM", "team_id": "oBZGQiMnI_1xoCp&NSB2GQ" } }
| Parameter | Type | Required | Description |
|---|---|---|---|
| s3_bucket | string | required | Source S3 bucket name |
| s3_key | string | required | Object key (path to asset) |
| canva_folder_id | string | optional | Target Canva folder โ defaults to root |
| ai_tagging | boolean | optional | Enable Bedrock tagging before upload |
{ "job_id": "sync_a1b2c3d4", "status": "PROCESSING", "canva_upload_job_id": "CUJ_xxxxx", "ai_tags_generated": true }
{ "job_id": "sync_a1b2c3d4", "status": "COMPLETE", "canva_asset_id": "BABXy1234", "ai_tags": { "brand_tier": "premium", "campaign_type": "seasonal", "approved_for": ["social_media", "web"] } }
| Parameter | Type | Required | Description |
|---|---|---|---|
| status | string | optional | Filter: COMPLETE | PROCESSING | FAILED |
| limit | integer | optional | Max records. Default: 50 |
| next_token | string | optional | Pagination cursor |
{ "event_type": "DESIGN_PUBLISH", "design_id": "DAF1234abcd", "export_url": "https://export.canva.com/...", "timestamp": "2025-06-01T12:30:00Z" }
| Capability | Canva Smart Tags | Bedrock (planned) |
|---|---|---|
| Visual labels (beach, sunset) | โ Yes | โ Yes |
| Brand tier classification | โ | โ Custom schema |
| Campaign suitability tags | โ | โ Prompt-engineered |
| Pre-upload processing | โ Post-upload only | โ Runs before upload |
| Customisable schema | โ | โ Fully customisable |
Simulate the full pipeline without live AWS credentials โ watch the event trace as a sample.
Fill in the details and fire the pipeline.
Live event trace as it flows through AWS โ Canva.