openapi: 3.2.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 Analytics API version: 2024-06-18 servers: - description: Canva Connect API url: https://api.canva.com/rest tags: - name: analytics paths: /v1/designs/{designId}/analytics: 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. To use this API, your integration must act on behalf of a user who is a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Gets the aggregated analytics for a design. The response includes total views, unique viewers, and view duration metrics.' operationId: getDesignAnalytics 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/GetDesignAnalyticsResponse' description: OK '400': content: application/json: examples: analytics_invalid_design_id: $ref: '#/components/examples/AnalyticsInvalidDesignIdError' schema: $ref: '#/components/schemas/Error' description: Bad Request '401': content: application/json: examples: invalid_access_token: $ref: '#/components/examples/InvalidAccessToken' schema: $ref: '#/components/schemas/Error' description: Unauthorized '403': content: application/json: examples: analytics_permission_denied: $ref: '#/components/examples/AnalyticsPermissionDeniedError' schema: $ref: '#/components/schemas/Error' description: Forbidden '404': content: application/json: examples: analytics_design_not_found: $ref: '#/components/examples/AnalyticsDesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/TooManyRequestsError' schema: $ref: '#/components/schemas/Error' description: Too Many Requests default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - analytics x-required-capabilities: - analytics x-rate-limit-per-client-user: 100 /v1/designs/{designId}/analytics/viewers: 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. To use this API, your integration must act on behalf of a user who is a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Lists viewers for a design, ordered by most recent view first.' operationId: getDesignAnalyticsViewers 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: Filters viewers by a specific trackable link. If omitted, only viewers who visited the design without using a trackable link are returned. explode: true in: query name: link_id required: false schema: example: hddb98a3716 pattern: ^[a-zA-Z0-9_-]{1,50}$ type: string style: form - description: Only returns viewers whose first view happened after this time, as a Unix timestamp (in seconds since the Unix Epoch). explode: true in: query name: first_viewed_after required: false schema: example: 1745452800 format: int64 type: integer style: form - description: The maximum number of viewers to return per page. explode: true in: query name: limit required: false schema: default: 50 example: 50 format: int32 maximum: 100 minimum: 1 type: integer style: form - description: 'If the success response contains a continuation token, there are more viewers you can list. You can use this token as a query parameter and retrieve more viewers from the list, for example `/v1/designs/{designId}/analytics/viewers?continuation={continuation}`. To retrieve all viewers, you might need to make multiple requests.' explode: true in: query name: continuation required: false schema: example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string style: form responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetDesignAnalyticsViewersResponse' description: OK '400': content: application/json: examples: analytics_invalid_query_parameter: $ref: '#/components/examples/ExpectedLongQueryParam' analytics_invalid_continuation_token: $ref: '#/components/examples/AnalyticsInvalidContinuationError' schema: $ref: '#/components/schemas/Error' description: Bad Request '401': content: application/json: examples: invalid_access_token: $ref: '#/components/examples/InvalidAccessToken' schema: $ref: '#/components/schemas/Error' description: Unauthorized '403': content: application/json: examples: analytics_permission_denied: $ref: '#/components/examples/AnalyticsPermissionDeniedError' schema: $ref: '#/components/schemas/Error' description: Forbidden '404': content: application/json: examples: analytics_design_not_found: $ref: '#/components/examples/AnalyticsDesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/TooManyRequestsError' schema: $ref: '#/components/schemas/Error' description: Too Many Requests default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - analytics x-required-capabilities: - analytics x-rate-limit-per-client-user: 100 /v1/designs/{designId}/analytics/views-over-time: 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. To use this API, your integration must act on behalf of a user who is a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Lists the view counts over time for a design. Each response item represents one time bucket.' operationId: getDesignAnalyticsViewsOverTime 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 inclusive start of the requested time range, as a Unix timestamp (in seconds since the Unix Epoch). explode: true in: query name: start_time required: false schema: example: 1745452800 format: int64 type: integer style: form - description: The inclusive end of the requested time range, as a Unix timestamp (in seconds since the Unix Epoch). explode: true in: query name: end_time required: false schema: example: 1748044800 format: int64 type: integer style: form - description: The timezone to use for bucketing, as a UTC offset in the form `+HH:MM` (for example, `+10:00`). explode: true in: query name: timezone required: false schema: default: +00:00 example: '600' type: string style: form - description: The maximum number of time buckets to return per page. explode: true in: query name: limit required: false schema: default: 50 example: 50 format: int32 maximum: 100 minimum: 1 type: integer style: form - description: 'If the success response contains a continuation token, there are more time buckets you can list. You can use this token as a query parameter and retrieve more time buckets from the list, for example `/v1/designs/{designId}/analytics/views-over-time?continuation={continuation}`. To retrieve all time buckets, you might need to make multiple requests.' explode: true in: query name: continuation required: false schema: example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string style: form responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetDesignAnalyticsViewsOverTimeResponse' description: OK '400': content: application/json: examples: analytics_invalid_query_parameter: $ref: '#/components/examples/ExpectedLongQueryParam' analytics_invalid_time_range: $ref: '#/components/examples/AnalyticsInvalidTimeRangeError' analytics_invalid_timezone: $ref: '#/components/examples/AnalyticsInvalidTimezoneError' analytics_invalid_continuation_token: $ref: '#/components/examples/AnalyticsInvalidContinuationError' schema: $ref: '#/components/schemas/Error' description: Bad Request '401': content: application/json: examples: invalid_access_token: $ref: '#/components/examples/InvalidAccessToken' schema: $ref: '#/components/schemas/Error' description: Unauthorized '403': content: application/json: examples: analytics_permission_denied: $ref: '#/components/examples/AnalyticsPermissionDeniedError' schema: $ref: '#/components/schemas/Error' description: Forbidden '404': content: application/json: examples: analytics_design_not_found: $ref: '#/components/examples/AnalyticsDesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/TooManyRequestsError' schema: $ref: '#/components/schemas/Error' description: Too Many Requests default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - analytics x-required-capabilities: - analytics x-rate-limit-per-client-user: 100 /v1/designs/{designId}/analytics/page-views: 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. To use this API, your integration must act on behalf of a user who is a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Lists the page-level view duration data for a design. The request body can include page filters and pagination controls.' operationId: getDesignAnalyticsPageViews 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/GetDesignAnalyticsPageViewsRequest' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetDesignAnalyticsPageViewsResponse' description: OK '400': content: application/json: examples: analytics_invalid_request_body: $ref: '#/components/examples/FailedToReadRequestBody' analytics_invalid_page_views_filter: $ref: '#/components/examples/AnalyticsInvalidPageViewsFilterError' analytics_invalid_continuation_token: $ref: '#/components/examples/AnalyticsInvalidContinuationError' schema: $ref: '#/components/schemas/Error' description: Bad Request '401': content: application/json: examples: invalid_access_token: $ref: '#/components/examples/InvalidAccessToken' schema: $ref: '#/components/schemas/Error' description: Unauthorized '403': content: application/json: examples: analytics_permission_denied: $ref: '#/components/examples/AnalyticsPermissionDeniedError' schema: $ref: '#/components/schemas/Error' description: Forbidden '404': content: application/json: examples: analytics_design_not_found: $ref: '#/components/examples/AnalyticsDesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/TooManyRequestsError' schema: $ref: '#/components/schemas/Error' description: Too Many Requests default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - analytics x-required-capabilities: - analytics x-rate-limit-per-client-user: 100 /v1/designs/{designId}/analytics/links: 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. To use this API, your integration must act on behalf of a user who is a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization. Lists trackable links and their metrics for a design.' operationId: getDesignAnalyticsLinks 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 maximum number of links to return per page. explode: true in: query name: limit required: false schema: default: 50 example: 50 format: int32 maximum: 100 minimum: 1 type: integer style: form - description: 'If the success response contains a continuation token, there are more links you can list. You can use this token as a query parameter and retrieve more links from the list, for example `/v1/designs/{designId}/analytics/links?continuation={continuation}`. To retrieve all links, you might need to make multiple requests.' explode: true in: query name: continuation required: false schema: example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string style: form responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetDesignAnalyticsLinksResponse' description: OK '400': content: application/json: examples: analytics_invalid_query_parameter: $ref: '#/components/examples/ExpectedLongQueryParam' analytics_invalid_continuation_token: $ref: '#/components/examples/AnalyticsInvalidContinuationError' schema: $ref: '#/components/schemas/Error' description: Bad Request '401': content: application/json: examples: invalid_access_token: $ref: '#/components/examples/InvalidAccessToken' schema: $ref: '#/components/schemas/Error' description: Unauthorized '403': content: application/json: examples: analytics_permission_denied: $ref: '#/components/examples/AnalyticsPermissionDeniedError' schema: $ref: '#/components/schemas/Error' description: Forbidden '404': content: application/json: examples: analytics_design_not_found: $ref: '#/components/examples/AnalyticsDesignNotFoundError' schema: $ref: '#/components/schemas/Error' description: Not Found '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/TooManyRequestsError' schema: $ref: '#/components/schemas/Error' description: Too Many Requests default: content: application/json: schema: $ref: '#/components/schemas/Error' description: Error Response security: - oauthAuthCode: - design:content:read tags: - analytics x-required-capabilities: - analytics x-rate-limit-per-client-user: 100 components: examples: AnalyticsInvalidPageViewsFilterError: summary: The page views filter is invalid. value: code: bad_request_body message: filter must include a valid type discriminator and required fields FailedToReadRequestBody: summary: Failed to read request body value: code: bad_request_body message: Failed to read request body AnalyticsDesignNotFoundError: summary: The design was not found, or analytics are unavailable. value: code: design_not_found message: Design not found or analytics are not available for this design TooManyRequestsError: summary: Rate limit exceeded value: code: too_many_requests message: Too many requests to {operation} AnalyticsInvalidTimeRangeError: summary: The requested time range is invalid. value: code: invalid_field message: start_time must be before end_time AnalyticsInvalidDesignIdError: summary: The design ID does not match the expected format. value: code: invalid_field message: designId does not match expected format AnalyticsInvalidTimezoneError: summary: The timezone value is invalid. value: code: invalid_field message: timezone is not a valid UTC offset ExpectedLongQueryParam: summary: Expected long for query parameter value: code: bad_query_params message: Expected long for query parameter `{key}` but found {value} AnalyticsPermissionDeniedError: summary: The caller is not allowed to access design analytics. value: code: permission_denied message: Not allowed to access analytics for this design InvalidAccessToken: summary: Access token could not be decoded or signature could not be verified. value: code: invalid_access_token message: Access token is invalid AnalyticsInvalidContinuationError: summary: The continuation token is invalid or expired. value: code: invalid_field message: Invalid continuation token schemas: ViewsAtTime: description: A single time bucket of view counts. properties: count: description: The number of views in this bucket. example: 15 format: int64 type: integer bucket_start_at: description: When this time bucket starts, as a Unix timestamp (in seconds since the Unix Epoch). example: 1745452800 format: int64 type: integer required: - bucket_start_at - count type: object PageViewDuration: description: View duration metrics for a single page. properties: page_id: description: The page ID. This is omitted for design types that do not support page IDs. example: PBBKfZml7MRHRQVw type: string total_view_duration_seconds: description: The total time spent viewing this page, in seconds. example: 1860 format: int64 type: integer average_duration_seconds: description: The average time spent viewing this page, in seconds. This is omitted for `by_viewer` filters. example: 21.5 format: double type: number unique_view_count: description: The number of unique viewers for this page. This is omitted for `by_viewer` filters. example: 87 format: int64 type: integer required: - total_view_duration_seconds type: object GetDesignAnalyticsLinksResponse: description: Successful response from a `getDesignAnalyticsLinks` request. properties: items: description: The list of trackable links. items: $ref: '#/components/schemas/TrackableLink' type: array continuation: description: 'If the success response contains a continuation token, there are more links you can list. You can use this token as a query parameter and retrieve more links from the list, for example `/v1/designs/{designId}/analytics/links?continuation={continuation}`. To retrieve all links, you might need to make multiple requests.' example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string required: - items type: object PageViewFilterByViewer: properties: type: enum: - by_viewer example: by_viewer type: string link_id: description: Filters to viewer traffic from a specific trackable link. Omit this field to target viewer traffic that did not come from a trackable link. example: hddb98a3716 type: string viewer_id: description: The viewer ID to filter by. example: b2d44753-f996-46ff-8f01-d4143911550f type: string required: - type - viewer_id type: object GetDesignAnalyticsResponse: description: Aggregated analytics metrics for a design. properties: average_view_duration_seconds: description: The average view duration in seconds. example: 42 format: int64 type: integer total_view_duration_seconds: description: The total view duration in seconds. example: 5040 format: int64 type: integer unique_view_count: description: The number of unique viewers. example: 87 format: int64 type: integer total_view_count: description: The total number of views. example: 120 format: int64 type: integer required: - total_view_count - unique_view_count type: object DesignAnalyticsViewerType: description: How the viewer accessed the design. enum: - editor - commenter - viewer type: string x-enum-descriptions: - The viewer accessed the design with edit access. - The viewer accessed the design with comment access. - The viewer accessed the design with view-only access. TrackableLink: description: Metrics for a trackable link. properties: link_id: description: The ID of the trackable link. example: hddb98a3716 type: string name: description: The user-visible name of the trackable link. example: Newsletter link type: string total_view_count: description: The total number of views for this link. example: 64 format: int64 type: integer unique_view_count: description: The number of unique viewers for this link. example: 41 format: int64 type: integer total_view_duration_seconds: description: The total time this link has been viewed, in seconds. example: 2580 format: int64 type: integer average_view_duration_seconds: description: The average time this link has been viewed, in seconds. example: 40 format: int64 type: integer last_viewed_at: description: When this link was most recently viewed, as a Unix timestamp (in seconds since the Unix Epoch). example: 1748044800 format: int64 type: integer required: - link_id 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 DesignAnalyticsViewerVisibility: description: How this viewer should be presented to the caller. enum: - shown - anonymous - opt_out - another_team - deleted type: string x-enum-descriptions: - The viewer's identity is visible, and their user details are included. - The viewer is anonymous, so their identity is not available. - The viewer has opted out of design analytics, but some data was already collected for this viewer previosly. - The viewer belongs to a different team, so their identity is not shared. - The viewer's account has been deleted. 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 - user_role_required - endpoint_not_found - endpoint_gone - 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 - ai_credit_quota_exceeded - ai_credit_quota_cooldown - 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 - user_not_eligible - group_not_found - app_not_found - app_has_non_draft_versions - invalid_status_transition - translation_validation_failed - 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 - review_dismissed - design_type_not_found - team_not_found - team_is_default - 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 - unsupported_design_type - design_generation_not_enabled - license_required - input_unsafe - display_name_unavailable - user_not_managed - saml_team_id_conflict - saml_name_id_not_available - user_email_unverified - user_not_active - user_pending_consent - account_exists type: string DesignAnalyticsViewerFormFactor: description: The device form factor used to view the design. enum: - small - large type: string x-enum-descriptions: - A small device, such as a phone. - A large device, such as a laptop, desktop, or large tablet. GetDesignAnalyticsViewsOverTimeResponse: description: Successful response from a `getDesignAnalyticsViewsOverTime` request. properties: items: description: The list of time buckets. items: $ref: '#/components/schemas/ViewsAtTime' type: array continuation: description: 'If the success response contains a continuation token, there are more time buckets you can list. You can use this token as a query parameter and retrieve more time buckets from the list, for example `/v1/designs/{designId}/analytics/views-over-time?continuation={continuation}`. To retrieve all time buckets, you might need to make multiple requests.' example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string required: - items type: object PageViewFilter: description: A filter for page view data. discriminator: mapping: by_viewer: '#/components/schemas/PageViewFilterByViewer' for_editor: '#/components/schemas/PageViewFilterForEditor' by_link: '#/components/schemas/PageViewFilterByLink' propertyName: type oneOf: - $ref: '#/components/schemas/PageViewFilterByViewer' - $ref: '#/components/schemas/PageViewFilterForEditor' - $ref: '#/components/schemas/PageViewFilterByLink' type: object GetDesignAnalyticsPageViewsResponse: description: Successful response from a `getDesignAnalyticsPageViews` request. properties: items: description: The list of page view durations. items: $ref: '#/components/schemas/PageViewDuration' type: array continuation: description: 'If the success response contains a continuation token, there are more page results you can list. You can use this token in the request body and retrieve more page results from the list. To retrieve all page results, you might need to make multiple requests.' example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string required: - items type: object PageViewFilterForEditor: properties: type: enum: - for_editor example: for_editor type: string required: - type type: object Viewer: description: A viewer and their engagement metrics for the design. properties: viewer_id: description: An opaque identifier for the viewer. Use this value when filtering page view results by viewer. example: b2d44753-f996-46ff-8f01-d4143911550f type: string user: allOf: - $ref: '#/components/schemas/TeamUser' description: The user details of the viewer. This is omitted for viewers whose identity is not visible. last_viewed_at: description: When the viewer most recently opened the design, as a Unix timestamp (in seconds since the Unix Epoch). example: 1748044800 format: int64 type: integer viewer_type: $ref: '#/components/schemas/DesignAnalyticsViewerType' visibility: $ref: '#/components/schemas/DesignAnalyticsViewerVisibility' total_view_duration_seconds: description: The total time this viewer has spent viewing the design, in seconds. example: 312 format: int64 type: integer first_viewed_at: description: When the viewer first viewed the design, as a Unix timestamp (in seconds since the Unix Epoch). example: 1745452800 format: int64 type: integer pages_viewed: description: The number of pages this viewer viewed for more than one second. example: 8 format: int64 type: integer form_factor: $ref: '#/components/schemas/DesignAnalyticsViewerFormFactor' device_operating_system: description: The simplified operating system name for the viewer's device. example: macOS type: string city_country: description: The viewer location as city and country. This is only returned for anonymous viewers. example: Sydney, Australia type: string total_view_count: description: The number of times this viewer opened the design. example: 14 format: int64 type: integer required: - last_viewed_at - viewer_id - viewer_type - visibility type: object GetDesignAnalyticsViewersResponse: description: Successful response from a `getDesignAnalyticsViewers` request. properties: items: description: The list of viewers. items: $ref: '#/components/schemas/Viewer' type: array continuation: description: 'If the success response contains a continuation token, there are more viewers you can list. You can use this token as a query parameter and retrieve more viewers from the list, for example `/v1/designs/{designId}/analytics/viewers?continuation={continuation}`. To retrieve all viewers, you might need to make multiple requests.' example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string required: - items type: object PageViewFilterByLink: properties: type: enum: - by_link example: by_link type: string link_id: description: The trackable link ID to filter by. example: hddb98a3716 type: string required: - link_id - type type: object GetDesignAnalyticsPageViewsRequest: description: Filters and pagination controls for page-level analytics. properties: page_ids: description: The design page IDs to retrieve view duration data for. example: - PBBKfZml7MRHRQVw - PBBKfZml7Mghjsdg items: example: PBBKfZml7MRHRQVw type: string maxItems: 100 minItems: 1 type: array limit: default: 50 description: The maximum number of page results to return per page. example: 50 format: int32 maximum: 100 minimum: 1 type: integer continuation: description: 'If the success response contains a continuation token, there are more page results you can list. You can use this token in the request body and retrieve more page results from the list. To retrieve all page results, you might need to make multiple requests.' example: RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN type: string filter: $ref: '#/components/schemas/PageViewFilter' required: - page_ids 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 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. brandtemplate:content:write: Publish 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