Content Migrations
API for accessing content migrations and migration issues
A MigrationIssue object looks like:
A ContentMigration object looks like:
A Migrator object looks like:
GET /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues
Scope: url:GET|/api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues
GET /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues
Scope: url:GET|/api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues
Returns paginated migration issues
Example Request:
GET /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:GET|/api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
GET /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:GET|/api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
Returns data on an individual migration issue
Example Request:
PUT /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:PUT|/api/v1/accounts/:account_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:PUT|/api/v1/courses/:course_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:PUT|/api/v1/groups/:group_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
PUT /api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
Scope: url:PUT|/api/v1/users/:user_id/content_migrations/:content_migration_id/migration_issues/:id
Update the workflow_state of a migration issue
Request Parameters:
workflow_state
Required string
Set the workflow_state of the issue.
Allowed values: active
, resolved
Example Request:
GET /api/v1/accounts/:account_id/content_migrations
GET /api/v1/accounts/:account_id/content_migrations
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations
GET /api/v1/courses/:course_id/content_migrations
GET /api/v1/courses/:course_id/content_migrations
Scope: url:GET|/api/v1/courses/:course_id/content_migrations
GET /api/v1/groups/:group_id/content_migrations
GET /api/v1/groups/:group_id/content_migrations
Scope: url:GET|/api/v1/groups/:group_id/content_migrations
GET /api/v1/users/:user_id/content_migrations
GET /api/v1/users/:user_id/content_migrations
Scope: url:GET|/api/v1/users/:user_id/content_migrations
Returns paginated content migrations
Example Request:
GET /api/v1/accounts/:account_id/content_migrations/:id
GET /api/v1/accounts/:account_id/content_migrations/:id
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations/:id
GET /api/v1/courses/:course_id/content_migrations/:id
GET /api/v1/courses/:course_id/content_migrations/:id
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/:id
GET /api/v1/groups/:group_id/content_migrations/:id
GET /api/v1/groups/:group_id/content_migrations/:id
Scope: url:GET|/api/v1/groups/:group_id/content_migrations/:id
GET /api/v1/users/:user_id/content_migrations/:id
GET /api/v1/users/:user_id/content_migrations/:id
Scope: url:GET|/api/v1/users/:user_id/content_migrations/:id
Returns data on an individual content migration
Example Request:
POST /api/v1/accounts/:account_id/content_migrations
POST /api/v1/accounts/:account_id/content_migrations
Scope: url:POST|/api/v1/accounts/:account_id/content_migrations
POST /api/v1/courses/:course_id/content_migrations
POST /api/v1/courses/:course_id/content_migrations
Scope: url:POST|/api/v1/courses/:course_id/content_migrations
POST /api/v1/groups/:group_id/content_migrations
POST /api/v1/groups/:group_id/content_migrations
Scope: url:POST|/api/v1/groups/:group_id/content_migrations
POST /api/v1/users/:user_id/content_migrations
POST /api/v1/users/:user_id/content_migrations
Scope: url:POST|/api/v1/users/:user_id/content_migrations
For migrations that don’t require a file to be uploaded, like course copy, the processing will begin as soon as the migration is created.
The two general workflows are:
If no file upload is needed:
POST to create
For file uploading:
POST to create with file info in pre_attachment
Request Parameters:
migration_type
Required string
pre_attachment[name]
string
pre_attachment[*]
string
settings[file_url]
string
A URL to download the file from. Must not require authentication.
settings[content_export_id]
string
The id of a ContentExport to import. This allows you to import content previously exported from Canvas without needing to download and re-upload it.
settings[source_course_id]
string
The course to copy from for a course copy migration. (required if doing course copy)
settings[folder_id]
string
The folder to unzip the .zip file into for a zip_file_import.
settings[overwrite_quizzes]
boolean
Whether to overwrite quizzes with the same identifiers between content packages.
settings[question_bank_id]
integer
The existing question bank ID to import questions into if not specified in the content package.
settings[question_bank_name]
string
The question bank to import questions into if not specified in the content package, if both bank id and name are set, id will take precedence.
settings[insert_into_module_id]
integer
The id of a module in the target course. This will add all imported items (that can be added to a module) to the given module.
settings[insert_into_module_type]
string
If provided (and insert_into_module_id
is supplied), only add objects of the specified type to the module.
Allowed values: assignment
, discussion_topic
, file
, page
, quiz
settings[insert_into_module_position]
integer
The (1-based) position to insert the imported items into the course (if insert_into_module_id
is supplied). If this parameter is omitted, items will be added to the end of the module.
settings[move_to_assignment_group_id]
integer
The id of an assignment group in the target course. If provided, all imported assignments will be moved to the given assignment group.
settings[importer_skips]
Array
Set of importers to skip, even if otherwise selected by migration settings.
Allowed values: all_course_settings
, visibility_settings
settings[import_blueprint_settings]
boolean
Import the “use as blueprint course” setting as well as the list of locked items from the source course or package. The destination course must not be associated with an existing blueprint course and cannot have any student or observer enrollments.
date_shift_options[shift_dates]
boolean
Whether to shift dates in the copied course
date_shift_options[old_start_date]
Date
The original start date of the source content/course
date_shift_options[old_end_date]
Date
The original end date of the source content/course
date_shift_options[new_start_date]
Date
The new start date for the content/course
date_shift_options[new_end_date]
Date
The new end date for the source content/course
date_shift_options[day_substitutions][X]
integer
Move anything scheduled for day ‘X’ to the specified day. (0-Sunday, 1-Monday, 2-Tuesday, 3-Wednesday, 4-Thursday, 5-Friday, 6-Saturday)
date_shift_options[remove_dates]
boolean
Whether to remove dates in the copied course. Cannot be used in conjunction with shift_dates.
selective_import
boolean
select
Hash
For course_copy_importer
migrations, this parameter allows you to select the objects to copy without using the selective_import
argument and waiting_for_select
state as is required for uploaded imports (though that workflow is also supported for course copy migrations). The keys are object types like ‘files’, ‘folders’, ‘pages’, etc. The value for each key is a list of object ids. An id can be an integer or a string. Multiple object types can be selected in the same call.
Allowed values: folders
, files
, attachments
, quizzes
, assignments
, announcements
, calendar_events
, discussion_topics
, modules
, module_items
, pages
, rubrics
Example Request:
PUT /api/v1/accounts/:account_id/content_migrations/:id
PUT /api/v1/accounts/:account_id/content_migrations/:id
Scope: url:PUT|/api/v1/accounts/:account_id/content_migrations/:id
PUT /api/v1/courses/:course_id/content_migrations/:id
PUT /api/v1/courses/:course_id/content_migrations/:id
Scope: url:PUT|/api/v1/courses/:course_id/content_migrations/:id
PUT /api/v1/groups/:group_id/content_migrations/:id
PUT /api/v1/groups/:group_id/content_migrations/:id
Scope: url:PUT|/api/v1/groups/:group_id/content_migrations/:id
PUT /api/v1/users/:user_id/content_migrations/:id
PUT /api/v1/users/:user_id/content_migrations/:id
Scope: url:PUT|/api/v1/users/:user_id/content_migrations/:id
GET /api/v1/accounts/:account_id/content_migrations/migrators
GET /api/v1/accounts/:account_id/content_migrations/migrators
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations/migrators
GET /api/v1/courses/:course_id/content_migrations/migrators
GET /api/v1/courses/:course_id/content_migrations/migrators
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/migrators
GET /api/v1/groups/:group_id/content_migrations/migrators
GET /api/v1/groups/:group_id/content_migrations/migrators
Scope: url:GET|/api/v1/groups/:group_id/content_migrations/migrators
GET /api/v1/users/:user_id/content_migrations/migrators
GET /api/v1/users/:user_id/content_migrations/migrators
Scope: url:GET|/api/v1/users/:user_id/content_migrations/migrators
Lists the currently available migration types. These values may change.
GET /api/v1/accounts/:account_id/content_migrations/:id/selective_data
GET /api/v1/accounts/:account_id/content_migrations/:id/selective_data
Scope: url:GET|/api/v1/accounts/:account_id/content_migrations/:id/selective_data
GET /api/v1/courses/:course_id/content_migrations/:id/selective_data
GET /api/v1/courses/:course_id/content_migrations/:id/selective_data
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/:id/selective_data
GET /api/v1/groups/:group_id/content_migrations/:id/selective_data
GET /api/v1/groups/:group_id/content_migrations/:id/selective_data
Scope: url:GET|/api/v1/groups/:group_id/content_migrations/:id/selective_data
GET /api/v1/users/:user_id/content_migrations/:id/selective_data
GET /api/v1/users/:user_id/content_migrations/:id/selective_data
Scope: url:GET|/api/v1/users/:user_id/content_migrations/:id/selective_data
If no type
is sent you will get a list of the top-level sections in the content. It will look something like this:
When a type
is provided, nodes may be further divided via sub_items
. For example, using type=assignments results in a node for each assignment group and a sub_item for each assignment, like this:
You can include multiple copy parameters to selectively import multiple items or groups of items.
Request Parameters:
type
string
The type of content to enumerate.
Allowed values: context_modules
, assignments
, quizzes
, assessment_question_banks
, discussion_topics
, wiki_pages
, context_external_tools
, tool_profiles
, announcements
, calendar_events
, rubrics
, groups
, learning_outcomes
, attachments
GET /api/v1/courses/:course_id/content_migrations/:id/asset_id_mapping
GET /api/v1/courses/:course_id/content_migrations/:id/asset_id_mapping
Scope: url:GET|/api/v1/courses/:course_id/content_migrations/:id/asset_id_mapping
Given a complete course copy or blueprint import content migration, return a mapping of asset ids from the source course to the destination course that were copied in this migration or an earlier one with the same course pair and migration_type (course copy or blueprint).
The returned object’s keys are asset types as they appear in API URLs (announcements
, assignments
, discussion_topics
, files
, module_items
, modules
, pages
, and quizzes
). The values are a mapping from id in source course to id in destination course for objects of this type.
Example Request:
Example Response:
Last updated
Was this helpful?