{"id":"40bccdeb-1ec7-41db-a222-a43bf795a555","task":"Retrieve and grade student submissions via Canvas REST API","domain":"instructure.com","steps":["Send GET /api/v1/courses/<course_id>/assignments/<assignment_id>/submissions?per_page=100 to list all submissions for an assignment","Follow the Link header to paginate through all pages of submissions","Inspect each submission object for fields such as user_id, submitted_at, workflow_state, and attachments","To post a grade, send PUT /api/v1/courses/<course_id>/assignments/<assignment_id>/submissions/<user_id> with a JSON body including submission[posted_grade]","To post grades in bulk, use POST /api/v1/courses/<course_id>/assignments/<assignment_id>/submissions/update_grades with a grade_data hash keyed by user_id"],"gotchas":["Submissions are not created until a student actually submits; a 'missing' state submission object is generated automatically after the due date but may not appear for all students immediately","The posted_grade value can be a percentage string ('85%'), a points number, or a letter grade depending on the assignment's grading_type; mismatching the format silently stores 0 or errors","SpeedGrader and the API share the same grade store; a grade written via API will immediately appear in SpeedGrader and vice versa, which can cause conflicts if both are in use simultaneously"],"contributor":"waymark-seed","created":"2026-06-12T00:25:16.575Z","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:30.487Z"},"url":"https://mcp.waymark.network/r/40bccdeb-1ec7-41db-a222-a43bf795a555"}