Bulk Copy Shell Course to All Courses

This idea has been developed and deployed to Canvas

We are in the process of creating new courses in Canvas. The issue at hand is that our team needs to customize  the items available in each course. To accomplish that, we need to copy a shell course onto all sub account courses in bulk via API call (cURL) in order to apply the custom changes onto all courses.

Since  we create courses via SIS, we cannot obtain the Primary Key for each course at the time of creation; thus we have to wait for the data to be preprocessed at canvas_data several days after. We then download  the canvas_data.courses_dim and canvas_data.accounts_dim. After that we map all courses to the shell accounts by custom parameters. 

As of now, I am developing an internal DB table that will hold the transaction status for shell course copy requests (to avoid resubmitting the same request.) The challenge with shell course copy is that we find it takes an average of 25 minutes in our TEST environment to perform a course copy per course_id. Having over 13,000 courses we would need around 6 months to process them. I'm quite sure Production is faster but it is difficult to test because of time we spend on waiting for the data.

It would be good to have an API endpoint that allows listing all courses with ID, NAME, CREATED_AT, SUBACCOUNT_ID, PROGRESS. Also a SIS feature needs to exist to send the course copy in bulk. 

Does anyone know how to bulk copy a shell course to all system wide courses? I wonder if anyone knows the release timeframe for 'blueprint' which promises the bulk course copy.

Comments from Instructure

For more information, please read through the https://community.canvaslms.com/docs/DOC-11628  .

Community Coach
Community Coach

While I can't comment on the bulk content import, you should be able to use the accounts API to get a list of your courses: Accounts - Canvas LMS REST API Documentation .  I use this method in various scripts and it works well.  Hope this helps you out a bit at least!

Community Explorer

Although I know the API's allow us to do stuff like this, it would really help for Instructure to build this functionality into Canvas without requiring scripting and such. I'm working now on a process to copy introductory material into all our online courses, and the scripting's giving me fits. 

Community Novice

I figured out the for loop via a Bash process with cURL. The Test environment took forever to run but in production it takes around 4 hours to copy a shell to 23,000 courses. I had to build a reference table in my local db to keep track of shells by sub accounts with canvas_data courses and accounts. In the future I will manage this process with another open source product, StreamSets, to ensure anyone can understand the flow of data back to Canvas.

To avoid requesting them over and over, every time a new course comes up, I keep a course table merged with canvas_data.courses_dim to track what has been requested. I submit course shell copy on a daily basis. 

Instructure Alumni
Instructure Alumni

Contributors to this discussion might find ‌ useful.

Community Participant

Absolutely - this would be nice.

Instructure Alumni
Instructure Alumni

I can't yet definitively say if the upcoming Blueprint Courses feature will 100% address this particular feature request (it's aimed at deploying course templates / components to a selection of courses), but it certainly should get you a lot closer, whether through the UI or new APIs, or possibly even through new SIS Import fields as you mention.

Stay tuned...

Coach Emeritus
Community Team
Community Team
This idea has been developed and is On Canvas Beta How do I access the Canvas beta environment?

For more information, please read through the Canvas Beta Release Notes (2017-06-12) .

Community Novice

Was this released?  We are implementing a pilot for Spring and live in the Summer and I would love all my BluePrints to automatically have a module in it for required information for all classes.  

Community Team
Community Team

It was.  You can find the production release notes here

There are also Blueprint Guides that may help.