Canvas Courses API
The Courses resource of the Canvas LMS REST API — 31 operations covering course creation, settings, users and enrollment counts, course copy, blueprint associations, effective due dates, bulk course updates, conclude/delete and course reset. Split from the first-party contract Instructure publishes at https://canvas.instructure.com/doc/api/courses.json.
Operations 31
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
Ask an LLM
“How do I create a new course in a Canvas sub-account?”
“Can I set a course code, start date and end date when I first create a course?”
Tell an agent
Create a course named {name} with code {course_code} in account {account_id}.
Set up a new course {name} in account {account_id} running from {start_at} to {end_at}.
Ask an LLM
“Can I conclude a whole batch of courses in an account at once?”
“What's the maximum number of courses I can publish in one bulk call?”
Tell an agent destructive · confirm first
Apply the {event} action to courses {course_ids} in account {account_id}.
Bulk offer courses {course_ids} to students in account {account_id} with event {event}.
Ask an LLM
“Which courses am I currently enrolled in?”
“Can I see only the courses where I'm the teacher?”
Tell an agent
List all my active courses.
Show my courses where my enrollment type is {enrollment_type}.
Ask an LLM
“What courses is a particular student taking?”
“Can an observer see the course list of the student they observe?”
Tell an agent
List the active courses for user {user_id}.
Show user {user_id}'s courses in account {account_id}.
GET
/v1/courses/{course_id}/users/{user_id}/progress
Get one user's progress in a course · Get user progress
#
Ask an LLM
“How far along is a single student in completing a course's requirements?”
“Can I check my own module completion progress in a course?”
Tell an agent
Get the course progress of user {user_id} in course {course_id}.
Show my own progress in course {course_id} using user {user_id} set to self.
Ask an LLM
“How do I upload a file into a course's files area?”
“What's the first step of the file upload workflow for course files?”
Tell an agent
Start uploading a file to course {course_id}.
Request an upload slot for a new file in course {course_id}'s files.
Ask an LLM
“Is there an older endpoint that just returns the students of a course?”
“What does the deprecated list students call return for a course?”
Tell an agent
List students in course {course_id} using the deprecated students endpoint.
Pull the legacy student roster for course {course_id}.
Ask an LLM
“Who is enrolled in a course, including teachers and TAs?”
“Can I filter a course's people list to just students in certain sections?”
Tell an agent
List all users in course {course_id}.
List users in course {course_id} with enrollment type {enrollment_type}.
Ask an LLM
“Can I search a course roster by a partial name or login?”
“What's the search_users route for finding a person inside a course?”
Tell an agent
Search course {course_id} for users matching {search_term} via the search_users route.
Use search_users to find {enrollment_type} users in course {course_id}.
GET
/v1/courses/{course_id}/recent_students
List students by most recent login · List recently logged in students
#
Ask an LLM
“Which students in my course logged in most recently?”
“Can I see each student's last login time for a course?”
Tell an agent
List students in course {course_id} ordered by last login.
Show who logged into course {course_id} most recently.
Ask an LLM
“Can I fetch a single person's details as they appear in a specific course?”
“What information do I get for one user in a course's context?”
Tell an agent
Get user {id} in course {course_id}.
Show the course-level profile of user {id} in course {course_id}.
GET
/v1/courses/{course_id}/content_share_users
Find users to share course content with · Search for content share users
#
Ask an LLM
“Who can I share course content with in Canvas?”
“Which colleagues show up when I search to send a content share?”
Tell an agent
Search for content share recipients matching {search_term} in course {course_id}.
Find people named {search_term} I can share content with from course {course_id}.
POST
/v1/courses/{course_id}/preview_html
Preview processed HTML for a course · Preview processed html
#
Ask an LLM
“Can I see how a chunk of HTML will render after a course processes it?”
“How will course link processing change my HTML before I save it?”
Tell an agent
Preview how {html} renders in course {course_id}.
Process this HTML through course {course_id} and show the result: {html}
GET
/v1/courses/{course_id}/activity_stream
Show my activity stream for a course · Course activity stream
#
Ask an LLM
“What's new for me in a specific course's activity stream?”
“Can I see recent announcements and discussions for just one course?”
Tell an agent
Show my activity stream for course {course_id}.
List my recent course activity in {course_id}.
GET
/v1/courses/{course_id}/activity_stream/summary
Summarize my course activity stream · Course activity stream summary
#
Ask an LLM
“How many unread activity items do I have in one course, by type?”
“Is there a summary count of my course stream instead of the full feed?”
Tell an agent
Summarize my activity stream counts for course {course_id}.
Give me unread activity totals for course {course_id}.
Ask an LLM
“What do I still need to grade or submit in a particular course?”
“Which to-do items are waiting for me in one course?”
Tell an agent
List my to-do items for course {course_id}.
Show what's pending on my course {course_id} to-do list.
Ask an LLM
“How do I permanently delete a single course?”
“Can I conclude one course instead of deleting it?”
Tell an agent destructive · confirm first
Delete course {id} with event {event}.
Conclude course {id} by sending event {event}.
Ask an LLM
“How do I look up a course's details by its ID?”
“Can I include the syllabus and term when fetching one course?”
Tell an agent
Get course {id}.
Show course {id} including {include}.
Ask an LLM
“Can I rename a course or change its course code after it's created?”
“How do I change a course's end date or time zone?”
Tell an agent
Rename course {id} to {name}.
Change course {id} to end on {end_at}.
Ask an LLM
“What settings does a course have, like whether students can create discussions?”
“Are final grades hidden from students in this course's settings?”
Tell an agent
Get the settings for course {course_id}.
Show whether course {course_id} lets students organize their own groups.
Ask an LLM
“Can I stop students from attaching files to discussion posts?”
“How do I lock all announcements in a course?”
Tell an agent
Set allow student discussion topics to {allow_student_discussion_topics} in course {course_id}.
Set the default due time in course {course_id} to {default_due_time}.
GET
/v1/courses/{course_id}/student_view_student
Get or create a course's test student · Return test student for course
#
Ask an LLM
“Is there a test student I can use to preview a course as a student?”
“Where do I get the student view test account for a course?”
Tell an agent
Get the test student for course {course_id}.
Fetch the student view test user in course {course_id}, creating it if needed.
GET
/v1/accounts/{account_id}/courses/{id}
Get a course within a specific account · Get a single course
#
Ask an LLM
“Can I fetch a course by ID scoped to the account that owns it?”
“What does the account-scoped lookup return for one course?”
Tell an agent
Get course {id} in account {account_id}.
Look up course {id} through account {account_id} including {include}.
Ask an LLM
“Can I wipe all content from a course but keep its sections and enrolled users?”
“What happens when I reset course content?”
Tell an agent destructive · confirm first
Reset course {course_id} so it has no content.
Wipe the content of course {course_id} and keep its users and sections.
GET
/v1/courses/{course_id}/effective_due_dates
Get each student's effective due dates · Get effective due dates
#
Ask an LLM
“What due date does each student actually have for assignments, after overrides?”
“Can I check effective due dates for only a few assignments?”
Tell an agent
Get effective due dates for all assignments in course {course_id}.
Show per-student due dates for assignments {assignment_ids} in course {course_id}.
Ask an LLM
“Do I have permission to manage grades in this course?”
“Which course-level rights does my account hold?”
Tell an agent
Check my permissions in course {course_id}.
Tell me whether I have {permissions} in course {course_id}.
GET
/v1/courses/{course_id}/bulk_user_progress
Get progress for every user in a course · Get bulk user progress
#
Ask an LLM
“Can I see module completion progress for all students in a course at once?”
“As a teacher, how do I pull everyone's course progress in a single call?”
Tell an agent
Get progress for all users in course {course_id}.
Show the bulk completion progress of everyone enrolled in course {course_id}.
POST
/v1/courses/{id}/dismiss_migration_limitation_message
Dismiss the quiz migration alert · Remove quiz migration alert
#
Ask an LLM
“How do I hide the quiz migration limitations banner in a course?”
“Can I dismiss the warning about quiz migration limits?”
Tell an agent
Dismiss the quiz migration alert in course {id}.
Remove the quiz migration limitation message from course {id}.
POST
/v1/courses/{course_id}/restore/{version_id}
Restore a previous syllabus version · Restore course syllabus version
#
Ask an LLM
“Can I roll the syllabus back to an earlier saved version?”
“Does restoring an old syllabus affect any other course content?”
Tell an agent
Restore the syllabus of course {course_id} to version {version_id}.
Roll back course {course_id}'s syllabus to saved version {version_id}.
GET
/v1/courses/{course_id}/course_copy/{id}
Check a legacy course copy's status · Get course copy status
#
Ask an LLM
“How do I see whether a course copy started with the old copy API has finished?”
“What's the status of a deprecated course copy job?”
Tell an agent
Check the status of course copy {id} into course {course_id}.
Show progress of legacy course copy {id} for course {course_id}.
POST
/v1/courses/{course_id}/course_copy
Copy content between courses (legacy) · Copy course content
#
Ask an LLM
“Can I copy all the content of one course into another?”
“Is there a way to copy only some content types from a source course?”
Tell an agent
Copy all content from course {source_course} into course {course_id}.
Copy only {only} from course {source_course} into course {course_id}.