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!
Hi everyone,
We are using the View All Grades script created by @James so that our homeroom teachers and support staff can get a better picture of student performance across all courses in Canvas. This has been an extremely helpful tool for us! This year however, our high school has been moving to a mastery-based grading approach (ie. 4, 3, 2, 1 rubrics for every assignment).
This is difficult to communicate through Canvas, primarily because the standard 90 = A, 80 = B, etc., grading scales may no longer apply. For example, our range for B- through B+ actually scales from ~62% to ~87%. We are doing our best to manage this with Grading Schemes, and that works fine at the course level because that new scale shows on the Student View of Grades and in the course Gradebook (see below):
The issue arises when a student, parent, teacher, or support staff looks at the course-wide grades page. Grading schemes do not appear in this page! So, if a user is not aware of the Grading Scheme applied to the course, they could assume the student is actually doing worse than they are (it looks like they have a C, when actually they have a B - see Math 1A below).
I'm bringing this to the community in hopes that someone might have an amazing and quick fix for this, possibly using Javascript. All we would really need is the Grading Scheme letter for that course brought into this view, next to the percentage. Replacing the percentage entirely with just the Letter Grade would be something we might want eventually too.
Thanks for any help or insight you might have on this!
What page are the grades you want users to see, and what page are you trying to add those grades too?
The grades need to appear here: https://institution.instructure.com/users/12345/grades - this is the grades page for each student
The grade data we wanted added is a Letter Grade, which is communicated through the course grading scheme. I'm not sure what the best way to grab this information would be. It does appear on pages like the course grade for the student - so, for example: https://institution.instructure.com/courses/XXX/grades/12345.
On that specific page the value is here:
I suspected as much. I tinkered with a little hack one day for https://community.canvaslms.com/ideas/11233
I was unable to 'forward rip', basically making a request from one page to grab content from another page and bring it to the current page. The content on the Course Grades page is loaded with Javascript, after the initial page load. Essentially the grade isn't part of the page until the browser makes additional requests. I don't know of a way around that.
We'd probably have to look at making API requests to pull those grades (and grading schema) if possible.
That makes sense. I was looking around at the API earlier and managed to find that letter grades (dictated by the scheme) come from "current_grade" whereas the numeric scores come from "current_score."
Unfortunately I have no idea on how to get that "current_grade" data onto the page.
Which API endpoint? When I try /api/v1/courses/123?include[]=total_scores
“total_scores”: Optional information to include with each Course. When total_scores is given, any student enrollments will also include the fields 'computed_current_score', 'computed_final_score', 'computed_current_grade', and 'computed_final_grade', as well as (if the user has permission) 'unposted_current_score', 'unposted_final_score', 'unposted_current_grade', and 'unposted_final_grade' (see Enrollment documentation for more information on these fields). This argument is ignored if the course is configured to hide final grades.
But the course I tried didn't return scores.
I was browsing the data returned from: /api/v1/users/:user_id/enrollments
This has all the user grade data for each of their course enrollments, so I was thinking that could be matched up and displayed with their course enrollments listed on: https://institution.instructure.com/users/user_id/grades
The grading scheme is visible in both the "current_grade" and "unposted_current_grade" values.
So I pulled that endpoint up, and found
You want to display this data on https://abc.instructure.com/users/:user_id/grades ?
In a table?
Since I'm not an instructor, which of those values overrides the other when they aren't the same?
Any considerations for type and state?
If you have a single school-wide grading scheme, it may be easier to hard-code that scheme into an If statement in your JavaScript that you run on the grades page to assign your grading scheme grades to the percentages rather than try to dynamically load that information from elsewhere in Canvas. (This doesn't work if not all classes use the same grading scheme since you'd need to also keep a list of which classes used which, and that's beyond what you should try to maintain in a hack like that unless you have far fewer classes to keep track of than any school I've worked in. I can think of further wacky hackish things to try, such as using a naming scheme for your courses that lets your script look for a certain keyword in course names to know which grading scheme to apply, but all of them are probably terrible ideas that would eventually involve a giant nested if statement full of bugs.)
Hi Linnea,
We had considered your first idea, but our sites and programs are so varied that we really need to give them the freedom to use their own grading schemes. This is another reason why we want to make the scheme more visible to all users - one school might be different from another scheme-wise, so the default percentage that Canvas shows can mean different grades depending on the context of the course.
Hi folks,
We are still stuck on this. Anyone else have any possible solutions? Thanks!
Here are some quick thoughts after 10 minutes (not much) exploring:
The /api/v1/users/123/enrollments path is only available to root-level admins. I'm not sure if that includes everyone that you're wanting the ability to see the grades for. It would return all of the grades with one API call.
The /api/v1/courses/456/enrollments?user_id=123 will also return the grade for each course, but you would need to make one for each course that you want to look up. That's not normally an issue since the number of courses should be limited.
You would want to add a column to the existing table rather than combining the grade with the score, although that would be possible. There appears to be a column for grading periods. For me, it's hidden since we don't use them. For people wanting to use this script, it's probably visible. It would seem that the grade should go before this.
There are probably some issues associated with grading periods and one would need to examine that to make sure it handled those cases. I'm not sure if Canvas loads all of the grading periods or just the most current one. There was a note in the API documentation about it.
The script that displays the name of the student instead of "Courses I'm Taking" seems like an ideal place to start. It already runs on that page. Both enrollment calls return the name of the user, so the call it makes could be replaced with one of the two listed above.
If a person has multiple enrollments, you just search through the array looking for the one where they have a student enrollment and use that information. Alternatively, specify type[]=studentEnrollment as a query parameter.
The current grade is the one that is displayed to students. Final grade is with missing assignments treated as 0's. The unposted varieties include muted assignments while the others don't. The score is a number. The grade is a string with their grade IF there is a grading scheme or the same numeric value as the score if there is not a grading scheme.
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