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!
I would like to ask if there is an API endpoint (and where is its documentation) about fetching the final grades of courses. Was there any which is now deprecated? The only similar information i was able to find is at the "List your courses" endpoint where it seems one can include the "total_scores" property to be included in the response. Is that all?
Solved! Go to Solution.
Hi @FayeChli,
I know one way is the Courses -> List Users in Course with the include[] parameter set to enrollments. According to the documentation, this would: "Optionally include with each Course the user’s current and invited enrollments. If the user is enrolled as a student, and the account has permission to manage or view all grades, each enrollment will include a ‘grades’ key with ‘current_score’, ‘final_score’, ‘current_grade’ and ‘final_grade’ values."
Let us know if this gets you what you need!
-Chris
The main thing is that it comes from enrollments. That means that anywhere you can fetch enrollments is a good place to look for the information. I personally use the List enrollments endpoint of the Enrollments API. I set the types[]=StudentEnrollment and state[]=active to reduce the amount of information sent. Those would vary depending on your requirements.
You can also get information from the GraphQL interface. In general, it is faster than the REST API, especially since the enrollments endpoint is relatively expensive. You could do something like this (change the 1234 to your course ID). Go to your main instance and put /graphiql to test this. Then you can automate it with the REST API.
query finalGrades {
course(id: "1234") {
enrollmentsConnection(filter: {states: active, types: StudentEnrollment}) {
nodes {
grades {
finalScore
}
user {
_id
sisId
sortableName
}
}
}
}
}
Hi @FayeChli,
I know one way is the Courses -> List Users in Course with the include[] parameter set to enrollments. According to the documentation, this would: "Optionally include with each Course the user’s current and invited enrollments. If the user is enrolled as a student, and the account has permission to manage or view all grades, each enrollment will include a ‘grades’ key with ‘current_score’, ‘final_score’, ‘current_grade’ and ‘final_grade’ values."
Let us know if this gets you what you need!
-Chris
Hello again @chriscas,
I know that this is an old post but I assumed that you may know a thing or two about the permissions thing that you mentioned in your answer a couple of months ago.
I used the List enrollments endpoint for fetching the final grades but the corresponding properties in the response (final_grade, final_score etc) are null/empty. I assume that this has something to do with the account permissions. Is there a specific API endpoint to use that grants such permissions to accounts? Or the whole permissions thing is being managed only by the Canvas Portal Admin Dashboard?
Hi @FayeChli,
As far as I know, the account you're using with the API needs to have the "Grades - view all grades" permission enabled to have the grade information included in the API results. If the account you're using does not have that permission, you'd generally need to have one of your school's full Canvas administrators change your account permissions or role to include that permission. I think there is a way they can adjust permissions through the API, but I'd say it's almost always done through the web UI, and you would not be able to do that yourself unless you are an admin with the permission to edit permissions.
Hope this helps!
-Chris
Thanks for letting me know @chriscas!
The main thing is that it comes from enrollments. That means that anywhere you can fetch enrollments is a good place to look for the information. I personally use the List enrollments endpoint of the Enrollments API. I set the types[]=StudentEnrollment and state[]=active to reduce the amount of information sent. Those would vary depending on your requirements.
You can also get information from the GraphQL interface. In general, it is faster than the REST API, especially since the enrollments endpoint is relatively expensive. You could do something like this (change the 1234 to your course ID). Go to your main instance and put /graphiql to test this. Then you can automate it with the REST API.
query finalGrades {
course(id: "1234") {
enrollmentsConnection(filter: {states: active, types: StudentEnrollment}) {
nodes {
grades {
finalScore
}
user {
_id
sisId
sortableName
}
}
}
}
}
Thank you both @chriscas and @James for your answers!
I think that I'll go with the List enrollments endpoint solution which seems that suits better my needs.
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