Canva · Rate Limits

Canva Rate Limits

Canva publishes a numeric per-operation rate limit on every Connect REST API reference page, expressed as requests per minute. For public or private apps (OAuth authorization code flow) the limit is counted "for each user of your app"; since 2026-11-06 service apps (OAuth client credentials flow) get a separate per-app limit, shown in a second table row. The design export job additionally carries app, document and user throttles over 5-minute and 24-hour windows. Exhaustion returns HTTP 429 with code `too_many_requests`. No rate-limit response headers (X-RateLimit-*, RateLimit-*, Retry-After) are documented. This replaces the 2026-08-13 file, which recorded limit_count 0 because it read only the guide pages and not the per-operation reference.

Canva Rate Limits is the rate-limit profile for Canva on the APIs.io network — every limit transcribed verbatim from the provider’s own documentation on 2026-11-11.

It captures 88 rate-limit definitions, including getDesignAnalyticsLinks (public-or-private-app) — 100 requests per minute for each user of your app; getDesignAnalyticsPageViews (public-or-private-app) — 100 requests per minute for each user of your app; getDesignAnalyticsViewers (public-or-private-app) — 100 requests per minute for each user of your app.

Limit state is signalled in the published, x_ratelimit, ratelimit_draft_headers, and retry_after response headers, and an exhausted limit returns HTTP 429.

The profile also includes 2 backoff/retry policies defined and response codes documented for throttled, error_code, example_body, and example_source.

Tagged areas include Apps, Automation, Design, Templates, and Rate Limiting.

88 Limits Exhausted: HTTP 429 publishedx_ratelimitratelimit_draft_headersretry_after
Transcribed from the provider's documentation on 2026-11-11 — www.canva.dev/docs/apps/rest-apis/reference/.
View Source
AppsAutomationDesignTemplatesRate Limiting

Limits

