Canvas Developer Keys API

The Developer Keys API from Canvas — 3 operation(s) for developer keys.

Operations 5

GET /v1/accounts/{account_id}/developer_keys List Developer Keys #
POST /v1/accounts/{account_id}/developer_keys Create a Developer Key #
PUT /v1/developer_keys/{id} Update a Developer Key #
DELETE /v1/developer_keys/{id} Delete a Developer Key #
POST /v1/developer_keys/{id}/regenerate_secret Regenerate Developer Key Secret #

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/canvas-developer-keys-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

canvas-developer-keys-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Developer Keys API
  version: v1
  summary: The complete Canvas LMS REST API, converted from the Swagger 1.2 documents Instructure publishes under https://canvas.instructure.com/doc/api/.
  description: The Canvas LMS REST API covers courses, assignments, quizzes, grades, users, enrollments, accounts, files, modules, rubrics, submissions, SIS imports, LTI, analytics and account administration.
  contact:
    name: Instructure Canvas
    url: https://canvas.instructure.com/doc/api/
  license:
    name: AGPL-3.0
    url: https://github.com/instructure/canvas-lms/blob/master/LICENSE
servers:
- url: https://canvas.instructure.com/api
  description: Instructure-hosted Canvas (canvas.instructure.com)
- url: https://{canvas_host}/api
  description: Any Canvas instance; Canvas is multi-tenant and self-hostable, so the host is the institution's Canvas domain.
  variables:
    canvas_host:
      default: canvas.instructure.com
      description: Your institution's Canvas hostname, e.g. school.instructure.com
security:
- bearerAuth: []
- oauth2: []
tags:
- name: Developer Keys
  x-resource: developer_keys
  externalDocs:
    url: https://canvas.instructure.com/doc/api/developer_keys.html
