Google Classroom API - Permission Denied on Grade Submission

Hi everyone,

I’m building an AI-powered grading system for schools that integrates with Google Classroom. The system processes student PDF submissions, generates feedback, and posts grades back into Classroom. Everything works fine for reading data, but I’m hitting a persistent restriction when trying to update grades.

Issue Summary

  • Error: 403 PERMISSION_DENIED: @ProjectPermissionDenied

  • Message: “The Developer Console project is not permitted to make this request”

  • Endpoint: PATCH /v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{submissionId}

  • Scope: https://www.googleapis.com/auth/classroom.coursework.students

What’s Verified So Far

  • :white_check_mark: Agent account is a teacher in the Classroom

  • :white_check_mark: OAuth scopes include classroom.coursework.students (write access)

  • :white_check_mark: Can read all classroom data without issues

  • :white_check_mark: Google Classroom API is enabled in Cloud Console

  • :white_check_mark: OAuth consent screen is set up correctly

    **
    Use Case**
    This tool is designed for educators. It analyzes submissions, provides detailed feedback, and posts grades automatically (we’ve tested 92–96% accuracy). The idea is to reduce teacher workload and bring consistency to grading.

    Questions

    1. Are there extra permissions or verification steps needed for grade submission?

    2. Is there an application or review process for EdTech tools like this?

    3. Do Google Cloud projects need special requirements to allow grade posting?

      Any guidance would be super helpful!
      Thanks!

Hey Noverse, did your application create the corresponding coursework? For many Classroom endpoints, including studentSubmissions.patch, API clients can only modify resources that they created, and can’t edit resources, like coursework, that the teacher created in the Classroom app.

“This request must be made by the Developer Console project of the OAuth client ID used to create the corresponding course work item.”

This is a known limitation and you can track that here: Google Issue Tracker (and please add input if you wish to help me build the case for changing this long term). I suspect the motivation behind this design is to prevent arbitrary tools from overwriting each others data, and “under the hood”, we treat the Classroom app almost like it’s own API client as far as resources go.

One potential workaround you could consider is building a Classroom add-on, which enables you to have more write access to the coursework resource if teachers attach it. I just saw this video from Pangram that highlights a similar workflow https://www.pangram.com/solutions/integrations/google-classroom