The Instructure Community will enter a read-only state on November 22, 2025 as we prepare to migrate to our new Community platform in early December. Read our blog post for more info about this change.
Found this content helpful? Log in or sign up to leave a like!
Hello,
User role: Admin
We're looking for a way to be notified when a student completes an entire course, rather than being notified that there is a single quiz to be marked or an assignment submission. An alternative could be being notified when a "Completion Assignment & Student Declaration" have been completed by the student. The point of doing this is so our Teachers can be notified when an entire course has been completed by a student and is ready to be marked, rather than going backwards and forth marking individual quizzes.
Does anyone know whether this is possible in Canvas?
Cheers
Joe
I'd just like to echo JoeSpruce's comments. For open/rolling-type courses, like Independent Study, students complete the course, individually, at different times. It would be nice to have this sort of thing automated.
Greetings JoeSpruce!
Thank you for posting your question. I understand you are trying to figure out a way to drive a more independent learning approach that triggers a single notification for the grader/instructor instead of several smaller tasks to grade ex. individual quizzes, assignments, discussions, etc.
My first thought is utilizing module prerequisites in a course. When prerequisites are added, it encourages the students to proceed through the modules in a specific order while having the ability to add requirements like minimum scores or viewing requirements for individual items (assignments, quizzes, discussions). Then as students proceed through those items in the modules the instructor/grader can see their progress. The module progress area could then be used to determine who in the course is ready to be graded based upon how far they are in a course.
Here is a guide on module progress:
One other recommendation I have is utilizing another Instructure product that builds off already existing Canvas courses; Catalog. In Catalog, you can get a report in the analytics of who completed a course based on the Module progress. This is a more independent tool that allows students to get a certificate of completion once all of the items in the modules are completed. More on Catalog can be found here:
https://community.canvaslms.com/t5/Canvas-Catalog/What-is-Canvas-Catalog/ta-p/1764
I hope this helps!
Over a year, and no answer to this question?
We have a Canvas Student Orientation course that the student must complete before they are allowed access to their real courses. We have a specific assignment that indicates completion of the course (and they have to score at least 80% as well).
The way we check this is by polling, not by notification. Every 20 minutes, I get the list of submissions for that assignment to see who has completed it. Since we remove them from the course after they complete it, the list of people who have completed it is short and quickly returned.
The REST API call to get that allows you to specify submissions since a particular date and time, so I use that to make it a fast call, rather than having to return submissions for every student in the course. Better yet, use GraphQL as it only returns those where the student has actually submitted the assignment and it's faster and you usually don't have to worry about pagination.
Here's the GraphQL query I use. You can try it on your site by adding /graphiql to the end of your dashboard URL.
query orientationCompleters($assignmentId: ID) {
assignment(id: $assignmentId) {
submissionsConnection {
nodes {
userId
score
user {
sisId
}
submittedAt
}
}
}
}
At the bottom is a Query Variables section. You'll need to add the assignment ID there. Be sure to use the Canvas assignment ID for the assignment that marks the end of the course. If it's a Classic Quiz, you need to get the assignment ID, not the quiz ID.
{
"assignmentId": 3927467
}
Then click the Run (triangle) at the top.
Once you get it working properly, you can automate it using the REST API to make a GraphQL call.
You can also use Canvas Live Events to accomplish this.
The course_completed event is sent when all of the module requirements in a course are met. There's another time it's sent, but that's the one you would want.
I set up an Amazon SQS queue for receiving my Live Events. If all you're getting are notifications of course completions, it may even be free (my AWS account gets 1 million free requests per month). We're a small college and I gather asset views and some other things and it rarely costs me more than $1 per month. You still have to retrieve the data from AWS, which I do every 5 minutes. The delay may be a little longer than 5 minutes since you have to wait for the item to hit the queue and then be exposed to you.
Even with notifications, I'm still polling to get the message. I would recommend the first way as it's a lot faster to get up and going.
Live Events have the concern that Canvas makes a best attempt to deliver the notification. It may not get through, so you will need a fallback system. The first method of polling Canvas directly doesn't have that issue and would be the fallback. You can up the frequency of polling if you like, but every 20 minutes works well for us.
@Wimpress, thanks for asking about this. If you hadn't brought it back up, I never would have seen the question to be able to respond.
I wouldn't get too worked up over it being a year without an answer though. There was no follow-up after the message from an Instructure employee regarding whether it answered the question. Given the nature of the Community, that could have just as easily been an acceptable answer that no one marked or it could have been one that didn't work. It's really hard to tell; I've given lots of responses that I feel answer the question, but the original author never came back to acknowledge it or respond. Unfortunately, most people who stumble across this question do not have the knowledge to answer this question or even know if the answer given wasn't meeting people's needs.
Thanks for the reply. It's a bit over my head, so I'll do with it what I can. The insane part to me is that in this year+ since the question was asked, there is literally no progress on doing what should be a very core function. I mean, Moodle has been able to do this for at least a decade. How can something that purportedly can run an entire University's curriculum not be able to do what should be the most basic of functions that you'd expect out of an LMS?? I know I'm preaching to the choir. Thanks for letting me vent.
Coming back in to bump this topic. How is there not a notification that a student has completed a course?! There are all kinds of notifications, but not this one? Seems like it should be easy: all prerequisites done? -- notify all Teachers. On a self-paced online-only course, this is essential!
They key question to me is that this is available in Catalog. What is catalog using that enables it to do this?
Updated: Just to flesh this out a bit. It is not only the instructor that needs access to this type of information. When monitors a number of self-paced sources, we want to be able to understand who has finished a course, so that we can transfer that completion to another system (e.g., Destiny one) and a certifcate can be issued through that system. If we do a regular report that identifies who has completed, that would streamline that process.
In catalog, we could run a simple enrolment report from the catalog admin interface.
Am I correct that there is no canned report that would allow sub account administrators to access these data and download them?
If not, what parameter would be creating a custom report for in this case?
Thank you!
This is more in line with a custom developed sidecar solution, but in addition to @James's suggestion of polling at the assignment level, it seems that polling the 'bulk user progress' API could be an option as well?
GET bulk user progress by Course ID: https://developerdocs.instructure.com/services/canvas/file.all_resources/courses#method.courses.bulk...
The response contains progress data for each user in the course. If `progress.completed_at` contains a timestamp, the user has completed the course at that timestamp according to the module completion criteria established in the course design. Otherwise it will be null.
Would rather hook up something that listens for a push from Live Events rather that pulling via a polling process. That may be something my dev team looks at in the future where timely processing of course completion is required.
Community helpTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign inTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign in