← JoySchooler with Google Classroom

Set up JoySchooler in Google Classroom

Google Classroom is the one integration a teacher can turn on alone. JoySchooler holds that teacher's own Google authorisation and acts as them — which is why coursework it creates appears under their name. There is nothing to install district-wide unless your Workspace blocks unapproved apps.

Who does this
For teachers — and for a Workspace admin, only if your district blocks third-party apps
How long
A minute for a teacher; ten for an admin allowlist
Protocol
Google OAuth 2.0

The values

These are the same values JoySchooler shows on its own setup screen, so you can start from either end. They are public by design — none of them is a secret.

  • Redirect URI registered with Google
    https://joyschooler.com/api/lms/google-classroom/callback
  • Add-on frame origin
    https://joyschooler.com/lms/addon/

Step by step

  1. 1

    A teacher connects their own account

    Teacher
    • In JoySchooler: Account settings → Integrations → Connect beside Google Classroom.
    • Google shows a consent screen listing exactly what is being asked for. Approving it returns you to JoySchooler with the connection live.
    • Nothing is imported at this point. The next screen asks which of your courses to bring in.
  2. 2

    If the consent screen refuses

    Google Workspace admin
    • A district that has set "Third-party app access" to blocked-by-default will refuse the consent screen with an administrator message.
    • In the Google Admin console: Security → Access and data control → API controls → Manage third-party app access.
    • Add JoySchooler as a Configured app and set it to Trusted for the OUs whose teachers should use it. The OAuth client id is on this page below.
    • Teachers can connect immediately after that; nothing on the JoySchooler side changes.
  3. 3

    Optional: the Classroom add-on

    Google Workspace admin
    • The add-on is what lets students do the work inside the Classroom assignment rather than following a link out.
    • It is installed from the Google Workspace Marketplace for the domain, the same as any other Classroom add-on.
    • Teachers and students are asked for different permissions when they first open a frame: a learner is never asked for roster or coursework access.
The JoySchooler setup screen for this LMS, showing the values to copy
The matching screen in JoySchooler: Account settings → Integrations → Set it up.

Every permission we ask for, and why

This is the complete list. A consent screen naming capabilities a product does not use is how integrations get refused by district administrators — so JoySchooler asks for the shortest set that works, and nothing else.

ScopeWhat it is for
classroom.courses.readonlyList the courses this teacher teaches, so they can pick the ones to import.
classroom.rosters.readonlyRead the student list of the courses they chose.
classroom.profile.emailsMatch a learner to their JoySchooler account by address. This is what removes the class code.
classroom.coursework.studentsCreate the assignments JoySchooler posts, and read and write grades on them.
classroom.topicsOffer the teacher their own topic list when posting.
classroom.push-notificationsOptional. Live roster and coursework updates rather than an hourly sweep.
classroom.addons.teacher / .studentOptional, and only for the add-on. Teachers and students are asked separately.

What we store, and what we never touch

  • JoySchooler never reads coursework it did not create, and never deletes anything it did not create.

  • A roster sync only ever ADDS class membership. A learner who leaves a Classroom section keeps their JoySchooler place — their work and their parent's view of it hang off it — and the departure is recorded in the class activity log for a teacher to act on.

  • Importing a class does NOT create accounts for children. Each roster row is a seat that waits for its person; an account exists only once that learner signs in themselves.

  • The teacher's Google refresh token is stored as AES-256-GCM ciphertext under a key held in Google Secret Manager, never in the database row.

Our privacy policy and terms cover the rest: Privacy policy · Terms of service

When it does not work

Written from the failures that actually happen, with what each one really means rather than what it looks like.

The integration works, then stops after about an hour, once.
Google issues a refresh token only when the consent screen is forced. JoySchooler forces it and refuses a connection that comes back without one, so this should not happen — if it does, disconnect and reconnect.
"JoySchooler is not allowed to do that" on a class you do own.
Classroom returns the same code for "not permitted" and "your grant no longer covers this". JoySchooler separates them; a genuine permission problem is usually a co-teacher who owns the coursework.
Live updates are on and nothing ever arrives.
Push registrations expire in about a week and are renewed nightly. If a connection lapsed in between, the hourly sweep still carries everything; reconnecting re-registers.
Grades are not appearing in the gradebook.
Check the assignment's grade setting in the class Linked apps tab. A submission a teacher has graded by hand is deliberately never overwritten, and shows as skipped with that reason.

Stuck on any of it?

Send us what your LMS said — the exact message, and the issuer or client id if there is one. Setup problems are nearly always a single value, and naming it is usually the whole fix.