Canvas · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Canvas LMS REST Courses API
32 actions
32 updates
phrasing
extends
openapi/canvas-courses-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Canvas's API. It is a proposal applied on top of the contract, not a document Canvas publishes.
What the actions change
x-apievangelist-phrasing
Targets 32 · first 16 shown; the file carries all of them
$.info
$.paths['/v1/accounts/{account_id}/courses'].put
$.paths['/v1/accounts/{account_id}/courses'].post
$.paths['/v1/courses'].get
$.paths['/v1/users/{user_id}/courses'].get
$.paths['/v1/courses/{course_id}/users/{user_id}/progress'].get
$.paths['/v1/courses/{course_id}/files'].post
$.paths['/v1/courses/{course_id}/students'].get
$.paths['/v1/courses/{course_id}/users'].get
$.paths['/v1/courses/{course_id}/search_users'].get
$.paths['/v1/courses/{course_id}/recent_students'].get
$.paths['/v1/courses/{course_id}/users/{id}'].get
$.paths['/v1/courses/{course_id}/content_share_users'].get
$.paths['/v1/courses/{course_id}/preview_html'].post
$.paths['/v1/courses/{course_id}/activity_stream'].get
$.paths['/v1/courses/{course_id}/activity_stream/summary'].get
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Canvas LMS REST Courses API
version: 1.0.0
extends: openapi/canvas-courses-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-10-01'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 31
- target: $.paths['/v1/accounts/{account_id}/courses'].put
update:
x-apievangelist-phrasing:
intent: Bulk offer, conclude or delete courses
effect: destructive
questions:
- 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?
- How do I undelete several courses in an account in one go?
instructions:
- text: Apply the {event} action to courses {course_ids} in account {account_id}.
slots:
event: requestBody.event
course_ids: requestBody.course_ids
account_id: path.account_id
- text: Bulk offer courses {course_ids} to students in account {account_id} with event {event}.
slots:
course_ids: requestBody.course_ids
account_id: path.account_id
event: requestBody.event
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/courses'].post
update:
x-apievangelist-phrasing:
intent: Create a new course in an account
effect: write
questions:
- 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?
- Is it possible to enroll myself as teacher while creating a course?
instructions:
- text: Create a course named {name} with code {course_code} in account {account_id}.
slots:
name: requestBody.course[name]
course_code: requestBody.course[course_code]
account_id: path.account_id
- text: Set up a new course {name} in account {account_id} running from {start_at} to {end_at}.
slots:
name: requestBody.course[name]
account_id: path.account_id
start_at: requestBody.course[start_at]
end_at: requestBody.course[end_at]
- text: Create course {name} in account {account_id} under term {term_id} and publish it right away with offer {offer}.
slots:
name: requestBody.course[name]
account_id: path.account_id
term_id: requestBody.course[term_id]
offer: requestBody.offer
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses'].get
update:
x-apievangelist-phrasing:
intent: List my active courses
effect: read
questions:
- Which courses am I currently enrolled in?
- Can I see only the courses where I'm the teacher?
- How do I hide blueprint courses from my own course list?
instructions:
- text: List all my active courses.
- text: Show my courses where my enrollment type is {enrollment_type}.
slots:
enrollment_type: query.enrollment_type
- text: List my courses in state {state}.
slots:
state: query.state
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/courses'].get
update:
x-apievangelist-phrasing:
intent: List courses for a specific user
effect: read
questions:
- What courses is a particular student taking?
- Can an observer see the course list of the student they observe?
- Which homeroom courses does a given user belong to?
instructions:
- text: List the active courses for user {user_id}.
slots:
user_id: path.user_id
- text: Show user {user_id}'s courses in account {account_id}.
slots:
user_id: path.user_id
account_id: query.account_id
- text: List courses for user {user_id} with enrollment state {enrollment_state}.
slots:
user_id: path.user_id
enrollment_state: query.enrollment_state
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/users/{user_id}/progress'].get
update:
x-apievangelist-phrasing:
intent: Get one user's progress in a course
effect: read
questions:
- How far along is a single student in completing a course's requirements?
- Can I check my own module completion progress in a course?
instructions:
- text: Get the course progress of user {user_id} in course {course_id}.
slots:
user_id: path.user_id
course_id: path.course_id
- text: Show my own progress in course {course_id} using user {user_id} set to self.
slots:
course_id: path.course_id
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/files'].post
update:
x-apievangelist-phrasing:
intent: Start a file upload to a course
effect: write
questions:
- 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?
instructions:
- text: Start uploading a file to course {course_id}.
slots:
course_id: path.course_id
- text: Request an upload slot for a new file in course {course_id}'s files.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/students'].get
update:
x-apievangelist-phrasing:
intent: List students via the deprecated endpoint
effect: read
questions:
- Is there an older endpoint that just returns the students of a course?
- What does the deprecated list students call return for a course?
instructions:
- text: List students in course {course_id} using the deprecated students endpoint.
slots:
course_id: path.course_id
- text: Pull the legacy student roster for course {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/users'].get
update:
x-apievangelist-phrasing:
intent: List users in a course
effect: read
questions:
- Who is enrolled in a course, including teachers and TAs?
- Can I filter a course's people list to just students in certain sections?
- How do I sort the course roster and include each person's enrollments?
instructions:
- text: List all users in course {course_id}.
slots:
course_id: path.course_id
- text: List users in course {course_id} with enrollment type {enrollment_type}.
slots:
course_id: path.course_id
enrollment_type: query.enrollment_type
- text: Show course {course_id}'s users in sections {section_ids}.
slots:
course_id: path.course_id
section_ids: query.section_ids
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/search_users'].get
update:
x-apievangelist-phrasing:
intent: Search users in a course by name
effect: read
questions:
- 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?
instructions:
- text: Search course {course_id} for users matching {search_term} via the search_users route.
slots:
course_id: path.course_id
search_term: query.search_term
- text: Use search_users to find {enrollment_type} users in course {course_id}.
slots:
enrollment_type: query.enrollment_type
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/recent_students'].get
update:
x-apievangelist-phrasing:
intent: List students by most recent login
effect: read
questions:
- Which students in my course logged in most recently?
- Can I see each student's last login time for a course?
instructions:
- text: List students in course {course_id} ordered by last login.
slots:
course_id: path.course_id
- text: Show who logged into course {course_id} most recently.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/users/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one user within a course
effect: read
questions:
- 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?
instructions:
- text: Get user {id} in course {course_id}.
slots:
id: path.id
course_id: path.course_id
- text: Show the course-level profile of user {id} in course {course_id}.
slots:
id: path.id
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_share_users'].get
update:
x-apievangelist-phrasing:
intent: Find users to share course content with
effect: read
questions:
- Who can I share course content with in Canvas?
- Which colleagues show up when I search to send a content share?
instructions:
- text: Search for content share recipients matching {search_term} in course {course_id}.
slots:
search_term: query.search_term
course_id: path.course_id
- text: Find people named {search_term} I can share content with from course {course_id}.
slots:
search_term: query.search_term
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/preview_html'].post
update:
x-apievangelist-phrasing:
intent: Preview processed HTML for a course
effect: read
questions:
- 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?
instructions:
- text: Preview how {html} renders in course {course_id}.
slots:
html: requestBody.html
course_id: path.course_id
- text: 'Process this HTML through course {course_id} and show the result: {html}'
slots:
course_id: path.course_id
html: requestBody.html
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/activity_stream'].get
update:
x-apievangelist-phrasing:
intent: Show my activity stream for a course
effect: read
questions:
- What's new for me in a specific course's activity stream?
- Can I see recent announcements and discussions for just one course?
instructions:
- text: Show my activity stream for course {course_id}.
slots:
course_id: path.course_id
- text: List my recent course activity in {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/activity_stream/summary'].get
update:
x-apievangelist-phrasing:
intent: Summarize my course activity stream
effect: read
questions:
- 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?
instructions:
- text: Summarize my activity stream counts for course {course_id}.
slots:
course_id: path.course_id
- text: Give me unread activity totals for course {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/todo'].get
update:
x-apievangelist-phrasing:
intent: List my to-do items for a course
effect: read
questions:
- What do I still need to grade or submit in a particular course?
- Which to-do items are waiting for me in one course?
instructions:
- text: List my to-do items for course {course_id}.
slots:
course_id: path.course_id
- text: Show what's pending on my course {course_id} to-do list.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get a single course
effect: read
questions:
- How do I look up a course's details by its ID?
- Can I include the syllabus and term when fetching one course?
- Is there a cap on how many teachers come back with a course record?
instructions:
- text: Get course {id}.
slots:
id: path.id
- text: Show course {id} including {include}.
slots:
id: path.id
include: query.include
- text: Fetch course {id} limited to {teacher_limit} teachers.
slots:
id: path.id
teacher_limit: query.teacher_limit
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{id}'].put
update:
x-apievangelist-phrasing:
intent: Update a course's details
effect: write
questions:
- 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?
- Is it possible to turn an existing course into a blueprint course?
instructions:
- text: Rename course {id} to {name}.
slots:
id: path.id
name: requestBody.course[name]
- text: Change course {id} to end on {end_at}.
slots:
id: path.id
end_at: requestBody.course[end_at]
- text: Set course {id}'s default home page view to {default_view}.
slots:
id: path.id
default_view: requestBody.course[default_view]
- text: Mark course {id} as a blueprint course with blueprint {blueprint}.
slots:
id: path.id
blueprint: requestBody.course[blueprint]
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{id}'].delete
update:
x-apievangelist-phrasing:
intent: Delete or conclude a course
effect: destructive
questions:
- How do I permanently delete a single course?
- Can I conclude one course instead of deleting it?
instructions:
- text: Delete course {id} with event {event}.
slots:
id: path.id
event: query.event
- text: Conclude course {id} by sending event {event}.
slots:
id: path.id
event: query.event
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/settings'].get
update:
x-apievangelist-phrasing:
intent: Get a course's settings
effect: read
questions:
- What settings does a course have, like whether students can create discussions?
- Are final grades hidden from students in this course's settings?
instructions:
- text: Get the settings for course {course_id}.
slots:
course_id: path.course_id
- text: Show whether course {course_id} lets students organize their own groups.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/settings'].put
update:
x-apievangelist-phrasing:
intent: Change a course's settings
effect: write
questions:
- Can I stop students from attaching files to discussion posts?
- How do I lock all announcements in a course?
- Can I set a default due time for assignments in a course?
instructions:
- text: Set allow student discussion topics to {allow_student_discussion_topics} in course {course_id}.
slots:
allow_student_discussion_topics: requestBody.allow_student_discussion_topics
course_id: path.course_id
- text: Set the default due time in course {course_id} to {default_due_time}.
slots:
course_id: path.course_id
default_due_time: requestBody.default_due_time
- text: 'Hide final grades in course {course_id}: {hide_final_grades}.'
slots:
course_id: path.course_id
hide_final_grades: requestBody.hide_final_grades
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/student_view_student'].get
update:
x-apievangelist-phrasing:
intent: Get or create a course's test student
effect: read
questions:
- 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?
instructions:
- text: Get the test student for course {course_id}.
slots:
course_id: path.course_id
- text: Fetch the student view test user in course {course_id}, creating it if needed.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/courses/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get a course within a specific account
effect: read
questions:
- Can I fetch a course by ID scoped to the account that owns it?
- What does the account-scoped lookup return for one course?
instructions:
- text: Get course {id} in account {account_id}.
slots:
id: path.id
account_id: path.account_id
- text: Look up course {id} through account {account_id} including {include}.
slots:
id: path.id
account_id: path.account_id
include: query.include
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/reset_content'].post
update:
x-apievangelist-phrasing:
intent: Reset a course to empty content
effect: destructive
questions:
- Can I wipe all content from a course but keep its sections and enrolled users?
- What happens when I reset course content?
instructions:
- text: Reset course {course_id} so it has no content.
slots:
course_id: path.course_id
- text: Wipe the content of course {course_id} and keep its users and sections.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/effective_due_dates'].get
update:
x-apievangelist-phrasing:
intent: Get each student's effective due dates
effect: read
questions:
- What due date does each student actually have for assignments, after overrides?
- Can I check effective due dates for only a few assignments?
instructions:
- text: Get effective due dates for all assignments in course {course_id}.
slots:
course_id: path.course_id
- text: Show per-student due dates for assignments {assignment_ids} in course {course_id}.
slots:
assignment_ids: query.assignment_ids
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/permissions'].get
update:
x-apievangelist-phrasing:
intent: Check my permissions in a course
effect: read
questions:
- Do I have permission to manage grades in this course?
- Which course-level rights does my account hold?
instructions:
- text: Check my permissions in course {course_id}.
slots:
course_id: path.course_id
- text: Tell me whether I have {permissions} in course {course_id}.
slots:
permissions: query.permissions
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/bulk_user_progress'].get
update:
x-apievangelist-phrasing:
intent: Get progress for every user in a course
effect: read
questions:
- 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?
instructions:
- text: Get progress for all users in course {course_id}.
slots:
course_id: path.course_id
- text: Show the bulk completion progress of everyone enrolled in course {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{id}/dismiss_migration_limitation_message'].post
update:
x-apievangelist-phrasing:
intent: Dismiss the quiz migration alert
effect: write
questions:
- How do I hide the quiz migration limitations banner in a course?
- Can I dismiss the warning about quiz migration limits?
instructions:
- text: Dismiss the quiz migration alert in course {id}.
slots:
id: path.id
- text: Remove the quiz migration limitation message from course {id}.
slots:
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/restore/{version_id}'].post
update:
x-apievangelist-phrasing:
intent: Restore a previous syllabus version
effect: write
questions:
- Can I roll the syllabus back to an earlier saved version?
- Does restoring an old syllabus affect any other course content?
instructions:
- text: Restore the syllabus of course {course_id} to version {version_id}.
slots:
course_id: path.course_id
version_id: path.version_id
- text: Roll back course {course_id}'s syllabus to saved version {version_id}.
slots:
course_id: path.course_id
version_id: path.version_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/course_copy/{id}'].get
update:
x-apievangelist-phrasing:
intent: Check a legacy course copy's status
effect: read
questions:
- 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?
instructions:
- text: Check the status of course copy {id} into course {course_id}.
slots:
id: path.id
course_id: path.course_id
- text: Show progress of legacy course copy {id} for course {course_id}.
slots:
id: path.id
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/course_copy'].post
update:
x-apievangelist-phrasing:
intent: Copy content between courses (legacy)
effect: write
questions:
- 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?
instructions:
- text: Copy all content from course {source_course} into course {course_id}.
slots:
source_course: requestBody.source_course
course_id: path.course_id
- text: Copy only {only} from course {source_course} into course {course_id}.
slots:
only: requestBody.only
source_course: requestBody.source_course
course_id: path.course_id
- text: Copy course {source_course} into course {course_id} except {except}.
slots:
source_course: requestBody.source_course
course_id: path.course_id
except: requestBody.except
method: generated
generated: '2026-10-01'