getDesignAnalyticsLinks (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/analytics/links
· per 1 minute
100
getDesignAnalyticsPageViews (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
POST /v1/designs/{designId}/analytics/page-views
· per 1 minute
100
getDesignAnalyticsViewers (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/analytics/viewers
· per 1 minute
100
getDesignAnalyticsViewsOverTime (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/analytics/views-over-time
· per 1 minute
100
getDesignAnalytics (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/analytics
· per 1 minute
100
CreateAssetUploadJob (public-or-private-app) per-user-per-app
30 requests per minute for each user of your app
POST /v1/asset-uploads
· per 1 minute
30
CreateAssetUploadJob (service-app) per-app
100 requests per minute for your app
POST /v1/asset-uploads
· per 1 minute
100
createUrlAssetUploadJob (public-or-private-app) per-user-per-app
30 requests per minute for each user of your app
POST /v1/url-asset-uploads
· per 1 minute
30
createUrlAssetUploadJob (service-app) per-app
100 requests per minute for your app
POST /v1/url-asset-uploads
· per 1 minute
100
deleteAsset (public-or-private-app) per-user-per-app
30 requests per minute for each user of your app
DELETE /v1/assets/{assetId}
· per 1 minute
30
GetAssetUploadJob (public-or-private-app) per-user-per-app
180 requests per minute for each user of your app
GET /v1/asset-uploads/{jobId}
· per 1 minute
180
GetAssetUploadJob (service-app) per-app
100 requests per minute for your app
GET /v1/asset-uploads/{jobId}
· per 1 minute
100
getAsset (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/assets/{assetId}
· per 1 minute
100
getUrlAssetUploadJob (public-or-private-app) per-user-per-app
180 requests per minute for each user of your app
GET /v1/url-asset-uploads/{jobId}
· per 1 minute
180
getUrlAssetUploadJob (service-app) per-app
100 requests per minute for your app
GET /v1/url-asset-uploads/{jobId}
· per 1 minute
100
updateAsset (public-or-private-app) per-user-per-app
30 requests per minute for each user of your app
PATCH /v1/assets/{assetId}
· per 1 minute
30
createDesignAutofillJob (public-or-private-app) per-user-per-app
60 requests per minute for each user of your app
POST /v1/autofills
· per 1 minute
60
createDesignAutofillJob (service-app) per-app
100 requests per minute for your app
POST /v1/autofills
· per 1 minute
100
getDesignAutofillJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/autofills/{jobId}
· per 1 minute
120
getDesignAutofillJob (service-app) per-app
100 requests per minute for your app
GET /v1/autofills/{jobId}
· per 1 minute
100
getBrandTemplateDataset (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/brand-templates/{brandTemplateId}/dataset
· per 1 minute
100
getBrandTemplateDataset (service-app) per-app
100 requests per minute for your app
GET /v1/brand-templates/{brandTemplateId}/dataset
· per 1 minute
100
getBrandTemplate (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/brand-templates/{brandTemplateId}
· per 1 minute
100
getBrandTemplate (service-app) per-app
100 requests per minute for your app
GET /v1/brand-templates/{brandTemplateId}
· per 1 minute
100
listBrandTemplates (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/brand-templates
· per 1 minute
100
listBrandTemplates (service-app) per-app
100 requests per minute for your app
GET /v1/brand-templates
· per 1 minute
100
publishBrandTemplate (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/brand-templates
· per 1 minute
20
createComment (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/comments
· per 1 minute
20
createReply (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/designs/{designId}/comments/{threadId}/replies
· per 1 minute
20
createThread (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
POST /v1/designs/{designId}/comments
· per 1 minute
100
getReply (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/comments/{threadId}/replies/{replyId}
· per 1 minute
100
getThread (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/comments/{threadId}
· per 1 minute
100
listReplies (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/comments/{threadId}/replies
· per 1 minute
100
createDesignImportJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/imports
· per 1 minute
20
createDesignImportJob (service-app) per-app
100 requests per minute for your app
POST /v1/imports
· per 1 minute
100
createImageToDesignImportJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/image-to-design-imports
· per 1 minute
20
createImageToDesignImportJob (service-app) per-app
100 requests per minute for your app
POST /v1/image-to-design-imports
· per 1 minute
100
createUrlImportJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/url-imports
· per 1 minute
20
createUrlImportJob (service-app) per-app
100 requests per minute for your app
POST /v1/url-imports
· per 1 minute
100
getDesignImportJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/imports/{jobId}
· per 1 minute
120
getDesignImportJob (service-app) per-app
100 requests per minute for your app
GET /v1/imports/{jobId}
· per 1 minute
100
getImageToDesignImportJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/image-to-design-imports/{jobId}
· per 1 minute
120
getImageToDesignImportJob (service-app) per-app
100 requests per minute for your app
GET /v1/image-to-design-imports/{jobId}
· per 1 minute
100
getUrlImportJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/url-imports/{jobId}
· per 1 minute
120
getUrlImportJob (service-app) per-app
100 requests per minute for your app
GET /v1/url-imports/{jobId}
· per 1 minute
100
createDesign (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/designs
· per 1 minute
20
getDesignDataset (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/dataset
· per 1 minute
100
getDesignDataset (service-app) per-app
100 requests per minute for your app
GET /v1/designs/{designId}/dataset
· per 1 minute
100
getDesignExportFormats (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/export-formats
· per 1 minute
100
getDesignExportFormats (service-app) per-app
100 requests per minute for your app
GET /v1/designs/{designId}/export-formats
· per 1 minute
100
getDesignPages (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}/pages
· per 1 minute
100
getDesign (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs/{designId}
· per 1 minute
100
listDesigns (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/designs
· per 1 minute
100
createDesignExportJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/exports
· per 1 minute
20
createDesignExportJob (service-app) per-app
100 requests per minute for your app
POST /v1/exports
· per 1 minute
100
createDesignExportJob app throttle app
Each app can export a maximum of 750 times per 5-minute window, and 5,000 times per 24-hour window.
POST /v1/exports
createDesignExportJob document throttle document
Each document can be exported a maximum of 75 times per 5-minute window.
POST /v1/exports
createDesignExportJob user throttle user
Each user can export a maximum of 75 times per 5-minute window, and 500 times per 24-hour window.
POST /v1/exports
getDesignExportJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/exports/{exportId}
· per 1 minute
120
getDesignExportJob (service-app) per-app
100 requests per minute for your app
GET /v1/exports/{exportId}
· per 1 minute
100
createFolder (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/folders
· per 1 minute
20
deleteFolder (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
DELETE /v1/folders/{folderId}
· per 1 minute
20
getFolder (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/folders/{folderId}
· per 1 minute
100
listFolderItems (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/folders/{folderId}/items
· per 1 minute
100
moveFolderItem (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
POST /v1/folders/move
· per 1 minute
100
moveFolderItem (service-app) per-app
100 requests per minute for your app
POST /v1/folders/move
· per 1 minute
100
updateFolder (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
PATCH /v1/folders/{folderId}
· per 1 minute
20
createDesignGenerationJobV2 (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/generations
· per 1 minute
20
createDesignGenerationJobV2 (service-app) per-app
100 requests per minute for your app
POST /v1/generations
· per 1 minute
100
createImageGenerationJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/image-generations
· per 1 minute
20
createImageGenerationJob (service-app) per-app
1000 requests per minute for your app
POST /v1/image-generations
· per 1 minute
1000
getDesignGenerationJobV2 (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/generations/{jobId}
· per 1 minute
120
getDesignGenerationJobV2 (service-app) per-app
100 requests per minute for your app
GET /v1/generations/{jobId}
· per 1 minute
100
getImageGenerationJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/image-generations/{jobId}
· per 1 minute
120
getImageGenerationJob (service-app) per-app
1000 requests per minute for your app
GET /v1/image-generations/{jobId}
· per 1 minute
1000
createImageTransformationJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/image-transformations
· per 1 minute
20
getImageTransformationJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/image-transformations/{jobId}
· per 1 minute
120
createDesignMergeJob (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
POST /v1/merges
· per 1 minute
100
createDesignMergeJob (service-app) per-app
100 requests per minute for your app
POST /v1/merges
· per 1 minute
100
getDesignMergeJob (public-or-private-app) per-user-per-app
100 requests per minute for each user of your app
GET /v1/merges/{jobId}
· per 1 minute
100
getDesignMergeJob (service-app) per-app
100 requests per minute for your app
GET /v1/merges/{jobId}
· per 1 minute
100
createDesignResizeJob (public-or-private-app) per-user-per-app
20 requests per minute for each user of your app
POST /v1/resizes
· per 1 minute
20
createDesignResizeJob (service-app) per-app
100 requests per minute for your app
POST /v1/resizes
· per 1 minute
100
getDesignResizeJob (public-or-private-app) per-user-per-app
120 requests per minute for each user of your app
GET /v1/resizes/{jobId}
· per 1 minute
120
getDesignResizeJob (service-app) per-app
100 requests per minute for your app
GET /v1/resizes/{jobId}
· per 1 minute
100
getUserCapabilities (public-or-private-app) per-user-per-app
10 requests per minute for each user of your app
GET /v1/users/me/capabilities
· per 1 minute
10
usersMe (public-or-private-app) per-user-per-app
10 requests per minute for each user of your app
GET /v1/users/me
· per 1 minute
10
getUserProfile (public-or-private-app) per-user-per-app
10 requests per minute for each user of your app
GET /v1/users/me/profile
· per 1 minute
10

Policies

Backoff strategy
Canva explicitly recommends exponential backoff, both for 429 handling and for polling async job endpoints — poll fast enough for good UX, slowly enough to avoid the limit.
Caching
Canva's own troubleshooting guidance for `too_many_requests` is to review request patterns and cache responses to reduce call volume.

Work with this as data

Every rate limit here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for rate limits

4 MCP tools reach this
  • find_rate_limitsBrowse and filter every rate limit in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This rate limit
curl "https://apis.io/api/v1/rate-limits/canva-rate-limits"
All rate limits
curl "https://apis.io/api/v1/rate-limits?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.