Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute Canva Connect API production deployment checklist and go-live procedures. Use when deploying Canva integrations to production, preparing for launch, or validating production readiness. Trigger with phrases like "canva production", "deploy canva", "canva go-live", "canva launch checklist".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 1% | 0% |
Complete checklist for deploying Canva Connect API integrations to production, covering OAuth configuration, security, error handling, monitoring, and Canva's integration review process.
api.canva.com/rest/v1/* endpointscanva-rate-limits)Retry-After headercanva-webhooks-events)bash#!/bin/bash # canva-prod-verify.sh echo "=== Canva Production Readiness ===" # 1. Verify API connectivity from production HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $CANVA_ACCESS_TOKEN" \ "https://api.canva.com/rest/v1/users/me") echo "[$([ $HTTP_CODE = 200 ] && echo 'PASS' || echo 'FAIL')] API connectivity: HTTP $HTTP_CODE" # 2. Test design creation DESIGN=$(curl -s -X POST "https://api.canva.com/rest/v1/designs" \ -H "Authorization: Bearer $CANVA_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"design_type":{"type":"custom","width":100,"height":100},"title":"Prod Test"}') DESIGN_ID=$(echo "$DESIGN" | python3 -c "import sys,json; print(json.load(sys.stdin)['design']['id'])" 2>/dev/null) echo "[$([ -n "$DESIGN_ID" ] && echo 'PASS' || echo 'FAIL')] Design creation: $DESIGN_ID" # 3. Test export if [ -n "$DESIGN_ID" ]; then EXPORT=$(curl -s -X POST "https://api.canva.com/rest/v1/exports" \ -H "Authorization: Bearer $CANVA_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"design_id\":\"$DESIGN_ID\",\"format\":{\"type\":\"png\"}}") EXPORT_ID=$(echo "$EXPORT" | python3 -c "import sys,json; print(json.load(sys.stdin)['job']['id'])" 2>/dev/null) echo "[$([ -n "$EXPORT_ID" ] && echo 'PASS' || echo 'FAIL')] Export job: $EXPORT_ID" fi echo "" echo "=== Done ==="
For public integrations (available to all Canva users), you must pass Canva's review:
Private integrations (your organization only) do not require review.
typescriptapp.get('/health', async (req, res) => { const start = Date.now(); let canvaStatus = 'unknown'; try { const me = await fetch('https://api.canva.com/rest/v1/users/me', { headers: { 'Authorization': `Bearer ${getServiceToken()}` }, signal: AbortSignal.timeout(5000), }); canvaStatus = me.ok ? 'healthy' : `error:${me.status}`; } catch { canvaStatus = 'unreachable'; } res.json({ status: canvaStatus === 'healthy' ? 'healthy' : 'degraded', services: { canva: { status: canvaStatus, latencyMs: Date.now() - start } }, timestamp: new Date().toISOString(), }); });
| Alert | Condition | Severity | |-------|-----------|----------| | Auth failures | 401 errors > 0 | P1 | | Rate limited | 429 errors > 5/min | P2 | | Export failures | license_required or internal_failure | P3 | | API unreachable | Connection timeout | P1 | | Token refresh fails | Refresh returns error | P1 |
| Issue | Cause | Solution | |-------|-------|----------| | Token refresh loop | Revoked refresh token | Re-authorize user | | Export stuck in_progress | Backend delay | Timeout after 120s, retry | | Webhook URL rejected | HTTP not HTTPS | Use HTTPS endpoint | | Review rejection | Using preview features | Remove preview-only features |
For version upgrades, see canva-upgrade-migration.
Other measured skills in the registry, with their headline benchmark lift.