# 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'