Canvas · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for Canvas LMS REST Modules API

18 actions 18 updates phrasing extends openapi/canvas-modules-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 18 · first 16 shown; the file carries all of them

$.info
$.paths['/v1/courses/{course_id}/modules'].get
$.paths['/v1/courses/{course_id}/modules'].post
$.paths['/v1/courses/{course_id}/modules/{id}'].get
$.paths['/v1/courses/{course_id}/modules/{id}'].put
$.paths['/v1/courses/{course_id}/modules/{id}'].delete
$.paths['/v1/courses/{course_id}/modules/{id}/relock'].put
$.paths['/v1/courses/{course_id}/modules/{module_id}/items'].get
$.paths['/v1/courses/{course_id}/modules/{module_id}/items'].post
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].get
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].put
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].delete
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/select_mastery_path'].post
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/done'].put
$.paths['/v1/courses/{course_id}/module_item_sequence'].get
$.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/mark_read'].post

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 Modules API
  version: 1.0.0
extends: openapi/canvas-modules-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: 17
- target: $.paths['/v1/courses/{course_id}/modules'].get
  update:
    x-apievangelist-phrasing:
      intent: List modules in a course
      effect: read
      questions:
      - What modules does a course have?
      - Can I search a course's modules by name?
      - How do I see modules as a particular student sees them?
      instructions:
      - text: List the modules in course {course_id}.
        slots:
          course_id: path.course_id
      - text: Search modules in course {course_id} for {search_term}.
        slots:
          course_id: path.course_id
          search_term: query.search_term
      - text: List course {course_id} modules with completion for student {student_id}.
        slots:
          course_id: path.course_id
          student_id: query.student_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a module in a course
      effect: write
      questions:
      - How do I add a new module to a course?
      - Can a new module unlock on a set date or require sequential progress?
      instructions:
      - text: Create a module named {name} in course {course_id}.
        slots:
          name: requestBody.module[name]
          course_id: path.course_id
      - text: Add module {name} to course {course_id} unlocking at {unlock_at}.
        slots:
          name: requestBody.module[name]
          course_id: path.course_id
          unlock_at: requestBody.module[unlock_at]
      - text: Create module {name} in course {course_id} with prerequisites {prerequisite_module_ids}.
        slots:
          name: requestBody.module[name]
          course_id: path.course_id
          prerequisite_module_ids: requestBody.module[prerequisite_module_ids]
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a single module
      effect: read
      questions:
      - What's in one specific module, and is it published?
      - Can I see a module's state for a given student?
      instructions:
      - text: Show module {id} in course {course_id}.
        slots:
          id: path.id
          course_id: path.course_id
      - text: Get module {id} in course {course_id} as seen by student {student_id}.
        slots:
          id: path.id
          course_id: path.course_id
          student_id: query.student_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Update or publish a module
      effect: write
      questions:
      - Can I rename a module or change its position?
      - Which call publishes or unpublishes a whole module?
      instructions:
      - text: Rename module {id} in course {course_id} to {name}.
        slots:
          id: path.id
          course_id: path.course_id
          name: requestBody.module[name]
      - text: Set published to {published} for module {id} in course {course_id}.
        slots:
          published: requestBody.module[published]
          id: path.id
          course_id: path.course_id
      - text: Move module {id} in course {course_id} to position {position}.
        slots:
          id: path.id
          course_id: path.course_id
          position: requestBody.module[position]
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a module
      effect: destructive
      questions:
      - Can I delete an entire module from a course?
      - Is removing a module permanent?
      instructions:
      - text: Delete module {id} from course {course_id}.
        slots:
          id: path.id
          course_id: path.course_id
      - text: Remove the whole module {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}/modules/{id}/relock'].put
  update:
    x-apievangelist-phrasing:
      intent: Re-lock module progressions
      effect: write
      questions:
      - 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?
      instructions:
      - text: Re-lock progressions for module {id} in course {course_id}.
        slots:
          id: path.id
          course_id: path.course_id
      - text: Reset and recalculate student progress on module {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}/modules/{module_id}/items'].get
  update:
    x-apievangelist-phrasing:
      intent: List items in a module
      effect: read
      questions:
      - What pages, assignments and files are inside a module?
      - Can I search a module's items by title?
      instructions:
      - text: List the items in module {module_id} of course {course_id}.
        slots:
          module_id: path.module_id
          course_id: path.course_id
      - text: Search module {module_id} in course {course_id} for items matching {search_term}.
        slots:
          module_id: path.module_id
          course_id: path.course_id
          search_term: query.search_term
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items'].post
  update:
    x-apievangelist-phrasing:
      intent: Add an item to a module
      effect: write
      questions:
      - 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?
      - What completion requirements can I set on a new module item?
      instructions:
      - text: Add {type} {content_id} to module {module_id} in course {course_id}.
        slots:
          type: requestBody.module_item[type]
          content_id: requestBody.module_item[content_id]
          module_id: path.module_id
          course_id: path.course_id
      - text: Add an external link to {external_url} titled {title} in module {module_id} of course {course_id}.
        slots:
          external_url: requestBody.module_item[external_url]
          title: requestBody.module_item[title]
          module_id: path.module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a single module item
      effect: read
      questions:
      - What are the details and completion rules of one module item?
      - Can I see whether a student has completed a specific module item?
      instructions:
      - text: Show item {id} in module {module_id} of course {course_id}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      - text: Get module item {id} in module {module_id}, course {course_id}, for student {student_id}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
          student_id: query.student_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Update or move a module item
      effect: write
      questions:
      - Can I move an item from one module to another?
      - How do I change a module item's indent or title?
      instructions:
      - text: Retitle item {id} in module {module_id} of course {course_id} to {title}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
          title: requestBody.module_item[title]
      - text: Move item {id} from module {module_id} to module {new_module} in course {course_id}.
        slots:
          id: path.id
          module_id: path.module_id
          new_module: requestBody.module_item[module_id]
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a module item
      effect: destructive
      questions:
      - Can I remove a single item from a module?
      - Does deleting a module item remove it from the module only?
      instructions:
      - text: Delete item {id} from module {module_id} in course {course_id}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      - text: Remove module item {id} in module {module_id} of course {course_id}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/select_mastery_path'].post
  update:
    x-apievangelist-phrasing:
      intent: Choose a mastery path for a student
      effect: write
      questions:
      - 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?
      instructions:
      - text: Select assignment set {assignment_set_id} for item {id} in module {module_id} of course {course_id}.
        slots:
          assignment_set_id: requestBody.assignment_set_id
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      - text: Choose mastery path {assignment_set_id} for student {student_id} on item {id}, module {module_id}, course {course_id}.
        slots:
          assignment_set_id: requestBody.assignment_set_id
          student_id: requestBody.student_id
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/done'].put
  update:
    x-apievangelist-phrasing:
      intent: Mark a module item as done
      effect: write
      questions:
      - Can a student manually mark a module item as done?
      - How do I tick off a 'mark as done' requirement on a module item?
      instructions:
      - text: Mark item {id} in module {module_id} of course {course_id} as done.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      - text: Complete the mark-as-done requirement on module item {id} in module {module_id}, course {course_id}.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/module_item_sequence'].get
  update:
    x-apievangelist-phrasing:
      intent: Find previous and next module items
      effect: read
      questions:
      - Given an assignment, which module item comes before and after it?
      - Can I find which module an asset like a quiz belongs to?
      instructions:
      - text: Get the module sequence for {asset_type} {asset_id} in course {course_id}.
        slots:
          asset_type: query.asset_type
          asset_id: query.asset_id
          course_id: path.course_id
      - text: Find the next and previous items around {asset_type} {asset_id} in course {course_id}.
        slots:
          asset_type: query.asset_type
          asset_id: query.asset_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{module_id}/items/{id}/mark_read'].post
  update:
    x-apievangelist-phrasing:
      intent: Fulfill a module item's must-view requirement
      effect: write
      questions:
      - How do I satisfy a 'must view' requirement when content is opened outside Canvas?
      - Can an app mark a module item as viewed?
      instructions:
      - text: Mark item {id} in module {module_id} of course {course_id} as read.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      - text: Record that module item {id} in module {module_id}, course {course_id}, was viewed.
        slots:
          id: path.id
          module_id: path.module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{context_module_id}/assignment_overrides'].get
  update:
    x-apievangelist-phrasing:
      intent: List a module's assignment overrides
      effect: read
      questions:
      - Which sections or students have overrides on a module?
      - Can I see who a module has been assigned to?
      instructions:
      - text: List the overrides for module {context_module_id} in course {course_id}.
        slots:
          context_module_id: path.context_module_id
          course_id: path.course_id
      - text: Show who module {context_module_id} in course {course_id} is assigned to.
        slots:
          context_module_id: path.context_module_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/modules/{context_module_id}/assignment_overrides'].put
  update:
    x-apievangelist-phrasing:
      intent: Set a module's assignment overrides
      effect: write
      questions:
      - How do I assign a module to only certain sections or students?
      - Can I replace all overrides on a module in one call?
      instructions:
      - text: Apply overrides {overrides} to module {context_module_id} in course {course_id}.
        slots:
          overrides: requestBody.overrides
          context_module_id: path.context_module_id
          course_id: path.course_id
      - text: Assign module {context_module_id} in course {course_id} using overrides {overrides}.
        slots:
          context_module_id: path.context_module_id
          course_id: path.course_id
          overrides: requestBody.overrides
      method: generated
      generated: '2026-10-01'