canonical: https://jentic.com/apis/developerdocs.instructure.com/canvas-lms

# Developerdocs Instructure Canvas LMS API

Jentic publishes the only available OpenAPI specification for Canvas LMS API, keeping it validated and agent-ready. The Canvas Learning Management System REST API is used by universities, K-12 districts, and corporate learning teams to programmatically read course catalogs and individual course detail. This curated spec covers the two foundational course endpoints that anchor most Canvas integrations and unblock automation against an instance hosted on Instructure's cloud or self-managed.

## For AI agents

List courses and read course detail from a Canvas LMS instance to power reporting, sync, and learning-analytics automations.

## Scope

Does not handle assignments, submissions, gradebook entries, or user enrolments - use for course list and detail reads only.

## Capabilities

- List all courses on the Canvas instance through GET /courses for catalog sync and reporting
- Read full detail for a single course via GET /courses/{course_id} including settings and metadata
- Authenticate with a Canvas-issued bearer access token scoped per instance
- Target any Canvas instance by templating the {instance} server variable for cloud or on-premise deployments
- Anchor downstream sync into a data warehouse, BI tool, or LRS using stable course identifiers

## Use cases

### Course catalog sync to data warehouse

Institutional research and learning-analytics teams use the list-courses endpoint to keep a warehouse copy of the Canvas course catalog in sync. The job pages through GET /courses on a schedule and reads detail for each course via GET /courses/{course_id}. This unlocks downstream reporting in tools like Snowflake, BigQuery, or Looker without hitting the live LMS for every query.

Example prompt: Call GET /courses, page through results, then for each course id call GET /courses/{course_id} and store the detail rows in a staging table.

### Course directory for a custom student portal

Schools running a custom student portal alongside Canvas can read the course list and detail to render a directory page outside of Canvas itself. The bearer token model lets the portal call Canvas with an institutional service account and cache responses for fast page loads. Useful when the institution wants Canvas as the system of record but a different surface for discovery.

Example prompt: Fetch GET /courses and render a JSON list of course names and IDs for the portal homepage, then resolve detail on demand via GET /courses/{course_id}.

### Compliance and audit reporting on course inventory

Audit teams responsible for accreditation reporting can pull the canonical course list and per-course metadata through the API and reconcile it against the Student Information System. Pairing list-courses with retrieve-course produces the full inventory needed for regional accreditation reviews and Title IV reporting.

Example prompt: List all courses through GET /courses, then for each ID fetch GET /courses/{course_id} and export the combined dataset as a CSV for auditor review.

### AI-agent course lookup via Jentic

AI agents helping faculty or administrators answer ad-hoc questions can look up a Canvas course by ID through Jentic instead of holding API keys directly. Jentic stores the bearer token in your Jentic One instance and answers natural-language queries like 'what is the start date of course 4567' by calling GET /courses/{course_id} and returning structured fields.

Example prompt: Search Jentic for 'get a Canvas course by ID', load the schema for GET /courses/{course_id}, and return the course name and enrolment_term_id for course 4567.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /courses | List courses on the Canvas instance |
| GET | /courses/{course_id} | Get a single course by ID |

## Key resources

- **Courses** — List all courses on the instance and read detail for any single course

## Why Jentic

- **Setup:** Wiring the Canvas LMS API by hand means setting the bearer header, filling in your institution's instance host, and paging the course list yourself. Through Jentic you install once, import the Canvas LMS API from the API Directory, store the access token once, and your agent calls it.
- **Permission scoping:** The course id travels in the URL path (/courses/{course_id}), so a rule can pin your agent to reads for a given course. You choose the operations it may call, and both are read-only, so the agent cannot touch assignments, submissions, or enrolments.
- **Credential handling:** Your Canvas access token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list Canvas courses' or 'get a Canvas course by ID', and Jentic returns the matching Canvas operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Schoology** — Schoology is a competing K-12 and higher-ed LMS with a comparable course-and-enrolment API
- **Moodle** — Moodle is the open-source LMS alternative to Canvas with a web services API
- **Google Classroom** — Google Classroom often runs alongside Canvas for K-12 day-to-day course flow while Canvas handles formal record-keeping

## FAQ

### Why is there no official OpenAPI spec for Canvas LMS API?

Instructure publishes Canvas API documentation but not a single canonical OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Canvas LMS API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Canvas LMS API use?

Canvas uses HTTP bearer authentication with a Canvas-issued access token scoped to the user that minted it. Tokens can be generated from a user's profile settings or via the Canvas OAuth2 developer flow. Through Jentic the token is stored in your Jentic One instance and injected per call.

### Can I list all courses on my Canvas instance with this API?

Yes. Call GET /courses on your instance's /api/v1 base URL. The response includes course IDs that you can pass to GET /courses/{course_id} to retrieve full detail for each course.

### What are the rate limits for the Canvas LMS API?

Canvas applies a per-token request quota with a leaky-bucket algorithm. The quota and refill rate vary by instance and are returned in the X-Request-Cost header. The OpenAPI spec does not declare numeric limits because they are tenant-specific. Build with retry-on-429 and monitor the cost header.

### How do I look up a Canvas course through Jentic?

Run pip install jentic, then with the async client search for 'get a Canvas course by ID', load the schema for GET /courses/{course_id}, and execute with the course_id parameter. Jentic returns the parsed JSON response.

### Does this Canvas API spec cover assignments and submissions?

No. This curated spec covers the two course endpoints (list and retrieve). Assignments, submissions, users, and enrolments are not in this spec - they are part of the broader Canvas REST API and would need to be added separately.

### Can I limit what my agent is allowed to do with the Canvas LMS API?

Yes. Jentic One is self-hosted by you, so your own rules decide which Canvas operations and credentials the agent may use. Both endpoints in this spec are read-only, GET /courses and GET /courses/{course_id}, so you can allow only course list and detail reads and the agent cannot touch assignments, submissions, or enrolments. Because the course id travels in the URL path, a rule can pin the agent to reads for a specific course.
