Canva Resize API

The resize API from Canva — 2 operation(s) for resize.

Operations 2

POST /v1/resizes Create design resize job #
GET /v1/resizes/{jobId} Get design resize job #

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

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

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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

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

OpenAPI Specification

canva-resize-api-openapi.yml Raw ↑
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 Resize API
  version: 2024-06-18
servers:
- description: Canva Connect API
  url: https://api.canva.com/rest
tags:
- name: resize
paths:
  /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).


        Users on the Canva Free plan have access to a limited trial. For more information, see Trial quotas.


        Starts a new asynchronous job

        to create a resized copy of a design. The new resized design is

        added to the top level of the user''s

        projects (`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 and emails can''t be resized, and other design types can''t be resized to a Canva doc or email.

        - 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.

        You can check the status and get the results of resize jobs created with this API using the

        Get design resize job API.'
      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
        '400':
          content:
            application/json:
              examples:
                unsupported_design_type:
                  $ref: '#/components/examples/UnsupportedDesignTypeError'
                invalid_design_type:
                  $ref: '#/components/examples/InvalidDesignTypeError'
                invalid_design_type_input:
                  $ref: '#/components/examples/InvalidDesignTypeInputError'
                dimensions_below_minimum:
                  $ref: '#/components/examples/DimensionsBelowMinimumError'
                dimensions_above_maximum:
                  $ref: '#/components/examples/DimensionsAboveMaximumError'
                area_above_maximum:
                  $ref: '#/components/examples/AreaAboveMaximumError'
                design_not_resizable:
                  $ref: '#/components/examples/DesignNotResizableError'
                page_index_out_of_bounds:
                  $ref: '#/components/examples/PageIndexOutOfBoundsError'
                responsive_pages_not_supported:
                  $ref: '#/components/examples/ResponsivePagesNotSupportedError'
                controlled_pages_not_supported:
                  $ref: '#/components/examples/ControlledPagesNotSupportedError'
              schema:
                $ref: '#/components/schemas/Error'
          description: Bad Request
        '403':
          content:
            application/json:
              examples:
                missing_resize_capability:
                  $ref: '#/components/examples/MissingResizeCapabilityError'
                design_resize_not_allowed:
                  $ref: '#/components/examples/DesignResizeNotAllowedError'
              schema:
                $ref: '#/components/schemas/Error'
          description: Forbidden
        '404':
          content:
            application/json:
              examples:
                resize_design_not_found:
                  $ref: '#/components/examples/ResizeDesignNotFoundError'
              schema:
                $ref: '#/components/schemas/Error'
          description: Not Found
        '429':
          content:
            application/json:
              examples:
                feature_quota_exceeded:
                  $ref: '#/components/examples/FeatureQuotaExceededError'
              schema:
                $ref: '#/components/schemas/FeatureQuotaExceededError'
          description: Too Many Requests
        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
      summary: Create design resize job
      x-summary-source: derived
  /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).


        Users on the Canva Free plan have access to a limited trial. For more information, see Trial quotas.


        Gets the result of a design resize job that was created using the Create design resize

        job API.


        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.'
      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
        '404':
          content:
            application/json:
              examples:
                resize_job_not_found:
                  $ref: '#/components/examples/ResizeJobNotFoundError'
              schema:
                $ref: '#/components/schemas/Error'
          description: Not Found
        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
      summary: Get design resize job
      x-summary-source: derived
components:
  examples:
    InvalidDesignTypeError:
      summary: The requested preset design type is not available.
      value:
        code: bad_request_body
        message: Design type '{name}' is invalid.
    FeatureQuotaExceededError:
      summary: Feature quota exceeded
      value:
        code: quota_exceeded
        message: Free resize quota has been exceeded. Present the `upsell_url` to the user and prompt them to upgrade their Canva account to continue using the resize feature.
        upsell_url: '{upsellUrl}'
    AreaAboveMaximumError:
      summary: The requested dimensions exceed the maximum design area
      value:
        code: invalid_request
        message: width and height is above the maximum allowed area for a design
    ResponsivePagesNotSupportedError:
      summary: Responsive pages can't be resized
      value:
        code: bad_request_params
        message: Responsive type pages are not supported to Magic Resize
    ResizeDesignNotFoundError:
      summary: The design to resize was not found
      value:
        code: design_not_found
        message: Design with id '{designId}' not found
    DesignNotResizableError:
      summary: The design can't be resized to the desired type
      value:
        code: bad_request_params
        message: The Canva design provided can't be resized to the desired type
    DimensionsBelowMinimumError:
      summary: The requested dimensions are below the minimum size
      value:
        code: invalid_request
        message: width or height cannot be less than {minDimension}px
    ResizeJobNotFoundError:
      summary: The design resize job was not found
      value:
        code: not_found
        message: Job {jobId} not found
    PageIndexOutOfBoundsError:
      summary: The page number is out of bounds
      value:
        code: bad_request_params
        message: The page number provided is out of bounds.
    DimensionsAboveMaximumError:
      summary: The requested dimensions are above the maximum size
      value:
        code: invalid_request
        message: width or height cannot be more than {maxDimension}px
    UnsupportedDesignTypeError:
      summary: Unsupported design type
      value:
        code: bad_request_params
        message: 'Canva designs can''t be resized to the selected design type: `{designTypeName}`'
    DesignResizeNotAllowedError:
      summary: Not allowed to resize the design
      value:
        code: permission_denied
        message: Not allowed to resize document with ID {designId}
    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?<query-string>
              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
    ControlledPagesNotSupportedError:
      summary: Controlled pages can't be resized
      value:
        code: bad_request_params
        message: Controlled type pages are not supported to Magic Resize
    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
    InvalidDesignTypeInputError:
      summary: The design type must be custom or preset
      value:
        code: bad_request_params
        message: Invalid design type provided. Design type must be one of custom or preset, but was {designType}
    InProgressResizeJobExample:
      summary: In progress job
      value:
        job:
          id: 450a76e7-f96f-43ae-9c37-0e1ce492ac72
          status: in_progress
    MissingResizeCapabilityError:
      summary: The user's plan does not include the resize feature
      value:
        code: permission_denied
        message: Not allowed to access createDesignResizeJob, requires one of capabilities [resize].
  schemas:
    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
    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
    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
    FeatureQuotaExceededError:
      allOf:
      - $ref: '#/components/schemas/Error'
      - properties:
          upsell_url:
            description: URL to redirect users to upgrade their Canva account and reset their quota.
            type: string
        required:
        - upsell_url
        type: object
      description: Feature quota exceeded
    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
    PresetDesignTypeName:
      description: The name of the design type.
      enum:
      - doc
      - email
      - presentation
      - whiteboard
      type: string
      x-enum-descriptions:
      - A [Canva doc](https://www.canva.com/docs/); a document for Canva's online text editor.
      - An [email](https://www.canva.com/emails/); for creating email campaign designs.
      - A [presentation](https://www.canva.com/presentations/); lets you create and collaborate for presenting to an audience.
      - A [whiteboard](https://www.canva.com/online-whiteboard/); a design which gives you infinite space to collaborate.
    DesignResizeErrorCode:
      enum:
      - thumbnail_generation_error
      - design_resize_error
      - create_design_error
      - trial_quota_exceeded
      type: string
    Thumbnail:
      description: A thumbnail image representing the object.
      properties:
        width:
          description: The width of the thumbnail image in pixels.
          example: 595
          format: int32
          type: integer
        height:
          description: The height of the thumbnail image in pixels.
          example: 335
          format: int32
          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?<query-string>
          type: string
      required:
      - height
      - url
      - width
      type: object
    CustomDesignTypeInput:
      description: 'Provide the width and height to define a custom design type.


        Each dimension must be between 40 and 8000 pixels, and the

        total area (width × height) must not exceed 25,000,000 pixels

        squared. For example, a design with a width of 8000 pixels can

        have a maximum height of 3125 pixels.'
      properties:
        type:
          enum:
          - custom
          type: string
        width:
          description: The width of the design, in pixels.
          example: 320
          format: int32
          maximum: 8000
          minimum: 40
          type: integer
        height:
          description: The height of the design, in pixels.
          example: 200
          format: int32
          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
    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
    CreateDesignResizeJobResponse:
      properties:
        job:
          $ref: '#/components/schemas/DesignResizeJob'
      required:
      - job
      type: object
    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
    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.
          type: string
        design_type:
          $ref: '#/components/schemas/DesignTypeInput'
      required:
      - design_id
      - design_type
      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
    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.


        Trial information for non-qualifying users. Non-qualifying users have a limited number of

        resize uses. Once the trial is exhausted, users must upgrade to a Canva plan with premium

        features (such as Canva Pro) to continue using the Resize API.'
      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
    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
  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