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), a GraphQL API, full IMS LTI 1.3 / LTI Advantage services, a Platform Notification Service for server-to-server webhooks, the Data Access Platform (DAP / Canvas Data 2) for warehouse-scale data export, and the SIS Import API for bulk provisioning.
URL: Visit APIs.json
Run: Capabilities Using Naftiko
- Learning Management, Education, EdTech, LMS, LTI, Higher Education, K-12, Open Source, AGPL, Canvas
- Created: 2026-05-25
- Modified: 2026-05-25
| Mode | Hosting | Licensing | Source |
|---|---|---|---|
| Canvas Free for Teacher | canvas.instructure.com (Instructure-hosted) | Free, individual teacher accounts | Closed (same Canvas binary) |
| Canvas Cloud (Institutional) | Instructure-hosted, per-tenant | Contract-priced per FTE / learner | Closed (same Canvas binary) |
| Canvas Self-Hosted | Customer infrastructure | AGPL-3.0-or-later, no license fee | instructure/canvas-lms |
The canonical Canvas REST API at /api/v1. 190+ controller-driven resource groups covering Accounts, Courses, Enrollments, Users, Assignments, Submissions, Modules, Discussion Topics, Files, Outcomes, Quizzes, Rubrics, SIS Imports, Developer Keys, External Tools, AI Conversations, AI Experiences, Audit Logs, and more. OAuth2 (RFC 6749) authentication; pagination via RFC 5988 Link headers.
Human URL: https://canvas.instructure.com/doc/api/
- Documentation — All Resources Reference
- OpenAPI
- JSON Schema — Course
- JSON Schema — Assignment
- JSON-LD Context
- Naftiko Capability — Courses
- Naftiko Capability — Assignments
- OAuth2 Overview
- Throttling
- Pagination
- Change Log
GraphQL endpoint at /api/graphql exposing the Canvas object graph with the same authentication and permissions model as the REST API. Hosted GraphiQL explorer at /graphiql.
Human URL: https://canvas.instructure.com/doc/api/file.graphql.html
1EdTech (IMS Global) LTI 1.3 / LTI Advantage implementation: Deep Linking 2.0, Names and Role Provisioning (NRPS), Assignment & Grade Services (Line Items, Score, Result), Dynamic Registration, Platform Notification Service, and JWK-based key exchange. JWT client-assertion authentication per the IMS Security Framework.
Human URL: https://canvas.instructure.com/doc/api/file.tools_intro.html
Server-to-server webhook delivery to LTI tools outside the scope of an active user session. Tools register notice handlers for specific event types and receive signed deliveries that integrate with the IMS LTI 1.3 security model.
Human URL: https://canvas.instructure.com/doc/api/file.pns.html
Warehouse-scale data export API for Canvas Data 2 — the successor to Canvas Data 1 / Canvas Data CLI. Exposes Canvas tables and Caliper-derived event streams as snapshot and incremental queries against the canvas and catalog namespaces.
Human URL: https://data-access-platform-api.s3.amazonaws.com/index.html
Ingests Canvas's canonical SIS CSV format (and ZIP archives of those CSVs) to provision accounts, terms, courses, sections, users, enrollments, groups, group memberships, cross-listings, user observers, logins, admins, change-sis-id mappings, and admin differentiation tags. Supports diffing, batch mode, and asynchronous progress polling.
Human URL: https://canvas.instructure.com/doc/api/sis_imports.html
| Repo | Language | Purpose |
|---|---|---|
| instructure/canvas-lms | Ruby | Canvas LMS core source (6,600+ stars) |
| instructure/canvas-ios | Swift | Canvas iOS apps (Student, Teacher, Parent) |
| instructure/canvas-android | Kotlin | Canvas Android apps |
| instructure/canvas-rce-api | JavaScript | Canvas Rich Content Editor API |
| instructure/canvas-self-hosted | Shell | Dockerized self-hosted starter |
| instructure/dap-client-py | Python | DAP / Canvas Data 2 client |
| instructure/pandarus | Ruby | Ruby Canvas API client + code generator |
| instructure/canvas_oauth_engine | Ruby | Mountable Rails engine for Canvas OAuth |
| instructure/ims-lti | Ruby | IMS LTI library for Ruby |
| instructure/basiclti-util-java | Java | Basic LTI utilities for Java |
| instructure/instructure-ui | TypeScript | Canvas UI component library |
| instructure/qti | Ruby | QTI quiz format library |
| instructure/QTIMigrationTool | Python | QTI 1.x → 2.0 converter |
| instructure/moodle2cc | Ruby | Moodle → Common Cartridge converter |
| instructure/common-cartridge-viewer | JavaScript | Common Cartridge browser viewer |
| instructure/analytics | Ruby | Canvas Analytics plugin |
| instructure/canvas_connect | Ruby | Adobe Connect plugin for Canvas |
| instructure/canvas-studio-api-examples | Python | Canvas Studio API examples |
The Canvas REST API uses OAuth2 (RFC 6749) with the authorization-code grant:
GET https://<canvas-install-url>/login/oauth2/auth?client_id=...&response_type=code&state=...&redirect_uri=...
POST https://<canvas-install-url>/login/oauth2/token
Clients must be registered as a Developer Key in the target Canvas account. Manual personal access tokens may be generated from a user's profile for testing only — using them in production violates the Canvas API Policy. Admin users may impersonate other users on read endpoints by appending as_user_id={id} (Masquerading).
LTI 1.3 services use JWT client-assertion authentication per the IMS Security Framework.
Canvas applies per-user-per-host leaky-bucket throttling. Each response includes X-Request-Cost (units consumed) and X-Rate-Limit-Remaining (room left in the bucket). When the bucket fills, requests return HTTP 403 with body 403 Forbidden (Rate Limit Exceeded). Default Canvas Cloud sizing is roughly a 700-unit bucket with a 5-unit/second drain; operators can tune these per install.
See rate-limits/canvas-lms-rate-limits.yml and the Throttling docs.
Instructure does not publish per-seat list pricing. Canvas is sold in three modes:
- Canvas Free for Teacher — Free hosted tenant at canvas.instructure.com for individual teachers; limited storage and no SIS / DAP / SLA.
- Canvas Cloud (Institutional) — Per-FTE contract, quoted by Instructure sales; includes SIS Import API, DAP, PNS, SSO, 99.9% SLA, and account administration.
- Canvas Self-Hosted — AGPL-3.0 source from
instructure/canvas-lms, run on customer infrastructure; no license fee, no commercial support, no DAP.
Add-on products: Canvas Studio (video), Canvas Catalog (course discovery + commerce), Canvas Credentials (Open Badges 3.0 / Verifiable Credentials).
See plans/canvas-lms-plans-pricing.yml.
- Instructure — Portal
- Canvas LMS Product Page — Portal
- Free for Teacher — SignUp
- Canvas REST API Documentation — Documentation
- All Resources Reference — Documentation
- Canvas API Change Log — ChangeLog
- Canvas GraphQL — Documentation
- OAuth2 Overview — Authentication
- API Throttling — RateLimits
- Pagination — Pagination
- LTI Tools Introduction — Documentation
- Canvas API Policy — TermsOfService
- Instructure Status — StatusPage
- Canvas Community — Forum
- Canvas Developers Group — Forum
- Instructure on GitHub — GitHubOrganization
- Canvas LMS Source — SourceCode
- Canvas LMS Wiki — Documentation
- Canvas Self-Hosted Docker — Tool
- Edu App Center — Marketplace
- Kin Lane — info@apievangelist.com — apievangelist.com