Register your application in the Schoology App Center or obtain a system-level API key and secret from a Schoology administrator; system-level (two-legged OAuth) keys allow server-to-server access without per-user authorization.
Authenticate using two-legged OAuth 1.0a: sign each request with your consumer key and secret using HMAC-SHA1; include the OAuth Authorization header with oauth_consumer_key, oauth_nonce, oauth_signature, oauth_signature_method, oauth_timestamp, and oauth_version.
Fetch schools and buildings via GET https://api.schoology.com/v1/schools, then retrieve users via GET /v1/users?start=0&limit=200 using start/limit pagination.
Retrieve enrollments (section memberships) via GET /v1/sections/:section_id/enrollments; iterate over all course sections retrieved from GET /v1/courses/:course_id/sections.
To update enrollments, POST to /v1/sections/:section_id/enrollments with a JSON body containing an array of enrollment objects (uid, admin, status); the API supports bulk enrollment creation in a single call.
As of June 25 2025, personal API keys have reduced third-party access; ensure your app uses system-level credentials approved by the district, or request formal Schoology app approval for cross-district access.
Known gotchas
Schoology uses OAuth 1.0a (not OAuth 2.0) for its main REST API; libraries expecting OAuth 2.0 Bearer tokens will not work and will produce 401 responses.
The API enforces pagination via start and limit parameters; omitting them defaults to a small result set and there is no Link header — you must increment start manually until the returned count is less than the requested limit.
System-level API keys grant broad access; since the June 2025 authentication security update, integrations using personal API keys to access other schools' data receive 401 errors and must migrate to properly scoped system-level or approved app credentials.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp