Canvas · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Canvas LMS REST Content Migrations API
38 actions
38 updates
phrasing
extends
openapi/canvas-content-migrations-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 38 · first 16 shown; the file carries all of them
$.info
$.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues'].get
$.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues'].get
$.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues'].get
$.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues'].get
$.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
$.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
$.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
$.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
$.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
$.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
$.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
$.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
$.paths['/v1/accounts/{account_id}/content_migrations'].get
$.paths['/v1/accounts/{account_id}/content_migrations'].post
$.paths['/v1/courses/{course_id}/content_migrations'].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 Content Migrations API
version: 1.0.0
extends: openapi/canvas-content-migrations-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: 37
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues'].get
update:
x-apievangelist-phrasing:
intent: List issues raised by an account content migration
effect: read
questions:
- What problems came up during an import into my Canvas account?
- Which warnings did an account-level content migration leave behind?
instructions:
- text: List the migration issues for migration {content_migration_id} in account {account_id}.
slots:
content_migration_id: path.content_migration_id
account_id: path.account_id
- text: Show every problem flagged on account {account_id}'s import {content_migration_id}.
slots:
account_id: path.account_id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues'].get
update:
x-apievangelist-phrasing:
intent: List issues raised by a course content migration
effect: read
questions:
- What went wrong when I imported content into my course?
- Can I see all the errors from a course copy or import?
instructions:
- text: List the migration issues for course {course_id} migration {content_migration_id}.
slots:
course_id: path.course_id
content_migration_id: path.content_migration_id
- text: Show the import problems from migration {content_migration_id} into course {course_id}.
slots:
content_migration_id: path.content_migration_id
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues'].get
update:
x-apievangelist-phrasing:
intent: List issues raised by a group content migration
effect: read
questions:
- Which errors did a content import into a student group produce?
- Are there any unresolved warnings on a group's content migration?
instructions:
- text: List the migration issues for group {group_id} migration {content_migration_id}.
slots:
group_id: path.group_id
content_migration_id: path.content_migration_id
- text: Show every problem flagged on group {group_id}'s import {content_migration_id}.
slots:
group_id: path.group_id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues'].get
update:
x-apievangelist-phrasing:
intent: List issues raised by a user content migration
effect: read
questions:
- What problems came up importing files into a user's personal space?
- Can I list the warnings from a user-level content migration?
instructions:
- text: List the migration issues for user {user_id} migration {content_migration_id}.
slots:
user_id: path.user_id
content_migration_id: path.content_migration_id
- text: Show every problem flagged on user {user_id}'s import {content_migration_id}.
slots:
user_id: path.user_id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one issue from an account content migration
effect: read
questions:
- What are the details of a single issue from an account-level import?
- Can I look up one specific migration issue on my account by its ID?
instructions:
- text: Get issue {id} from migration {content_migration_id} in account {account_id}.
slots:
id: path.id
content_migration_id: path.content_migration_id
account_id: path.account_id
- text: Show me the details of account {account_id} migration issue {id} on import {content_migration_id}.
slots:
account_id: path.account_id
id: path.id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
update:
x-apievangelist-phrasing:
intent: Resolve or reopen an account migration issue
effect: write
questions:
- How do I mark an issue from an account-level import as resolved?
- Can I change the workflow state of a migration issue on my account?
instructions:
- text: Set issue {id} on account {account_id} migration {content_migration_id} to {workflow_state}.
slots:
id: path.id
account_id: path.account_id
content_migration_id: path.content_migration_id
workflow_state: requestBody.workflow_state
- text: Mark account {account_id} migration {content_migration_id} issue {id} as resolved.
slots:
account_id: path.account_id
content_migration_id: path.content_migration_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one issue from a course content migration
effect: read
questions:
- What exactly does one error from my course import say?
- Can I fetch a single course migration issue by its ID?
instructions:
- text: Get issue {id} from migration {content_migration_id} in course {course_id}.
slots:
id: path.id
content_migration_id: path.content_migration_id
course_id: path.course_id
- text: Show me the details of course {course_id} migration issue {id} on import {content_migration_id}.
slots:
course_id: path.course_id
id: path.id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
update:
x-apievangelist-phrasing:
intent: Resolve or reopen a course migration issue
effect: write
questions:
- How do I mark a course import problem as resolved once I've fixed it?
- Can I reactivate a course migration issue I resolved by mistake?
instructions:
- text: Set issue {id} on course {course_id} migration {content_migration_id} to {workflow_state}.
slots:
id: path.id
course_id: path.course_id
content_migration_id: path.content_migration_id
workflow_state: requestBody.workflow_state
- text: Mark course {course_id} migration {content_migration_id} issue {id} as resolved.
slots:
course_id: path.course_id
content_migration_id: path.content_migration_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one issue from a group content migration
effect: read
questions:
- What are the details of one problem from a group's content import?
- Can I fetch a single group migration issue by its ID?
instructions:
- text: Get issue {id} from migration {content_migration_id} in group {group_id}.
slots:
id: path.id
content_migration_id: path.content_migration_id
group_id: path.group_id
- text: Show me the details of group {group_id} migration issue {id} on import {content_migration_id}.
slots:
group_id: path.group_id
id: path.id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
update:
x-apievangelist-phrasing:
intent: Resolve or reopen a group migration issue
effect: write
questions:
- How do I mark a problem from a group's content import as resolved?
- Can I change the state of a group migration issue?
instructions:
- text: Set issue {id} on group {group_id} migration {content_migration_id} to {workflow_state}.
slots:
id: path.id
group_id: path.group_id
content_migration_id: path.content_migration_id
workflow_state: requestBody.workflow_state
- text: Mark group {group_id} migration {content_migration_id} issue {id} as resolved.
slots:
group_id: path.group_id
content_migration_id: path.content_migration_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one issue from a user content migration
effect: read
questions:
- What does a single issue from a user's personal import say?
- Can I fetch one user-level migration issue by its ID?
instructions:
- text: Get issue {id} from migration {content_migration_id} for user {user_id}.
slots:
id: path.id
content_migration_id: path.content_migration_id
user_id: path.user_id
- text: Show me the details of user {user_id} migration issue {id} on import {content_migration_id}.
slots:
user_id: path.user_id
id: path.id
content_migration_id: path.content_migration_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{content_migration_id}/migration_issues/{id}'].put
update:
x-apievangelist-phrasing:
intent: Resolve or reopen a user migration issue
effect: write
questions:
- How do I mark an issue from a user's personal import as resolved?
- Can I set the workflow state of a user-level migration issue?
instructions:
- text: Set issue {id} on user {user_id} migration {content_migration_id} to {workflow_state}.
slots:
id: path.id
user_id: path.user_id
content_migration_id: path.content_migration_id
workflow_state: requestBody.workflow_state
- text: Mark user {user_id} migration {content_migration_id} issue {id} as resolved.
slots:
user_id: path.user_id
content_migration_id: path.content_migration_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations'].get
update:
x-apievangelist-phrasing:
intent: List content migrations run on an account
effect: read
questions:
- Which imports have been run against my Canvas account?
- Can I see the history of account-level content migrations?
instructions:
- text: List the content migrations for account {account_id}.
slots:
account_id: path.account_id
- text: Show all imports that have run on account {account_id}.
slots:
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations'].post
update:
x-apievangelist-phrasing:
intent: Start a content import into an account
effect: write
questions:
- How do I import a question bank or package into my account rather than a course?
- Can I start an account-level content migration from a file URL?
instructions:
- text: Start a {migration_type} content migration into account {account_id}.
slots:
migration_type: requestBody.migration_type
account_id: path.account_id
- text: Import the file at {file_url} into account {account_id} as a {migration_type} migration.
slots:
file_url: requestBody.settings[file_url]
account_id: path.account_id
migration_type: requestBody.migration_type
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations'].get
update:
x-apievangelist-phrasing:
intent: List content migrations run on a course
effect: read
questions:
- What imports and course copies have been run into my course?
- Can I check whether a previous course copy finished?
instructions:
- text: List the content migrations for course {course_id}.
slots:
course_id: path.course_id
- text: Show all imports and copies that have run into course {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations'].post
update:
x-apievangelist-phrasing:
intent: Copy or import content into a course
effect: write
questions:
- How do I copy everything from last term's course into a new one?
- Can I shift assignment dates to a new term while importing course content?
- Which settings let me import only selected items instead of the whole course?
instructions:
- text: Copy course {source_course_id} into course {course_id}.
slots:
source_course_id: requestBody.settings[source_course_id]
course_id: path.course_id
- text: Start a {migration_type} import into course {course_id} from {file_url}.
slots:
migration_type: requestBody.migration_type
course_id: path.course_id
file_url: requestBody.settings[file_url]
- text: Import into course {course_id} with dates shifted to start {new_start_date} using migration type {migration_type}.
slots:
course_id: path.course_id
new_start_date: requestBody.date_shift_options[new_start_date]
migration_type: requestBody.migration_type
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations'].get
update:
x-apievangelist-phrasing:
intent: List content migrations run on a group
effect: read
questions:
- Which content imports have been run into a student group?
- Can I see the migration history for a group?
instructions:
- text: List the content migrations for group {group_id}.
slots:
group_id: path.group_id
- text: Show all imports that have run into group {group_id}.
slots:
group_id: path.group_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations'].post
update:
x-apievangelist-phrasing:
intent: Start a content import into a group
effect: write
questions:
- How do I upload a zip of files into a group's files area?
- Can I import content into a group instead of a course?
instructions:
- text: Start a {migration_type} content migration into group {group_id}.
slots:
migration_type: requestBody.migration_type
group_id: path.group_id
- text: Import the file at {file_url} into group {group_id} as a {migration_type} migration.
slots:
file_url: requestBody.settings[file_url]
group_id: path.group_id
migration_type: requestBody.migration_type
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations'].get
update:
x-apievangelist-phrasing:
intent: List content migrations run for a user
effect: read
questions:
- What imports have been run into a user's personal files?
- Can I list a user's own content migrations?
instructions:
- text: List the content migrations for user {user_id}.
slots:
user_id: path.user_id
- text: Show all imports that have run for user {user_id}.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations'].post
update:
x-apievangelist-phrasing:
intent: Start a content import into a user's files
effect: write
questions:
- How do I import a zip file into a user's personal files?
- Can I start a content migration scoped to a single user?
instructions:
- text: Start a {migration_type} content migration for user {user_id}.
slots:
migration_type: requestBody.migration_type
user_id: path.user_id
- text: Import the file at {file_url} into user {user_id}'s files as a {migration_type} migration.
slots:
file_url: requestBody.settings[file_url]
user_id: path.user_id
migration_type: requestBody.migration_type
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get the status of an account content migration
effect: read
questions:
- Has a particular import into my account finished yet?
- What is the current state of one account-level migration?
instructions:
- text: Get content migration {id} in account {account_id}.
slots:
id: path.id
account_id: path.account_id
- text: Check the progress of account {account_id} import {id}.
slots:
account_id: path.account_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{id}'].put
update:
x-apievangelist-phrasing:
intent: Update or retry an account content migration
effect: write
questions:
- How do I retry an account import after its file upload failed?
- Can I change settings on an account migration that's already been created?
instructions:
- text: Update content migration {id} in account {account_id}.
slots:
id: path.id
account_id: path.account_id
- text: Resubmit the upload for account {account_id} import {id}.
slots:
account_id: path.account_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get the status of a course content migration
effect: read
questions:
- Did my course copy finish, or is it still running?
- What's the workflow state of one import into my course?
instructions:
- text: Get content migration {id} in course {course_id}.
slots:
id: path.id
course_id: path.course_id
- text: Check the progress of course {course_id} import {id}.
slots:
course_id: path.course_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{id}'].put
update:
x-apievangelist-phrasing:
intent: Choose items or retry a course content migration
effect: write
questions:
- How do I pick which items to bring over in a selective course import?
- Can I resend a file for a course import whose first upload failed?
instructions:
- text: Update content migration {id} in course {course_id} with the items I selected.
slots:
id: path.id
course_id: path.course_id
- text: Retry the file upload for course {course_id} import {id}.
slots:
course_id: path.course_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get the status of a group content migration
effect: read
questions:
- Has the content import into my group completed?
- What is the state of a single group-level migration?
instructions:
- text: Get content migration {id} in group {group_id}.
slots:
id: path.id
group_id: path.group_id
- text: Check the progress of group {group_id} import {id}.
slots:
group_id: path.group_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{id}'].put
update:
x-apievangelist-phrasing:
intent: Update or retry a group content migration
effect: write
questions:
- How do I retry a group import after the upload went wrong?
- Can I adjust a group migration after creating it?
instructions:
- text: Update content migration {id} in group {group_id}.
slots:
id: path.id
group_id: path.group_id
- text: Resubmit the upload for group {group_id} import {id}.
slots:
group_id: path.group_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get the status of a user content migration
effect: read
questions:
- Has the import into a user's personal files finished?
- What is the state of one user-level migration?
instructions:
- text: Get content migration {id} for user {user_id}.
slots:
id: path.id
user_id: path.user_id
- text: Check the progress of user {user_id} import {id}.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{id}'].put
update:
x-apievangelist-phrasing:
intent: Update or retry a user content migration
effect: write
questions:
- How do I retry a user's personal import after the upload failed?
- Can I change a user-level migration after it was created?
instructions:
- text: Update content migration {id} for user {user_id}.
slots:
id: path.id
user_id: path.user_id
- text: Resubmit the upload for user {user_id} import {id}.
slots:
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/migrators'].get
update:
x-apievangelist-phrasing:
intent: List import types available to an account
effect: read
questions:
- Which migration types can I use when importing into my account?
- What import formats does my account support?
instructions:
- text: List the available migration systems for account {account_id}.
slots:
account_id: path.account_id
- text: Show which import types account {account_id} supports.
slots:
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/migrators'].get
update:
x-apievangelist-phrasing:
intent: List import types available to a course
effect: read
questions:
- What migration types can I choose from when importing into a course?
- Does my course support Common Cartridge or QTI imports?
instructions:
- text: List the available migration systems for course {course_id}.
slots:
course_id: path.course_id
- text: Show which import types course {course_id} supports.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/migrators'].get
update:
x-apievangelist-phrasing:
intent: List import types available to a group
effect: read
questions:
- Which migration types are allowed for imports into a group?
- What import formats can a group accept?
instructions:
- text: List the available migration systems for group {group_id}.
slots:
group_id: path.group_id
- text: Show which import types group {group_id} supports.
slots:
group_id: path.group_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/migrators'].get
update:
x-apievangelist-phrasing:
intent: List import types available to a user
effect: read
questions:
- Which migration types can be used for a user's personal imports?
- What import formats are available at the user level?
instructions:
- text: List the available migration systems for user {user_id}.
slots:
user_id: path.user_id
- text: Show which import types user {user_id} supports.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/content_migrations/{id}/selective_data'].get
update:
x-apievangelist-phrasing:
intent: Browse content selectable in an account import
effect: read
questions:
- What content can I choose from in an account-level selective import?
- Can I see the tree of importable items for an account migration?
instructions:
- text: List the selectable items for account {account_id} migration {id}.
slots:
account_id: path.account_id
id: path.id
- text: Show the {type} items available to import in account {account_id} migration {id}.
slots:
type: query.type
account_id: path.account_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{id}/selective_data'].get
update:
x-apievangelist-phrasing:
intent: Browse content selectable in a course import
effect: read
questions:
- Which assignments, pages and modules can I pick in a selective course import?
- How do I get the copy parameters for just some items of a course migration?
instructions:
- text: List the selectable items for course {course_id} migration {id}.
slots:
course_id: path.course_id
id: path.id
- text: Show only the {type} items I can import in course {course_id} migration {id}.
slots:
type: query.type
course_id: path.course_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/content_migrations/{id}/selective_data'].get
update:
x-apievangelist-phrasing:
intent: Browse content selectable in a group import
effect: read
questions:
- What content can I choose from in a group's selective import?
- Can I see the importable item tree for a group migration?
instructions:
- text: List the selectable items for group {group_id} migration {id}.
slots:
group_id: path.group_id
id: path.id
- text: Show the {type} items available to import in group {group_id} migration {id}.
slots:
type: query.type
group_id: path.group_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/content_migrations/{id}/selective_data'].get
update:
x-apievangelist-phrasing:
intent: Browse content selectable in a user import
effect: read
questions:
- What items can be picked in a user-level selective import?
- Can I see the importable item tree for a user's migration?
instructions:
- text: List the selectable items for user {user_id} migration {id}.
slots:
user_id: path.user_id
id: path.id
- text: Show the {type} items available to import in user {user_id} migration {id}.
slots:
type: query.type
user_id: path.user_id
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/content_migrations/{id}/asset_id_mapping'].get
update:
x-apievangelist-phrasing:
intent: Map source to copied asset IDs after a course copy
effect: read
questions:
- After a course copy, how do I find the new ID of each copied assignment or page?
- Can I get the old-to-new ID mapping from a blueprint sync?
instructions:
- text: Get the asset ID mapping for course {course_id} migration {id}.
slots:
course_id: path.course_id
id: path.id
- text: Show which destination IDs the copied quizzes and modules got in course {course_id} from migration {id}.
slots:
course_id: path.course_id
id: path.id
method: generated
generated: '2026-10-01'