openapi: 3.0.0 info: contact: name: Canva Developer Community url: https://community.canva.dev/ description: API for building integrations with Canva via a REST api license: name: ©2023 All Rights Reserved termsOfService: https://www.canva.com/trust/legal/ title: Canva Connect API version: 2024-06-18 servers: - description: Canva Connect API url: https://api.canva.com/rest tags: - description: Allow management of brands name: brands - name: app - name: asset - name: autofill - name: brand_template - name: comment - name: connect - name: design - name: design_import - name: export - name: folder - name: oauth - name: oidc - name: resize - name: user paths: /v1/apps/{appId}/jwks: get: description: |- Returns the Json Web Key Set (public keys) of an app. These keys are used to verify JWTs sent to app backends. operationId: getAppJwks parameters: - description: The app ID. explode: false in: path name: appId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetAppJwksResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response tags: - app /v1/assets/{assetId}: delete: description: |- You can delete an asset by specifying its `assetId`. This operation mirrors the behavior in the Canva UI. Deleting an item moves it to the trash. Deleting an asset doesn't remove it from designs that already use it. operationId: deleteAsset parameters: - description: The ID of the asset. explode: false in: path name: assetId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "204": description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:write tags: - asset x-rate-limit-per-client-user: 30 get: description: You can retrieve the metadata of an asset by specifying its `assetId`. operationId: getAsset parameters: - description: The ID of the asset. explode: false in: path name: assetId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetAssetResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:read tags: - asset x-rate-limit-per-client-user: 100 patch: description: |- You can update the name and tags of an asset by specifying its `assetId`. Updating the tags replaces all existing tags of the asset. operationId: updateAsset parameters: - description: The ID of the asset. explode: false in: path name: assetId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateAssetRequest' responses: "200": content: application/json: schema: $ref: '#/components/schemas/UpdateAssetResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:write tags: - asset x-rate-limit-per-client-user: 30 /v1/asset-uploads: post: description: |- Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to upload an asset to the user's content library. Supported file types for assets are listed in the [Assets API overview](https://www.canva.dev/docs/connect/api-reference/assets/). The request format for this endpoint is an `application/octet-stream` body of bytes. Attach information about the upload using an `Asset-Upload-Metadata` header. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of asset upload jobs created with this API using the [Get asset upload job API](https://www.canva.dev/docs/connect/api-reference/assets/get-asset-upload-job/). operationId: CreateAssetUploadJob parameters: - content: application/json: schema: $ref: '#/components/schemas/AssetUploadMetadata' in: header name: Asset-Upload-Metadata required: true requestBody: content: application/octet-stream: schema: format: binary type: string description: Binary of the asset to upload. required: true responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAssetUploadJobExample' success: $ref: '#/components/examples/SuccessAssetUploadJobExample' failed: $ref: '#/components/examples/FailedAssetUploadJobExample' schema: $ref: '#/components/schemas/CreateAssetUploadJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:write tags: - asset x-rate-limit-per-client-user: 30 /v1/asset-uploads/{jobId}: get: description: |- Get the result of an asset upload job that was created using the [Create asset upload job API](https://www.canva.dev/docs/connect/api-reference/assets/create-asset-upload-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: GetAssetUploadJob parameters: - description: The asset upload job ID. explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAssetUploadJobExample' success: $ref: '#/components/examples/SuccessAssetUploadJobExample' failed: $ref: '#/components/examples/FailedAssetUploadJobExample' schema: $ref: '#/components/schemas/GetAssetUploadJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:read tags: - asset x-rate-limit-per-client-user: 180 /v1/url-asset-uploads: post: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to upload an asset from a URL to the user's content library. Supported file types for assets are listed in the [Assets API overview](https://www.canva.dev/docs/connect/api-reference/assets/). Uploading a video asset from a URL is limited to a maximum 100MB file size. For importing larger video files, use the [Create asset upload job API](https://www.canva.dev/docs/connect/api-reference/assets/create-asset-upload-job/). For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of asset upload jobs created with this API using the [Get asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/get-url-asset-upload-job/). operationId: createUrlAssetUploadJob requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUrlAssetUploadJobRequest' required: true responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAssetUploadJobExample' success: $ref: '#/components/examples/SuccessAssetUploadJobExample' failed: $ref: '#/components/examples/FailedAssetUploadJobExample' schema: $ref: '#/components/schemas/CreateUrlAssetUploadJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:write tags: - asset x-rate-limit-per-client-user: 30 /v1/url-asset-uploads/{jobId}: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Get the result of an asset upload job that was created using the [Create asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/create-url-asset-upload-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getUrlAssetUploadJob parameters: - description: The asset upload job ID. explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAssetUploadJobExample' success: $ref: '#/components/examples/SuccessAssetUploadJobExample' failed: $ref: '#/components/examples/FailedAssetUploadJobExample' schema: $ref: '#/components/schemas/GetUrlAssetUploadJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - asset:read tags: - asset x-rate-limit-per-client-user: 180 /v1/autofills: post: description: |- Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs. To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to autofill a Canva design using a brand template and input data. To get a list of input data fields, use the [Get brand template dataset API](https://www.canva.dev/docs/connect/api-reference/brand-templates/get-brand-template-dataset/). Available data field types to autofill include: - Images - Text - Charts WARNING: Chart data fields are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of autofill jobs created with this API using the [Get design autofill job API](https://www.canva.dev/docs/connect/api-reference/autofills/get-design-autofill-job/). operationId: createDesignAutofillJob requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDesignAutofillJobRequest' responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAutofillJobExample' success: $ref: '#/components/examples/SuccessAutofillJobExample' failed: $ref: '#/components/examples/FailedAutofillJobExample' schema: $ref: '#/components/schemas/CreateDesignAutofillJobResponse' description: OK "400": content: application/json: examples: design_title_invalid: $ref: '#/components/examples/DesignTitleInvalidError' schema: $ref: '#/components/schemas/Error' description: Bad Request "403": content: application/json: examples: brand_template_forbidden: $ref: '#/components/examples/BrandTemplateForbiddenError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: brand_template_not_found: $ref: '#/components/examples/BrandTemplateNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - autofill x-rate-limit-per-client-user: 10 /v1/autofills/{jobId}: get: description: |- To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Get the result of a design autofill job that was created using the [Create design autofill job API](https://www.canva.dev/docs/connect/api-reference/autofills/create-design-autofill-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getDesignAutofillJob parameters: - description: The design autofill job ID. explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressAutofillJobExample' success: $ref: '#/components/examples/SuccessAutofillJobExample' failed: $ref: '#/components/examples/FailedAutofillJobExample' schema: $ref: '#/components/schemas/GetDesignAutofillJobResponse' description: OK "404": content: application/json: examples: design_autofill_job_not_found: $ref: '#/components/examples/DesignAutofillJobNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found "403": content: application/json: examples: design_autofill_job_forbidden: $ref: '#/components/examples/DesignAutofillJobForbiddenError' schema: $ref: '#/components/schemas/Error' description: Forbidden default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:meta:read tags: - autofill x-rate-limit-per-client-user: 60 /v1/brand-templates: get: description: |- Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs. To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Get a list of the [brand templates](https://www.canva.com/help/publish-team-template/) the user has access to. operationId: listBrandTemplates parameters: - description: Lets you search the brand templates available to the user using a search term or terms. explode: true in: query name: query required: false schema: type: string style: form - description: |- If the success response contains a continuation token, the user has access to more brand templates you can list. You can use this token as a query parameter and retrieve more templates from the list, for example `/v1/brand-templates?continuation={continuation}`. To retrieve all the brand templates available to the user, you might need to make multiple requests. explode: true in: query name: continuation required: false schema: type: string style: form - description: Filter the list of brand templates based on the user's ownership of the brand templates. explode: true in: query name: ownership required: false schema: $ref: '#/components/schemas/OwnershipType' style: form - description: Sort the list of brand templates. explode: true in: query name: sort_by required: false schema: $ref: '#/components/schemas/SortByType' style: form - description: |- Filter the list of brand templates based on the brand templates' dataset definitions. Brand templates with dataset definitions are mainly used with the [Autofill APIs](https://www.canva.dev/docs/connect/api-reference/autofills/). explode: true in: query name: dataset required: false schema: $ref: '#/components/schemas/DatasetFilter' style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListBrandTemplatesResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - brandtemplate:meta:read tags: - brand_template x-rate-limit-per-client-user: 100 /v1/brand-templates/{brandTemplateId}: get: description: |- Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs. To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Retrieves the metadata for a brand template. operationId: getBrandTemplate parameters: - description: The brand template ID. explode: false in: path name: brandTemplateId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetBrandTemplateResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - brandtemplate:meta:read tags: - brand_template x-rate-limit-per-client-user: 100 /v1/brand-templates/{brandTemplateId}/dataset: get: description: |- Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs. To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Gets the dataset definition of a brand template. If the brand template contains autofill data fields, this API returns an object with the data field names and the type of data they accept. Available data field types include: - Images - Text - Charts You can autofill a brand template using the [Create a design autofill job API](https://www.canva.dev/docs/connect/api-reference/autofills/create-design-autofill-job/). WARNING: Chart data fields are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. operationId: getBrandTemplateDataset parameters: - description: The brand template ID. explode: false in: path name: brandTemplateId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetBrandTemplateDatasetResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - brandtemplate:content:read tags: - brand_template x-rate-limit-per-client-user: 100 /v1/comments: post: deprecated: true description: |- This API is deprecated, so you should use the [Create thread](https://www.canva.dev/docs/connect/api-reference/comments/create-thread/) API instead. This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Create a new top-level comment on a design. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). A design can have a maximum of 1000 comments. operationId: createComment requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateCommentRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateCommentResponse' description: OK "400": content: application/json: examples: assignee_not_mentioned: $ref: '#/components/examples/AssigneeNotMentionedError' message_too_long: $ref: '#/components/examples/MessageTooLongError' schema: $ref: '#/components/schemas/Error' description: Bad Request "403": content: application/json: examples: too_many_comments: $ref: '#/components/examples/TooManyCommentsError' not_allowed_to_comment: $ref: '#/components/examples/NotAllowedToCommentError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: design_not_found: $ref: '#/components/examples/DesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:write tags: - comment x-rate-limit-per-client-user: 20 /v1/comments/{commentId}/replies: post: deprecated: true description: |- This API is deprecated, so you should use the [Create reply](https://www.canva.dev/docs/connect/api-reference/comments/create-reply/) API instead. This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Creates a reply to a comment in a design. To reply to an existing thread of comments, you can use either the `id` of the parent (original) comment, or the `thread_id` of a comment in the thread. Each comment can have a maximum of 100 replies created for it. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: createReplyDeprecated parameters: - description: The ID of the comment. example: KeAZEAjijEb explode: false in: path name: commentId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateReplyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateReplyResponse' description: OK "400": content: application/json: examples: message_too_long: $ref: '#/components/examples/MessageTooLongError' schema: $ref: '#/components/schemas/Error' description: Bad Request "403": content: application/json: examples: too_many_replies: $ref: '#/components/examples/TooManyRepliesError' not_allowed_to_reply: $ref: '#/components/examples/NotAllowedToReplyError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: design_or_comment_not_found: $ref: '#/components/examples/DesignOrCommentNotFoundForReplyError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:write tags: - comment x-rate-limit-per-client-user: 20 /v1/designs/{designId}/comments/{threadId}/replies: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Retrieves a list of replies for a comment or suggestion thread on a design. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: listReplies parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: The ID of the thread. example: KeAbiEAjZEj explode: false in: path name: threadId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - explode: true in: query name: limit required: false schema: default: 50 description: The number of replies to return. maximum: 100 minimum: 1 type: integer style: form - description: |- If the success response contains a continuation token, the list contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example `?continuation={continuation}`. To retrieve all items, you might need to make multiple requests. explode: true in: query name: continuation required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListRepliesResponse' description: OK "403": content: application/json: examples: not_allowed_to_fetch_replies: $ref: '#/components/examples/NotAllowedToFetchRepliesError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: design_or_thread_not_found: $ref: '#/components/examples/DesignOrThreadNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:read tags: - comment x-rate-limit-per-client-user: 100 post: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Creates a reply to a comment or suggestion thread on a design. To reply to an existing thread, you must provide the ID of the thread which is returned when a thread is created, or from the `thread_id` value of an existing reply in the thread. Each thread can have a maximum of 100 replies created for it. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: createReply parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: The ID of the thread. example: KeAbiEAjZEj explode: false in: path name: threadId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateReplyV2Request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateReplyV2Response' description: OK "400": content: application/json: examples: message_too_long: $ref: '#/components/examples/MessageTooLongError' schema: $ref: '#/components/schemas/Error' description: Bad Request "403": content: application/json: examples: too_many_replies: $ref: '#/components/examples/TooManyRepliesError' not_allowed_to_reply: $ref: '#/components/examples/NotAllowedToReplyError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: design_or_comment_not_found: $ref: '#/components/examples/DesignOrCommentNotFoundForReplyError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:write tags: - comment x-rate-limit-per-client-user: 20 /v1/designs/{designId}/comments/{threadId}: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Gets a comment or suggestion thread on a design. To retrieve a reply to a comment thread, use the [Get reply](https://www.canva.dev/docs/connect/api-reference/comments/get-reply/) API. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: getThread parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: The ID of the thread. example: KeAbiEAjZEj explode: false in: path name: threadId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetThreadResponse' description: OK "403": content: application/json: examples: not_allowed_to_fetch_comment: $ref: '#/components/examples/NotAllowedToFetchCommentError' not_allowed_to_fetch_suggestion: $ref: '#/components/examples/NotAllowedToFetchSuggestionError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: thread_not_found: $ref: '#/components/examples/ThreadNotFoundError' thread_not_attached_to_design: $ref: '#/components/examples/ThreadNotAttachedToDesignError' suggestion_not_found: $ref: '#/components/examples/SuggestionNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:read tags: - comment x-rate-limit-per-client-user: 100 /v1/designs/{designId}/comments/{threadId}/replies/{replyId}: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Gets a reply to a comment or suggestion thread on a design. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: getReply parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: The ID of the thread. example: KeAbiEAjZEj explode: false in: path name: threadId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: The ID of the reply. example: KeAZEAjijEb explode: false in: path name: replyId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetReplyResponse' description: OK "403": content: application/json: examples: not_allowed_to_fetch_reply: $ref: '#/components/examples/NotAllowedToFetchReplyError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: reply_not_found: $ref: '#/components/examples/ReplyNotFoundError' suggestion_reply_not_found: $ref: '#/components/examples/SuggestionReplyNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:read tags: - comment x-rate-limit-per-client-user: 100 /v1/designs/{designId}/comments: post: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Creates a new comment thread on a design. For information on comments and how they're used in the Canva UI, see the [Canva Help Center](https://www.canva.com/help/comments/). operationId: createThread parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateThreadRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateThreadResponse' description: OK "400": content: application/json: examples: assignee_not_mentioned: $ref: '#/components/examples/AssigneeNotMentionedError' message_too_long: $ref: '#/components/examples/MessageTooLongError' schema: $ref: '#/components/schemas/Error' description: Bad Request "403": content: application/json: examples: too_many_comments: $ref: '#/components/examples/TooManyCommentsError' not_allowed_to_comment: $ref: '#/components/examples/NotAllowedToCommentError' schema: $ref: '#/components/schemas/Error' description: Forbidden "404": content: application/json: examples: design_not_found: $ref: '#/components/examples/DesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - comment:write tags: - comment x-rate-limit-per-client-user: 100 /v1/connect/keys: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. The Keys API (`connect/keys`) is a security measure you can use to verify the authenticity of webhooks you receive from Canva Connect. The Keys API returns a [JSON Web Key (JWK)](https://www.rfc-editor.org/rfc/rfc7517#section-2), which you can use to decrypt the webhook signature and verify it came from Canva and not a potentially malicious actor. This helps to protect your systems from [Replay attacks](https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/). The keys returned by the Keys API can rotate. We recommend you cache the keys you receive from this API where possible, and only access this API when you receive a webhook signed with an unrecognized key. This allows you to verify webhooks quicker than accessing this API every time you receive a webhook. operationId: getSigningPublicKeys responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetSigningPublicKeysResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response tags: - connect /v1/designs: get: description: |- Lists metadata for all the designs in a Canva user's [projects](https://www.canva.com/help/find-designs-and-folders/). You can also: - Use search terms to filter the listed designs. - Show designs either created by, or shared with the user. - Sort the results. operationId: listDesigns parameters: - description: "Lets you search the user's designs, and designs shared with\ \ the user, using a search term or terms." example: party invites explode: true in: query name: query required: false schema: maxLength: 255 type: string style: form - description: |- If the success response contains a continuation token, the list contains more designs you can list. You can use this token as a query parameter and retrieve more designs from the list, for example `/v1/designs?continuation={continuation}`. To retrieve all of a user's designs, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN explode: true in: query name: continuation required: false schema: type: string style: form - description: Filter the list of designs based on the user's ownership of the designs. example: any explode: true in: query name: ownership required: false schema: $ref: '#/components/schemas/OwnershipType' style: form - description: Sort the list of designs. example: relevance explode: true in: query name: sort_by required: false schema: $ref: '#/components/schemas/SortByType' style: form - description: The number of designs to return. explode: true in: query name: limit required: false schema: default: 25 format: int32 maximum: 100 minimum: 1 type: integer style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetListDesignResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:meta:read tags: - design x-rate-limit-per-client-user: 100 post: description: |- Creates a new Canva design. To create a new design, you can either: - Use a preset design type. - Set height and width dimensions for a custom design. Additionally, you can also provide the `asset_id` of an asset in the user's [projects](https://www.canva.com/help/find-designs-and-folders/) to add to the new design. Currently, this only supports image assets. To list the assets in a folder in the user's projects, use the [List folder items API](https://www.canva.dev/docs/connect/api-reference/folders/list-folder-items/). NOTE: Blank designs created with this API are automatically deleted if they're not edited within 7 days. These blank designs bypass the user's Canva trash and are permanently deleted. operationId: createDesign requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDesignRequest' responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateDesignResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - design x-rate-limit-per-client-user: 20 /v1/designs/{designId}: get: description: "Gets the metadata for a design. This includes owner information,\ \ URLs for editing and viewing, and thumbnail information." operationId: getDesign parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetDesignResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:meta:read tags: - design x-rate-limit-per-client-user: 100 /v1/designs/{designId}/pages: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Lists metadata for pages in a design, such as page-specific thumbnails. For the specified design, you can provide `offset` and `limit` values to specify the range of pages to return. NOTE: Some design types don't have pages (for example, Canva docs). operationId: getDesignPages parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: | The page index to start the range of pages to return. Pages are indexed using one-based numbering, so the first page in a design has the index value `1`. explode: true in: query name: offset required: false schema: default: 1 format: int32 maximum: 500 minimum: 1 type: integer style: form - description: "The number of pages to return, starting at the page index specified\ \ using the `offset` parameter." explode: true in: query name: limit required: false schema: default: 50 format: int32 maximum: 200 minimum: 1 type: integer style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetDesignPagesResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - design x-rate-limit-per-client-user: 100 /v1/designs/{designId}/export-formats: get: description: |- This API is currently provided as a preview. Be aware of the following: - There might be unannounced breaking changes. - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. Lists the available file formats for [exporting a design](https://www.canva.dev/docs/connect/api-reference/exports/create-design-export-job/). operationId: getDesignExportFormats parameters: - description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetDesignExportFormatsResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - design x-rate-limit-per-client-user: 100 /v1/imports: post: description: |- Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file as a new design in Canva. The request format for this endpoint has an `application/octet-stream` body of bytes, and the information about the import is provided using an `Import-Metadata` header. Supported file types for imports are listed in [Design imports overview](https://www.canva.dev/docs/connect/api-reference/design-imports/#supported-file-types). For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of design import jobs created with this API using the [Get design import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/get-design-import-job/). operationId: createDesignImportJob parameters: - content: application/json: schema: $ref: '#/components/schemas/DesignImportMetadata' in: header name: Import-Metadata required: true requestBody: content: application/octet-stream: schema: format: binary type: string description: Binary of the file to import. required: true responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressDesignImportJobExample' success: $ref: '#/components/examples/SuccessDesignImportJobExample' failed: $ref: '#/components/examples/FailedDesignImportJobExample' schema: $ref: '#/components/schemas/CreateDesignImportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - design_import x-rate-limit-per-client-user: 20 /v1/imports/{jobId}: get: description: |- Gets the result of a design import job created using the [Create design import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-design-import-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getDesignImportJob parameters: - description: The design import job ID. example: f81b26fd-a33d-4c2d-9e8c-4a7aca798b17 explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressDesignImportJobExample' success: $ref: '#/components/examples/SuccessDesignImportJobExample' failed: $ref: '#/components/examples/FailedDesignImportJobExample' schema: $ref: '#/components/schemas/GetDesignImportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - design_import x-rate-limit-per-client-user: 120 /v1/url-imports: post: description: |- Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file from a URL as a new design in Canva. Supported file types for imports are listed in [Design imports overview](https://www.canva.dev/docs/connect/api-reference/design-imports/#supported-file-types). For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of design import jobs created with this API using the [Get URL import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/get-url-import-job/). operationId: createUrlImportJob requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUrlImportJobRequest' required: true responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressDesignImportJobExample' success: $ref: '#/components/examples/SuccessDesignImportJobExample' failed: $ref: '#/components/examples/FailedDesignImportJobExample' schema: $ref: '#/components/schemas/CreateUrlImportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - design_import x-rate-limit-per-client-user: 20 /v1/url-imports/{jobId}: get: description: |- Gets the result of a URL import job created using the [Create URL import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-url-import-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getUrlImportJob parameters: - description: The ID of the URL import job. example: f81b26fd-a33d-4c2d-9e8c-4a7aca798b17 explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressDesignImportJobExample' success: $ref: '#/components/examples/SuccessDesignImportJobExample' failed: $ref: '#/components/examples/FailedDesignImportJobExample' schema: $ref: '#/components/schemas/GetUrlImportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:write tags: - design_import x-rate-limit-per-client-user: 120 /v1/exports: post: description: |- Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to export a file from Canva. Once the exported file is generated, you can download it using the URL(s) provided. The download URLs are only valid for 24 hours. The request requires the design ID and the exported file format type. Supported file formats (and export file type values): PDF (`pdf`), JPG (`jpg`), PNG (`png`), GIF (`gif`), Microsoft PowerPoint (`pptx`), and MP4 (`mp4`). For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of export jobs created with this API using the [Get design export job API](https://www.canva.dev/docs/connect/api-reference/exports/get-design-export-job/). operationId: createDesignExportJob requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDesignExportJobRequest' responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressExportJobExample' success: $ref: '#/components/examples/SuccessExportJobExample' failed: $ref: '#/components/examples/FailedExportJobExample' schema: $ref: '#/components/schemas/CreateDesignExportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - export x-rate-limit-per-client-user: 20 /v1/exports/{exportId}: get: description: |- Gets the result of a design export job that was created using the [Create design export job API](https://www.canva.dev/docs/connect/api-reference/exports/create-design-export-job/). If the job is successful, the response includes an array of download URLs. Depending on the design type and export format, there is a download URL for each page in the design. The download URLs are only valid for 24 hours. You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getDesignExportJob parameters: - description: The export job ID. explode: false in: path name: exportId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressExportJobExample' success: $ref: '#/components/examples/SuccessExportJobExample' failed: $ref: '#/components/examples/FailedExportJobExample' schema: $ref: '#/components/schemas/GetDesignExportJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - export x-rate-limit-per-client-user: 120 /v1/folders/{folderId}: delete: description: |- Deletes a folder with the specified `folderID`. Deleting a folder moves the user's content in the folder to the [Trash](https://www.canva.com/help/deleted-designs/) and content owned by other users is moved to the top level of the owner's [projects](https://www.canva.com/help/find-designs-and-folders/). operationId: deleteFolder parameters: - description: The folder ID. example: FAF2lZtloor explode: false in: path name: folderId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "204": description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:write tags: - folder x-rate-limit-per-client-user: 20 get: description: Gets the name and other details of a folder using a folder's `folderID`. operationId: getFolder parameters: - description: The folder ID. example: FAF2lZtloor explode: false in: path name: folderId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetFolderResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:read tags: - folder x-rate-limit-per-client-user: 100 patch: description: |- Updates a folder's details using its `folderID`. Currently, you can only update a folder's name. operationId: updateFolder parameters: - description: The folder ID. example: FAF2lZtloor explode: false in: path name: folderId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateFolderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/UpdateFolderResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:write tags: - folder x-rate-limit-per-client-user: 20 /v1/folders/{folderId}/items: get: description: |- Lists the items in a folder, including each item's `type`. Folders can contain: - Other folders. - Designs, such as Instagram posts, Presentations, and Documents ([Canva Docs](https://www.canva.com/create/documents/)). - Image assets. Currently, video assets are not returned in the response. operationId: listFolderItems parameters: - description: The folder ID. example: FAF2lZtloor explode: false in: path name: folderId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple - description: |- If the success response contains a continuation token, the folder contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example `/v1/folders/{folderId}/items?continuation={continuation}`. To retrieve all the items in a folder, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN explode: true in: query name: continuation required: false schema: type: string style: form - description: |- Filter the folder items to only return specified types. The available types are: `design`, `folder`, and `image`. To filter for more than one item type, provide a comma- delimited list. explode: false in: query name: item_types required: false schema: items: $ref: '#/components/schemas/FolderItemType' type: array style: form - description: Sort the list of folder items. example: title_ascending explode: true in: query name: sort_by required: false schema: $ref: '#/components/schemas/FolderItemSortBy' style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListFolderItemsResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:read tags: - folder x-rate-limit-per-client-user: 100 /v1/folders/move: post: description: |- Moves an item to another folder. You must specify the folder ID of the destination folder, as well as the ID of the item you want to move. NOTE: In some situations, a single item can exist in multiple folders. If you attempt to move an item that exists in multiple folders, the API returns an `item_in_multiple_folders` error. In this case, you must use the Canva UI to move the item to another folder. operationId: moveFolderItem requestBody: content: application/json: schema: $ref: '#/components/schemas/MoveFolderItemRequest' responses: "204": description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:write tags: - folder x-rate-limit-per-client-user: 100 /v1/folders: post: description: |- Creates a folder in one of the following locations: - The top level of a Canva user's [projects](https://www.canva.com/help/find-designs-and-folders/) (using the ID `root`), - The user's Uploads folder (using the ID `uploads`), - Another folder (using the parent folder's ID). When a folder is successfully created, the endpoint returns its folder ID, along with other information. operationId: createFolder requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFolderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/CreateFolderResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - folder:write tags: - folder x-rate-limit-per-client-user: 20 /v1/oauth/token: post: description: |- This endpoint implements the OAuth 2.0 `token` endpoint, as part of the Authorization Code flow with Proof Key for Code Exchange (PKCE). For more information, see [Authentication](https://www.canva.dev/docs/connect/authentication/). To generate an access token, you must provide one of the following: - An authorization code - A refresh token Generating a token using either an authorization code or a refresh token allows your integration to act on behalf of a user. You must first [obtain user authorization and get an authorization code](https://www.canva.dev/docs/connect/authentication/#obtain-user-authorization). Access tokens may be up to 4 KB in size, and are only valid for a specified period of time. The expiry time (currently 4 hours) is shown in the endpoint response and is subject to change. **Endpoint authentication** Requests to this endpoint require authentication with your client ID and client secret, using _one_ of the following methods: - **Basic access authentication** (Recommended): For [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), the `{credentials}` string must be a Base64 encoded value of `{client id}:{client secret}`. - **Body parameters**: Provide your integration's credentials using the `client_id` and `client_secret` body parameters. This endpoint can't be called from a user's web-browser client because it uses client authentication with client secrets. Requests must come from your integration's backend, otherwise they'll be blocked by Canva's [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) policy. **Generate an access token using an authorization code** To generate an access token with an authorization code, you must: - Set `grant_type` to `authorization_code`. - Provide the `code_verifier` value that you generated when creating the user authorization URL. - Provide the authorization code you received after the user authorized the integration. **Generate an access token using a refresh token** Using the `refresh_token` value from a previous user token request, you can get a new access token with the same or smaller scope as the previous one, but with a refreshed expiry time. You will also receive a new refresh token that you can use to refresh the access token again. To refresh an existing access token, you must: - Set `grant_type` to `refresh_token`. - Provide the `refresh_token` from a previous token request. operationId: exchangeAccessToken requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ExchangeAccessTokenRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ExchangeAccessTokenResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/OauthError' description: Error Response security: - {} - basicAuth: [] tags: - oauth /v1/oauth/introspect: post: description: |- Introspect an access token to see whether it is valid and active. You can also verify some token properties, such as its claims, scopes, and validity times. Requests to this endpoint require authentication with your client ID and client secret, using _one_ of the following methods: - **Basic access authentication** (Recommended): For [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), the `{credentials}` string must be a Base64 encoded value of `{client id}:{client secret}`. - **Body parameters**: Provide your integration's credentials using the `client_id` and `client_secret` body parameters. This endpoint can't be called from a user's web-browser client because it uses client authentication with client secrets. Requests must come from your integration's backend, otherwise they'll be blocked by Canva's [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) policy. operationId: introspectToken requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/IntrospectTokenRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/IntrospectTokenResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/OauthError' description: Error Response security: - {} - basicAuth: [] tags: - oauth /v1/oauth/revoke: post: description: |- Revoke an access token or a refresh token. If you revoke a _refresh token_, be aware that: - The refresh token's lineage is also revoked. This means that access tokens created from that refresh token are also revoked. - The user's consent for your integration is also revoked. This means that the user must go through the OAuth process again to use your integration. Requests to this endpoint require authentication with your client ID and client secret, using _one_ of the following methods: - **Basic access authentication** (Recommended): For [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), the `{credentials}` string must be a Base64 encoded value of `{client id}:{client secret}`. - **Body parameters**: Provide your integration's credentials using the `client_id` and `client_secret` body parameters. This endpoint can't be called from a user's web-browser client because it uses client authentication with client secrets. Requests must come from your integration's backend, otherwise they'll be blocked by Canva's [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) policy. operationId: revokeTokens requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RevokeTokensRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RevokeTokensResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/OauthError' description: Error Response security: - {} - basicAuth: [] tags: - oauth /v1/oidc/jwks: get: description: Gets the JSON Web Key Set (public keys) for OIDC. These keys are used to verify JWTs in OpenID Connect flows. operationId: getOidcJwks responses: "200": content: application/json: schema: $ref: '#/components/schemas/JsonWebKeySet' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: [] tags: - oidc /v1/oidc/userinfo: get: description: |- Fetches the current UserInfo claims for the authorized user. This is the same fields returned by a id_token returns during authorization. operationId: userInfo responses: "200": content: application/json: schema: $ref: '#/components/schemas/UserInfoResponse' description: OK "401": content: application/json: schema: $ref: '#/components/schemas/Error' description: Unauthorized default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - openid - profile - email tags: - oidc x-rate-limit-per-client-user: 10 /v1/resizes: post: description: |- To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to create a resized copy of a design. The new resized design is added to the top level of the user's [projects](https://www.canva.com/help/find-designs-and-folders/) (`root` folder). To resize a design into a new design, you can either: - Use a preset design type. - Set height and width dimensions for a custom design. Note the following behaviors and restrictions when resizing designs: - Designs can be resized to a maximum area of 25,000,000 pixels squared. - Resizing designs using the Connect API always creates a new design. In-place resizing is currently not available in the Connect API, but can be done in the Canva UI. - Resizing a multi-page design results in all pages of the design being resized. Resizing a section of a design is only available in the Canva UI. - [Canva docs](https://www.canva.com/create/documents/) can't be resized, and other design types can't be resized to a Canva doc. - Canva Code designs can't be resized, and other design types can't be resized to a Canva Code design. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of resize jobs created with this API using the [Get design resize job API](https://www.canva.dev/docs/connect/api-reference/resizes/get-design-resize-job/). operationId: createDesignResizeJob requestBody: content: application/json: example: design_id: DAGirp_1ZUA design_type: type: custom width: 1000 height: 1500 schema: $ref: '#/components/schemas/CreateDesignResizeJobRequest' responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressResizeJobExample' success: $ref: '#/components/examples/SuccessResizeJobExample' failed: $ref: '#/components/examples/FailedResizeJobExample' schema: $ref: '#/components/schemas/CreateDesignResizeJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read - design:content:write tags: - resize x-required-capabilities: - resize x-rate-limit-per-client-user: 20 /v1/resizes/{jobId}: get: description: |- To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). Gets the result of a design resize job that was created using the [Create design resize job API](https://www.canva.dev/docs/connect/api-reference/resizes/create-design-resize-job/). If the job is successful, the response includes a summary of the new resized design, including its metadata. You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). operationId: getDesignResizeJob parameters: - description: The design resize job ID. explode: false in: path name: jobId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple responses: "200": content: application/json: examples: in_progress: $ref: '#/components/examples/InProgressResizeJobExample' success: $ref: '#/components/examples/SuccessResizeJobExample' failed: $ref: '#/components/examples/FailedResizeJobExample' schema: $ref: '#/components/schemas/GetDesignResizeJobResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read - design:content:write tags: - resize x-required-capabilities: - resize x-rate-limit-per-client-user: 120 /v1/users/me: get: description: |- Returns the User ID and Team ID of the user account associated with the provided access token. operationId: usersMe responses: "200": content: application/json: schema: $ref: '#/components/schemas/UsersMeResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: [] tags: - user x-rate-limit-per-client-user: 10 /v1/users/me/capabilities: get: description: "Lists the API capabilities for the user account associated with\ \ the provided access token. For more information, see [Capabilities](https://www.canva.dev/docs/connect/capabilities/)." operationId: getUserCapabilities responses: "200": content: application/json: schema: $ref: '#/components/schemas/GetUserCapabilitiesResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - profile:read tags: - user x-rate-limit-per-client-user: 10 /v1/users/me/profile: get: description: "Currently, this returns the display name of the user account associated\ \ with the provided access token. More user information is expected to be\ \ included in the future." operationId: getUserProfile responses: "200": content: application/json: schema: $ref: '#/components/schemas/UserProfileResponse' description: OK default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - profile:read tags: - user x-rate-limit-per-client-user: 10 components: examples: InProgressAssetUploadJobExample: summary: In progress job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: in_progress SuccessAssetUploadJobExample: summary: Successfully completed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: success asset: id: Msd59349ff type: image name: My Awesome Upload tags: - image - holiday - best day ever owner: user_id: oU123456AbCdE team_id: oB123456AbCdE created_at: 1377396000 updated_at: 1692928800 thumbnail: width: 595 height: 335 url: https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png? FailedAssetUploadJobExample: summary: Failed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: failed error: code: file_too_big message: Failed to import because the file is too big InProgressAutofillJobExample: summary: In progress job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: in_progress SuccessAutofillJobExample: summary: Successfully completed job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: success result: type: create_design design: id: DAFVztcvd9z title: My summer holiday url: https://www.canva.com/design/DAFVztcvd9z/edit urls: edit_url: https://www.canva.com/api/ekimus8HTvsdf&/edit view_url: https://www.canva.com/api/eylPinTv358hYb8n1U4/view thumbnail: width: 595 height: 335 url: https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png? created_at: 1586734043 updated_at: 1586734043 FailedAutofillJobExample: summary: Failed job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: failed error: code: autofill_error message: Error autofilling design from brand template BrandTemplateNotFoundError: summary: A brand template with the ID specified in the request could not be found. value: code: not_found message: "Brand template with id '{brandTemplateId}' not found" BrandTemplateForbiddenError: summary: |- The user does not have permission to access the brand template with the ID specified in the request. value: code: permission_denied message: "Not allowed to access brand template with id '{brandTemplateId}'" DesignTitleInvalidError: summary: The design title specified in the request is not valid. value: code: bad_request_params message: Design title invalid DesignAutofillJobNotFoundError: summary: A design autofill job with the ID specified in the request could not be found. value: code: not_found message: "Job {jobId} not found" DesignAutofillJobForbiddenError: summary: |- The user does not have permission to access the design autofill job with the ID specified in the request. value: code: permission_denied message: Calling user was not the creator of the autofill job BrandKitsForbiddenError: summary: The user does not have permission to access to the brand kits value: code: permission_denied message: Not allowed to access brand kits AssigneeNotMentionedError: summary: Assignee must be mentioned in comment content value: code: bad_request_body message: Assignee must be mentioned in comment content MessageTooLongError: summary: Message is too long value: code: message_too_long message: Message is too long TooManyCommentsError: summary: Design already has the maximum number of allowed comments value: code: too_many_comments message: Design already has the maximum number of allowed comments NotAllowedToCommentError: summary: Not allowed to comment on this design value: code: permission_denied message: Not allowed to comment on this design DesignNotFoundError: summary: Design not found value: code: design_not_found message: Design not found TooManyRepliesError: summary: This comment thread already has the maximum number of allowed replies value: code: too_many_replies message: This comment thread already has the maximum number of allowed replies NotAllowedToReplyError: summary: Not allowed to reply on this design value: code: permission_denied message: Not allowed to reply on this design DesignOrCommentNotFoundForReplyError: summary: Design or comment not found value: code: design_not_found message: Design or comment not found NotAllowedToFetchRepliesError: summary: Not allowed to fetch replies value: code: permission_denied message: Not allowed to fetch replies DesignOrThreadNotFoundError: summary: Design or comment not found value: code: design_or_thread_not_found message: Design or comment not found NotAllowedToFetchCommentError: summary: Not allowed to fetch this comment value: code: permission_denied message: Not allowed to fetch this comment NotAllowedToFetchSuggestionError: summary: Not allowed to fetch this suggestion value: code: permission_denied message: Not allowed to fetch this suggestion ThreadNotFoundError: summary: No thread with ID found value: code: thread_not_found message: "No thread with ID {threadId} found" ThreadNotAttachedToDesignError: summary: Thread not attached to design value: code: thread_not_found message: "Thread with ID {threadId} is not attached to design {designId},\ \ or design not found" SuggestionNotFoundError: summary: No suggestion thread with ID found value: code: thread_not_found message: "Suggestion with ID {threadId} not found" NotAllowedToFetchReplyError: summary: Not allowed to fetch this reply value: code: permission_denied message: Not allowed to fetch this reply ReplyNotFoundError: summary: Reply not found value: code: reply_not_found message: "Reply with ID {replyId} not found" SuggestionReplyNotFoundError: summary: Suggestion reply not found value: code: reply_not_found message: "Suggestion reply with ID {replyId} not found" NotAllowedToFetchCommentsError: summary: Not allowed to fetch comments for this design value: code: permission_denied message: Not allowed to fetch comments for this design InProgressDesignImportJobExample: summary: In progress job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: in_progress SuccessDesignImportJobExample: summary: Successfully completed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: success result: designs: - id: DAGQm2AkzOk title: My Awesome Design thumbnail: width: 376 height: 531 url: https://document-export.canva.com/... urls: edit_url: https://www.canva.com/api/design/... view_url: https://www.canva.com/api/design/... created_at: 1726198998 updated_at: 1726199000 FailedDesignImportJobExample: summary: Failed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: failed error: code: invalid_file message: Document couldn't be imported because the file is corrupt. InProgressExportJobExample: summary: In progress job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: in_progress SuccessExportJobExample: summary: Successfully completed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: success urls: - https://export-download.canva.com/... FailedExportJobExample: summary: Failed job value: job: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: failed error: code: license_required message: User doesn't have the required license to export in PRO quality. UpdateFolderPermissionsUserInputExample: description: "Example of an update folder permissions request, updating the\ \ permissions for a user." summary: Update user permissions request value: role: editor type: user user_id: auDAbliZ2rQNNOsUl5OLu team_id: Oi2RJILTrKk0KRhRUZozX UpdateFolderPermissionsGroupInputExample: description: "Example of an update folder permissions request, updating the\ \ permissions for a group." summary: Update group permissions request value: role: viewer type: group group_id: dl9n9SoWoExMsw6Ri1iTg team_id: Oi2RJILTrKk0KRhRUZozX UpdateFolderPermissionsTeamInputExample: description: "Example of an update folder permissions request, updating the\ \ permissions for a team." summary: Updating team permissions request value: role: none type: team team_id: Oi2RJILTrKk0KRhRUZozX UpdateFolderPermissionsUserResponseExample: description: Example of the response returned when updating folder permissions for a user. summary: Updated user permissions response value: folder_permission: type: user role: editor inherited: false team_user: user_id: auDAbliZ2rQNNOsUl5OLu team_id: Oi2RJILTrKk0KRhRUZozX UpdateFolderPermissionsGroupResponseExample: description: Example of the response returned when updating folder permissions for a group. summary: Updated group permissions response value: folder_permission: role: viewer type: group inherited: false group: id: dl9n9SoWoExMsw6Ri1iTg external: false display_name: Sales team UpdateFolderPermissionsTeamResponseExample: description: Example of the response returned when updating folder permissions for a team. summary: Updated team permissions response value: folder_permission: role: none type: team inherited: false team: id: Oi2RJILTrKk0KRhRUZozX display_name: Acme Corporation external: false InProgressResizeJobExample: summary: In progress job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: in_progress SuccessResizeJobExample: summary: Successfully completed job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: success result: design: id: DAGirp_1ZUA title: My summer holiday thumbnail: width: 595 height: 335 url: https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png? urls: edit_url: https://www.canva.com/design/DAGhRehVa2c/0L_1s4UXSpZhls8EtPaRKw/edit view_url: https://www.canva.com/design/DAGhRehVa2c/0L_1s4UXSpZhls8EtPaRKw/view created_at: 1742856750 updated_at: 1742856752 page_count: 5 trial_information: uses_remaining: 0 upgrade_url: https://www.canva.com/?tailoringUpsellDialog=GENERIC_C4W FailedResizeJobExample: summary: Failed job value: job: id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 status: failed error: code: design_resize_error message: Failed to resize the design UpdatePrivacyPreferenceInvalidError: summary: The intend preference update request is not valid. value: code: bad_request_params message: Invalid preference request UpdatePrivacyPreferenceUnauthorizedError: summary: The request client does not have permission to update the specified preference. value: code: unauthorized_client message: Request client is not unauthorized UpdatePrivacyPreferenceForbiddenError: summary: The user does not have permission to update the preference specified in the request. value: code: permission_denied message: User cannot update the specified preference UpdatePrivacyPreferenceConflictError: summary: Detected conflicting changes to the user's privacy preferences after the collected_at_ms timestamp. value: code: bad_request_params message: New update conflicts with existing preference change after the collected_at_ms timestamp UpdatePrivacyPreferenceTooManyUpdatesError: summary: The user has exceeded the allowed number of updates to their privacy preferences after the collected_at_ms timestamp. value: code: too_many_requests message: Too many preference updates happened since collection time parameters: appId: description: The app ID. explode: false in: path name: appId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple brandTemplateId: description: The brand template ID. explode: false in: path name: brandTemplateId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple commentId: description: The ID of the comment. example: KeAZEAjijEb explode: false in: path name: commentId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple threadId: description: The ID of the thread. example: KeAbiEAjZEj explode: false in: path name: threadId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple replyId: description: The ID of the reply. example: KeAZEAjijEb explode: false in: path name: replyId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple designId: description: The design ID. explode: false in: path name: designId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple transactionIdParameter: description: The editing transaction ID. example: EDT123456 explode: false in: path name: transactionId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple pageIndicesParameter: description: |- The request with all the page indices Pages are indexed using one-based numbering, so the first page in a design has the index value `1`. explode: false in: query name: page_indices required: true schema: example: - 2 - 3 - 4 items: format: int32 maximum: 500 minimum: 1 type: integer maxItems: 4 type: array style: form exportId: description: The export job ID. explode: false in: path name: exportId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple fileIdParameter: description: The file ID. explode: false in: path name: fileId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple folderIdParameter: description: The folder ID. example: FAF2lZtloor explode: false in: path name: folderId required: true schema: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple featureId: explode: false in: path name: featureId required: true schema: $ref: '#/components/schemas/FeatureId' style: simple feature_quota_limit: explode: true in: query name: feature_quota_limit required: false schema: $ref: '#/components/schemas/FeatureQuotaLimit' style: form interval: description: The interval at which the usage resets. 'never' means lifetime quota that never resets. explode: true in: query name: interval required: false schema: $ref: '#/components/schemas/Interval' style: form schemas: GetAppJwksResponse: properties: keys: description: |- The value of the "keys" parameter is an array of JWK values. The order of keys has no meaning. items: $ref: '#/components/schemas/JsonWebKey' type: array required: - keys type: object CreateUrlAssetUploadJobRequest: properties: name: description: A name for the asset. example: My Awesome Asset maxLength: 255 minLength: 1 type: string url: description: The URL of the file to import. This URL must be accessible from the internet and be publicly available. example: https://example.com/my_asset_to_upload.jpg maxLength: 2048 minLength: 8 type: string required: - name - url type: object CreateUrlAssetUploadJobResponse: properties: job: $ref: '#/components/schemas/AssetUploadJob' required: - job type: object GetUrlAssetUploadJobResponse: properties: job: $ref: '#/components/schemas/AssetUploadJob' required: - job type: object GetAssetResponse: properties: asset: $ref: '#/components/schemas/Asset' required: - asset type: object UpdateAssetRequest: properties: name: description: |- The name of the asset. This is shown in the Canva UI. When this field is undefined or empty, nothing is updated. example: My Awesome Upload maxLength: 50 type: string tags: description: |- The replacement tags for the asset. When this field is undefined, nothing is updated. example: - image - holiday - best day ever items: maxLength: 50 type: string maxItems: 50 type: array type: object UpdateAssetResponse: properties: asset: $ref: '#/components/schemas/Asset' required: - asset type: object Asset: description: "The asset object, which contains metadata about the asset." properties: type: $ref: '#/components/schemas/AssetType' id: description: The ID of the asset. example: Msd59349ff type: string name: description: The name of the asset. example: My Awesome Upload type: string tags: description: |- The user-facing tags attached to the asset. Users can add these tags to their uploaded assets, and they can search their uploaded assets in the Canva UI by searching for these tags. For information on how users use tags, see the [Canva Help Center page on asset tags](https://www.canva.com/help/add-edit-tags/). example: - image - holiday - best day ever items: type: string type: array import_status: $ref: '#/components/schemas/ImportStatus' created_at: description: |- When the asset was added to Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the asset was last updated in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer owner: $ref: '#/components/schemas/TeamUserSummary' thumbnail: $ref: '#/components/schemas/Thumbnail' required: - created_at - id - name - owner - tags - type - updated_at type: object AssetSummary: description: An object representing an asset with associated metadata. properties: type: $ref: '#/components/schemas/AssetType' id: description: The ID of the asset. example: Msd59349ff type: string name: description: The name of the asset. example: My Awesome Upload type: string tags: description: |- The user-facing tags attached to the asset. Users can add these tags to their uploaded assets, and they can search their uploaded assets in the Canva UI by searching for these tags. For information on how users use tags, see the [Canva Help Center page on asset tags](https://www.canva.com/help/add-edit-tags/). example: - image - holiday - best day ever items: type: string type: array created_at: description: |- When the asset was added to Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the asset was last updated in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer thumbnail: $ref: '#/components/schemas/Thumbnail' required: - created_at - id - name - tags - type - updated_at type: object AssetType: description: Type of an asset. enum: - image - video example: image type: string ImportStatus: deprecated: true description: The import status of the asset. properties: state: $ref: '#/components/schemas/ImportStatusState' error: $ref: '#/components/schemas/ImportError' required: - state type: object ImportStatusState: deprecated: true description: State of the import job for an uploaded asset. enum: - failed - in_progress - success example: success type: string ImportError: deprecated: true description: "If the import fails, this object provides details about the error." properties: code: $ref: '#/components/schemas/ImportErrorCode' message: description: A human-readable description of what went wrong. type: string required: - code - message type: object ImportErrorCode: deprecated: true description: | A short string indicating why the upload failed. This field can be used to handle errors programmatically. enum: - file_too_big - import_failed type: string CreateAssetUploadJobResponse: properties: job: $ref: '#/components/schemas/AssetUploadJob' required: - job type: object GetAssetUploadJobResponse: properties: job: $ref: '#/components/schemas/AssetUploadJob' required: - job type: object AssetUploadJob: description: The status of the asset upload job. example: id: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 status: success asset: id: Msd59349ff type: image name: My Awesome Upload tags: - image - holiday - best day ever owner: user_id: oU123456AbCdE team_id: oB123456AbCdE created_at: 1377396000 updated_at: 1692928800 thumbnail: width: 595 height: 335 url: https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png? properties: id: description: The ID of the asset upload job. example: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 type: string status: $ref: '#/components/schemas/AssetUploadStatus' error: $ref: '#/components/schemas/AssetUploadError' asset: $ref: '#/components/schemas/Asset' required: - id - status type: object AssetUploadStatus: description: Status of the asset upload job. enum: - failed - in_progress - success example: success type: string AssetUploadError: description: "If the upload fails, this object provides details about the error." properties: code: $ref: '#/components/schemas/AssetUploadErrorCode' message: description: A human-readable description of what went wrong. example: Failed to import because the file is too big. type: string required: - code - message type: object AssetUploadErrorCode: description: |- A short string indicating why the upload failed. This field can be used to handle errors programmatically. enum: - file_too_big - import_failed - fetch_failed example: file_too_big type: string AssetUploadMetadata: description: Metadata for the asset being uploaded. properties: name_base64: description: |- The asset's name, encoded in Base64. The maximum length of an asset name in Canva (unencoded) is 50 characters. Base64 encoding allows names containing emojis and other special characters to be sent using HTTP headers. For example, "My Awesome Upload 🚀" Base64 encoded is `TXkgQXdlc29tZSBVcGxvYWQg8J+agA==`. example: TXkgQXdlc29tZSBVcGxvYWQg8J+agA== minLength: 1 type: string required: - name_base64 type: object CreateDesignAutofillJobRequest: properties: brand_template_id: description: ID of the input brand template. example: DAFVztcvd9z type: string title: description: |- Title to use for the autofilled design. If no design title is provided, the autofilled design will have the same title as the brand template. maxLength: 255 minLength: 1 type: string data: additionalProperties: $ref: '#/components/schemas/DatasetValue' description: Data object containing the data fields and values to autofill. example: cute_pet_image_of_the_day: type: image asset_id: Msd59349ff cute_pet_witty_pet_says: type: text text: It was like this when I got here! cute_pet_sales_chart: type: chart chart_data: rows: - cells: - type: string value: Geographic Region - type: string value: Sales (millions AUD) - type: string value: Target met? - type: string value: Date met - cells: - type: string value: Asia Pacific - type: number value: 10.2 - type: boolean value: true - type: date value: 1721944387 - cells: - type: string value: EMEA - type: number value: 13.8 - type: boolean value: false - type: date type: object required: - brand_template_id - data type: object CreateDesignAutofillJobResponse: properties: job: $ref: '#/components/schemas/DesignAutofillJob' required: - job type: object DatasetValue: description: The data field to autofill. discriminator: mapping: image: '#/components/schemas/DatasetImageValue' text: '#/components/schemas/DatasetTextValue' chart: '#/components/schemas/DatasetChartValue' propertyName: type oneOf: - $ref: '#/components/schemas/DatasetImageValue' - $ref: '#/components/schemas/DatasetTextValue' - $ref: '#/components/schemas/DatasetChartValue' type: object Dataset: additionalProperties: $ref: '#/components/schemas/DatasetValue' description: Data object containing the data fields and values to autofill. example: cute_pet_image_of_the_day: type: image asset_id: Msd59349ff cute_pet_witty_pet_says: type: text text: It was like this when I got here! cute_pet_sales_chart: type: chart chart_data: rows: - cells: - type: string value: Geographic Region - type: string value: Sales (millions AUD) - type: string value: Target met? - type: string value: Date met - cells: - type: string value: Asia Pacific - type: number value: 10.2 - type: boolean value: true - type: date value: 1721944387 - cells: - type: string value: EMEA - type: number value: 13.8 - type: boolean value: false - type: date type: object DatasetImageValue: description: If the data field is an image field. properties: type: enum: - image type: string asset_id: description: '`asset_id` of the image to insert into the template element.' example: Msd59349ff type: string required: - asset_id - type type: object DatasetTextValue: description: If the data field is a text field. properties: type: enum: - text type: string text: description: Text to insert into the template element. example: It was like this when I got here! type: string required: - text - type type: object DatasetChartValue: description: |- If the data field is a chart. WARNING: Chart data fields are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. properties: type: enum: - chart type: string chart_data: $ref: '#/components/schemas/DataTable' required: - chart_data - type type: object GetDesignAutofillJobResponse: properties: job: $ref: '#/components/schemas/DesignAutofillJob' required: - job type: object DesignAutofillJob: description: Details about the autofill job. properties: id: description: ID of the asynchronous job that is creating the design using the provided data. example: 450a76e7-f96f-43ae-9c37-0e1ce492ac72 type: string status: $ref: '#/components/schemas/DesignAutofillStatus' result: $ref: '#/components/schemas/DesignAutofillJobResult' error: $ref: '#/components/schemas/AutofillError' required: - id - status type: object DesignAutofillJobResult: description: Result of the design autofill job. Only present if job status is `success`. discriminator: mapping: create_design: '#/components/schemas/CreateDesignAutofillJobResult' propertyName: type oneOf: - $ref: '#/components/schemas/CreateDesignAutofillJobResult' type: object CreateDesignAutofillJobResult: description: Design has been created and saved to user's root folder. properties: type: enum: - create_design type: string design: $ref: '#/components/schemas/DesignSummary' required: - design - type type: object DesignAutofillStatus: description: Status of the design autofill job. enum: - in_progress - success - failed example: success type: string AutofillErrorCode: enum: - autofill_error - thumbnail_generation_error - create_design_error type: string AutofillError: description: "If the autofill job fails, this object provides details about\ \ the error." properties: code: $ref: '#/components/schemas/AutofillErrorCode' message: description: A human-readable description of what went wrong. type: string required: - code - message type: object DatasetFilter: default: any enum: - any - non_empty type: string x-enum-descriptions: - Brand templates with and without dataset definitions. - Brand templates with one or more data fields defined. ListBrandTemplatesResponse: properties: continuation: description: |- If the success response contains a continuation token, the user has access to more brand templates you can list. You can use this token as a query parameter and retrieve more templates from the list, for example `/v1/brand-templates?continuation={continuation}`. To retrieve all the brand templates available to the user, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string items: description: The list of brand templates. items: $ref: '#/components/schemas/BrandTemplate' type: array required: - items type: object GetBrandTemplateResponse: description: Successful response from a `getBrandTemplate` request. properties: brand_template: $ref: '#/components/schemas/BrandTemplate' required: - brand_template type: object BrandTemplate: description: An object representing a brand template with associated metadata. properties: id: description: The brand template ID. example: DEMzWSwy3BI type: string title: description: "The brand template title, as shown in the Canva UI." example: Advertisement Template type: string view_url: description: A URL Canva users can visit to view the brand template. example: https://www.canva.com/design/DAE35hE8FA4/view type: string create_url: description: A URL Canva users can visit to create a new design from the template. example: https://www.canva.com/design/DAE35hE8FA4/remix type: string thumbnail: $ref: '#/components/schemas/Thumbnail' created_at: description: |- When the brand template was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1704110400 format: int64 type: integer updated_at: description: |- When the brand template was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1719835200 format: int64 type: integer required: - create_url - created_at - id - title - updated_at - view_url type: object GetBrandTemplateDatasetResponse: description: Successful response from a `getBrandTemplateDataset` request. properties: dataset: additionalProperties: $ref: '#/components/schemas/DataField' description: |- The dataset definition for the brand template. The dataset definition contains the data inputs available for use with the [Create design autofill job API](https://www.canva.dev/docs/connect/api-reference/autofills/create-design-autofill-job/). example: cute_pet_image_of_the_day: type: image cute_pet_witty_pet_says: type: text cute_pet_sales_chart: type: chart type: object type: object DatasetDefinition: additionalProperties: $ref: '#/components/schemas/DataField' description: |- The dataset definition for the brand template. The dataset definition contains the data inputs available for use with the [Create design autofill job API](https://www.canva.dev/docs/connect/api-reference/autofills/create-design-autofill-job/). example: cute_pet_image_of_the_day: type: image cute_pet_witty_pet_says: type: text cute_pet_sales_chart: type: chart type: object DataField: description: A named data field that can be autofilled in the brand template. discriminator: mapping: image: '#/components/schemas/ImageDataField' text: '#/components/schemas/TextDataField' chart: '#/components/schemas/ChartDataField' propertyName: type oneOf: - $ref: '#/components/schemas/ImageDataField' - $ref: '#/components/schemas/TextDataField' - $ref: '#/components/schemas/ChartDataField' type: object ImageDataField: description: An image for a brand template. You can autofill the brand template with an image by providing its `asset_id`. properties: type: enum: - image type: string required: - type type: object TextDataField: description: Some text for a brand template. You can autofill the brand template with this value. properties: type: enum: - text type: string required: - type type: object ChartDataField: description: |- Chart data for a brand template. You can autofill the brand template with tabular data. WARNING: Chart data fields are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. properties: type: enum: - chart type: string required: - type type: object Capability: description: |- Some APIs are annotated with required capabilities. These endpoints require the user to possess the required capabilities in order to be called successfully. enum: - autofill - brand_template - resize - team_restricted_app type: string x-enum-descriptions: - "Capability required to call autofill APIs Users that are members of a [Canva\ \ Enterprise](https://www.canva.com/enterprise/) organization have this capability." - "Capability required to use brand template APIs. Users that are members of\ \ a [Canva Enterprise](https://www.canva.com/enterprise/) organization have\ \ this capability." - Capability required to create design resize jobs. Users on a Canva plan with premium features (such as Canva Pro) have this capability. - "Capability required to create a team-restricted app. Users that are members\ \ of the [Canva Enterprise](https://www.canva.com/enterprise/) or the [Canva\ \ for Education](https://www.canva.com/education/) organization have this\ \ capability." CreateCommentRequest: properties: attached_to: $ref: '#/components/schemas/CommentObjectInput' message: description: |- The comment message. This is the comment body shown in the Canva UI. You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. If the `assignee_id` parameter is specified, you must mention the assignee in the message. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" maxLength: 2048 minLength: 1 type: string assignee_id: description: |- Lets you assign the comment to a Canva user using their User ID. You _must_ mention the assigned user in the `message`. example: oUnPjZ2k2yuhftbWF7873o type: string required: - attached_to - message type: object CreateReplyRequest: properties: attached_to: $ref: '#/components/schemas/CommentObjectInput' message: description: |- The reply comment message. This is the reply comment body shown in the Canva UI. You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. example: Thanks! maxLength: 2048 minLength: 1 type: string required: - attached_to - message type: object CreateReplyV2Request: properties: message_plaintext: description: |- The comment message of the reply in plaintext. This is the reply comment shown in the Canva UI. You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. example: Thanks! maxLength: 2048 minLength: 1 type: string required: - message_plaintext type: object CreateCommentResponse: properties: comment: $ref: '#/components/schemas/ParentComment' required: - comment type: object CreateThreadResponse: properties: thread: $ref: '#/components/schemas/Thread' required: - thread type: object CreateReplyResponse: properties: comment: $ref: '#/components/schemas/ReplyComment' required: - comment type: object CreateThreadRequest: properties: message_plaintext: description: |- The comment message in plaintext. This is the comment body shown in the Canva UI. You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. If the `assignee_id` parameter is specified, you must mention the assignee in the message. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" maxLength: 2048 minLength: 1 type: string assignee_id: description: |- Lets you assign the comment to a Canva user using their User ID. You _must_ mention the assigned user in the `message`. example: oUnPjZ2k2yuhftbWF7873o type: string required: - message_plaintext type: object CreateReplyV2Response: properties: reply: $ref: '#/components/schemas/Reply' required: - reply type: object GetThreadResponse: description: |- Successful response from a `getThread` request. The `comment` property is deprecated. For details of a comment thread, please use the `thread` property. properties: comment: $ref: '#/components/schemas/Comment' thread: $ref: '#/components/schemas/Thread' type: object GetReplyResponse: description: Successful response from a `getReply` request. properties: reply: $ref: '#/components/schemas/Reply' required: - reply type: object Comment: deprecated: true description: |- The comment object, which contains metadata about the comment. Deprecated in favor of the new `thread` object. discriminator: mapping: parent: '#/components/schemas/ParentComment' reply: '#/components/schemas/ReplyComment' propertyName: type oneOf: - $ref: '#/components/schemas/ParentComment' - $ref: '#/components/schemas/ReplyComment' type: object ParentComment: deprecated: true description: |- Data about the comment, including the message, author, and the object (such as a design) the comment is attached to. properties: type: enum: - parent type: string id: description: |- The ID of the comment. You can use this ID to create replies to the comment using the [Create reply API](https://www.canva.dev/docs/connect/api-reference/comments/create-reply/). example: KeAbiEAjZEj type: string attached_to: $ref: '#/components/schemas/CommentObject' message: description: |- The comment message. This is the comment body shown in the Canva UI. User mentions are shown here in the format `[user_id:team_id]`. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" type: string author: $ref: '#/components/schemas/User' created_at: description: |- When the comment or reply was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer updated_at: description: |- When the comment or reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928900 format: int64 type: integer mentions: additionalProperties: $ref: '#/components/schemas/TeamUser' deprecated: true description: The Canva users mentioned in the comment. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object assignee: $ref: '#/components/schemas/User' resolver: $ref: '#/components/schemas/User' required: - author - id - mentions - message - type type: object ReplyComment: deprecated: true description: |- Data about the reply comment, including the message, author, and the object (such as a design) the comment is attached to. properties: type: enum: - reply type: string id: description: The ID of the comment. example: KeAZEAjijEb type: string attached_to: $ref: '#/components/schemas/CommentObject' message: description: |- The comment message. This is the comment body shown in the Canva UI. User mentions are shown here in the format `[user_id:team_id]`. example: Thanks! type: string author: $ref: '#/components/schemas/User' created_at: description: |- When the comment or reply was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692929800 format: int64 type: integer updated_at: description: |- When the comment or reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692929900 format: int64 type: integer mentions: additionalProperties: $ref: '#/components/schemas/TeamUser' deprecated: true description: The Canva users mentioned in the comment. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object thread_id: description: |- The ID of the comment thread this reply is in. This ID is the same as the `id` of the parent comment. example: KeAbiEAjZEj type: string required: - author - id - mentions - message - thread_id - type type: object CommentObject: deprecated: true description: Identifying information about the object (such as a design) that the comment is attached to. discriminator: mapping: design: '#/components/schemas/DesignCommentObject' propertyName: type example: design_id: DAFVztcvd9z type: design oneOf: - $ref: '#/components/schemas/DesignCommentObject' type: object DesignCommentObject: deprecated: true description: If the comment is attached to a Canva Design. properties: type: enum: - design type: string design_id: description: The ID of the design this comment is attached to. example: DAFVztcvd9z type: string required: - design_id - type type: object CommentObjectInput: description: |- An object containing identifying information for the design or other object you want to attach the comment to. discriminator: mapping: design: '#/components/schemas/DesignCommentObjectInput' propertyName: type example: design_id: DAFVztcvd9z type: design oneOf: - $ref: '#/components/schemas/DesignCommentObjectInput' type: object DesignCommentObjectInput: description: If the comment is attached to a Canva Design. properties: type: enum: - design type: string design_id: description: The ID of the design you want to attach this comment to. example: DAFVztcvd9z type: string required: - design_id - type type: object CommentEventDeprecated: deprecated: true description: |- Basic details about the comment. The `comment` property is deprecated. For details of the comment event, use the `comment_event` property instead. properties: type: $ref: '#/components/schemas/CommentEventTypeEnum' data: $ref: '#/components/schemas/Comment' required: - data - type type: object Mentions: additionalProperties: $ref: '#/components/schemas/TeamUser' deprecated: true description: The Canva users mentioned in the comment. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object CommentEventTypeEnum: deprecated: true description: The type of comment event. enum: - comment - reply - mention - assign - resolve type: string CommentEvent: description: "The type of comment event, including additional type-specific\ \ properties." discriminator: mapping: new: '#/components/schemas/NewCommentEvent' assigned: '#/components/schemas/AssignedCommentEvent' resolved: '#/components/schemas/ResolvedCommentEvent' reply: '#/components/schemas/ReplyCommentEvent' mention: '#/components/schemas/MentionCommentEvent' propertyName: type oneOf: - $ref: '#/components/schemas/NewCommentEvent' - $ref: '#/components/schemas/AssignedCommentEvent' - $ref: '#/components/schemas/ResolvedCommentEvent' - $ref: '#/components/schemas/ReplyCommentEvent' - $ref: '#/components/schemas/MentionCommentEvent' type: object NewCommentEvent: description: Event type for a new comment thread. properties: type: enum: - new type: string comment_url: description: "A URL to the design, focused on the comment thread." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string comment: $ref: '#/components/schemas/Thread' required: - comment - comment_url - type type: object AssignedCommentEvent: description: Event type for a comment thread that has been assigned. properties: type: enum: - assigned type: string comment_url: description: "A URL to the design, focused on the comment thread." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string comment: $ref: '#/components/schemas/Thread' required: - comment - comment_url - type type: object ResolvedCommentEvent: description: Event type for a comment thread that has been resolved. properties: type: enum: - resolved type: string comment_url: description: "A URL to the design, focused on the comment thread." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string comment: $ref: '#/components/schemas/Thread' required: - comment - comment_url - type type: object ReplyCommentEvent: description: Event type for a reply to a comment thread. properties: type: enum: - reply type: string reply_url: description: "A URL to the design, focused on the comment reply." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string reply: $ref: '#/components/schemas/Reply' required: - reply - reply_url - type type: object MentionCommentEvent: description: Event type for a mention in a comment thread or reply. properties: type: enum: - mention type: string content: $ref: '#/components/schemas/MentionEventContent' required: - content - type type: object MentionEventContent: description: "The type of mention event content, along with additional type-specific\ \ properties." discriminator: mapping: thread: '#/components/schemas/ThreadMentionEventContent' reply: '#/components/schemas/ReplyMentionEventContent' propertyName: type oneOf: - $ref: '#/components/schemas/ThreadMentionEventContent' - $ref: '#/components/schemas/ReplyMentionEventContent' type: object ThreadMentionEventContent: description: Content for a mention in a comment thread. properties: type: enum: - thread type: string comment_url: description: "A URL to the design, focused on the comment thread." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string comment: $ref: '#/components/schemas/Thread' required: - comment - comment_url - type type: object ReplyMentionEventContent: description: Content for a mention in a comment reply. properties: type: enum: - reply type: string reply_url: description: "A URL to the design, focused on the comment reply." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string reply: $ref: '#/components/schemas/Reply' required: - reply - reply_url - type type: object ListRepliesResponse: description: Successful response from a `listReplies` request. properties: continuation: description: |- If the success response contains a continuation token, the list contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example `?continuation={continuation}`. To retrieve all items, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string items: items: $ref: '#/components/schemas/Reply' type: array required: - items type: object Thread: description: |- A discussion thread on a design. The `type` of the thread can be found in the `thread_type` object, along with additional type-specific properties. The `author` of the thread might be missing if that user account no longer exists. properties: id: description: |- The ID of the thread. You can use this ID to create replies to the thread using the [Create reply API](https://www.canva.dev/docs/connect/api-reference/comments/create-reply/). example: KeAbiEAjZEj type: string design_id: description: The ID of the design that the discussion thread is on. example: DAFVztcvd9z type: string thread_type: $ref: '#/components/schemas/ThreadType' author: $ref: '#/components/schemas/User' created_at: description: |- When the thread was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer updated_at: description: |- When the thread was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928900 format: int64 type: integer required: - created_at - design_id - id - thread_type - updated_at type: object ThreadType: description: "The type of the discussion thread, along with additional type-specific\ \ properties." discriminator: mapping: comment: '#/components/schemas/CommentThreadType' suggestion: '#/components/schemas/SuggestionThreadType' propertyName: type oneOf: - $ref: '#/components/schemas/CommentThreadType' - $ref: '#/components/schemas/SuggestionThreadType' type: object CommentThreadType: description: A comment thread. properties: type: enum: - comment type: string content: $ref: '#/components/schemas/CommentContent' mentions: additionalProperties: $ref: '#/components/schemas/UserMention' description: The Canva users mentioned in the comment thread or reply. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: tag: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP user: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object assignee: $ref: '#/components/schemas/User' resolver: $ref: '#/components/schemas/User' required: - content - mentions - type type: object SuggestionThreadType: description: A suggestion thread. properties: type: enum: - suggestion type: string suggested_edits: items: $ref: '#/components/schemas/SuggestedEdit' minItems: 1 type: array status: $ref: '#/components/schemas/SuggestionStatus' required: - status - suggested_edits - type type: object SuggestedEdit: description: "The type of the suggested edit, along with additional type-specific\ \ properties." discriminator: mapping: add: '#/components/schemas/AddSuggestedEdit' delete: '#/components/schemas/DeleteSuggestedEdit' format: '#/components/schemas/FormatSuggestedEdit' propertyName: type oneOf: - $ref: '#/components/schemas/AddSuggestedEdit' - $ref: '#/components/schemas/DeleteSuggestedEdit' - $ref: '#/components/schemas/FormatSuggestedEdit' type: object AddSuggestedEdit: description: A suggestion to add some text. properties: type: enum: - add type: string text: example: fantastic type: string required: - text - type type: object DeleteSuggestedEdit: description: A suggestion to delete some text. properties: type: enum: - delete type: string text: example: just type: string required: - text - type type: object FormatSuggestedEdit: description: A suggestion to format some text. properties: type: enum: - format type: string format: $ref: '#/components/schemas/SuggestionFormat' required: - format - type type: object SuggestionStatus: description: The current status of the suggestion. enum: - open - accepted - rejected type: string x-enum-descriptions: - "A suggestion was made, but it hasn't been accepted or rejected yet." - A suggestion was accepted and applied to the design. - A suggestion was rejected and not applied to the design. SuggestionFormat: description: The suggested format change. enum: - font_family - font_size - font_weight - font_style - color - background_color - decoration - strikethrough - link - letter_spacing - line_height - direction - text_align - list_marker - list_level - margin_inline_start - text_indent - font_size_modifier - vertical_align example: font_style type: string Reply: description: |- A reply to a thread. The `author` of the reply might be missing if that user account no longer exists. properties: id: description: The ID of the reply. example: KeAZEAjijEb type: string design_id: description: The ID of the design that the thread for this reply is attached to. example: DAFVztcvd9z type: string thread_id: description: The ID of the thread this reply is in. example: KeAbiEAjZEj type: string author: $ref: '#/components/schemas/User' content: $ref: '#/components/schemas/CommentContent' mentions: additionalProperties: $ref: '#/components/schemas/UserMention' description: The Canva users mentioned in the comment thread or reply. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: tag: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP user: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object created_at: description: |- When the reply was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692929800 format: int64 type: integer updated_at: description: |- When the reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692929900 format: int64 type: integer required: - content - created_at - design_id - id - mentions - thread_id - updated_at type: object CommentContent: description: The content of a comment thread or reply. properties: plaintext: description: |- The content in plaintext. Any user mention tags are shown in the format `[user_id:team_id]`. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" type: string markdown: description: |- The content in markdown. Any user mention tags are shown in the format `[user_id:team_id]` example: "*_Great work_* [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" type: string required: - plaintext type: object SuggestionEventType: description: "The type of suggestion event, along with additional type-specific\ \ properties." discriminator: mapping: new: '#/components/schemas/NewSuggestionEventType' accepted: '#/components/schemas/AcceptedSuggestionEventType' rejected: '#/components/schemas/RejectedSuggestionEventType' reply: '#/components/schemas/ReplySuggestionEventType' mention: '#/components/schemas/MentionSuggestionEventType' propertyName: type oneOf: - $ref: '#/components/schemas/NewSuggestionEventType' - $ref: '#/components/schemas/AcceptedSuggestionEventType' - $ref: '#/components/schemas/RejectedSuggestionEventType' - $ref: '#/components/schemas/ReplySuggestionEventType' - $ref: '#/components/schemas/MentionSuggestionEventType' type: object NewSuggestionEventType: description: Event type for a new suggestion. properties: type: enum: - new type: string suggestion_url: description: "A URL to the design, focused on the suggestion." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string suggestion: $ref: '#/components/schemas/Thread' required: - suggestion - suggestion_url - type type: object AcceptedSuggestionEventType: description: Event type for a suggestion that has been accepted. properties: type: enum: - accepted type: string suggestion_url: description: "A URL to the design, focused on the suggestion." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string suggestion: $ref: '#/components/schemas/Thread' required: - suggestion - suggestion_url - type type: object RejectedSuggestionEventType: description: Event type for a suggestion that has been rejected. properties: type: enum: - rejected type: string suggestion_url: description: "A URL to the design, focused on the suggestion." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string suggestion: $ref: '#/components/schemas/Thread' required: - suggestion - suggestion_url - type type: object ReplySuggestionEventType: description: Event type for a reply to a suggestion. properties: type: enum: - reply type: string reply_url: description: "A URL to the design, focused on the suggestion reply." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string reply: $ref: '#/components/schemas/Reply' required: - reply - reply_url - type type: object MentionSuggestionEventType: description: Event type for a mention in a reply to a suggestion. properties: type: enum: - mention type: string reply_url: description: "A URL to the design, focused on the suggestion reply." example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string reply: $ref: '#/components/schemas/Reply' required: - reply - reply_url - type type: object UserMentions: additionalProperties: $ref: '#/components/schemas/UserMention' description: The Canva users mentioned in the comment thread or reply. example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP: tag: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP user: user_id: oUnPjZ2k2yuhftbWF7873o team_id: oBpVhLW22VrqtwKgaayRbP display_name: John Doe type: object UserMention: description: Information about the user mentioned in a comment thread or reply. Each user mention is keyed using the user's user ID and team ID separated by a colon (`user_id:team_id`). properties: tag: description: The mention tag for the user mentioned in the comment thread or reply content. This has the format of the user's user ID and team ID separated by a colon (`user_id:team_id`). example: oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP type: string user: $ref: '#/components/schemas/TeamUser' required: - tag - user type: object GetSigningPublicKeysResponse: properties: keys: description: |- A Json Web Key Set (JWKS) with public keys used for signing webhooks. You can use this JWKS to verify that a webhook was sent from Canva. example: - kid: a418dc7d-ecc5-5c4b-85ce-e1104a8addbe kty: OKP crv: Ed25519 x: aIQtqd0nDfB-ug0DrzZbwTum-1ITdXvKxGFak_1VB2j - kid: c8de5bec1-1b88-4ddaae04acc-ce415-5d7 kty: OKP crv: Ed25519 x: m2d1FT-gfBXxIzKwdQVTra0D-aBq_ubZ1jI0GuvkDtn items: $ref: '#/components/schemas/EdDsaJwk' type: array required: - keys type: object EdDsaJwk: description: |- A JSON Web Key Set (JWKS) using the Edwards-curve Digital Signature Algorithm (EdDSA), as described in [RFC-8037](https://www.rfc-editor.org/rfc/rfc8037.html#appendix-A). properties: kid: description: |- The `kid` (key ID) is a unique identifier for a public key. When the keys used to sign webhooks are rotated, you can use this ID to select the correct key within a JWK Set during the key rollover. The `kid` value is case-sensitive. type: string kty: description: |- The `kty` (key type) identifies the cryptographic algorithm family used with the key, such as "RSA" or "EC". Only Octet Key Pairs (`OKPs`) are supported. The `kty` value is case-sensitive. For more information on the `kty` property and OKPs, see [RFC-8037 — "kty" (Key Type) Parameter](https://www.rfc-editor.org/rfc/rfc8037.html#section-2). type: string crv: description: |- The `crv` (curve) property identifies the curve used for elliptical curve encryptions. Only "Ed25519" is supported. For more information on the `crv` property, see [RFC-8037 — Key Type "OKP"](https://www.rfc-editor.org/rfc/rfc8037.html#section-2). type: string x: description: |- The `x` property is the public key of an elliptical curve encryption. The key is Base64urlUInt-encoded. For more information on the `x` property, see [RFC-8037 — "x" (X Coordinate) Parameter](https://www.rfc-editor.org/rfc/rfc8037#section-2). type: string required: - crv - kid - kty - x type: object DataTable: description: |- Tabular data, structured in rows of cells. - The first row usually contains column headers. - Each cell must have a data type configured. - All rows must have the same number of cells. - Maximum of 100 rows and 20 columns. WARNING: Chart data fields are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. example: rows: - cells: - type: string value: Geographic Region - type: string value: Sales (millions AUD) - type: string value: Target (millions AUD) - type: string value: Target met? - type: string value: Date met - cells: - type: string value: Asia Pacific - type: number value: 10.2 - type: number value: 10 - type: boolean value: true - type: date value: 1721944387 - cells: - type: string value: EMEA - type: number value: 13.8 - type: number value: 14 - type: boolean value: false - type: date properties: rows: description: |- Rows of data. The first row usually contains column headers. items: $ref: '#/components/schemas/DataTableRow' maxItems: 100 type: array required: - rows type: object DataTableRow: description: A single row of tabular data. properties: cells: description: |- Cells of data in row. All rows must have the same number of cells. items: $ref: '#/components/schemas/DataTableCell' maxItems: 20 type: array required: - cells type: object DataTableCell: description: A single tabular data cell. discriminator: mapping: string: '#/components/schemas/StringDataTableCell' number: '#/components/schemas/NumberDataTableCell' boolean: '#/components/schemas/BooleanDataTableCell' date: '#/components/schemas/DateDataTableCell' propertyName: type oneOf: - $ref: '#/components/schemas/StringDataTableCell' - $ref: '#/components/schemas/NumberDataTableCell' - $ref: '#/components/schemas/BooleanDataTableCell' - $ref: '#/components/schemas/DateDataTableCell' type: object StringDataTableCell: description: A string tabular data cell. properties: type: enum: - string type: string value: type: string required: - type type: object NumberDataTableCell: description: A number tabular data cell. properties: type: enum: - number type: string value: format: double type: number required: - type type: object BooleanDataTableCell: description: A boolean tabular data cell. properties: type: enum: - boolean type: string value: type: boolean required: - type type: object DateDataTableCell: description: |- A date tabular data cell. Specified as a Unix timestamp (in seconds since the Unix Epoch). properties: type: enum: - date type: string value: format: int64 type: integer required: - type type: object SortByType: default: relevance enum: - relevance - modified_descending - modified_ascending - title_descending - title_ascending type: string x-enum-descriptions: - Sort results using a relevance algorithm. - Sort results by the date last modified in descending order. - Sort results by the date last modified in ascending order. - Sort results by title in descending order. - Sort results by title in ascending order OwnershipType: default: any enum: - any - owned - shared type: string x-enum-descriptions: - Owned by and shared with the user. - Owned by the user. - Shared with the user. GetListDesignResponse: properties: continuation: description: |- A continuation token. If the success response contains a continuation token, the list contains more designs you can list. You can use this token as a query parameter and retrieve more designs from the list, for example `/v1/designs?continuation={continuation}`. To retrieve all of a user's designs, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string items: description: The list of designs. items: $ref: '#/components/schemas/Design' type: array required: - items type: object CreateDesignRequest: description: |- Body parameters for creating a new design. At least one of `design_type` or `asset_id` must be defined to create a new design. properties: design_type: $ref: '#/components/schemas/DesignTypeInput' asset_id: description: "The ID of an asset to insert into the created design. Currently,\ \ this only supports image assets." example: Msd59349ff type: string title: description: The name of the design. example: My Holiday Presentation maxLength: 255 minLength: 1 type: string type: object CreateDesignResponse: description: Details about the new design. properties: design: $ref: '#/components/schemas/Design' required: - design type: object GetDesignResponse: description: Successful response from a `getDesign` request. properties: design: $ref: '#/components/schemas/Design' required: - design type: object GetDesignPagesResponse: description: Successful response from a `getDesignPages` request. properties: items: description: The list of pages. items: $ref: '#/components/schemas/DesignPage' type: array required: - items type: object GetDesignExportFormatsResponse: description: Successful response from a `getDesignExportFormats` request. properties: formats: $ref: '#/components/schemas/ExportFormatOptions' required: - formats type: object Design: description: "The design object, which contains metadata about the design." properties: id: description: The design ID. example: DAFVztcvd9z type: string title: description: The design title. example: My summer holiday type: string owner: $ref: '#/components/schemas/TeamUserSummary' thumbnail: $ref: '#/components/schemas/Thumbnail' urls: $ref: '#/components/schemas/DesignLinks' created_at: description: |- When the design was created in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the design was last updated in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer page_count: description: "The total number of pages in the design. Some design types\ \ don't have pages (for example, Canva docs)." example: 5 format: int32 minimum: 0 type: integer required: - created_at - id - owner - updated_at - urls type: object PageIndex: description: The index of the page in the design. The first page in a design has the index value `1`. maximum: 500 minimum: 1 type: integer DesignLinks: description: A temporary set of URLs for viewing or editing the design. properties: edit_url: description: |- A temporary editing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support [return navigation](https://www.canva.dev/docs/connect/return-navigation-guide/) workflows. NOTE: This is not a permanent URL, it is only valid for 30 days. example: https://www.canva.com/api/design/eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiZXhwaXJ5IjoxNzQyMDk5NDAzMDc5fQ..GKLx2hrJa3wSSDKQ.hk3HA59qJyxehR-ejzt2DThBW0cbRdMBz7Fb5uCpwD-4o485pCf4kcXt_ypUYX0qMHVeZ131YvfwGPIhbk-C245D8c12IIJSDbZUZTS7WiCOJZQ.sNz3mPSQxsETBvl_-upMYA/edit type: string view_url: description: | A temporary viewing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support [return navigation](https://www.canva.dev/docs/connect/return-navigation-guide/) workflows. NOTE: This is not a permanent URL, it is only valid for 30 days. example: https://www.canva.com/api/design/eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiZXhwaXJ5IjoxNzQyMDk5NDAzMDc5fQ..GKLx2hrJa3wSSDKQ.hk3HA59qJyxehR-ejzt2DThBW0cbRdMBz7Fb5uCpwD-4o485pCf4kcXt_ypUYX0qMHVeZ131YvfwGPIhbk-C245D8c12IIJSDbZUZTS7WiCOJZQ.sNz3mPSQxsETBvl_-upMYA/view type: string required: - edit_url - view_url type: object DesignSummary: description: "Basic details about the design, such as the design's ID, title,\ \ and URL." properties: id: description: The design ID. example: DAFVztcvd9z type: string title: description: The design title. example: My summer holiday type: string url: description: URL of the design. example: https://www.canva.com/design/DAFVztcvd9z/edit type: string thumbnail: $ref: '#/components/schemas/Thumbnail' urls: $ref: '#/components/schemas/DesignLinks' created_at: description: |- When the design was created in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the design was last updated in Canva, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer page_count: description: "The total number of pages in the design. Some design types\ \ don't have pages (for example, Canva docs)." example: 3 format: int32 minimum: 0 type: integer required: - created_at - id - updated_at - urls type: object DesignPage: description: "Basic details about a page in a design, such as the page's index\ \ and thumbnail." properties: index: description: The index of the page in the design. The first page in a design has the index value `1`. maximum: 500 minimum: 1 type: integer thumbnail: $ref: '#/components/schemas/Thumbnail' required: - index type: object DesignImportMetadata: description: Metadata about the design that you include as a header parameter when importing a design. properties: title_base64: description: |- The design's title, encoded in Base64. The maximum length of a design title in Canva (unencoded) is 50 characters. Base64 encoding allows titles containing emojis and other special characters to be sent using HTTP headers. For example, "My Awesome Design 😍" Base64 encoded is `TXkgQXdlc29tZSBEZXNpZ24g8J+YjQ==`. example: TXkgQXdlc29tZSBEZXNpZ24g8J+YjQ== minLength: 1 type: string mime_type: description: "The MIME type of the file being imported. If not provided,\ \ Canva attempts to automatically detect the type of the file." example: application/pdf type: string required: - title_base64 type: object CreateDesignImportJobResponse: properties: job: $ref: '#/components/schemas/DesignImportJob' required: - job type: object DesignImportJob: description: The status of the design import job. properties: id: description: The ID of the design import job. example: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 type: string status: $ref: '#/components/schemas/DesignImportStatus' result: $ref: '#/components/schemas/DesignImportJobResult' error: $ref: '#/components/schemas/DesignImportError' required: - id - status type: object DesignImportStatus: description: The status of the design import job. enum: - failed - in_progress - success example: success type: string DesignImportError: description: "If the import job fails, this object provides details about the\ \ error." properties: code: $ref: '#/components/schemas/DesignImportErrorCode' message: description: A human-readable description of what went wrong. example: "We're sorry, but the file upload quota has exceeded. Please try\ \ again later." type: string required: - code - message type: object DesignImportErrorCode: description: |- A short string about why the import failed. This field can be used to handle errors programmatically. enum: - design_creation_throttled - design_import_throttled - duplicate_import - internal_error - invalid_file - fetch_failed example: design_creation_throttled type: string DesignImportJobResult: properties: designs: description: |- A list of designs imported from the external file. It usually contains one item. Imports with a large number of pages or assets are split into multiple designs. items: $ref: '#/components/schemas/DesignSummary' type: array required: - designs type: object GetDesignImportJobResponse: properties: job: $ref: '#/components/schemas/DesignImportJob' required: - job type: object CreateUrlImportJobRequest: properties: title: description: A title for the design. example: My Awesome Design maxLength: 255 minLength: 1 type: string url: description: The URL of the file to import. This URL must be accessible from the internet and be publicly available. maxLength: 2048 minLength: 1 type: string mime_type: description: "The MIME type of the file being imported. If not provided,\ \ Canva attempts to automatically detect the type of the file." example: application/vnd.apple.keynote maxLength: 100 minLength: 1 type: string required: - title - url type: object CreateUrlImportJobResponse: properties: job: $ref: '#/components/schemas/DesignImportJob' required: - job type: object GetUrlImportJobResponse: properties: job: $ref: '#/components/schemas/DesignImportJob' required: - job type: object DesignTypeInput: description: The desired design type. discriminator: mapping: preset: '#/components/schemas/PresetDesignTypeInput' custom: '#/components/schemas/CustomDesignTypeInput' propertyName: type oneOf: - $ref: '#/components/schemas/PresetDesignTypeInput' - $ref: '#/components/schemas/CustomDesignTypeInput' type: object PresetDesignTypeInput: description: Provide the common design type. properties: type: enum: - preset type: string name: $ref: '#/components/schemas/PresetDesignTypeName' required: - name - type type: object PresetDesignTypeName: description: The name of the design type. enum: - doc - whiteboard - presentation type: string x-enum-descriptions: - "A [Canva doc](https://www.canva.com/docs/); a document for Canva's online\ \ text editor." - "A [whiteboard](https://www.canva.com/online-whiteboard/); a design which\ \ gives you infinite space to collaborate." - "A [presentation](https://www.canva.com/presentations/); lets you create and\ \ collaborate for presenting to an audience." CustomDesignTypeInput: description: Provide the width and height to define a custom design type. properties: type: enum: - custom type: string width: description: "The width of the design, in pixels." example: 320 maximum: 8000 minimum: 40 type: integer height: description: "The height of the design, in pixels." example: 200 maximum: 8000 minimum: 40 type: integer required: - height - type - width type: object Error: properties: code: $ref: '#/components/schemas/ErrorCode' message: description: A human-readable description of what went wrong. type: string required: - code - message type: object OauthError: properties: error: $ref: '#/components/schemas/ErrorCode' error_description: description: A human-readable description of what went wrong. type: string required: - error - error_description type: object ErrorCode: description: | A short string indicating what failed. This field can be used to handle errors programmatically. enum: - internal_error - invalid_field - invalid_header_value - permission_denied - too_many_requests - not_found - bad_request_body - bad_http_method - bad_request_params - bad_query_params - endpoint_not_found - unsupported_version - invalid_access_token - revoked_access_token - missing_field - missing_scope - invalid_grant - invalid_request - invalid_client - unauthorized_client - unsupported_grant_type - invalid_scope - invalid_basic_header - invalid_file_format - quota_exceeded - unsupported_content_type - request_too_large - folder_not_found - item_in_multiple_folders - asset_not_found - max_limit_reached - permission_not_found - permission_exists - unauthorized_user - user_not_found - group_not_found - app_not_found - content_not_found - doctype_not_found - design_not_found - offset_too_large - page_not_found - design_or_comment_not_found - design_or_thread_not_found - design_type_not_found - team_not_found - comment_not_found - too_many_comments - too_many_replies - message_too_long - thread_not_found - reply_not_found - design_not_fillable - autofill_data_invalid - feature_not_available - license_required - input_unsafe - display_name_unavailable type: string CreateDesignExportJobRequest: description: |- Body parameters for starting an export job for a design. It must include a design ID, and one of the supported export formats. example: design_id: DAVZr1z5464 format: type: pdf size: a4 pages: - 2 - 3 - 4 properties: design_id: description: The design ID. type: string format: $ref: '#/components/schemas/ExportFormat' required: - design_id - format type: object ExportFormat: description: Details about the desired export format. discriminator: mapping: pdf: '#/components/schemas/PdfExportFormat' jpg: '#/components/schemas/JpgExportFormat' png: '#/components/schemas/PngExportFormat' pptx: '#/components/schemas/PptxExportFormat' gif: '#/components/schemas/GifExportFormat' mp4: '#/components/schemas/Mp4ExportFormat' propertyName: type oneOf: - $ref: '#/components/schemas/PdfExportFormat' - $ref: '#/components/schemas/JpgExportFormat' - $ref: '#/components/schemas/PngExportFormat' - $ref: '#/components/schemas/PptxExportFormat' - $ref: '#/components/schemas/GifExportFormat' - $ref: '#/components/schemas/Mp4ExportFormat' type: object PdfExportFormat: description: Export the design as a PDF. Providing a paper size is optional. properties: type: enum: - pdf type: string export_quality: $ref: '#/components/schemas/ExportQuality' size: $ref: '#/components/schemas/ExportPageSize' pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - type type: object GifExportFormat: description: |- Export the design as a GIF. Height or width (or both) may be specified, otherwise the file will be exported at it's default size. Large designs will be scaled down, and aspect ratio will always be maintained. properties: type: enum: - gif type: string export_quality: $ref: '#/components/schemas/ExportQuality' height: description: |- Specify the height in pixels of the exported image. Note the following behavior: - If no height or width is specified, the image is exported using the dimensions of the design. - If only one of height or width is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the height and width are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer width: description: |- Specify the width in pixels of the exported image. Note the following behavior: - If no width or height is specified, the image is exported using the dimensions of the design. - If only one of width or height is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the width and height are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - type type: object JpgExportFormat: description: |- Export the design as a JPEG. Compression quality must be provided. Height or width (or both) may be specified, otherwise the file will be exported at it's default size. If the user is on the Canva Free plan, the export height and width for a fixed-dimension design can't be upscaled by more than a factor of `1.125`. properties: type: enum: - jpg type: string export_quality: $ref: '#/components/schemas/ExportQuality' quality: description: "For the `jpg` type, the `quality` of the exported JPEG determines\ \ how compressed the exported file should be. A _low_ `quality` value\ \ will create a file with a smaller file size, but the resulting file\ \ will have pixelated artifacts when compared to a file created with a\ \ _high_ `quality` value." example: 80 maximum: 100 minimum: 1 type: integer height: description: |- Specify the height in pixels of the exported image. Note the following behavior: - If no height or width is specified, the image is exported using the dimensions of the design. - If only one of height or width is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the height and width are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer width: description: |- Specify the width in pixels of the exported image. Note the following behavior: - If no width or height is specified, the image is exported using the dimensions of the design. - If only one of width or height is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the width and height are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - quality - type type: object PngExportFormat: description: |- Export the design as a PNG. Height or width (or both) may be specified, otherwise the file will be exported at it's default size. You may also specify whether to export the file losslessly, and whether to export a multi-page design as a single image. If the user is on the Canva Free plan, the export height and width for a fixed-dimension design can't be upscaled by more than a factor of `1.125`. properties: type: enum: - png type: string export_quality: $ref: '#/components/schemas/ExportQuality' height: description: |- Specify the height in pixels of the exported image. Note the following behavior: - If no height or width is specified, the image is exported using the dimensions of the design. - If only one of height or width is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the height and width are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer width: description: |- Specify the width in pixels of the exported image. Note the following behavior: - If no width or height is specified, the image is exported using the dimensions of the design. - If only one of width or height is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the width and height are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer lossless: default: true description: |- If set to `true` (default), the PNG is exported without compression. If set to `false`, the PNG is compressed using a lossy compression algorithm. Lossy PNG compression is only available to users on a Canva plan that has premium features, such as Canva Pro. If the user is on the Canva Free plan and this parameter is set to `false`, the export operation will fail. type: boolean transparent_background: default: false description: |- If set to `true`, the PNG is exported with a transparent background. This option is only available to users on a Canva plan that has premium features, such as Canva Pro. If the user is on the Canva Free plan and this parameter is set to `true`, the export operation will fail. type: boolean as_single_image: default: false description: |- When `true`, multi-page designs are merged into a single image. When `false` (default), each page is exported as a separate image. type: boolean pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - type type: object PptxExportFormat: description: Export the design as a PPTX. properties: type: enum: - pptx type: string pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - type type: object Mp4ExportFormat: description: Export the design as an MP4. You must specify the quality of the exported video. properties: type: enum: - mp4 type: string export_quality: $ref: '#/components/schemas/ExportQuality' quality: $ref: '#/components/schemas/Mp4ExportQuality' pages: description: |- To specify which pages to export in a multi-page design, provide the page numbers as an array. The first page in a design is page `1`. If `pages` isn't specified, all the pages are exported. example: - 2 - 3 - 4 items: minimum: 1 type: integer type: array required: - quality - type type: object CreateDesignExportJobResponse: properties: job: $ref: '#/components/schemas/ExportJob' required: - job type: object GetDesignExportJobResponse: properties: job: $ref: '#/components/schemas/ExportJob' required: - job type: object ExportJob: description: The status of the export job. properties: id: description: The export job ID. example: e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8 type: string status: $ref: '#/components/schemas/DesignExportStatus' urls: description: |- Download URL(s) for the completed export job. These URLs expire after 24 hours. Depending on the design type and export format, there is a download URL for each page in the design. The list is sorted by page order. example: - https://export-download.canva-dev.com/... items: type: string type: array error: $ref: '#/components/schemas/ExportError' required: - id - status type: object ExportPageSize: default: a4 description: The paper size of the export PDF file. The `size` attribute is only supported for Documents (Canva Docs). enum: - a4 - a3 - letter - legal example: a4 type: string DesignExportStatus: description: |- The export status of the job. A newly created job will be `in_progress` and will eventually become `success` or `failed`. enum: - failed - in_progress - success type: string ExportHeight: description: |- Specify the height in pixels of the exported image. Note the following behavior: - If no height or width is specified, the image is exported using the dimensions of the design. - If only one of height or width is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the height and width are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer ExportWidth: description: |- Specify the width in pixels of the exported image. Note the following behavior: - If no width or height is specified, the image is exported using the dimensions of the design. - If only one of width or height is specified, then the image is scaled to match that dimension, respecting the design's aspect ratio. - If both the width and height are specified, but the values don't match the design's aspect ratio, the export defaults to the larger dimension. example: 400 format: int32 maximum: 25000 minimum: 40 type: integer Mp4ExportQuality: description: |- The orientation and resolution of the exported video. Orientation is either `horizontal` or `vertical`, and resolution is one of `480p`, `720p`, `1080p` or `4k`. enum: - horizontal_480p - horizontal_720p - horizontal_1080p - horizontal_4k - vertical_480p - vertical_720p - vertical_1080p - vertical_4k type: string ExportFormatOptions: description: The available file formats for exporting the design. properties: pdf: $ref: '#/components/schemas/PdfExportFormatOption' jpg: $ref: '#/components/schemas/JpgExportFormatOption' png: $ref: '#/components/schemas/PngExportFormatOption' svg: $ref: '#/components/schemas/SvgExportFormatOption' pptx: $ref: '#/components/schemas/PptxExportFormatOption' gif: $ref: '#/components/schemas/GifExportFormatOption' mp4: $ref: '#/components/schemas/Mp4ExportFormatOption' type: object PdfExportFormatOption: description: Whether the design can be exported as a PDF. type: object GifExportFormatOption: description: Whether the design can be exported as a GIF. type: object JpgExportFormatOption: description: Whether the design can be exported as a JPEG. type: object PngExportFormatOption: description: Whether the design can be exported as a PNG. type: object SvgExportFormatOption: description: Whether the design can be exported as an SVG. type: object PptxExportFormatOption: description: Whether the design can be exported as a PPTX. type: object Mp4ExportFormatOption: description: Whether the design can be exported as an MP4. type: object ExportError: description: "If the export fails, this object provides details about the error." properties: code: $ref: '#/components/schemas/ExportErrorCode' message: description: A human-readable description of what went wrong. type: string required: - code - message type: object ExportErrorCode: description: |- If the export failed, this specifies the reason why it failed. - `license_required`: The design contains [premium elements](https://www.canva.com/help/premium-elements/) that haven't been purchased. You can either buy the elements or upgrade to a Canva plan (such as Canva Pro) that has premium features, then try again. Alternatively, you can set `export_quality` to `regular` to export your document in regular quality. - `approval_required`: The design requires [reviewer approval](https://www.canva.com/en_au/help/design-approval/) before it can be exported. - `internal_failure`: The service encountered an error when exporting your design. enum: - license_required - approval_required - internal_failure type: string x-enum-descriptions: - "The design contains [premium elements](https://www.canva.com/help/premium-elements/)\ \ that haven't been purchased. You can either buy the elements or upgrade\ \ to a Canva plan (such as Canva Pro) that has premium features, then try\ \ again. Alternatively, you can set `export_quality` to `regular` to export\ \ your document in regular quality." - "The design requires [reviewer approval](https://www.canva.com/en_au/help/design-approval/)\ \ before it can be exported." - The service encountered an error when exporting your design. ExportQuality: default: regular description: Specifies the export quality of the design. enum: - regular - pro type: string x-enum-descriptions: - Regular quality export. - |- Premium quality export. NOTE: A `pro` export might fail if the design contains [premium elements](https://www.canva.com/help/premium-elements/) and the calling user either hasn't purchased the elements or isn't on a Canva plan (such as Canva Pro) that has premium features. FolderItemSortBy: default: modified_descending enum: - created_ascending - created_descending - modified_ascending - modified_descending - title_ascending - title_descending type: string x-enum-descriptions: - "Sort results by creation date, in ascending order." - "Sort results by creation date, in descending order." - "Sort results by the last modified date, in ascending order." - "Sort results by the last modified date, in descending order." - "Sort results by title, in ascending order. The title is either the `name`\ \ field for a folder or asset, or the `title` field for a design." - "Sort results by title, in descending order. The title is either the `name`\ \ field for a folder or asset, or the `title` field for a design." FolderItemType: enum: - design - folder - image type: string GetFolderResponse: description: The folder ID. properties: folder: $ref: '#/components/schemas/Folder' required: - folder type: object CreateFolderRequest: description: Body parameters for creating a new folder. properties: name: description: The name of the folder. example: My awesome holiday maxLength: 255 minLength: 1 type: string parent_folder_id: description: |- The folder ID of the parent folder. To create a new folder at the top level of a user's [projects](https://www.canva.com/help/find-designs-and-folders/), use the ID `root`. To create it in their Uploads folder, use `uploads`. example: FAF2lZtloor maxLength: 50 minLength: 1 type: string required: - name - parent_folder_id type: object CreateFolderResponse: description: Details about the new folder. properties: folder: $ref: '#/components/schemas/Folder' type: object UpdateFolderRequest: description: Body parameters for updating the folder's details. properties: name: description: "The folder name, as shown in the Canva UI." example: My awesome holiday maxLength: 255 minLength: 1 type: string required: - name type: object UpdateFolderResponse: description: Details about the updated folder. properties: folder: $ref: '#/components/schemas/Folder' type: object ListFolderItemsResponse: description: |- A list of the items in a folder. If the success response contains a continuation token, the folder contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example `/v1/folders/{folderId}/items?continuation={continuation}`. To retrieve all the items in a folder, you might need to make multiple requests. properties: items: description: An array of items in the folder. items: $ref: '#/components/schemas/FolderItemSummary' type: array continuation: description: |- If the success response contains a continuation token, the folder contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example `/v1/folders/{folderId}/items?continuation={continuation}`. To retrieve all the items in a folder, you might need to make multiple requests. example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string required: - items type: object FolderItemSummary: description: Details about the folder item. discriminator: mapping: folder: '#/components/schemas/FolderItem' design: '#/components/schemas/DesignItem' image: '#/components/schemas/ImageItem' propertyName: type oneOf: - $ref: '#/components/schemas/FolderItem' - $ref: '#/components/schemas/DesignItem' - $ref: '#/components/schemas/ImageItem' type: object FolderItem: description: Details about the folder. properties: type: enum: - folder type: string folder: $ref: '#/components/schemas/Folder' required: - folder - type type: object DesignItem: description: Details about the design. properties: type: enum: - design type: string design: $ref: '#/components/schemas/DesignSummary' required: - design - type type: object ImageItem: description: Details about the image asset. properties: type: enum: - image type: string image: $ref: '#/components/schemas/AssetSummary' required: - image - type type: object MoveFolderItemRequest: description: Body parameters for moving the folder. properties: to_folder_id: description: |- The ID of the folder you want to move the item to (the destination folder). If you want to move the item to the top level of a Canva user's [projects](https://www.canva.com/help/find-designs-and-folders/), use the ID `root`. example: FAF2lZtloor maxLength: 50 minLength: 1 type: string item_id: description: "The ID of the item you want to move. Currently, video assets\ \ are not supported." example: Msd59349ff maxLength: 50 minLength: 1 type: string required: - item_id - to_folder_id type: object Folder: description: "The folder object, which contains metadata about the folder." properties: id: description: The folder ID. example: FAF2lZtloor type: string name: description: The folder name. example: My awesome holiday type: string created_at: description: |- When the folder was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the folder was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer thumbnail: $ref: '#/components/schemas/Thumbnail' required: - created_at - id - name - updated_at type: object FolderSummary: description: |- This object contains some folder metadata. You can retrieve additional metadata using the folder ID and the `/v1/folders/{folderId}` endpoint. properties: id: description: The folder ID. example: FAF2lZtloor type: string title: deprecated: true description: |- The folder name, as shown in the Canva UI. This property is deprecated, so you should use the `name` property instead. example: My awesome holiday type: string name: description: "The folder name, as shown in the Canva UI." example: My awesome holiday type: string created_at: description: |- When the folder was created, as a Unix timestamp (in seconds since the Unix Epoch). example: 1377396000 format: int64 type: integer updated_at: description: |- When the folder was last updated, as a Unix timestamp (in seconds since the Unix Epoch). example: 1692928800 format: int64 type: integer url: description: The folder URL. example: https://www.canva.com/folder/FAF2lZtloor type: string required: - created_at - id - name - updated_at type: object Group: description: |- Metadata for the Canva Group, consisting of the Group ID, display name, and whether it's an external Canva Group. properties: id: description: The ID of the group with permissions to access the design. example: dl9n9SoWoExMsw6Ri1iTg type: string display_name: description: The display name of the group. example: Sales team type: string external: description: |- Is the user making the API call (the authenticated user) and the Canva Group from different Canva Teams? - When `true`, the user and the group aren't in the same Canva Team. - When `false`, the user and the group are in the same Canva Team. type: boolean required: - external - id type: object JsonWebKeySet: properties: keys: description: An array of JSON Web Key values. The order of keys has no meaning. items: $ref: '#/components/schemas/JsonWebKey' type: array required: - keys type: object JsonWebKey: description: |- Standard Json Web Key specification following https://www.rfc-editor.org/rfc/rfc7517 and https://www.rfc-editor.org/rfc/rfc7518.html. properties: alg: description: |- The "alg" (algorithm) parameter identifies the algorithm intended for use with the key. See https://www.rfc-editor.org/rfc/rfc7517#section-4 type: string kid: description: |- The "kid" (key ID) parameter is used to match a specific key. This is used, for instance, to choose among a set of keys within a JWK Set during key rollover. When "kid" values are used within a JWK Set, different keys within the JWK Set SHOULD use distinct "kid" values. The "kid" value is a case-sensitive string. See https://www.rfc-editor.org/rfc/rfc7517#section-4 type: string kty: description: |- The "kty" (key type) parameter identifies the cryptographic algorithm family used with the key, such as "RSA" or "EC". The "kty" value is a case-sensitive string. At the moment, only "RSA" is supported. See https://www.rfc-editor.org/rfc/rfc7517#section-4 type: string "n": description: |- The "n" (modulus) parameter contains the modulus value for the RSA public key. It is represented as a Base64urlUInt-encoded value. See https://www.rfc-editor.org/rfc/rfc7518.html#section-6.3 type: string e: description: |- The "e" (exponent) parameter contains the exponent value for the RSA public key. It is represented as a Base64urlUInt-encoded value. See https://www.rfc-editor.org/rfc/rfc7518.html#section-6.3 type: string use: description: |- The "use" (public key use) parameter identifies the intended use of the public key. The "use" parameter is employed to indicate whether a public key is used for encrypting data or verifying the signature on data. Values are commonly "sig" (signature) or "enc" (encryption). See https://www.rfc-editor.org/rfc/rfc7517#section-4 type: string required: - e - kid - kty - "n" type: object ExchangeAccessTokenRequest: discriminator: mapping: authorization_code: '#/components/schemas/ExchangeAuthCodeRequest' refresh_token: '#/components/schemas/ExchangeRefreshTokenRequest' propertyName: grant_type oneOf: - $ref: '#/components/schemas/ExchangeAuthCodeRequest' - $ref: '#/components/schemas/ExchangeRefreshTokenRequest' type: object ExchangeAuthCodeRequest: properties: grant_type: description: For exchanging an authorization code for an access token. enum: - authorization_code example: authorization_code type: string code_verifier: description: The `code_verifier` value that you generated when creating the user authorization URL. example: i541qdcfkb4htnork0w92lnu43en99ls5a48ittv6udqgiflqon8vusojojakbq4 type: string code: description: The authorization code you received after the user authorized the integration. example: kp8nnroja7qnx00.opyc1p76rcbyflsxbycjqfp3ub8vzsvltpzwafy9q5l45dn5fxzhe7i7a6mg1i2t8jpsa6sebdeumkzzhicskabgevrxsssec4dvjwfvhq4gs3ugghguar0voiqpfb7axsapiojoter8v3w2s5s3st84jpv2l06h667iw241xngy9c8=vu1tnjp7sz type: string client_id: description: | Your integration's unique ID, for authenticating the request. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: OC-FAB12-AbCdEf type: string client_secret: description: | Your integration's client secret, for authenticating the request. Begins with `cnvca`. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: cnvcaAbcdefg12345_hijklm6789 type: string redirect_uri: description: | Only required if a redirect URL was supplied when you [created the user authorization URL](https://www.canva.dev/docs/connect/authentication/#create-the-authorization-url). Must be one of those already specified by the client. If not supplied, the first redirect_uri defined for the client will be used by default. example: https://example.com/process-auth type: string required: - code - code_verifier - grant_type type: object ExchangeRefreshTokenRequest: properties: grant_type: description: For generating an access token using a refresh token. enum: - refresh_token example: refresh_token type: string client_id: description: | Your integration's unique ID, for authenticating the request. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: OC-FAB12-AbCdEf type: string client_secret: description: | Your integration's client secret, for authenticating the request. Begins with `cnvca`. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: cnvcaAbcdefg12345_hijklm6789 type: string refresh_token: description: The refresh token to be exchanged. You can copy this value from the successful response received when generating an access token. example: JABix5nolsk9k8n2r0f8nq1gw4zjo40ht6sb4i573wgdzmkwdmiy6muh897hp0bxyab276wtgqkvtob2mg9aidt5d6rcltcbcgs101 type: string scope: description: | Optional scope value when refreshing an access token. Separate multiple [scopes](https://www.canva.dev/docs/connect/appendix/scopes/) with a single space between each scope. The requested scope cannot include any permissions not already granted, so this parameter allows you to limit the scope when refreshing a token. If omitted, the scope for the token remains unchanged. example: design:meta:read type: string required: - grant_type - refresh_token type: object ExchangeAccessTokenResponse: description: Exchange auth token to access token. properties: access_token: description: "The bearer access token to use to authenticate to Canva Connect\ \ API endpoints. If requested using a `authorization_code` or `refresh_token`,\ \ this allows you to act on behalf of a user." example: JagALLazU0i2ld9WW4zTO4kaG0lkvP8Y5sSO206ZwxNF4E1y3xKJKF7TzN17BXTfaNOeY0P88AeRCE6cRF7SJzvf3Sx97rA80sGHtFplFo type: string refresh_token: description: The token that you can use to refresh the access token. example: JABix5nolsk9k8n2r0f8nq1gw4zjo40ht6sb4i573wgdzmkwdmiy6muh897hp0bxyab276wtgqkvtob2mg9aidt5d6rcltcbcgs101 type: string token_type: description: The token type returned. This is always `Bearer`. example: Bearer type: string expires_in: description: The expiry time (in seconds) for the access token. example: 14400 format: int64 type: integer scope: description: "The [scopes](https://www.canva.dev/docs/connect/appendix/scopes/)\ \ that the token has been granted." example: asset:read design:meta:read design:permission:read folder:read type: string required: - access_token - expires_in - refresh_token - token_type type: object IntrospectTokenRequest: properties: token: description: The token to introspect. example: JagALLazU0i2ld9WW4zTO4kaG0lkvP8Y5sSO206ZwxNF4E1y3xKJKF7TzN17BXTfaNOeY0P88AeRCE6cRF7SJzvf3Sx97rA80sGHtFplFo type: string client_id: description: | Your integration's unique ID, for authenticating the request. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: OC-FAB12-AbCdEf type: string client_secret: description: | Your integration's client secret, for authenticating the request. Begins with `cnvca`. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: cnvcaAbcdefg12345_hijklm6789 type: string required: - token type: object IntrospectTokenResponse: description: Introspection result of access or refresh tokens properties: active: description: | Whether the access token is active. If `true`, the access token is valid and active. If `false`, the access token is invalid. example: true type: boolean scope: description: "The [scopes](https://www.canva.dev/docs/connect/appendix/scopes/)\ \ that the token has been granted." example: asset:read design:meta:read design:permission:read folder:read type: string client: description: The ID of the client that requested the token. example: OC-FAB12-AbCdEf type: string exp: description: "The expiration time of the token, as a [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time)\ \ in seconds." example: 1712216144 format: int64 type: integer iat: description: "When the token was issued, as a [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time)\ \ in seconds." example: 1712201744 format: int64 type: integer nbf: description: "The \"not before\" time of the token, which specifies the\ \ time before which the access token most not be accepted, as a [Unix\ \ timestamp](https://en.wikipedia.org/wiki/Unix_time) in seconds." example: 1712201744 format: int64 type: integer jti: description: A unique ID for the access token. example: AbC1d-efgHIJKLMN2oPqrS type: string sub: description: | The subject of the claim. This is the ID of the Canva user that the access token acts on behalf of. This is an obfuscated value, so a single user has a unique ID for each integration. If the same user authorizes another integration, their ID in that other integration is different. example: oBCdEF1Gh2i3jkLmno-pq type: string required: - active type: object RevokeTokensRequest: description: Supply an access token or refresh token to have its lineage revoked. properties: token: description: The token to revoke. example: agALLazU0i2ld9WW4zTO4kaG0lkvP8Y5sSO206ZwxNF4E1y3xKJKF7TzN17BXTfaNOeY0P88AeRCE6cRF7SJzvf3Sx97rA80sGHtFplFo type: string client_id: description: | Your integration's unique ID, for authenticating the request. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: OC-FAB12-AbCdEf type: string client_secret: description: | Your integration's client secret, for authenticating the request. Begins with `cnvca`. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: cnvcaAbcdefg12345_hijklm6789 type: string required: - token type: object RevokeTokensResponse: description: The response on a successful token revocation. type: object scope_response: description: "The [scopes](https://www.canva.dev/docs/connect/appendix/scopes/)\ \ that the token has been granted." example: asset:read design:meta:read design:permission:read folder:read type: string client_id: description: | Your integration's unique ID, for authenticating the request. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: OC-FAB12-AbCdEf type: string client_secret: description: | Your integration's client secret, for authenticating the request. Begins with `cnvca`. NOTE: We recommend that you use basic access authentication instead of specifying `client_id` and `client_secret` as body parameters. example: cnvcaAbcdefg12345_hijklm6789 type: string UserInfoResponse: example: sub: UAAAAAAAAA name: Alice Person given_name: Alice family_name: Person email: alice.person@example.com email_verified: true properties: sub: description: Identifier for the End-User at the Issuer. type: string name: description: |- End-User's full name in displayable form including all name parts, possibly including titles and suffixes, ordered according to the End-User's locale and preferences. type: string given_name: description: |- Given name(s) or first name(s) of the End-User. Note that in some cultures, people can have multiple given names; all can be present, with the names being separated by space characters. type: string family_name: description: |- Surname(s) or last name(s) of the End-User. Note that in some cultures, people can have multiple family names or no family name; all can be present, with the names being separated by space characters. type: string email: description: |- End-User's preferred e-mail address. Its value MUST conform to the RFC 5322 [RFC5322] addr-spec syntax. The RP MUST NOT rely upon this value being unique, as discussed in Section 5.7. format: email type: string email_verified: description: |- True if the End-User's e-mail address has been verified; otherwise false. When this Claim Value is true, this means that the OP took affirmative steps to ensure that this e-mail address was controlled by the End-User at the time the verification was performed. The means by which an e-mail address is verified is context specific, and dependent upon the trust framework or contractual agreements within which the parties are operating. type: boolean required: - sub type: object Interval: description: The interval at which the usage resets. 'never' means lifetime quota that never resets. enum: - day - week - month - year - never type: string FeatureId: description: "Unique identification string for the feature. Need to be in `{application-id}.{feature-name}`\ \ pattern" example: ingredient-generation.generate-image pattern: "^[a-z0-9-]+\\.[a-z0-9-]+$" type: string FeatureQuotaLimit: description: | The quota limit set by the caller for this feature. This limit is used to determine if usage exceeds the customer-defined threshold. If not provided, we assume the usage is unlimited. minimum: 1 type: integer CreateDesignResizeJobRequest: description: |- Body parameters for starting a resize job for a design. It must include a design ID, and one of the supported design type. properties: design_id: description: The design ID. pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string design_type: $ref: '#/components/schemas/DesignTypeInput' required: - design_id - design_type type: object CreateDesignResizeJobResponse: properties: job: $ref: '#/components/schemas/DesignResizeJob' required: - job type: object GetDesignResizeJobResponse: properties: job: $ref: '#/components/schemas/DesignResizeJob' required: - job type: object DesignResizeJob: description: Details about the design resize job. properties: id: description: The design resize job ID. example: bbd8dfcd-ead1-4871-81d5-962bfec82274 type: string status: $ref: '#/components/schemas/DesignResizeStatus' result: $ref: '#/components/schemas/DesignResizeJobResult' error: $ref: '#/components/schemas/DesignResizeError' required: - id - status type: object DesignResizeJobResult: description: |- Design has been created and saved to user's root ([projects](https://www.canva.com/help/find-designs-and-folders/)) folder. properties: design: $ref: '#/components/schemas/DesignSummary' trial_information: $ref: '#/components/schemas/TrialInformation' required: - design type: object DesignResizeStatus: description: Status of the design resize job. enum: - in_progress - success - failed example: success type: string DesignResizeErrorCode: enum: - thumbnail_generation_error - design_resize_error - create_design_error - trial_quota_exceeded type: string DesignResizeError: description: "If the design resize job fails, this object provides details about\ \ the error." properties: code: $ref: '#/components/schemas/DesignResizeErrorCode' message: description: A human-readable description of what went wrong. type: string required: - code - message type: object TrialInformation: description: |- WARNING: Trials and trial information are a [preview feature](https://www.canva.dev/docs/connect/#preview-apis). There might be unannounced breaking changes to this feature which won't produce a new API version. properties: uses_remaining: description: The number of uses remaining in the free trial. example: 0 format: int32 minimum: 0 type: integer upgrade_url: description: The URL for a user to upgrade their Canva account. example: https://www.canva.com/?tailoringUpsellDialog=GENERIC_C4W type: string required: - upgrade_url - uses_remaining type: object Team: description: |- Metadata for the Canva Team, consisting of the Team ID, display name, and whether it's an external Canva Team. properties: id: description: The ID of the Canva Team. example: Oi2RJILTrKk0KRhRUZozX type: string display_name: description: The name of the Canva Team as shown in the Canva UI. example: Acme Corporation type: string external: description: |- Is the user making the API call (the authenticated user) from the Canva Team shown? - When `true`, the user isn't in the Canva Team shown. - When `false`, the user is in the Canva Team shown. type: boolean required: - display_name - external - id type: object Thumbnail: description: A thumbnail image representing the object. properties: width: description: The width of the thumbnail image in pixels. example: 595 type: integer height: description: The height of the thumbnail image in pixels. example: 335 type: integer url: description: |- A URL for retrieving the thumbnail image. This URL expires after 15 minutes. This URL includes a query string that's required for retrieving the thumbnail. example: https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png? type: string required: - height - url - width type: object User: description: "Metadata for the user, consisting of the User ID and display name." properties: id: description: The ID of the user. example: uKakKUfI03Fg8k2gZ6OkT type: string display_name: description: The name of the user as shown in the Canva UI. example: John Doe type: string required: - id type: object TeamUserSummary: description: "Metadata for the user, consisting of the User ID and Team ID." properties: user_id: description: The ID of the user. example: auDAbliZ2rQNNOsUl5OLu type: string team_id: description: The ID of the user's Canva Team. example: Oi2RJILTrKk0KRhRUZozX type: string required: - team_id - user_id type: object TeamUser: description: "Metadata for the user, consisting of the User ID, Team ID, and\ \ display name." properties: user_id: description: The ID of the user. example: auDAbliZ2rQNNOsUl5OLu type: string team_id: description: The ID of the user's Canva Team. example: Oi2RJILTrKk0KRhRUZozX type: string display_name: description: The name of the user as shown in the Canva UI. example: Jane Doe type: string type: object UserProfile: description: "Profile for the user, consisting of the display name and other\ \ attributes." properties: display_name: description: The name of the user as shown in the Canva UI. example: Jane Doe type: string type: object UsersMeResponse: properties: team_user: $ref: '#/components/schemas/TeamUserSummary' required: - team_user type: object UserProfileResponse: properties: profile: $ref: '#/components/schemas/UserProfile' required: - profile type: object GetUserCapabilitiesResponse: properties: capabilities: items: $ref: '#/components/schemas/Capability' type: array type: object Notification: properties: id: description: The unique identifier for the notification. example: eb595730 type: string created_at: description: |- When the notification was created, as a UNIX timestamp (in seconds since the UNIX epoch). example: 1377396000 format: int64 type: integer content: $ref: '#/components/schemas/NotificationContent' required: - content - created_at - id type: object NotificationContent: description: "The notification content object, which contains metadata about\ \ the event." discriminator: mapping: share_design: '#/components/schemas/ShareDesignNotificationContent' share_folder: '#/components/schemas/ShareFolderNotificationContent' comment: '#/components/schemas/CommentNotificationContent' design_access_requested: '#/components/schemas/DesignAccessRequestedNotificationContent' design_approval_requested: '#/components/schemas/DesignApprovalRequestedNotificationContent' design_approval_response: '#/components/schemas/DesignApprovalResponseNotificationContent' design_approval_reviewer_invalidated: '#/components/schemas/DesignApprovalReviewerInvalidatedNotificationContent' design_mention: '#/components/schemas/DesignMentionNotificationContent' team_invite: '#/components/schemas/TeamInviteNotificationContent' folder_access_requested: '#/components/schemas/FolderAccessRequestedNotificationContent' suggestion: '#/components/schemas/SuggestionNotificationContent' propertyName: type oneOf: - $ref: '#/components/schemas/ShareDesignNotificationContent' - $ref: '#/components/schemas/ShareFolderNotificationContent' - $ref: '#/components/schemas/CommentNotificationContent' - $ref: '#/components/schemas/DesignAccessRequestedNotificationContent' - $ref: '#/components/schemas/DesignApprovalRequestedNotificationContent' - $ref: '#/components/schemas/DesignApprovalResponseNotificationContent' - $ref: '#/components/schemas/DesignApprovalReviewerInvalidatedNotificationContent' - $ref: '#/components/schemas/DesignMentionNotificationContent' - $ref: '#/components/schemas/TeamInviteNotificationContent' - $ref: '#/components/schemas/FolderAccessRequestedNotificationContent' - $ref: '#/components/schemas/SuggestionNotificationContent' type: object ShareDesignNotificationContent: description: The notification content for when someone shares a design. properties: type: enum: - share_design example: share_design type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' design: $ref: '#/components/schemas/DesignSummary' share_url: description: A URL that the user who receives the notification can use to access the shared design. example: https://www.canva.com/api/action?token=zWiz3GqRaWVkolwSgfBa9sKbsKgfHAoxv_mjs-mlX2M type: string share: $ref: '#/components/schemas/ShareAction' required: - design - receiving_team_user - share_url - triggering_user - type type: object ShareFolderNotificationContent: description: The notification content for when someone shares a folder. properties: type: enum: - share_folder example: share_folder type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' folder: $ref: '#/components/schemas/FolderSummary' share: $ref: '#/components/schemas/ShareAction' required: - folder - receiving_team_user - triggering_user - type type: object CommentNotificationContent: description: The notification content for when someone comments on a design. properties: type: enum: - comment example: comment type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' design: $ref: '#/components/schemas/DesignSummary' comment_url: deprecated: true description: |- A URL to the design, focused on the new comment. The `comment_url` property is deprecated. For details of the comment event, use the `comment_event` property instead. example: https://www.canva.com/design/3WCduQdjayTcPVM/z128cqanFu7E3/edit?ui=OdllGgZ4Snnq3MD8uI10bfA type: string comment: $ref: '#/components/schemas/CommentEventDeprecated' comment_event: $ref: '#/components/schemas/CommentEvent' required: - design - receiving_team_user - triggering_user - type type: object DesignAccessRequestedNotificationContent: description: The notification content for when someone requests access to a design. properties: type: enum: - design_access_requested example: design_access_requested type: string triggering_user: $ref: '#/components/schemas/TeamUser' receiving_team_user: $ref: '#/components/schemas/TeamUser' design: $ref: '#/components/schemas/DesignSummary' grant_access_url: description: |- A URL, which is scoped only to the user that can grant the requested access to the design, that approves the requested access. example: https://www.canva.com/api/action?token=OosRN8M_eO2-QbLpUmP5JCwTMSXWfadtQYWuj9WKzoE type: string required: - design - grant_access_url - receiving_team_user - triggering_user - type type: object DesignApprovalRequestedNotificationContent: description: |- The notification content for when someone requests a user to [approve a design](https://www.canva.com/help/get-approval/). properties: type: enum: - design_approval_requested example: design_approval_requested type: string triggering_user: $ref: '#/components/schemas/User' initial_requesting_user: $ref: '#/components/schemas/TeamUser' receiving_team_user: $ref: '#/components/schemas/TeamUser' requested_groups: items: $ref: '#/components/schemas/Group' type: array design: $ref: '#/components/schemas/DesignSummary' approve_url: description: |- A URL, which is scoped only to the user requested to review the design, that links to the design with the approval UI opened. example: https://canva.com/api/action?token=HZb0lLHaEhNkT1qQrAwoe0-8SqyXUgJ4vnHGvN2rLZ0 type: string approval_request: $ref: '#/components/schemas/ApprovalRequestAction' required: - approval_request - approve_url - design - initial_requesting_user - receiving_team_user - requested_groups - triggering_user - type type: object DesignApprovalResponseNotificationContent: description: The notification content for when someone approves a design or gives feedback. properties: type: enum: - design_approval_response example: design_approval_response type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' initial_requesting_user: $ref: '#/components/schemas/TeamUser' responding_groups: items: $ref: '#/components/schemas/Group' type: array design: $ref: '#/components/schemas/DesignSummary' approval_response: $ref: '#/components/schemas/ApprovalResponseAction' required: - approval_response - design - initial_requesting_user - receiving_team_user - responding_groups - triggering_user - type type: object DesignApprovalReviewerInvalidatedNotificationContent: description: The notification content for when a reviewer in a design is invalidated. properties: type: enum: - design_approval_reviewer_invalidated example: design_approval_reviewer_invalidated type: string receiving_team_user: $ref: '#/components/schemas/TeamUserSummary' design: $ref: '#/components/schemas/DesignSummary' required: - design - receiving_team_user - type type: object DesignMentionNotificationContent: description: |- The notification content for when someone mentions a user in a design. The link to the design in this notification is valid for 30 days, and can only be opened by the recipient of the notification. properties: type: enum: - design_mention example: design_mention type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' design: $ref: '#/components/schemas/DesignSummary' required: - design - receiving_team_user - triggering_user - type type: object TeamInviteNotificationContent: description: |- The notification content for when someone is invited to a [Canva team](https://www.canva.com/help/about-canva-for-teams/). properties: type: enum: - team_invite example: team_invite type: string triggering_user: $ref: '#/components/schemas/User' receiving_user: $ref: '#/components/schemas/User' inviting_team: $ref: '#/components/schemas/Team' required: - inviting_team - receiving_user - triggering_user - type type: object FolderAccessRequestedNotificationContent: description: The notification content for when someone requests access to a folder. properties: type: enum: - folder_access_requested example: folder_access_requested type: string triggering_user: $ref: '#/components/schemas/TeamUser' receiving_team_user: $ref: '#/components/schemas/TeamUser' folder: $ref: '#/components/schemas/FolderSummary' required: - folder - receiving_team_user - triggering_user - type type: object SuggestionNotificationContent: description: |- The notification content when someone does one of the following actions: - Suggests edits to a design. - Applies or rejects a suggestion. - Replies to a suggestion. - Mentions a user in a reply to a suggestion. properties: type: enum: - suggestion type: string triggering_user: $ref: '#/components/schemas/User' receiving_team_user: $ref: '#/components/schemas/TeamUser' design: $ref: '#/components/schemas/DesignSummary' suggestion_event_type: $ref: '#/components/schemas/SuggestionEventType' required: - design - receiving_team_user - suggestion_event_type - triggering_user - type type: object ShareAction: description: Metadata about the share event. properties: message: description: |- The optional message users can include when sharing something with another user using the Canva UI. example: Check this out! type: string required: - message type: object ApprovalRequestAction: description: Metadata about the design approval request. properties: message: description: The message included by the user when requesting a design approval. example: LGTM! type: string type: object ApprovalResponseAction: description: Metadata about the design approval response. properties: approved: description: |- Whether the design was approved. When `true`, the reviewer has approved the design. type: boolean ready_to_publish: description: |- Whether the design is ready to publish. When `true`, the design has been approved by all reviewers and can be published. type: boolean message: description: The message included by a user responding to a design approval request. type: string required: - approved type: object securitySchemes: basicAuth: scheme: basic type: http oauthAuthCode: flows: authorizationCode: authorizationUrl: https://www.canva.com/api/oauth/authorize scopes: design:content:read: View the contents of the user's designs. design:meta:read: View the metadata of the user's designs. design:content:write: Create designs on the user's behalf. folder:read: |- View the metadata and contents of the user's folders, including their **Projects** folder. folder:write: |- Add, move, or remove the user's folders. It also lets you edit folder metadata, such as the folder's name. folder:permission:write: "Set, update, or remove permissions assigned\ \ to the user's folders." asset:read: "View the metadata for the user's assets, such as uploaded\ \ images." asset:write: "Upload, update, or delete assets on the user's behalf." comment:read: "View the comments on the user's designs, and the associated\ \ metadata." comment:write: Create comments and replies on the user's designs. collaboration:event: Receive webhook notifications about events relevant to the user. brandtemplate:meta:read: View the metadata of the brand templates associated with the user's brand. brandtemplate:content:read: Read the content of the brand templates associated with the user's brand. profile:read: Read a user's profile and account information. openid: Read user information through Open ID Connect (OIDC). profile: Read user profile information through OIDC. email: Read user email address through OIDC. tokenUrl: https://api.canva.com/rest/v1/oauth/token type: oauth2