Canva · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Canva Connect API

11 actions 11 updates update extends openapi/canva-connect-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Canva's API. It is a proposal applied on top of the contract, not a document Canva publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-provenancex-artifactsx-developer-portalx-documentationx-changelogx-status-pagex-llms-txtx-versioning

Targets 4

$.info
$
$.paths['/v1/comments'].post
$.paths['/v1/connect/keys'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Canva Connect API
  version: 1.0.0
  x-generated: '2026-08-13'
  x-method: generated
  x-source: openapi/canva-connect-api-openapi.yml
  x-description: >-
    OpenAPI Overlay 1.0.0 capturing API Evangelist's additions to Canva's published Connect
    API description. The original spec is never mutated — it is preserved verbatim at
    openapi/canva-connect-api-openapi.yml exactly as fetched from
    https://www.canva.dev/sources/connect/api/latest/api.yml. Every action below adds
    provenance, cross-links to artifacts in this repo, or records a runtime semantic Canva
    documents in prose but does not express in the spec.
extends: openapi/canva-connect-api-openapi.yml
actions:
  - target: $.info
    description: Record provenance and link the artifacts derived from this spec.
    update:
      x-provenance:
        harvested-from: https://www.canva.dev/sources/connect/api/latest/api.yml
        harvested-on: '2026-08-13'
        http-status: 200
        publisher: Canva Pty Ltd
        verbatim: true
      x-artifacts:
        authentication: authentication/canva-authentication.yml
        scopes: scopes/canva-scopes.yml
        conventions: conventions/canva-conventions.yml
        errors: errors/canva-problem-types.yml
        lifecycle: lifecycle/canva-lifecycle.yml
        changelog: changelog/canva-changelog.yml
        rate-limits: rate-limits/canva-rate-limits.yml
        plans: plans/canva-plans-pricing.yml
        data-model: data-model/canva-data-model.yml
        webhooks: asyncapi/canva-webhooks.yml
        mcp: mcp/canva-mcp.yml
        tool-crosswalk: mcp/canva-tool-crosswalk.yml
        conformance: conformance/canva-conformance.yml
        packages: packages/canva-packages.yml
        well-known: well-known/canva-well-known.yml
  - target: $.info
    description: >-
      Add the developer contact channels Canva publishes elsewhere but omits from info.
    update:
      x-developer-portal: https://www.canva.com/developers/
      x-documentation: https://www.canva.dev/docs/connect/
      x-changelog: https://www.canva.dev/docs/connect/changelog/
      x-status-page: https://www.canvastatus.com/
      x-llms-txt: https://www.canva.dev/docs/connect/llms.txt
  - target: $.info
    description: >-
      Record the versioning contract. Canva's version scheme is date-based and INDEPENDENT of
      the /v1 path segment, which is an epoch marker — the spec's info.version alone is
      misleading without this.
    update:
      x-versioning:
        scheme: date-based
        path-segment-is-version: false
        support-window: at least 6 months for superseded versions
        docs: https://www.canva.dev/docs/connect/versions/
        preview-exempt: >-
          Beta/Preview APIs may break without minting a new version and disqualify a public
          integration from review.
  - target: $
    description: >-
      Record the error contract at the document level. Every operation returns the same
      {code, message} envelope; it is not RFC 9457 and there is no problem+json media type.
    update:
      x-error-contract:
        rfc9457: false
        media-type: application/json
        envelope:
          code: stable machine-readable error code
          message: human-readable description
        switch-on: code
        catalog: errors/canva-problem-types.yml
        docs: https://www.canva.dev/docs/connect/error-responses/
  - target: $
    description: >-
      Record rate-limit semantics. Canva publishes no numbers and no rate-limit headers; 429 +
      too_many_requests is the entire runtime signal.
    update:
      x-rate-limits:
        numeric-limits-published: false
        response-headers: none
        status-on-exhaustion: 429
        error-code: too_many_requests
        strategy: exponential backoff
        detail: rate-limits/canva-rate-limits.yml
  - target: $
    description: >-
      Record that writes are NOT idempotent — no Idempotency-Key header exists on any
      operation — and that the async-job pattern is the partial mitigation.
    update:
      x-idempotency:
        supported: false
        header: null
        mitigation: >-
          Long-running writes are modelled as jobs; a lost create response can be recovered by
          re-reading the job rather than re-issuing the create.
  - target: $
    description: Record the cursor pagination contract shared by every list endpoint.
    update:
      x-pagination:
        style: cursor
        request-params: [continuation, limit]
        response-field: continuation
        termination: continuation omitted on the last page
        exception: >-
          Analytics preview endpoints paginate with `offset` and raise offset_too_large.
  - target: $
    description: >-
      Record the capability pre-check contract. Operations carrying x-required-capabilities
      fail with 403 for users whose Canva plan lacks them; getUserCapabilities is the
      pre-flight.
    update:
      x-capabilities:
        precheck-operation: getUserCapabilities
        precheck-path: /v1/users/me/capabilities
        failure-status: 403
        docs: https://www.canva.dev/docs/connect/capabilities/
  - target: $
    description: Record the agent surfaces that front this API.
    update:
      x-agent-surfaces:
        mcp-remote: https://mcp.canva.com/mcp
        mcp-local: npx -y @canva/cli@latest mcp
        agent-card: null
        agent-skills: https://github.com/canva-sdks/canva-skills
        detail: mcp/canva-mcp.yml
  - target: $.paths['/v1/comments'].post
    description: >-
      Reinforce the deprecation Canva already marks, naming the replacement operation so a
      generated client can steer callers.
    update:
      x-deprecation:
        replaced-by: createThread
        replacement-path: /v1/designs/{designId}/comments
        source: openapi/canva-connect-api-openapi.yml
  - target: $.paths['/v1/connect/keys'].get
    description: Flag the webhook signature-verification key endpoint for event consumers.
    update:
      x-webhook-verification: true
      x-webhook-catalog: asyncapi/canva-webhooks.yml