360 Secure SkillHub
360 安全技能中心

Canvas LMS

使用 CANVAS_TOKEN 环境变量配合 curl 调用 Canvas LMS (Instructure) REST API,以只读方式获取用户资料、课程、待办、作业截止时间、成绩、缺交作业、公告、模块、文件、讨论和收件箱数据,并用 jq 或 python3 解析 JSON 响应。

pranavkarthik10
pranavkarthik10
热度 93.43
最近更新 2026-05-11 15:50:48
分类:知识依赖:代码执行 / 第三方 API应用场景:任务管理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add canvas-lms
Metadata
name
canvas-lms
description
Access Canvas LMS (Instructure) for course data, assignments, grades, and submissions. Use when checking due dates, viewing grades, listing courses, or fetching course materials from Canvas.

Canvas LMS Skill

Access Canvas LMS data via the REST API.

Setup

  1. Generate an API token in Canvas: Account → Settings → New Access Token
  2. Store token in environment or .env file:
    export CANVAS_TOKEN="your_token_here"
    export CANVAS_URL="https://your-school.instructure.com"  # or canvas.yourschool.edu
    

Authentication

Include token in all requests:

curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/..."

Common Endpoints

Courses & Profile

# User profile
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/users/self/profile"

# Active courses
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses?enrollment_state=active&per_page=50"

# Dashboard cards (quick overview)
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/dashboard/dashboard_cards"

Assignments & Due Dates

# To-do items (upcoming work)
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/users/self/todo"

# Upcoming events
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/users/self/upcoming_events"

# Missing/overdue submissions
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/users/self/missing_submissions"

# Course assignments
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/assignments?per_page=50"

# Assignment details
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/assignments/{id}"

# Submission status
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/assignments/{id}/submissions/self"

Grades

# Enrollments with scores
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/users/self/enrollments?include[]=current_grading_period_scores&per_page=50"

Extract grade: .grades.current_score

Course Content

# Announcements
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/announcements?context_codes[]=course_{course_id}&per_page=20"

# Modules
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/modules?include[]=items&per_page=50"

# Files
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/files?per_page=50"

# Discussion topics
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/courses/{course_id}/discussion_topics?per_page=50"

# Inbox
curl -s -H "Authorization: Bearer $CANVAS_TOKEN" "$CANVAS_URL/api/v1/conversations?per_page=20"

Response Handling

  • List endpoints return arrays
  • Pagination: check Link header for rel="next"
  • Dates are ISO 8601 (UTC)
  • Use --max-time 30 for slow endpoints

Parse with jq:

curl -s ... | jq '.[] | {name: .name, due: .due_at}'

Or Python if jq unavailable:

curl -s ... | python3 -c "import sys,json; data=json.load(sys.stdin); print(json.dumps(data, indent=2))"

Tips

  • Course IDs appear in todo/assignment responses
  • File download URLs are in the url field of file objects
  • Always include per_page=50 to get more results (default is often 10)