Canvas LMS website screenshot

Canvas LMS

Canvas is the open, AGPLv3-licensed learning management system created and maintained by Instructure, Inc. and used by more than 30 million students, teachers, and administrators across higher education, K-12, business, and government. Canvas exposes a deep REST API (190+ resource groups covering Accounts, Courses, Enrollments, Assignments, Submissions, Grades, Outcomes, Quizzes, Rubrics, Modules, Pages, Discussions, Files, Conversations, Calendar Events, SIS Import, Authentication Providers, Developer Keys, External Tools, AI Conversations, AI Experiences, Analytics, Audit Logs, and more), a GraphQL API at /api/graphql, IMS LTI 1.3 / LTI Advantage services (Names and Role Provisioning, Line Items, Score, Result, Deep Linking), a Platform Notification Service for server-to-server webhook delivery, and the Data Access Platform (DAP / Canvas Data 2) for warehouse-scale event and snapshot data export. Canvas is the same software that powers canvas.instructure.com (Free for Teacher), Canvas Cloud for institutions, and self-hosted deployments.

7 APIs 20 Features
Learning ManagementEducationEdTechLMSLTIHigher EducationK-12Open SourceAGPLCanvas

APIs

Canvas REST API

The canonical Canvas REST API at /api/v1. 190+ controller-driven resource groups covering Accounts, Account Calendars, Account Notifications, Account Reports, Admins, Announceme...

Canvas GraphQL API

GraphQL endpoint exposing the Canvas object graph (courses, users, enrollments, assignments, submissions, modules, discussion topics, outcomes, account hierarchies, etc.). Permi...

Canvas LTI Advantage Services

