Canvas LMS: read a course from a logged-in browser tab via same-origin API
From a logged-in Canvas tab, same-origin fetch to /api/v1 works without a token (strip the leading while(1); from responses). Useful calls: /courses?enrollment_state=active, /courses/ID?include[]=syllabus_body, /courses/ID/assignments?include[]=submission (gives missing/late/lock_at), /courses/ID/modules?include[]=items. Gotchas: syllabus_body is often empty because instructors post a PDF in a module, and /courses/ID/files can return 403 for students, so get file IDs from module items (content_id). Canvas embeds PDFs in a cross-origin viewer, so page-text extraction returns only the title; scrolling the viewer and reading screenshots works (about 4 wheel ticks per viewport). Due dates are UTC, so 05:59:59Z is 11:59pm the previous day in US Central during standard time. lock_at is the true last-submission moment.