agentsclimarketplace

Canva incident runbook

Skill ComeOnOliver/skillshub/skills/jeremylongshore/claude-code-plugins-plus-skills/canva-incident-runbook

🧠 The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.

Install
npx -y skills add ComeOnOliver/skillshub --skill canva-incident-runbook

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Execute Canva Connect API incident response with triage, mitigation, and postmortem. Use when responding to Canva-related outages, investigating API errors, or running post-incident reviews for Canva integration failures. Trigger with phrases like "canva incident", "canva outage", "canva down", "canva on-call", "canva emergency", "canva broken".

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.7 KB, as published. Nobody here has run it

Canva Incident Runbook

Overview

Rapid incident response for Canva Connect API integration failures. Covers triage, mitigation, escalation, and postmortem.

Quick Triage (First 5 Minutes)

#!/bin/bash
# canva-triage.sh β€” Run immediately when incident detected

echo "=== Canva Triage ==="

# 1. Is it Canva or us?
echo -n "Canva API: "
curl -s -o /dev/null -w "HTTP %{http_code} (%{time_total}s)\n" \
  -H "Authorization: Bearer $CANVA_ACCESS_TOKEN" \
  "https://api.canva.com/rest/v1/users/me"

# 2. Check our health endpoint
echo -n "Our health: "
curl -s -o /dev/null -w "HTTP %{http_code}\n" \
  "https://api.ourapp.com/health"

# 3. Error rate (if Prometheus available)
echo "Error rate (5min):"
curl -s "localhost:9090/api/v1/query?query=rate(canva_api_errors_total[5m])" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['result'])" 2>/dev/null \
  || echo "Prometheus not available"

# 4. Rate limit status
echo -n "Rate limit remaining: "
curl -sD - -o /dev/null -H "Authorization: Bearer $CANVA_ACCESS_TOKEN" \
  "https://api.canva.com/rest/v1/designs?limit=1" 2>&1 \
  | grep -i "x-ratelimit-remaining" || echo "unknown"

Decision Tree

API returning errors?
β”œβ”€β”€ YES β†’ What HTTP status?
β”‚   β”œβ”€β”€ 401 β†’ Token expired β†’ Refresh token, check rotation
β”‚   β”œβ”€β”€ 403 β†’ Scope issue β†’ Verify integration permissions
β”‚   β”œβ”€β”€ 429 β†’ Rate limited β†’ Enable backoff, check Retry-After
β”‚   β”œβ”€β”€ 5xx β†’ Canva outage β†’ Enable fallback, monitor status page
β”‚   └── Other β†’ Check request format against API docs
└── NO β†’ Is our integration healthy?
    β”œβ”€β”€ YES β†’ Likely resolved or intermittent β†’ Monitor
    └── NO β†’ Check our infra (pods, memory, DNS, TLS)

Severity Levels

LevelDefinitionResponse TimeExample
P1All design operations broken< 15 minAll API calls returning 5xx
P2Degraded β€” some operations fail< 1 hourExports failing, designs work
P3Minor β€” non-critical feature down< 4 hoursWebhooks delayed
P4No user impactNext business dayMonitoring gap

Immediate Mitigation by Error Type

401 β€” Token Expired / Revoked

# Check if token is valid
curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.canva.com/rest/v1/users/me | python3 -m json.tool

# If expired: refresh all affected users' tokens
# If revoked: users must re-authorize via OAuth flow

429 β€” Rate Limited

# Check how long to wait
curl -sD - -o /dev/null -H "Authorization: Bearer $TOKEN" \
  "https://api.canva.com/rest/v1/designs" 2>&1 \
  | grep -i "retry-after"

# Immediate: reduce request rate
# Enable queue-based rate limiting

5xx β€” Canva Service Error

# Check Canva status page (no official status.canva.com for API)
# Check Canva developer community for reported outages

# Enable graceful degradation
# Return cached data where possible
# Show "Design features temporarily unavailable" to users

Communication Templates

Internal (Slack)

P[1-4] INCIDENT: Canva Integration
Status: INVESTIGATING | MITIGATING | RESOLVED
Impact: [Describe user impact]
API Response: HTTP [status code]
Current action: [What you're doing]
Next update: [Time]
IC: @[name]

External (Status Page)

Canva Design Features β€” Degraded Performance

We are experiencing issues with our design integration.
Users may see delays or errors when creating/exporting designs.

We are actively working with our design platform provider to resolve this.

Last updated: [ISO 8601 timestamp]

Post-Incident

Evidence Collection

# Collect logs for the incident window
kubectl logs -l app=canva-integration --since=2h > incident-canva-logs.txt

# Export metrics
curl "localhost:9090/api/v1/query_range?query=canva_api_errors_total&start=$(date -d '2 hours ago' +%s)&end=$(date +%s)&step=60" > metrics.json

Postmortem Template

## Incident: Canva API [Error Type]
**Date:** YYYY-MM-DD HH:MM UTC
**Duration:** X hours Y minutes
**Severity:** P[1-4]

### Summary
[1-2 sentence description]

### Timeline (UTC)
- HH:MM β€” [First alert / error detected]
- HH:MM β€” [Investigation started]
- HH:MM β€” [Root cause identified]
- HH:MM β€” [Mitigation applied]
- HH:MM β€” [Confirmed resolved]

### Root Cause
[Was it Canva-side or our integration? Token issue? Rate limit? Code bug?]

### Impact
- Users affected: N
- Failed operations: N designs / N exports

### Action Items
- [ ] [Preventive measure] β€” Owner β€” Due date

Error Handling

IssueCauseSolution
Can't determine if Canva is downNo status page APITest with known-good token
Token refresh failsRevoked integrationRe-authorize user
All users affectedIntegration-level issueCheck client credentials
Single user affectedUser-level token issueRefresh that user's token

Resources

Next Steps

For data handling, see canva-data-handling.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.