Canvas · Authentication Profile

Canvas Authentication

Authentication

Canvas secures its APIs with http and oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

EducationEdTechGraphQLLearning Management SystemLMSLTIOpen-SourceREST
Methods: http, oauth2 Schemes: 2 OAuth flows: authorizationCode API key in:

Security Schemes

bearerAuth http
scheme: bearer
oauth2 oauth2
· flows: authorizationCode

Source

Authentication Profile

Raw ↑
generated: '2026-09-05'
method: searched
source: openapi/canvas-courses-api-openapi.yml, openapi/canvas-lms-openapi.yml + Instructure OAuth2 documentation
  (searched 2026-09-05)
summary:
  types:
  - http
  - oauth2
  oauth2_flows:
  - authorizationCode
schemes:
- name: 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'
  sources:
  - openapi/canvas-courses-api-openapi.yml
  - openapi/canvas-lms-openapi.yml
- name: oauth2
  type: oauth2
  flows:
  - flow: authorizationCode
    authorizationUrl: https://canvas.instructure.com/login/oauth2/auth
    tokenUrl: https://canvas.instructure.com/login/oauth2/token
    scopes: 0
  description: Canvas OAuth2. See https://canvas.instructure.com/doc/api/file.oauth.html and https://canvas.instructure.com/doc/api/file.oauth_endpoints.html
  sources:
  - openapi/canvas-courses-api-openapi.yml
  - openapi/canvas-lms-openapi.yml
docs:
- https://developerdocs.instructure.com/services/canvas/oauth2/file.oauth
- https://developerdocs.instructure.com/services/canvas/oauth2/file.oauth_endpoints
- https://developerdocs.instructure.com/services/canvas/oauth2/file.developer_keys
- https://developerdocs.instructure.com/services/canvas/resources/api_token_scopes
model: OAuth 2.0 (RFC 6749) authorization code, plus manually generated personal access tokens
endpoints:
  authorize:
    method: GET
    url: https://<canvas-host>/login/oauth2/auth
    params:
    - client_id
    - response_type=code
    - redirect_uri
    - state
    - scope
    - purpose
    - force_login
    - unique_id
    - prompt=none
  token:
    method: POST
    url: https://<canvas-host>/login/oauth2/token
    grant_types:
    - authorization_code
    - refresh_token
    - client_credentials
    note: client_credentials is used for LTI Advantage service tokens, signed with the tool's JWK — not for the
      Canvas REST API.
  logout:
    method: DELETE
    url: https://<canvas-host>/login/oauth2/token
    note: Expires the access token. `expire_sessions=1` also ends the user's Canvas web sessions.
  session_token:
    method: GET
    url: https://<canvas-host>/login/session_token
    note: Exchanges an API token for a one-time URL that logs the user into the Canvas web UI.
token_lifetime:
  access_token: 1 hour (developer keys issued after Oct 2015)
  refresh_token: long-lived
  note: Applications MUST implement refresh; there is no long-lived access token for OAuth apps.
manual_tokens:
  where: /profile → Approved Integrations → New Access Token
  shown_once: true
  policy: Instructure's Canvas API Policy forbids asking another user to generate and hand over a token. Multi-user
    applications must use OAuth. https://www.instructure.com/policies/canvas-api-policy
developer_keys:
  issued_by: the institution's Canvas admin (Site Admin on a self-hosted install)
  scoping: Keys are scoped to the institution that issued them. A tool serving many institutions must store one
    key per Canvas domain and pick it from the launch context (custom_canvas_api_domain).
  enforce_scopes: Optional per key. When off, the key grants everything its user can do.
  docs: https://developerdocs.instructure.com/services/canvas/oauth2/file.developer_keys
scopes:
  model: per-endpoint strings of the form url:<VERB>|/api/v1/<path>
  see: scopes/canvas-scopes.yml
  identity_only: /auth/userinfo returns the user's name and id and no access token.
error_signals:
  401_with_www_authenticate: token invalid, expired, or issued on a different Canvas host
  401_without_www_authenticate: authenticated but not permitted
  see: errors/canvas-problem-types.yml
identity_federation:
  note: 'Separately from API auth, Canvas federates END-USER login through the Authentication Providers resource:
    SAML 2.0, CAS, LDAP and OpenID Connect.'
  see: conformance/canvas-conformance.yml
lti_advantage:
  note: LTI 1.3 tools authenticate to Canvas services with a signed JWT client-credentials grant, per the 1EdTech
    Security Framework — not with a Canvas API token.
  docs: https://developerdocs.instructure.com/services/canvas/external-tools/lti/file.tools_intro

Work with this as data

Every security artifact 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 security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • 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 security artifact
curl "https://apis.io/api/v1/security/canvas-authentication"
All security posture
curl "https://apis.io/api/v1/security?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.