| name | canva-rate-limits |
| description | Handle Canva Connect API rate limits with backoff, queuing, and monitoring.
Use when hitting 429 errors, implementing retry logic,
or optimizing API request throughput for Canva integrations.
Trigger with phrases like "canva rate limit", "canva throttling",
"canva 429", "canva retry", "canva backoff".
|
| allowed-tools | Read, Write, Edit |
| version | 1.5.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","design","canva"] |
| compatibility | Designed for Claude Code |
Canva Rate Limits
Overview
The Canva Connect API enforces per-user, per-endpoint rate limits. Each endpoint has different thresholds. A 429 response means you must wait before retrying.
Canva Connect API Rate Limits
| Endpoint | Method | Limit |
|---|
/v1/users/me | GET | 10 req/min |
/v1/users/me/profile | GET | 10 req/min |
/v1/designs | GET | 100 req/min |
/v1/designs | POST | 20 req/min |
/v1/designs/{id} | GET | 100 req/min |
/v1/exports | POST | 75 req/5min, 500/24hr per user |
/v1/exports (integration) | POST | 750 req/5min, 5000/24hr |
/v1/exports (per document) | POST | 75 req/5min |
/v1/asset-uploads | POST | 30 req/min |
/v1/autofills | POST | 60 req/min |
/v1/folders | POST | 20 req/min |
/v1/brand-templates | GET | 100 req/min |
All limits are per user of your integration unless noted otherwise.
Exponential Backoff with Jitter
async function canvaRequestWithBackoff<T>(
fn: () => Promise<T>,
config = { maxRetries: 5, baseDelayMs: 1000, maxDelayMs: 60000 }
): Promise<T> {
for ( attempt = ; attempt <= config.; attempt++) {
{
();
} (: ) {
(attempt === config.) error;
status = error. || error.?.;
(status !== && (status < || status >= )) error;
retryAfter = error.?.?.();
delay = retryAfter
? (retryAfter) *
: .(
config. * .(, attempt) + .() * ,
config.
);
.();
( (r, delay));
}
}
();
}