I'm wrestling with how Canvas classifies courses as "available" to different audiences. My measure of availability is that the course shows up in the list of courses returned by a call to:
GET https://instance.instructure.com/api/v1/courses/state=available
This particular API matters to me because we use a planner tool in-house to help students develop real plans around their homework assignments that, well… it works better when it can ask for a list of courses that the student is currently in.
What I've determined empirically so far is:
- If the course is unpublished, it's not available to either teachers or students
- If the course is published an in a term that is current or past but has not been "hard concluded" (either by clicking the "Conclude Course" button before the end of term or making a DELETE call to the course endpoint later on), it is available to teachers and students.
- If the course is hard concluded, it is not available to teachers or students.
- If the account-level "Restrict students from accessing courses after end date" is set, it has no impact on availability of courses (at least in sub-accounts). I have not experimented with locking that setting, because… why bother?
- If the course-level "Restrict students from accessing course after end date" is set, it is available to teachers and students receive a truncated version of the course that is just the id and "access_restricted_by_date": true, which is progress of a sort.
I've seen a number of work-arounds mentioned (e.g. moving all courses from past terms to an admin-only sub-account), which kind of defeats the purpose of faculty having access to their old courses both for archival and re-use purposes.
I'm leaning towards just writing a (not very complicated) script to hard-conclude all courses in a term that I can run the day after the term ends, but… I'm doing it with very ill grace.
Do others have perspective?