Canvas Modules API

The Modules API from Canvas — 10 operation(s) for modules.

Operations 17

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/courses/{course_id}/modules List modules in a course · List modules #
Ask an LLM
“What modules does a course have?”
“Can I search a course's modules by name?”
Tell an agent
List the modules in course {course_id}.
Search modules in course {course_id} for {search_term}.
POST /v1/courses/{course_id}/modules Create a module in a course · Create a module #
Ask an LLM
“How do I add a new module to a course?”
“Can a new module unlock on a set date or require sequential progress?”
Tell an agent
Create a module named {name} in course {course_id}.
Add module {name} to course {course_id} unlocking at {unlock_at}.
GET /v1/courses/{course_id}/modules/{id} Get a single module · Show module #
Ask an LLM
“What's in one specific module, and is it published?”
“Can I see a module's state for a given student?”
Tell an agent
Show module {id} in course {course_id}.
Get module {id} in course {course_id} as seen by student {student_id}.
PUT /v1/courses/{course_id}/modules/{id} Update or publish a module · Update a module #
Ask an LLM
“Can I rename a module or change its position?”
“Which call publishes or unpublishes a whole module?”
Tell an agent
Rename module {id} in course {course_id} to {name}.
Set published to {published} for module {id} in course {course_id}.
DELETE /v1/courses/{course_id}/modules/{id} Delete a module · Delete module #
Ask an LLM
“Can I delete an entire module from a course?”
“Is removing a module permanent?”
Tell an agent destructive · confirm first
Delete module {id} from course {course_id}.
Remove the whole module {id} in course {course_id}.
PUT /v1/courses/{course_id}/modules/{id}/relock Re-lock module progressions · Re-lock module progressions #
Ask an LLM
“After adding requirements, how do I re-lock students out of a module until they meet them?”
“Can I recalculate module progress based on current requirements?”
Tell an agent
Re-lock progressions for module {id} in course {course_id}.
Reset and recalculate student progress on module {id} in course {course_id}.
GET /v1/courses/{course_id}/modules/{module_id}/items List items in a module · List module items #
Ask an LLM
“What pages, assignments and files are inside a module?”
“Can I search a module's items by title?”
Tell an agent
List the items in module {module_id} of course {course_id}.
Search module {module_id} in course {course_id} for items matching {search_term}.
POST /v1/courses/{course_id}/modules/{module_id}/items Add an item to a module · Create a module item #
Ask an LLM
“How do I add an assignment or page to a module?”
“Can I add an external URL to a module and open it in a new tab?”
Tell an agent
Add {type} {content_id} to module {module_id} in course {course_id}.
Add an external link to {external_url} titled {title} in module {module_id} of course {course_id}.
GET /v1/courses/{course_id}/modules/{module_id}/items/{id} Get a single module item · Show module item #
Ask an LLM
“What are the details and completion rules of one module item?”
“Can I see whether a student has completed a specific module item?”
Tell an agent
Show item {id} in module {module_id} of course {course_id}.
Get module item {id} in module {module_id}, course {course_id}, for student {student_id}.
PUT /v1/courses/{course_id}/modules/{module_id}/items/{id} Update or move a module item · Update a module item #
Ask an LLM
“Can I move an item from one module to another?”
“How do I change a module item's indent or title?”
Tell an agent
Retitle item {id} in module {module_id} of course {course_id} to {title}.
Move item {id} from module {module_id} to module {new_module} in course {course_id}.
DELETE /v1/courses/{course_id}/modules/{module_id}/items/{id} Delete a module item · Delete module item #
Ask an LLM
“Can I remove a single item from a module?”
“Does deleting a module item remove it from the module only?”
Tell an agent destructive · confirm first
Delete item {id} from module {module_id} in course {course_id}.
Remove module item {id} in module {module_id} of course {course_id}.
POST /v1/courses/{course_id}/modules/{module_id}/items/{id}/select_mastery_path Choose a mastery path for a student · Select a mastery path #
Ask an LLM
“How does a student pick one of several mastery paths on a module item?”
“Can I select a mastery path on behalf of a student?”
Tell an agent
Select assignment set {assignment_set_id} for item {id} in module {module_id} of course {course_id}.
Choose mastery path {assignment_set_id} for student {student_id} on item {id}, module {module_id}, course {course_id}.
PUT /v1/courses/{course_id}/modules/{module_id}/items/{id}/done Mark a module item as done · Mark module item as done/not done #
Ask an LLM
“Can a student manually mark a module item as done?”
“How do I tick off a 'mark as done' requirement on a module item?”
Tell an agent
Mark item {id} in module {module_id} of course {course_id} as done.
Complete the mark-as-done requirement on module item {id} in module {module_id}, course {course_id}.
GET /v1/courses/{course_id}/module_item_sequence Find previous and next module items · Get module item sequence #
Ask an LLM
“Given an assignment, which module item comes before and after it?”
“Can I find which module an asset like a quiz belongs to?”
Tell an agent
Get the module sequence for {asset_type} {asset_id} in course {course_id}.
Find the next and previous items around {asset_type} {asset_id} in course {course_id}.
POST /v1/courses/{course_id}/modules/{module_id}/items/{id}/mark_read Fulfill a module item's must-view requirement · Mark module item read #
Ask an LLM
“How do I satisfy a 'must view' requirement when content is opened outside Canvas?”
“Can an app mark a module item as viewed?”
Tell an agent
Mark item {id} in module {module_id} of course {course_id} as read.
Record that module item {id} in module {module_id}, course {course_id}, was viewed.
GET /v1/courses/{course_id}/modules/{context_module_id}/assignment_overrides List a module's assignment overrides · List a module's overrides #
Ask an LLM
“Which sections or students have overrides on a module?”
“Can I see who a module has been assigned to?”
Tell an agent
List the overrides for module {context_module_id} in course {course_id}.
Show who module {context_module_id} in course {course_id} is assigned to.
PUT /v1/courses/{course_id}/modules/{context_module_id}/assignment_overrides Set a module's assignment overrides · Update a module's overrides #
Ask an LLM
“How do I assign a module to only certain sections or students?”
“Can I replace all overrides on a module in one call?”
Tell an agent
Apply overrides {overrides} to module {context_module_id} in course {course_id}.
Assign module {context_module_id} in course {course_id} using overrides {overrides}.

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-modules-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-modules-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Modules 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:


# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/openapi/canvas-modules-api-openapi.yml