Canvas Developer Keys API

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

Operations 5

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/accounts/{account_id}/developer_keys List an account's developer keys · List Developer Keys #
Ask an LLM
“What Canvas API developer keys exist in my account?”
“Can I include keys inherited from the parent site admin account?”
Tell an agent
List the developer keys in account {account_id}.
Show inherited developer keys for account {account_id}: {inherited}.
POST /v1/accounts/{account_id}/developer_keys Create a developer key · Create a Developer Key #
Ask an LLM
“How do I create a new API developer key for an integration?”
“Can a new developer key be limited to specific scopes and redirect URIs?”
Tell an agent
Create a developer key named {name} in account {account_id}.
Add an API key in account {account_id} with redirect URI {redirect_uri} and scopes {scopes}.
PUT /v1/developer_keys/{id} Update a developer key · Update a Developer Key #
Ask an LLM
“Can I change the redirect URIs or contact email on an existing developer key?”
“Is updating an LTI 1.3 key done through this endpoint?”
Tell an agent
Rename developer key {id} to {name}.
Update the redirect URIs on developer key {id} to {redirect_uris}.
DELETE /v1/developer_keys/{id} Delete a developer key · Delete a Developer Key #
Ask an LLM
“Can I permanently remove an API developer key we no longer use?”
“Does deleting a key here also remove LTI 1.3 registrations?”
Tell an agent destructive · confirm first
Delete developer key {id}.
Remove the unused API key {id}.
POST /v1/developer_keys/{id}/regenerate_secret Rotate a developer key's secret · Regenerate Developer Key Secret #
Ask an LLM
“Can I rotate the client secret on a developer key if it leaked?”
“What happens to apps using the old secret after it's regenerated?”
Tell an agent destructive · confirm first
Regenerate the secret for developer key {id}.
Rotate the api_key on key {id} and invalidate the old one.

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