paths:
  /v1/accounts/{account_id}/developer_keys:
    get:
      tags:
      - Developer Keys
      operationId: list_developer_keys
      summary: List Developer Keys
      description: List all developer keys created in the current account.
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: inherited
        in: query
        schema:
          type: boolean
        required: false
        description: 'Defaults to false. If true, lists keys inherited from

          Site Admin (and consortium parent account, if applicable).'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DeveloperKey'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/developer_keys.html
    post:
      tags:
      - Developer Keys
      operationId: create_developer_key
      summary: Create a Developer Key
      description: 'Create a new Canvas API key. Creating an LTI 1.3 registration is not supported here and

        should be done via the LTI Registration API.'
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                developer_key:
                  type: object
                  additionalProperties: true
                  description: no description
                developer_key[auto_expire_tokens]:
                  type: boolean
                  description: 'Defaults to false. If true, access tokens

                    generated by this key will expire after 1 hour.'
                developer_key[email]:
                  type: string
                  description: Contact email for the key.
                developer_key[icon_url]:
                  type: string
                  description: URL for a small icon to display in key list.
                developer_key[name]:
                  type: string
                  description: The display name.
                developer_key[notes]:
                  type: string
                  description: User-provided notes about the key.
                developer_key[redirect_uri]:
                  type: string
                  description: Deprecated in favor of redirect_uris. Do not use.
                developer_key[redirect_uris]:
                  type: array
                  items: {}
                  description: 'List of URLs used during OAuth2 flow to validate

                    given redirect URI.'
                developer_key[vendor_code]:
                  type: string
                  description: User-specified code representing the vendor that uses the key.
                developer_key[visible]:
                  type: boolean
                  description: Defaults to true. If false, key will not be visible in the UI.
                developer_key[test_cluster_only]:
                  type: boolean
                  description: 'Defaults to false. If true, key is only usable in

                    non-production environments (test, beta). Avoids problems with beta refresh.'
                developer_key[client_credentials_audience]:
                  type: string
                  description: 'Used in OAuth2 client credentials flow to

                    specify the audience for the access token.'
                developer_key[allowed_audiences]:
                  type: array
                  items: {}
                  description: 'The registered audiences this key may request tokens

                    for. Each value must appear in the environment''s configured list of registered audiences.'
                developer_key[authorized_flows]:
                  type: array
                  items: {}
                  description: 'Additional OAuth2 flows this key is authorized to

                    use. Allowed values: token_exchange, service_user_client_credentials.'
                developer_key[client_type]:
                  type: string
                  description: 'Whether this is a confidential or public client.

                    Public clients (SPAs, mobile apps) require PKCE in the authorization code flow, cannot use the

                    client_credentials flow, and receive short-lived access tokens with rotating refresh tokens.

                    Allowed values: confidential (default), public.

                    Not applicable to LTI keys. Immutable after creation.'
                developer_key[scopes]:
                  type: array
                  items: {}
                  description: List of API endpoints key is allowed to access.
                developer_key[require_scopes]:
                  type: boolean
                  description: If true, then token requests with this key must include scopes.
                developer_key[allow_includes]:
                  type: boolean
                  description: 'If true, allows `includes` parameters in API requests that

                    match the scopes of this key.'
              required:
              - developer_key
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                developer_key:
                  type: object
                  additionalProperties: true
                  description: no description
                developer_key[auto_expire_tokens]:
                  type: boolean
                  description: 'Defaults to false. If true, access tokens

                    generated by this key will expire after 1 hour.'
                developer_key[email]:
                  type: string
                  description: Contact email for the key.
                developer_key[icon_url]:
                  type: string
                  description: URL for a small icon to display in key list.
                developer_key[name]:
                  type: string
                  description: The display name.
                developer_key[notes]:
                  type: string
                  description: User-provided notes about the key.
                developer_key[redirect_uri]:
                  type: string
                  description: Deprecated in favor of redirect_uris. Do not use.
                developer_key[redirect_uris]:
                  type: array
                  items: {}
                  description: 'List of URLs used during OAuth2 flow to validate

                    given redirect URI.'
                developer_key[vendor_code]:
                  type: string
                  description: User-specified code representing the vendor that uses the key.
                developer_key[visible]:
                  type: boolean
                  description: Defaults to true. If false, key will not be visible in the UI.
                developer_key[test_cluster_only]:
                  type: boolean
                  description: 'Defaults to false. If true, key is only usable in

                    non-production environments (test, beta). Avoids problems with beta refresh.'
                developer_key[client_credentials_audience]:
                  type: string
                  description: 'Used in OAuth2 client credentials flow to

                    specify the audience for the access token.'
                developer_key[allowed_audiences]:
                  type: array
                  items: {}
                  description: 'The registered audiences this key may request tokens

                    for. Each value must appear in the environment''s configured list of registered audiences.'
                developer_key[authorized_flows]:
                  type: array
                  items: {}
                  description: 'Additional OAuth2 flows this key is authorized to

                    use. Allowed values: token_exchange, service_user_client_credentials.'
                developer_key[client_type]:
                  type: string
                  description: 'Whether this is a confidential or public client.

                    Public clients (SPAs, mobile apps) require PKCE in the authorization code flow, cannot use the

                    client_credentials flow, and receive short-lived access tokens with rotating refresh tokens.

                    Allowed values: confidential (default), public.

                    Not applicable to LTI keys. Immutable after creation.'
                developer_key[scopes]:
                  type: array
                  items: {}
                  description: List of API endpoints key is allowed to access.
                developer_key[require_scopes]:
                  type: boolean
                  description: If true, then token requests with this key must include scopes.
                developer_key[allow_includes]:
                  type: boolean
                  description: 'If true, allows `includes` parameters in API requests that

                    match the scopes of this key.'
              required:
              - developer_key
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeveloperKey'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/developer_keys.html
  /v1/developer_keys/{id}:
    put:
      tags:
      - Developer Keys
      operationId: update_developer_key
      summary: Update a Developer Key
      description: 'Update an existing Canvas API key. Updating an LTI 1.3 registration is not supported here and should

        be done via the LTI Registration API.'
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                developer_key:
                  type: object
                  additionalProperties: true
                  description: no description
                developer_key[auto_expire_tokens]:
                  type: boolean
                  description: 'Defaults to false. If true, access tokens

                    generated by this key will expire after 1 hour.'
                developer_key[email]:
                  type: string
                  description: Contact email for the key.
                developer_key[icon_url]:
                  type: string
                  description: URL for a small icon to display in key list.
                developer_key[name]:
                  type: string
                  description: The display name.
                developer_key[notes]:
                  type: string
                  description: User-provided notes about the key.
                developer_key[redirect_uri]:
                  type: string
                  description: Deprecated in favor of redirect_uris. Do not use.
                developer_key[redirect_uris]:
                  type: array
                  items: {}
                  description: 'List of URLs used during OAuth2 flow to validate

                    given redirect URI.'
                developer_key[vendor_code]:
                  type: string
                  description: User-specified code representing the vendor that uses the key.
                developer_key[visible]:
                  type: boolean
                  description: Defaults to true. If false, key will not be visible in the UI.
                developer_key[test_cluster_only]:
                  type: boolean
                  description: 'Defaults to false. If true, key is only usable in

                    non-production environments (test, beta). Avoids problems with beta refresh.'
                developer_key[client_credentials_audience]:
                  type: string
                  description: 'Used in OAuth2 client credentials flow to

                    specify the audience for the access token.'
                developer_key[allowed_audiences]:
                  type: array
                  items: {}
                  description: 'The registered audiences this key may request tokens

                    for. Each value must appear in the environment''s configured list of registered audiences.'
                developer_key[authorized_flows]:
                  type: array
                  items: {}
                  description: 'Additional OAuth2 flows this key is authorized to

                    use. Allowed values: token_exchange, service_user_client_credentials.'
                developer_key[scopes]:
                  type: array
                  items: {}
                  description: List of API endpoints key is allowed to access.
                developer_key[require_scopes]:
                  type: boolean
                  description: If true, then token requests with this key must include scopes.
                developer_key[allow_includes]:
                  type: boolean
                  description: 'If true, allows `includes` parameters in API requests that

                    match the scopes of this key.'
              required:
              - developer_key
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                developer_key:
                  type: object
                  additionalProperties: true
                  description: no description
                developer_key[auto_expire_tokens]:
                  type: boolean
                  description: 'Defaults to false. If true, access tokens

                    generated by this key will expire after 1 hour.'
                developer_key[email]:
                  type: string
                  description: Contact email for the key.
                developer_key[icon_url]:
                  type: string
                  description: URL for a small icon to display in key list.
                developer_key[name]:
                  type: string
                  description: The display name.
                developer_key[notes]:
                  type: string
                  description: User-provided notes about the key.
                developer_key[redirect_uri]:
                  type: string
                  description: Deprecated in favor of redirect_uris. Do not use.
                developer_key[redirect_uris]:
                  type: array
                  items: {}
                  description: 'List of URLs used during OAuth2 flow to validate

                    given redirect URI.'
                developer_key[vendor_code]:
                  type: string
                  description: User-specified code representing the vendor that uses the key.
                developer_key[visible]:
                  type: boolean
                  description: Defaults to true. If false, key will not be visible in the UI.
                developer_key[test_cluster_only]:
                  type: boolean
                  description: 'Defaults to false. If true, key is only usable in

                    non-production environments (test, beta). Avoids problems with beta refresh.'
                developer_key[client_credentials_audience]:
                  type: string
                  description: 'Used in OAuth2 client credentials flow to

                    specify the audience for the access token.'
                developer_key[allowed_audiences]:
                  type: array
                  items: {}
                  description: 'The registered audiences this key may request tokens

                    for. Each value must appear in the environment''s configured list of registered audiences.'
                developer_key[authorized_flows]:
                  type: array
                  items: {}
                  description: 'Additional OAuth2 flows this key is authorized to

                    use. Allowed values: token_exchange, service_user_client_credentials.'
                developer_key[scopes]:
                  type: array
                  items: {}
                  description: List of API endpoints key is allowed to access.
                developer_key[require_scopes]:
                  type: boolean
                  description: If true, then token requests with this key must include scopes.
                developer_key[allow_includes]:
                  type: boolean
                  description: 'If true, allows `includes` parameters in API requests that

                    match the scopes of this key.'
              required:
              - developer_key
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeveloperKey'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/developer_keys.html
    delete:
      tags:
      - Developer Keys
      operationId: delete_developer_key
      summary: Delete a Developer Key
      description: Delete an existing Canvas API key. Deleting an LTI 1.3 registration should be done via the LTI Registration API.
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeveloperKey'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/developer_keys.html
  /v1/developer_keys/{id}/regenerate_secret:
    post:
      tags:
      - Developer Keys
      operationId: regenerate_developer_key_secret
      summary: Regenerate Developer Key Secret
      description: 'Regenerate the secret (api_key) for an existing Canvas API key. This invalidates

        the existing secret. Any applications using the old secret will stop working.

        Regenerating a secret for an LTI key is not supported.


        This endpoint requires the developer_key_regenerate_secret feature flag to be enabled.

        This feature flag can only be turned on by Site Admins'
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeveloperKey'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/developer_keys.html
components:
  schemas:
    DeveloperKey:
      type: object
      properties:
        id:
          type: integer
          example: 1
          description: The Canvas ID of the DeveloperKey object
        name:
          type: string
          example: Test Key
          description: The display name
        created_at:
          type: string
          format: date-time
          example: '2025-05-30T17:09:18Z'
          description: Timestamp of the key's creation
        updated_at:
          type: string
          format: date-time
          example: '2025-05-30T17:09:18Z'
          description: Timestamp of the key's last update
        workflow_state:
          type: string
          example: active
          description: The state of the key
          enum:
          - active
          - deleted
        is_lti_key:
          type: boolean
          example: false
          description: True if key represents an LTI 1.3 Registration. False for Canvas API keys
        email:
          type: string
          example: test@example.com
          description: Contact email configured for key
        icon_url:
          type: string
          example: https://example.com/icon.png
          description: URL for a small icon to display in key list
        notes:
          type: string
          example: this key is for testing
          description: User-provided notes about key
        vendor_code:
          type: string
          example: Google
          description: User-specified code representing the vendor that uses the key
        account_name:
          type: string
          example: Test Account
          description: The name of the account that owns the key
        visible:
          type: boolean
          example: true
          description: True for all keys except Site Admin-level keys, which default to false. Controls visibility in the Inherited tab.
        scopes:
          type: array
          items:
            type: string
          example:
          - url:GET|/api/v1/accounts
          description: List of API endpoints key is allowed to access (API keys), or LTI 1.3 scopes (LTI keys)
        redirect_uri:
          type: string
          example: 'no'
          description: Deprecated in favor of redirect_uris. Do not use.
        redirect_uris:
          type: array
          items:
            type: string
          example:
          - https://mytool.com/oauth2/redirect
          - https://mytool.com/1_3/launch
          description: List of URLs used during OAuth2 flow to validate given redirect URI (API keys), or to redirect to after login (LTI keys)
        all_redirect_uris:
          type: array
          items:
            type: object
            additionalProperties: true
          example:
          - redirect_uri: https://mytool.com/redirect
            last_used_at: '2024-01-15T12:00:00Z'
            workflow_state: active
          description: All redirect URIs associated with the key, including any that have been automatically deactivated due to inactivity, along with their last-used timestamp and workflow_state (one of 'active' or 'inactive')
        access_token_count:
          type: integer
          example: '42'
          description: (API keys only) The number of active access tokens associated with the key
        last_used_at:
          type: string
          format: date-time
          example: '2025-05-30T17:09:18Z'
          description: (API keys only) The last time an access token for this key was used in an API request
        test_cluster_only:
          type: boolean
          example: false
          description: (API keys only) If true, key is only usable in non-production environments (test, beta). Avoids problems with beta refresh.
        allow_includes:
          type: boolean
          example: true
          description: (API keys only) If true, allows `includes` parameters in API requests that match the scopes of this key
        require_scopes:
          type: boolean
          example: false
          description: (API keys only) If true, then token requests with this key must include scopes
        client_credentials_audience:
          type: string
          example: external
          description: (API keys only) Used in OAuth2 client credentials flow to specify the audience for the access token
        allowed_audiences:
          type: array
          items:
            type: string
          example:
          - cedar-api-production.us-east-1.temp.prod.inseng.io
          description: (API keys only) The registered audiences this key may request tokens for. Each value must appear in the environment's configured list of registered audiences.
        authorized_flows:
          type: array
          items:
            type: string
          example:
          - token_exchange
          description: '(API keys only) Additional OAuth2 flows this key is authorized to use. Allowed values: token_exchange, service_user_client_credentials.'
        client_type:
          type: string
          example: confidential
          description: '(API keys only) Whether this is a confidential or public client. Public clients (SPAs, mobile apps) require PKCE, cannot use client_credentials, and receive short-lived rotating tokens. Allowed values: confidential, public. Defaults to confidential. Immutable after creation.'
        api_key:
          type: string
          example: sd45fg64....
          description: (API keys only) The client secret used in the OAuth authorization_code flow.
        tool_configuration:
          type: string
          example:
            type: Lti::ToolConfiguration
          description: (LTI keys only) The Canvas-style tool configuration for this key.
        public_jwk:
          type: object
          additionalProperties: true
          example:
            e: AQAB
            etc: etc
          description: (LTI keys only) The tool's public JWK in JSON format. Discouraged in favor of a url hosting a JWK set.
        public_jwk_url:
          type: string
          example: https://mytool.com/1_3/jwks
          description: (LTI keys only) The tool-hosted URL containing its public JWK keyset. Canvas may cache JWKs up to 5 minutes.
        lti_registration:
          type: object
          additionalProperties: true
          example:
            type: TODO Lti::IMS::Registration
          description: (LTI keys only) The LTI IMS Registration object for this key, if key was created via Dynamic Registration.
        is_lti_registration:
          type: boolean
          example: false
          description: (LTI keys only) Returns true if key was created via Dynamic Registration.
        user_name:
          type: string
          example: ''
          description: Unused.
        user_id:
          type: string
          example: ''
          description: Unused.
        unified_tool_id:
          type: string
          example: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
          description: Correlates an API key to a product configuration.
      description: a Canvas API key (or LTI 1.3 registration)
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Canvas OAuth2 access token sent as "Authorization: Bearer <token>". See https://canvas.instructure.com/doc/api/file.oauth.html'
    oauth2:
      type: oauth2
      description: Canvas OAuth2. See https://canvas.instructure.com/doc/api/file.oauth.html and https://canvas.instructure.com/doc/api/file.oauth_endpoints.html
      flows:
        authorizationCode:
          authorizationUrl: https://canvas.instructure.com/login/oauth2/auth
          tokenUrl: https://canvas.instructure.com/login/oauth2/token
          refreshUrl: https://canvas.instructure.com/login/oauth2/token
          scopes: {}
externalDocs:
  description: Canvas LMS REST API Documentation
  url: https://canvas.instructure.com/doc/api/
x-generated-from: https://canvas.instructure.com/doc/api/api-docs.json
x-provenance:
  method: derived
  derived_by: API Evangelist enrichment pipeline (Swagger 1.2 -> OpenAPI 3.1 conversion)
  source: openapi/_original/swagger-1.2/*.json (144 verbatim first-party Swagger 1.2 documents)
  source_url: https://canvas.instructure.com/doc/api/api-docs.json
  fetched: '2026-09-05'
  http_status: 200