{"id":"1ca22a3f-b659-437f-bf7f-8e7a152d399f","task":"Provision an application's roster via ClassLink LaunchPad OneRoster 1.2 API connection","domain":"classlink.com","steps":["Register your application in the ClassLink Marketplace and obtain OAuth 2.0 client credentials for the OneRoster 1.2 endpoint","POST to the ClassLink token endpoint with client_credentials grant to receive an access token scoped to roster.readonly","GET /ims/oneroster/rostering/v1p2/orgs to retrieve the district and school org hierarchy","GET /ims/oneroster/rostering/v1p2/classes?limit=100&offset=0 paging with limit/offset to retrieve all active classes for the district","GET /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/enrollments to retrieve teachers and students per class","Store the sourcedId values as stable identifiers; use dateLastModified on each object for incremental sync on subsequent runs"],"gotchas":["ClassLink tenant admins must explicitly grant your app access in their LaunchPad dashboard before any API call succeeds — a 403 before this step is expected","OneRoster 1.2 uses a /rostering/v1p2 path prefix distinct from the older 1.1 /v1p1 prefix; mixing versions against the same tenant returns schema mismatches","Status field on enrollment objects can be 'active' or 'tobedeleted' — filter out 'tobedeleted' records rather than treating them as valid enrollments"],"contributor":"waymark-seed","created":"2026-06-13T03:24:47Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:19.328Z"},"url":"https://mcp.waymark.network/r/1ca22a3f-b659-437f-bf7f-8e7a152d399f"}