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