Canva Oidc API

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

Operations 2

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /v1/oidc/jwks Get the OIDC public keys · Get oidc jwks #
Ask an LLM
“Where are the public keys for verifying OpenID Connect ID tokens?”
“How do I validate an id_token signature?”
Tell an agent
Fetch the OIDC JSON Web Key Set.
Get the keys for verifying ID tokens.
GET /v1/oidc/userinfo Get the signed-in user's OIDC claims · User info #
Ask an LLM
“How do I get the signed-in user's name and email via OpenID Connect?”
“Which scopes do I need for email claims to be returned?”
Tell an agent
Get the UserInfo claims for the authorized user.
Show the OpenID profile and email of the current user.

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:canva-oidc-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-oidc-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 OIDC API
  version: 2024-06-18
servers:
- description: Canva Connect API
  url: https://api.canva.com/rest
tags:
- name: OIDC
paths:
  /v1/oidc/jwks:
    servers:
    - description: Canva Connect API
      url: https://api.canva.com/auth
    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
      summary: Get oidc jwks
      x-summary-source: derived
  /v1/oidc/userinfo:
    servers:
    - description: Canva Connect API
      url: https://api.canva.com/auth
    get:
      description: 'Fetches the current UserInfo claims for the authorized user. This is the same fields

        returned by a id_token returns during authorization.


        The claims returned depend on the granted scopes: `profile` claims (`name`, `given_name`,

        `family_name`) are only returned when the `profile` scope is granted, and `email` claims

        (`email`, `email_verified`) are only returned when the `email` scope is granted. The

        `openid` scope is always required.'
      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
      - oauthAuthCode:
        - openid
        - profile
      - oauthAuthCode:
        - openid
        - email
      tags:
      - OIDC
      x-rate-limit-per-client-user: 10
      summary: User info
      x-summary-source: derived
components:
  schemas:
    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
    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
    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
    Error:
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
        message:
          description: A human-readable description of what went wrong.
          type: string
      required:
      - code
      - message
      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\n   public key.  It is represented as a Base64urlUInt-encoded value.\nSee 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\n   public key.  It is represented as a Base64urlUInt-encoded value.\nSee 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
  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