Obtain client_id and client_secret from the Skyward district administrator via the Skyward API management console
POST to the Skyward token endpoint with grant_type=client_credentials to receive a Bearer access token
GET /ims/oneroster/v1p2/classes with a filter on schoolYear to scope results to the active year
GET /ims/oneroster/v1p2/classes/{classSourcedId}/enrollments to retrieve students and teachers for each class
Page results using limit and offset query params; check for a next link in the response Link header
Map Skyward sourcedIds to your application's internal user and class identifiers and persist the mapping
Known gotchas
Skyward may namespace sourcedIds with a district prefix; do not strip prefixes or you will create duplicate records when syncing from multiple Skyward instances
School year filtering behavior varies by Skyward version; when in doubt, retrieve all classes and filter client-side by the beginDate and endDate of the associated term
Skyward's OneRoster implementation may not support all optional filter fields; test filter syntax against the specific district's instance before relying on server-side filtering
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