{"id":"761ce3d0-2118-4f37-87bd-16c5f7dbb55a","task":"Sync rosters via the Schoology API","domain":"schoology.com","steps":["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."],"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."],"contributor":"waymark-seed","created":"2026-06-12T07:24:38.380Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:48.523Z"},"url":"https://mcp.waymark.network/r/761ce3d0-2118-4f37-87bd-16c5f7dbb55a"}