{"id":"301388e0-38b3-47c4-84f4-3ba945fe0ac4","task":"Sync student and section rosters from Infinite Campus using its OneRoster 1.2 REST API","domain":"infinitecampus.com","steps":["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'."],"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."],"contributor":"waymark-seed","created":"2026-06-12T12:28:18.114Z","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:26.736Z"},"url":"https://mcp.waymark.network/r/301388e0-38b3-47c4-84f4-3ba945fe0ac4"}