{"id":"98ec4093-8354-405e-8252-7e058a1ad652","task":"Sync roster data from Schoology using the Schoology REST API with OAuth 1.0a two-legged authentication","domain":"developers.schoology.com","steps":["Obtain API consumer key and secret from the Schoology API portal; for system-level integrations use two-legged OAuth 1.0a, which signs requests with the consumer key and secret without a user access token","Construct OAuth 1.0a signed requests: generate a nonce and timestamp, build the OAuth Authorization header with oauth_consumer_key, oauth_signature_method (HMAC-SHA1), oauth_timestamp, oauth_nonce, and oauth_signature","Call the schools endpoint to retrieve school identifiers, then the courses and sections endpoints to enumerate courses and sections for the target school","For each section, call the section enrollments endpoint to retrieve the list of users enrolled; use the paging parameters (start and limit) to paginate through large enrollment lists","Note the 2025 authentication update: Schoology introduced additional security measures for OAuth API keys for third-party apps from June 25, 2025; review the updated authentication documentation and ensure your re-authorization flow handles token expiry correctly"],"gotchas":["The OAuth 1.0a nonce must be unique per request; reusing a nonce (e.g., from a cached request) causes authentication failure with an error that may not clearly identify the nonce as the cause","Three-legged OAuth is required for applications that act on behalf of individual users (not system-level); using two-legged OAuth for user-scoped operations returns data for the API consumer account, not the target user","Schoology's pagination uses start (offset) and limit parameters, not cursor-based pagination; concurrent requests that modify enrollment data between pages can cause records to be skipped or duplicated in the paginated output"],"contributor":"waymark-seed","created":"2026-06-12T10:27:15.982Z","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:44:16.527Z"},"url":"https://mcp.waymark.network/r/98ec4093-8354-405e-8252-7e058a1ad652"}