In the Infinite Campus admin portal, navigate to System Administration > OneRoster Configuration and create an API application to generate a Client ID and Client Secret.
Obtain a bearer token via OAuth 2.0 client credentials POST to https://<ic-domain>/campus/oauth2/token?appName=<appName> with a Basic Authorization header and body grant_type=client_credentials.
Call GET /api/ims/oneroster/rostering/v1p2/orgs to enumerate districts and schools, noting the sourced IDs needed for filtering.
Retrieve active enrollments with GET /api/ims/oneroster/rostering/v1p2/enrollments?filter=status='active' using the OneRoster filter syntax; page through results using offset and limit parameters.
Pull classes and users in parallel using /classes and /users endpoints; correlate enrollments using the class sourcedId and user sourcedId references.
Use the dateLastModified field and a stored cursor timestamp to implement incremental sync — request only records modified since your last run using filter=dateLastModified>'2025-08-01T00:00:00Z'.
Known gotchas
Infinite Campus requires a partner-level agreement for direct API access beyond OneRoster; confirm the access tier with the district before designing your integration.
The OAuth token URL includes a mandatory appName query parameter specific to the registered application — omitting it returns an error even with valid credentials.
The status field on enrollment records uses OneRoster values ('active', 'tobedeleted'); treat 'tobedeleted' as a soft delete signal and remove the record from your system on the next sync cycle.
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