SFU Course PlannerSFU Course Planner
Sign In
© 2025 Anonymouse•Made withfor SFU students
PrivacyTerms|GitHub

API Documentation

Public REST API for accessing SFU course data, enrollment statistics, and grade distributions.

Base URL

https://api.sfucourseplanner.com

About

GET /api/about

Returns application metadata.

Example Response:

{
  "appName": "CoursePlanner",
  "authorName": "Anonymouse"
}

Browse

GET /api/departments

Returns all departments at SFU.

Example Response:

[
  {
    "deptId": 1,
    "deptCode": "CMPT",
    "name": "Computing Science"
  },
  {
    "deptId": 2,
    "deptCode": "MATH",
    "name": "Mathematics"
  }
]

GET /api/departments/{deptId}/courses

Returns all courses in a department.

ParameterDescription
deptIdDepartment ID (from /api/departments)

Example Request:

GET /api/departments/1/courses

Example Response:

[
  {
    "courseId": 42,
    "deptId": 1,
    "courseNumber": "120",
    "title": "Introduction to Computing Science and Programming I",
    "description": "An elementary introduction to computing...",
    "units": 3,
    "degreeLevel": "UGRD",
    "prerequisites": "BC Math 12 or equivalent",
    "corequisites": null,
    "designation": "Q"
  }
]

GET /api/departments/{deptId}/courses/{courseId}/offerings

Returns all offerings for a course across the last 12 semesters.

ParameterDescription
deptIdDepartment ID
courseIdCourse ID

Example Request:

GET /api/departments/1/courses/42/offerings

Example Response:

[
  {
    "section": "D100",
    "infoUrl": "/browse/info/2025fa-cmpt-120-d1",
    "term": "Fall",
    "year": 2025,
    "semesterCode": 1257,
    "isEnrolling": true,
    "location": "Burnaby",
    "instructors": "John Doe",
    "enrolled": "96",
    "capacity": "100",
    "loadPercent": 96
  }
]

GET /api/departments/{deptId}/courses/{courseId}/offerings/{semesterCode}

Returns detailed information about a course offering for a specific semester, including grade statistics and all sections.

ParameterDescription
deptIdDepartment ID
courseIdCourse ID
semesterCodeSemester code (e.g., 1257 for Fall 2025)

Example Request:

GET /api/departments/1/courses/42/offerings/1257

Example Response:

{
  "deptCode": "CMPT",
  "courseNumber": "120",
  "title": "Introduction to Computing Science I",
  "year": 2025,
  "term": "Fall",
  "campus": "Burnaby",
  "medianGrade": "B+",
  "failRate": 8.5,
  "gradeDistribution": {
    "A+": 15,
    "A": 25,
    "A-": 20,
    "B+": 18,
    "B": 12
  },
  "description": "An elementary introduction...",
  "prerequisites": "BC Math 12",
  "corequisites": null,
  "units": 3,
  "degreeLevel": "UGRD",
  "designation": "Q",
  "sections": [
    {
      "section": "D100",
      "infoUrl": "/browse/info/2025fa-cmpt-120-d1",
      "term": "Fall",
      "year": 2025,
      "semesterCode": 1257,
      "isEnrolling": true,
      "location": "Burnaby",
      "instructors": "John Doe",
      "enrolled": "96",
      "capacity": "100",
      "loadPercent": 96
    }
  ],
  "outlineUrl": "https://www.sfu.ca/outlines.html?dept=CMPT&number=120"
}

Graph & Statistics

GET /api/graph/grade-distribution

Returns grade distribution statistics from CourseDiggers.

ParameterDescription
courseIdCourse ID (query parameter)

Example Request:

GET /api/graph/grade-distribution?courseId=42

Example Response:

{
  "deptCode": "CMPT",
  "courseNumber": "120",
  "title": "Introduction to Computing Science I",
  "medianGrade": "B+",
  "failRate": 8.5,
  "gradeDistribution": {
    "A+": 15,
    "A": 25,
    "A-": 20,
    "B+": 18,
    "B": 12,
    "B-": 8,
    "C+": 5,
    "C": 3,
    "C-": 2,
    "D": 1,
    "F": 1
  }
}

GET /api/graph/enrollment-history

Returns enrollment history for a course over time (live data from CourseSys).

ParameterDescription
deptIdDepartment ID (query parameter)
courseIdCourse ID (query parameter)
rangeTime range: "1yr", "3yr", or "5yr" (optional, default: "5yr")

Example Request:

GET /api/graph/enrollment-history?deptId=1&courseId=42&range=3yr

Example Response:

[
  {
    "semesterCode": 1227,
    "term": "Fall",
    "year": 2022,
    "totalEnrolled": 450,
    "totalCapacity": 500,
    "loadPercent": 90.0
  },
  {
    "semesterCode": 1231,
    "term": "Spring",
    "year": 2023,
    "totalEnrolled": 380,
    "totalCapacity": 400,
    "loadPercent": 95.0
  }
]

Semester Code Format

Semester codes are 4-digit numbers in the format YYYC where:

  • YYY: Year offset from 1900 (e.g., 125 = 2025)
  • C: Term code (1 = Spring, 4 = Summer, 7 = Fall)

Examples:

  • 1251 = Spring 2025
  • 1254 = Summer 2025
  • 1257 = Fall 2025
  • 1261 = Spring 2026

Notes

  • All endpoints return JSON
  • Enrollment data is fetched live from SFU CourseSys
  • Grade distribution data is sourced from CourseDiggers
  • CORS is enabled for web applications
  • No authentication required for public endpoints