Academics API
Last updated August 2, 2026
This reference is generated from the current Express route definitions and their handlers. It documents route-level authentication and authorization; deployment-wide middleware may add further checks.
Conventions
- Base API origin:
https://api.classgrid.in - Authentication: authenticated routes use the Classgrid session/JWT recognized by
isAuthenticated. - JSON is the default request and response format unless an endpoint explicitly accepts multipart data or redirects.
- Path parameters are always required.
- A field marked
nomeans the static handler scan did not find a direct required-field check; business rules may still make it conditionally required. - Role checks can also accept
super_adminthrough the shared authorization middleware where implemented.
This document contains 67 route definitions from 5 source files.
academic.routes.js
Mounted at: /api/academic
GET /api/academic
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include academicInfo, message. Explicit status codes include 500. Server error
Source: server/src/routes/academic.routes.js:23; handler inline handler in server/src/routes/academic.routes.js.
PUT /api/academic
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Updates resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, academicInfo. Explicit status codes include 400, 500. No valid fields provided
Source: server/src/routes/academic.routes.js:59; handler inline handler in server/src/routes/academic.routes.js.
academic-plan.routes.js
Mounted at: /api/academic-plans
POST /api/academic-plans/classrooms/:classroomId
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Creates or processes classrooms.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, plan. Explicit status codes include 201, 404, 500. Classroom not found
Source: server/src/routes/academic-plan.routes.js:15; handler inline handler in server/src/routes/academic-plan.routes.js.
GET /api/academic-plans/classrooms/:classroomId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves classrooms.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, plan, progress, units. Explicit status codes include 403, 404, 500. Not a member of this classroom
Source: server/src/routes/academic-plan.routes.js:57; handler inline handler in server/src/routes/academic-plan.routes.js.
POST /api/academic-plans/:planId/units
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes units.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, unit. Explicit status codes include 201, 500. Unit added
Source: server/src/routes/academic-plan.routes.js:139; handler inline handler in server/src/routes/academic-plan.routes.js.
POST /api/academic-plans/units/:unitId/topics
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes units topics.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, topic. Explicit status codes include 201, 500. Topic added
Source: server/src/routes/academic-plan.routes.js:166; handler inline handler in server/src/routes/academic-plan.routes.js.
PATCH /api/academic-plans/topics/:topicId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Updates topics.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, topic. Explicit status codes include 500. Topic updated
Source: server/src/routes/academic-plan.routes.js:196; handler inline handler in server/src/routes/academic-plan.routes.js.
DELETE /api/academic-plans/units/:unitId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Deletes units.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Unit deleted
Source: server/src/routes/academic-plan.routes.js:231; handler inline handler in server/src/routes/academic-plan.routes.js.
DELETE /api/academic-plans/topics/:topicId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Deletes topics.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Topic deleted
Source: server/src/routes/academic-plan.routes.js:241; handler inline handler in server/src/routes/academic-plan.routes.js.
GET /api/academic-plans/me/plans
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves me plans.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include plans, message. Explicit status codes include 500. Server error
Source: server/src/routes/academic-plan.routes.js:256; handler inline handler in server/src/routes/academic-plan.routes.js.
course.routes.js
Mounted at: /api/courses
POST /api/courses
Auth: isAuthenticated, requireRole('org_admin','faculty')
Roles: org_admin, faculty
Middleware: isAuthenticated, requireRole('org_admin','faculty')
What it does: CREATE COURSE. Creates or processes resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, course. Explicit status codes include 201, 400, 500. Course name is required
Source: server/src/routes/course.routes.js:40; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: LIST COURSES. Retrieves resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include courses, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:67; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses/:id
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: DETAIL + SUBJECTS. Retrieves resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include course, subjects, bySemester, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:103; handler inline handler in server/src/routes/course.routes.js.
PUT /api/courses/:id
Auth: isAuthenticated, requireRole('org_admin','faculty')
Roles: org_admin, faculty
Middleware: isAuthenticated, requireRole('org_admin','faculty')
What it does: UPDATE COURSE. Updates resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, course. Explicit status codes include 500. Course updated!
Source: server/src/routes/course.routes.js:129; handler inline handler in server/src/routes/course.routes.js.
DELETE /api/courses/:id
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: Deletes resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Course deleted
Source: server/src/routes/course.routes.js:147; handler inline handler in server/src/routes/course.routes.js.
POST /api/courses/:id/subjects
Auth: isAuthenticated, requireRole('org_admin','faculty')
Roles: org_admin, faculty
Middleware: isAuthenticated, requireRole('org_admin','faculty')
What it does: ADD SUBJECT TO COURSE. Creates or processes subjects.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, subject. Explicit status codes include 201, 400, 500. Subject name is required
Source: server/src/routes/course.routes.js:163; handler inline handler in server/src/routes/course.routes.js.
PUT /api/courses/subjects/:subjectId
Auth: isAuthenticated, requireRole('org_admin','faculty')
Roles: org_admin, faculty
Middleware: isAuthenticated, requireRole('org_admin','faculty')
What it does: UPDATE SUBJECT. Updates subjects.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, subject. Explicit status codes include 500. Subject updated!
Source: server/src/routes/course.routes.js:195; handler inline handler in server/src/routes/course.routes.js.
DELETE /api/courses/subjects/:subjectId
Auth: isAuthenticated, requireRole('org_admin','faculty')
Roles: org_admin, faculty
Middleware: isAuthenticated, requireRole('org_admin','faculty')
What it does: Deletes subjects.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Subject removed
Source: server/src/routes/course.routes.js:213; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses/student/my-courses
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: COURSES (Student). Retrieves student my courses.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include courses, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:229; handler inline handler in server/src/routes/course.routes.js.
POST /api/courses/:id/assign-faculty
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: ASSIGN FACULTY TO SUBJECT+DIVISION. Creates or processes assign faculty.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, assignment. Explicit status codes include 201, 400, 500. teacher_id and role are required
Source: server/src/routes/course.routes.js:302; handler inline handler in server/src/routes/course.routes.js.
DELETE /api/courses/faculty-assignment/:assignmentId
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: REMOVE FACULTY ASSIGNMENT. Deletes faculty assignment.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Assignment removed
Source: server/src/routes/course.routes.js:367; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses/:id/faculty
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: ASSIGNMENTS FOR A COURSE (Admin view). Retrieves faculty.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include assignments, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:380; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses/faculty/my-subjects
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: FACULTY SELF-VIEW: "What do I teach?". Retrieves faculty my subjects.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include assignments, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:434; handler inline handler in server/src/routes/course.routes.js.
GET /api/courses/org/faculty-list
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: LIST FACULTY (for dropdown when assigning). Retrieves org faculty list.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include faculty, message. Explicit status codes include 500. Server error
Source: server/src/routes/course.routes.js:483; handler inline handler in server/src/routes/course.routes.js.
POST /api/courses/:id/bulk-assign-faculty
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: Processes the requested bulk operation.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, assignments. Explicit status codes include 201, 400, 500. teacher_id, role, and subject_ids[] are required
Source: server/src/routes/course.routes.js:504; handler inline handler in server/src/routes/course.routes.js.
POST /api/courses/:id/generate-classrooms
Auth: isAuthenticated, requireRole('org_admin')
Roles: org_admin
Middleware: isAuthenticated, requireRole('org_admin')
What it does: Generates the requested resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, created, skipped, classrooms. Explicit status codes include 201, 400, 404, 500. Course not found
Source: server/src/routes/course.routes.js:565; handler inline handler in server/src/routes/course.routes.js.
classroom.routes.js
Mounted at: /api/classrooms, /api/classroom
GET /api/classrooms/proxy/pdf
Aliases: /api/classroom/proxy/pdf
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves proxy pdf.
Path parameters: None detected in the route or handler.
Query parameters:
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, error. Explicit status codes include 400, 403, 500. Missing URL parameter
Source: server/src/routes/classroom.routes.js:60; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/hf-summarize
Aliases: /api/classroom/hf-summarize
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes hf summarize.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, summary, error. Explicit status codes include 400, 500. Missing or invalid 'text' field
Source: server/src/routes/classroom.routes.js:92; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms
Aliases: /api/classroom
Auth: isAuthenticated, requireRole("teacher","faculty","org_admin","super_admin"), requireOrganization, attachInstitutionProfile()
Roles: teacher, faculty, org_admin, super_admin
Middleware: isAuthenticated, requireRole("teacher","faculty","org_admin","super_admin"), requireOrganization, attachInstitutionProfile(), validateClassroom
What it does: Creates or processes resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, classroom, error. Explicit status codes include 201, 400, 500. Name and subject are required
Source: server/src/routes/classroom.routes.js:127; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id/cover
Aliases: /api/classroom/:id/cover
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner, upload.single("coverImage")
What it does: Updates cover.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, coverImage. Explicit status codes include 400, 404, 500. No image file provided
Source: server/src/routes/classroom.routes.js:203; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms
Aliases: /api/classroom
Auth: isAuthenticated, requireOrganization, attachInstitutionProfile()
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated, requireOrganization, attachInstitutionProfile()
What it does: Retrieves resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include classrooms, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:232; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/all-requests
Aliases: /api/classroom/all-requests
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves all requests.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, requests. Explicit status codes include 403, 500. Teachers only
Source: server/src/routes/classroom.routes.js:310; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/my-requests
Aliases: /api/classroom/my-requests
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves my requests.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include requests, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:396; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/discover
Aliases: /api/classroom/discover
Auth: isAuthenticated, requireOrganization, attachInstitutionProfile()
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated, requireOrganization, attachInstitutionProfile()
What it does: Retrieves discover.
Path parameters: None detected in the route or handler.
Query parameters:
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include classrooms, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:445; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/my-organization
Aliases: /api/classroom/my-organization
Auth: isAuthenticated, requireOrganization, attachInstitutionProfile()
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated, requireOrganization, attachInstitutionProfile()
What it does: Retrieves my organization.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include classrooms, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:515; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/join-by-code
Aliases: /api/classroom/join-by-code
Auth: isAuthenticated, enforceClassroomAccess
Roles: Authenticated user with access to the classroom.
Middleware: isAuthenticated, joinClassroomLimiter, enforceClassroomAccess, validateJoinCode
What it does: Joins the requested resource.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, code, classroomName, membership. Explicit status codes include 201, 400, 403, 404, 500. Class code is required
Source: server/src/routes/classroom.routes.js:536; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/join
Aliases: /api/classroom/:id/join
Auth: isAuthenticated, enforceClassroomAccess
Roles: Authenticated user with access to the classroom.
Middleware: isAuthenticated, joinClassroomLimiter, enforceClassroomAccess
What it does: Joins the requested resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, code. Explicit status codes include 201, 400, 403, 404, 500. Classroom not found
Source: server/src/routes/classroom.routes.js:703; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id/requests
Aliases: /api/classroom/:id/requests
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Retrieves requests.
Path parameters:
Query parameters:
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include requests, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:839; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id/requests/:requestId
Aliases: /api/classroom/:id/requests/:requestId
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Updates requests.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message. Explicit status codes include 400, 404, 500. Action must be 'approve' or 'reject'
Source: server/src/routes/classroom.routes.js:874; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id/requests-bulk
Aliases: /api/classroom/:id/requests-bulk
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Updates requests bulk.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message. Explicit status codes include 400, 500. requestIds array required
Source: server/src/routes/classroom.routes.js:945; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id
Aliases: /api/classroom/:id
Auth: isAuthenticated, requireClassroomMember
Roles: Authenticated classroom member.
Middleware: isAuthenticated, requireClassroomMember
What it does: Retrieves resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, code, missingFields, missingIdLabel, classroom, isOwner. Explicit status codes include 403, 404, 500. Classroom not found
Source: server/src/routes/classroom.routes.js:1026; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id
Aliases: /api/classroom/:id
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Updates resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, classroom. Explicit status codes include 500. Classroom updated
Source: server/src/routes/classroom.routes.js:1111; handler inline handler in server/src/routes/classroom.routes.js.
DELETE /api/classrooms/:id
Aliases: /api/classroom/:id
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Deletes resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 500. Classroom deleted successfully
Source: server/src/routes/classroom.routes.js:1138; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id/meetings
Aliases: /api/classroom/:id/meetings
Auth: isAuthenticated, requireClassroomMember
Roles: Authenticated classroom member.
Middleware: isAuthenticated, requireClassroomMember
What it does: Retrieves meetings.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include meetings, message. Explicit status codes include 500. Server error fetching meetings
Source: server/src/routes/classroom.routes.js:1160; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id/members
Aliases: /api/classroom/:id/members
Auth: isAuthenticated, requireClassroomMember
Roles: Authenticated classroom member.
Middleware: isAuthenticated, requireClassroomMember
What it does: Retrieves members.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include members, total, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:1181; handler inline handler in server/src/routes/classroom.routes.js.
DELETE /api/classrooms/:id/members/:userId
Aliases: /api/classroom/:id/members/:userId
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Deletes members.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 404, 500. Member not found
Source: server/src/routes/classroom.routes.js:1220; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/upload-urls
Aliases: /api/classroom/:id/upload-urls
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Uploads the supplied resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, urls. Explicit status codes include 400, 500. Files array required
Source: server/src/routes/classroom.routes.js:1250; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/content/:type
Aliases: /api/classroom/:id/content/:type
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Creates or processes content.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, items, item, emailJobsCreated. Explicit status codes include 201, 400, 404, 500. Invalid content type
Source: server/src/routes/classroom.routes.js:1280; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/resend-notification
Aliases: /api/classroom/:id/resend-notification
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Resends the requested information.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, resetCount. Explicit status codes include 500. No failed email jobs found for this classroom
Source: server/src/routes/classroom.routes.js:1453; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id/content/:type
Aliases: /api/classroom/:id/content/:type
Auth: isAuthenticated, requireClassroomMember
Roles: Authenticated classroom member.
Middleware: isAuthenticated, requireClassroomMember
What it does: Retrieves content.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, content, source. Explicit status codes include 400, 500. Invalid content type
Source: server/src/routes/classroom.routes.js:1477; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/notify
Aliases: /api/classroom/:id/notify
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Creates or processes notify.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, count. Explicit status codes include 400, 500. Title and message are required
Source: server/src/routes/classroom.routes.js:1531; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/:id/students
Aliases: /api/classroom/:id/students
Auth: isAuthenticated, requireClassroomMember
Roles: Authenticated classroom member.
Middleware: isAuthenticated, requireClassroomMember
What it does: Retrieves students.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include students, total, message. Explicit status codes include 500. Server error
Source: server/src/routes/classroom.routes.js:1571; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id/content/:type/:contentId
Aliases: /api/classroom/:id/content/:type/:contentId
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Updates content.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, item. Explicit status codes include 400, 500. Invalid content type
Source: server/src/routes/classroom.routes.js:1618; handler inline handler in server/src/routes/classroom.routes.js.
PUT /api/classrooms/:id/content/materials/:contentId/replace
Aliases: /api/classroom/:id/content/materials/:contentId/replace
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner, upload.single("file")
What it does: Updates content materials replace.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, item. Explicit status codes include 400, 404, 500. No file provided
Source: server/src/routes/classroom.routes.js:1671; handler inline handler in server/src/routes/classroom.routes.js.
DELETE /api/classrooms/:id/content/:type/:contentId
Aliases: /api/classroom/:id/content/:type/:contentId
Auth: isAuthenticated, requireClassroomOwner
Roles: Authenticated classroom owner.
Middleware: isAuthenticated, requireClassroomOwner
What it does: Deletes content.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 400, 500. Invalid content type
Source: server/src/routes/classroom.routes.js:1721; handler inline handler in server/src/routes/classroom.routes.js.
POST /api/classrooms/:id/content/materials/:contentId/summarize
Aliases: /api/classroom/:id/content/materials/:contentId/summarize
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes content materials summarize.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include summary, cached, message. Explicit status codes include 400, 404, 500. Material not found
Source: server/src/routes/classroom.routes.js:1745; handler inline handler in server/src/routes/classroom.routes.js.
GET /api/classrooms/academic-status/:userId
Aliases: /api/classroom/academic-status/:userId
Auth: None at route level
Roles: Public endpoint unless an upstream platform gate applies.
Middleware: None at route level
What it does: Retrieves academic status.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message, status. Explicit status codes include 404, 500. User not found
Source: server/src/routes/classroom.routes.js:1830; handler inline handler in server/src/routes/classroom.routes.js.
timetable.routes.js
Mounted at: /api/timetable
GET /api/timetable/division/:divisionId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves division.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include slots, grouped, message. Explicit status codes include 500. Server error
Source: server/src/routes/timetable.routes.js:67; handler inline handler in server/src/routes/timetable.routes.js.
GET /api/timetable/division/:divisionId/today
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves division today.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include schedule, day, date, message. Explicit status codes include 500. Server error
Source: server/src/routes/timetable.routes.js:95; handler inline handler in server/src/routes/timetable.routes.js.
GET /api/timetable/me/today
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves me today.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include schedule, day, date, message. Explicit status codes include 500. No division assigned
Source: server/src/routes/timetable.routes.js:139; handler inline handler in server/src/routes/timetable.routes.js.
POST /api/timetable/division/:divisionId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes division.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, conflict, needs_force, slot. Explicit status codes include 201, 403, 409, 500. Students cannot manage timetable
Source: server/src/routes/timetable.routes.js:221; handler inline handler in server/src/routes/timetable.routes.js.
POST /api/timetable/division/:divisionId/bulk
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Processes the requested bulk operation.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, slots. Explicit status codes include 400, 403, 500. Students cannot manage timetable
Source: server/src/routes/timetable.routes.js:277; handler inline handler in server/src/routes/timetable.routes.js.
PUT /api/timetable/:slotId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Updates resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, slot. Explicit status codes include 403, 500. Students cannot manage timetable
Source: server/src/routes/timetable.routes.js:332; handler inline handler in server/src/routes/timetable.routes.js.
DELETE /api/timetable/:slotId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Deletes resource.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 403, 500. Students cannot manage timetable
Source: server/src/routes/timetable.routes.js:366; handler inline handler in server/src/routes/timetable.routes.js.
POST /api/timetable/extra
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Creates or processes extra.
Path parameters: None detected in the route or handler.
Query parameters: None detected in the route or handler.
Body:
Response: JSON response fields observed in the handler include message, conflict, needs_force, lecture. Explicit status codes include 201, 403, 409, 500. Students cannot add extra lectures
Source: server/src/routes/timetable.routes.js:388; handler inline handler in server/src/routes/timetable.routes.js.
GET /api/timetable/extra/division/:divisionId
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Retrieves extra division.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include extras, message. Explicit status codes include 500. Server error
Source: server/src/routes/timetable.routes.js:437; handler inline handler in server/src/routes/timetable.routes.js.
DELETE /api/timetable/extra/:id
Auth: isAuthenticated
Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.
Middleware: isAuthenticated
What it does: Deletes extra.
Path parameters:
Query parameters: None detected in the route or handler.
Body: None detected in the route or handler.
Response: JSON response fields observed in the handler include message. Explicit status codes include 403, 500. Not allowed
Source: server/src/routes/timetable.routes.js:460; handler inline handler in server/src/routes/timetable.routes.js.