| name | Canvas LMS Assistant |
| description | Use when interacting with Harvard Canvas LMS - fetching courses, assignments, grades, submissions, modules, calendar events. Trigger with CANVAS keyword. |
| pattern | \b(CANVAS)\b[.,;:!?]? |
Canvas LMS API Assistant
Configuration
- Base URL:
https://canvas.harvard.edu/api/v1
- Token:
1875~QhBUrmBrKVheZxm6YCvrExYJ8HtB2PQkzGRHhGZY9fDfvze7zENCKNK6HEmM7NnJ
- Helper script:
/Users/wz/Desktop/zPersonalProjects/Spring2026/canvas.sh
- Docs: https://canvas.instructure.com/doc/api/index.html
Warren's Spring 2026 Course IDs
| Course | Canvas ID | Code | Directory |
|---|
| Modern Storage Systems | 166762 | COMPSCI 2640 | CS2640/ |
| Intro to Ancient Roman World | 162077 | CLS-STDY 97B | CLSSTDY97B/ |
| Landmarks of World Architecture | 162740 | HAA 11 | HAA11/ |
| Holy Envy | 165559 | HSEMR-LE 76 | HSEMR76/ |
Helper Script
A helper script exists at /Users/wz/Desktop/zPersonalProjects/Spring2026/canvas.sh. Use it for common operations:
canvas.sh dashboard
canvas.sh deadlines
canvas.sh deadlines 48h
canvas.sh grades
canvas.sh announcements
canvas.sh missing
canvas.sh modules <course>
canvas.sh files <course>
canvas.sh download <course>
canvas.sh submit-text <course> <assignment_id> <file.html>
canvas.sh submit-file <course> <assignment_id> <file.pdf>
canvas.sh assignment <course> <assignment_id>
canvas.sh syllabus <course>
canvas.sh sync-schedule
canvas.sh new-assignments
Course aliases: cs2640, roman, haa11, hsemr76 (or use Canvas IDs directly).
Raw API Reference
Authentication header for manual curl:
-H "Authorization: Bearer 1875~QhBUrmBrKVheZxm6YCvrExYJ8HtB2PQkzGRHhGZY9fDfvze7zENCKNK6HEmM7NnJ"
| Action | Method | Endpoint |
|---|
| List courses | GET | /courses?enrollment_state=active |
| Get course | GET | /courses/:id |
| List assignments | GET | /courses/:id/assignments?order_by=due_at |
| Get assignment | GET | /courses/:id/assignments/:aid |
| My submission | GET | /courses/:id/assignments/:aid/submissions/self |
| Submit work | POST | /courses/:id/assignments/:aid/submissions |
| Request file upload | POST | /courses/:id/assignments/:aid/submissions/self/files |
| List modules | GET | /courses/:id/modules?include[]=items |
| Module items | GET | /courses/:id/modules/:mid/items |
| Calendar events | GET | /calendar_events?type=assignment |
| My enrollments/grades | GET | /courses/:id/enrollments?user_id=self&include[]=total_scores |
| Course files | GET | /courses/:id/files |
| Download file | GET | /files/:fid/public_url then follow redirect |
| Announcements | GET | /announcements?context_codes[]=course_:id |
| Syllabus | GET | /courses/:id?include[]=syllabus_body |
| Quizzes | GET | /courses/:id/quizzes |
| Quiz submissions | GET | /courses/:id/quizzes/:qid/submissions |
Pagination
Canvas paginates all list responses. Check Link header for rel="next". Use per_page=100 (max). The helper script handles pagination automatically.
File Upload Flow (3 steps)
- Notify Canvas about the file:
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-F "name=paper.pdf" -F "size=$(stat -f%z paper.pdf)" \
"https://canvas.harvard.edu/api/v1/courses/CID/assignments/AID/submissions/self/files"
- Upload to the returned
upload_url with upload_params
- Submit with the file ID:
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-F "submission[submission_type]=online_upload" \
-F "submission[file_ids][]=FILE_ID" \
"https://canvas.harvard.edu/api/v1/courses/CID/assignments/AID/submissions"