1EdTech (IMS Global) LTI 1.3 / LTI Advantage implementation. Includes Deep Linking 2.0, Names and Role Provisioning Services (NRPS), Assignment and Grade Services (Line Items, S...

Canvas Platform Notification Service

Platform Notification Service (PNS) enables server-to-server communication by allowing Canvas to send Notices (webhook deliveries) to LTI tools outside the scope of an active us...

Canvas Live Events

Canvas Live Events stream lifecycle events emitted by Canvas (course, enrollment, assignment, submission, grade change, discussion, module, outcome, file/attachment, SIS batch, ...

Canvas Data Access Platform

Data Access Platform (DAP) is the warehouse-scale data export API for Canvas Data 2 — the successor to Canvas Data 1 / Canvas Data CLI. DAP exposes Canvas tables and Caliper-der...

Canvas SIS Import API

The SIS Import API ingests Canvas's canonical SIS CSV format (and ZIP archives of those CSVs) to provision accounts, terms, courses, sections, users, enrollments, groups, group ...

Collections

Arazzo Workflows

Canvas LMS Audit Account Course and Conclude It

List courses in an account, read one course's detail, then conclude it.

ARAZZO

Canvas LMS Grade a Discussion-backed Assignment

Locate a discussion topic's graded assignment, then grade a student's discussion submission.

ARAZZO

Canvas LMS Conclude Course After Grade Check

List a course's enrollments with grades, then conclude the course.

ARAZZO

Canvas LMS Copy Assignment to Another Course

Read an assignment from a source course and recreate it in a target course.

ARAZZO

Canvas LMS Create Assignment and Confirm

Verify a course exists, create an assignment in it, then fetch the assignment back.

ARAZZO

Canvas LMS Create Assignment and Grade Submission

Create an assignment, find a student's submission, and post a grade plus comment.

ARAZZO

Canvas LMS Configure Course Then Author Assignment

Update a course's settings, then create its first assignment, and read it back.

ARAZZO

Canvas LMS Enroll Teacher Then Author Assignment

Enroll a teacher in a course, then create the course's first assignment.

ARAZZO

Canvas LMS Enroll User and Confirm

Enroll a user in a course and confirm the enrollment appears in the course roster.

ARAZZO

Canvas LMS Excuse or Grade a Submission

Read a submission and branch — excuse it when not submitted, otherwise post a grade.

ARAZZO

Canvas LMS Find or Create Assignment

Search a course for an assignment by name and create it only when it is missing.

ARAZZO

Canvas LMS Grade One of Many Submissions

List an assignment's submissions, then post a grade to the first one returned.

ARAZZO

Canvas LMS Grade an Assignment From a Module

List a course's modules with items, then grade a student on a module assignment.

ARAZZO

Canvas LMS Onboard Student to Course

Validate a user, enroll them as a student, and confirm course membership.

ARAZZO

Canvas LMS Publish Assignment and List Submissions

Publish a draft assignment, then list every submission for it.

ARAZZO

Canvas LMS Grade a Student by Section Enrollment

Find a student via course section enrollments, then grade their assignment.

ARAZZO

Canvas LMS Author in the Current User's First Course

Identify the authenticated teacher, pick their first taught course, and author an assignment.

ARAZZO

Canvas LMS Extend Due Date Then Grade Late Submission

Push an assignment's due date out, then grade a student's late submission.

ARAZZO

GraphQL

Canvas LMS GraphQL API

Canvas exposes a GraphQL endpoint at `/api/graphql` that provides access to the Canvas object graph. The API supports queries and mutations for courses, users, enrollments, assi...

GRAPHQL

Pricing Plans

Canvas Lms Plans Pricing

6 plans

PLANS

Rate Limits

Canvas Lms Rate Limits

3 limits

RATE LIMITS

Features

Open-source AGPLv3 LMS by Instructure with 6,600+ GitHub stars and 30M+ users worldwide
REST API with 190+ resource groups covering the full LMS surface — courses, users, enrollments, assignments, submissions, grades, outcomes, quizzes, modules, pages, discussions, files, conversations, calendar events, audit logs, AI conversations, AI experiences, and more
GraphQL API at /api/graphql with hosted GraphiQL explorer at /graphiql
OAuth2 (RFC 6749) authentication with developer-key-issued client credentials, manual personal access tokens for testing, and the as_user_id masquerading parameter for admin act-as flows
Full IMS LTI 1.3 / LTI Advantage implementation — Deep Linking 2.0, Names and Role Provisioning, Assignment & Grade Services (Line Items, Score, Result), Dynamic Registration, JWK key exchange
Platform Notification Service (PNS) for server-to-server webhook delivery to LTI tools
Plagiarism Detection Platform with webhook subscriptions, originality reports, and plagiarism-platform users/assignments
SIS Import API with the canonical Canvas SIS CSV format covering accounts, terms, courses, sections, users, enrollments, groups, group memberships, cross-listings, logins, admins
Data Access Platform (DAP / Canvas Data 2) for warehouse-scale snapshot + incremental table and event exports via the api-gateway.instructure.com/dap endpoint
Built-in OpenAPI 3.0 generator via the `rake doc:openapi` task using swagger_yard
Pagination using RFC 5988 Link headers; per_page query parameter; supports `last`, `next`, `prev`, and `first` link rels
Per-user-per-host throttling with X-Request-Cost and X-Rate-Limit-Remaining response headers
Compound documents and includes[] query parameter for relationship hydration
File Upload API with multipart POST-then-PUT flow for direct-to-S3 uploads
Audit log APIs for Authentications, Course changes, and Grade Changes
Canvas Studio (video), Canvas Catalog (course discovery + commerce), Canvas Credentials (digital credentials via Parchment), and Canvas Career Experiences
Cross-platform mobile apps for Students, Teachers, Parents (canvas-ios + canvas-android repos)
Common Cartridge import/export, QTI 1.x/2.x quiz interchange, Moodle migration
Self-hosted via Docker (canvas-self-hosted) or hosted as Canvas Cloud (Canvas Free for Teacher, Canvas LMS for institutions)
Owned by Instructure, Inc. (KKR portfolio company since 2024); Steve Daly, CEO

Semantic Vocabularies

Canvas Lms Context

34 classes · 16 properties

JSON-LD

Resources

🔗
PostmanWorkspace
PostmanWorkspace
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🌐
Portal
Portal
🌐
Portal
Portal
📝
Signup
Signup
🔗
Documentation
Documentation
🔗
Documentation
Documentation
📄
ChangeLog
ChangeLog
🔗
Documentation
Documentation
🔑
Authentication
Authentication
🔗
RateLimits
RateLimits
🔗
Pagination
Pagination
🔗
Documentation
Documentation
📜
TermsOfService
TermsOfService
📜
PrivacyPolicy
PrivacyPolicy
📜
PrivacyPolicy
PrivacyPolicy
🟢
StatusPage
StatusPage
🔗
Forums
Forums
🔗
Forums
Forums
📰
Blog
Blog
🌐
Portal
Portal
🌐
Portal
Portal
🌐
Portal
Portal
👥
GitHubOrganization
GitHubOrganization
💻
SourceCode
SourceCode
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🚀
GettingStarted
GettingStarted
🔧
Tools
Tools
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
📦
SDKs
SDKs
🔧
Tools
Tools
🔧
Tools
Tools
💻
CodeExamples
CodeExamples
💻
SourceCode
SourceCode
💻
CodeExamples
CodeExamples
💻
CodeExamples
CodeExamples
💻
CodeExamples
CodeExamples
💻
CodeExamples
CodeExamples
📦
SDKs
SDKs
📦
SDKs
SDKs
🔧
Tools
Tools
🔧
Tools
Tools
🔧
Tools
Tools
🔧
Tools
Tools
🔧
Tools
Tools
🔧
Tools
Tools
💻
CodeExamples
CodeExamples
🔧
Tools
Tools
🔗
Marketplace
Marketplace
🔗
Marketplace
Marketplace
🌐
Portal
Portal
🌐
Portal
Portal
🌐
Portal
Portal
🌐
Portal
Portal
🔗
Plans
Plans
🔗
RateLimits
RateLimits

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Canvas LMS REST API
  version: '1.0'
request:
  auth:
    type: oauth2
    flow: authorization_code
    authorizationUrl: https://canvas.instructure.com/login/oauth2/auth
    accessTokenUrl: https://canvas.instructure.com/login/oauth2/token
    credentials:
      clientId: '{{clientId}}'
      clientSecret: '{{clientSecret}}'
items:
- info:
    name: Accounts
    type: folder
  items:
  - info:
      name: List Accounts
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/accounts
      params:
      - name: per_page
        value: ''
        type: query
        description: Items per page (default 10, max varies by endpoint and install).
      - name: page
        value: ''
        type: query
        description: Page number (1-indexed). Prefer following RFC 5988 Link headers with rel="next".
      - name: include[]
        value: ''
        type: query
    docs: List accounts that the current user can view or manage.
  - info:
      name: Get a Single Account
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/accounts/:account_id
      params:
      - name: account_id
        value: ''
        type: path
        description: The Canvas account ID, an SIS account ID prefixed `sis_account_id:`, or `self`.
    docs: Get a Single Account
  - info:
      name: List Active Courses in an Account
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/accounts/:account_id/courses
      params:
      - name: account_id
        value: ''
        type: path
        description: The Canvas account ID, an SIS account ID prefixed `sis_account_id:`, or `self`.
      - name: with_enrollments
        value: ''
        type: query
      - name: enrollment_term_id
        value: ''
        type: query
      - name: search_term
        value: ''
        type: query
      - name: state[]
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
        description: Items per page (default 10, max varies by endpoint and install).
      - name: page
        value: ''
        type: query
        description: Page number (1-indexed). Prefer following RFC 5988 Link headers with rel="next".
    docs: List Active Courses in an Account
- info:
    name: Courses
    type: folder
  items:
  - info:
      name: List Courses for the Current User
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses
      params:
      - name: enrollment_type
        value: ''
        type: query
      - name: enrollment_state
        value: ''
        type: query
      - name: include[]
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
        description: Items per page (default 10, max varies by endpoint and install).
      - name: page
        value: ''
        type: query
        description: Page number (1-indexed). Prefer following RFC 5988 Link headers with rel="next".
    docs: List Courses for the Current User
  - info:
      name: Get a Single Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: include[]
        value: ''
        type: query
    docs: Get a Single Course
  - info:
      name: Update a Course
      type: http
    http:
      method: PUT
      url: https://{canvas_host}/api/v1/courses/:course_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      body:
        type: json
        data: '{}'
    docs: Update a Course
  - info:
      name: Conclude or Delete a Course
      type: http
    http:
      method: DELETE
      url: https://{canvas_host}/api/v1/courses/:course_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: event
        value: ''
        type: query
    docs: Conclude or Delete a Course
  - info:
      name: List Users in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/users
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: enrollment_type[]
        value: ''
        type: query
      - name: enrollment_role
        value: ''
        type: query
      - name: include[]
        value: ''
        type: query
      - name: search_term
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
        description: Items per page (default 10, max varies by endpoint and install).
    docs: List Users in a Course
- info:
    name: Enrollments
    type: folder
  items:
  - info:
      name: List Enrollments in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/enrollments
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: type[]
        value: ''
        type: query
      - name: state[]
        value: ''
        type: query
    docs: List Enrollments in a Course
  - info:
      name: Enroll a User in a Course
      type: http
    http:
      method: POST
      url: https://{canvas_host}/api/v1/courses/:course_id/enrollments
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      body:
        type: json
        data: '{}'
    docs: Enroll a User in a Course
- info:
    name: Assignments
    type: folder
  items:
  - info:
      name: List Assignments in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: include[]
        value: ''
        type: query
      - name: search_term
        value: ''
        type: query
      - name: order_by
        value: ''
        type: query
      - name: bucket
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
        description: Items per page (default 10, max varies by endpoint and install).
    docs: List Assignments in a Course
  - info:
      name: Create an Assignment
      type: http
    http:
      method: POST
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      body:
        type: json
        data: '{}'
    docs: Create an Assignment
  - info:
      name: Get a Single Assignment
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
    docs: Get a Single Assignment
  - info:
      name: Edit an Assignment
      type: http
    http:
      method: PUT
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
      body:
        type: json
        data: '{}'
    docs: Edit an Assignment
  - info:
      name: Delete an Assignment
      type: http
    http:
      method: DELETE
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
    docs: Delete an Assignment
- info:
    name: Submissions
    type: folder
  items:
  - info:
      name: List Submissions for an Assignment
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id/submissions
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
      - name: include[]
        value: ''
        type: query
      - name: grouped
        value: ''
        type: query
    docs: List Submissions for an Assignment
  - info:
      name: Get a Single Submission
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
      - name: user_id
        value: ''
        type: path
    docs: Get a Single Submission
  - info:
      name: Grade or Comment on a Submission
      type: http
    http:
      method: PUT
      url: https://{canvas_host}/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: assignment_id
        value: ''
        type: path
        description: The Canvas assignment ID.
      - name: user_id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Grade or Comment on a Submission
- info:
    name: Modules
    type: folder
  items:
  - info:
      name: List Modules in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/modules
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: include[]
        value: ''
        type: query
    docs: List Modules in a Course
- info:
    name: Discussions
    type: folder
  items:
  - info:
      name: List Discussion Topics in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/discussion_topics
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: include[]
        value: ''
        type: query
      - name: order_by
        value: ''
        type: query
    docs: List Discussion Topics in a Course
- info:
    name: Files
    type: folder
  items:
  - info:
      name: List Files in a Course
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/courses/:course_id/files
      params:
      - name: course_id
        value: ''
        type: path
        description: The Canvas course ID or an SIS course ID prefixed `sis_course_id:`.
      - name: content_types[]
        value: ''
        type: query
      - name: search_term
        value: ''
        type: query
      - name: include[]
        value: ''
        type: query
    docs: List Files in a Course
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Get a Single User
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/users/:user_id
      params:
      - name: user_id
        value: ''
        type: path
      - name: include[]
        value: ''
        type: query
    docs: Get a Single User
  - info:
      name: Get the Authenticated User
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/users/self
    docs: Get the Authenticated User
  - info:
      name: Get the Authenticated User's Profile
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/users/self/profile
    docs: Get the Authenticated User's Profile
- info:
    name: Outcomes
    type: folder
  items:
  - info:
      name: List Outcome Groups in an Account
      type: http
    http:
      method: GET
      url: https://{canvas_host}/api/v1/accounts/:account_id/outcome_groups
      params:
      - name: account_id
        value: ''
        type: path
        description: The Canvas account ID, an SIS account ID prefixed `sis_account_id:`, or `self`.
    docs: List Outcome Groups in an Account
bundled: true