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.
View Overlay File View on GitHub Overlay Specification

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

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