For reviewers: Print this page to a one-page PDF (File → Print → Save as PDF). Public copy: gpaceapp.org/security.html

Institutional review

Canvas OAuth security & privacy summary

GPAce · September 2026 · Not a personal access token request

GPAce is a student GPA tracker for iOS and Android (gpaceapp.org). Students do not create a GPAce account. This note describes a read-only Canvas OAuth Developer Key: one app registration so a student can authorize their own Canvas login. We are not asking the institution to issue tokens to the developer or to any student.

Access model

Requested Canvas scopes (GET only)

  • url:GET|/api/v1/users/:user_id/profile
  • url:GET|/api/v1/courses
  • url:GET|/api/v1/courses/:id
  • url:GET|/api/v1/courses/:course_id/assignment_groups
  • url:GET|/api/v1/courses/:course_id/assignments

Used for: the student’s profile, enrollments, category weights, assignments, and that student’s scores (including include[]=submission on their own assignments).

Not in scope

  • Posting, editing, or deleting grades or content
  • Instructor or admin roles
  • Other users’ accounts or gradebooks
  • LTI placement inside Canvas courses
  • Advertising or sale of academic data

Where data is stored

OAuth configuration

Redirect URI (register on the Developer Key): https://gpace-api.onrender.com/auth/canvas/callback

App return (allowlisted): gpace://

The backend only completes the OAuth redirect to that GPAce app scheme. It will not hand an authorization code to an arbitrary URL.

Student controls & contact

Disconnect Canvas in the app, delete local courses, or uninstall to remove on-device academic data. Full policy: gpaceapp.org/privacy.html.

Developer: Kai Greenberg, student, The University of Texas at Dallas

Privacy / review: support@gpaceapp.org · iOS com.kai.gpace · Android com.kai.gpace

GPAce is not affiliated with Instructure, Inc. or the student’s institution. Canvas is a trademark of its respective owners. This summary describes the current GPAce implementation as of September 2026.