Attendance 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 no means 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_admin through the shared authorization middleware where implemented.

This document contains 50 route definitions from 4 source files.

attendance.routes.js

Mounted at: /api/attendance

File-wide middleware: isAuthenticated, attachInstitutionProfile({required:false})

MethodPathAccess
GET/api/attendance/institution-profileAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/my-overviewAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/session/:sessionId/detailAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/my-detailedAny authenticated user, subject to organization, plan, and feature middleware listed below.
POST/api/attendance/:classroomId/startAuthenticated classroom owner.
POST/api/attendance/:classroomId/quick-markAuthenticated classroom owner.
POST/api/attendance/:classroomId/stopAuthenticated classroom owner.
POST/api/attendance/:classroomId/markAuthenticated classroom member.
GET/api/attendance/:classroomId/reportAuthenticated classroom owner.
GET/api/attendance/:classroomId/activeAuthenticated classroom member.
GET/api/attendance/:classroomId/suspiciousAuthenticated classroom owner.
POST/api/attendance/:classroomId/manual-overrideAuthenticated classroom owner.
GET/api/attendance/:classroomId/sessionsAuthenticated classroom owner.
GET/api/attendance/:classroomId/reportAuthenticated classroom owner.
GET/api/attendance/:classroomId/my-attendanceAuthenticated classroom member.
POST/api/attendance/appealAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/appealsAny authenticated user, subject to organization, plan, and feature middleware listed below.
PATCH/api/attendance/appeal/:idAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/my-appealsAny authenticated user, subject to organization, plan, and feature middleware listed below.
POST/api/attendance/dashboard/submitfaculty, org_admin
GET/api/attendance/dashboard/register/:hierarchyIdfaculty, org_admin
GET/api/attendance/analytics/student/:studentId/hierarchy/:hierarchyIdAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/analytics/batch/:hierarchyIdfaculty, org_admin
POST/api/attendance/leave/applystudent
GET/api/attendance/leave/pending/:hierarchyIdfaculty, org_admin
GET/api/attendance/leave/history/:studentId?Any authenticated user, subject to organization, plan, and feature middleware listed below.
POST/api/attendance/leave/process/:leaveRequestIdfaculty, org_admin

GET /api/attendance/institution-profile

Auth: isAuthenticated, attachInstitutionProfile({required:false}), attachInstitutionProfile()

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), attachInstitutionProfile()

What it does: Retrieves institution profile.

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 institution_profile, attendance_profile, learner_record_profile.

Source: server/src/routes/attendance.routes.js:43; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/my-overview

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Retrieves my overview.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
startDatestring (date/time)noQuery value for start date.
endDatestring (date/time)noQuery value for end date.
monthnumbernoQuery value for month.
yearnumbernoQuery value for year.
classroomstringnoQuery value for classroom.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include message, startDate, endDate, overall, classrooms. Explicit status codes include 400, 500. Invalid date parameters

Source: server/src/routes/attendance.routes.js:131; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/session/:sessionId/detail

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Retrieves session detail.

Path parameters:

FieldTypeRequiredDescription
sessionIdstringyesPath identifier/value for session id.

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, session, classroom, summary, students. Explicit status codes include 403, 404, 500. Session not found

Source: server/src/routes/attendance.routes.js:212; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/my-detailed

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Retrieves my detailed.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
filterstringnoQuery value for filter.
semesternumbernoQuery value for semester.
yearnumbernoQuery value for year.
monthnumbernoQuery value for month.
classroomstringnoQuery value for classroom.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include classrooms, startDate, endDate, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:286; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/:classroomId/start

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Starts the requested operation.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
codestringyesRequest value for code.
teacherLatstringnoRequest value for teacher lat.
teacherLngstringnoRequest value for teacher lng.
durationSecondsstringnoRequest value for duration seconds.
radiusMetersstringnoRequest value for radius meters.

Response: JSON response fields observed in the handler include message, code, session. Explicit status codes include 201, 400, 403, 409, 500. Code must be 3 30 characters

Source: server/src/routes/attendance.routes.js:351; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/:classroomId/quick-mark

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Creates or processes quick mark.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
studentIdsstringnoRequest value for student ids.
sessionDatestringnoRequest value for session date.

Response: JSON response fields observed in the handler include message, code, session. Explicit status codes include 201, 400, 403, 500. At least one student must be selected

Source: server/src/routes/attendance.routes.js:465; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/:classroomId/stop

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Stops the requested operation.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

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. No active attendance session found to stop.

Source: server/src/routes/attendance.routes.js:546; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/:classroomId/mark

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

Roles: Authenticated classroom member.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

What it does: Creates or processes mark.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
codestringyesRequest value for code.
sessionTokenstringyesRequest value for session token.
studentLatstringnoRequest value for student lat.
studentLngstringnoRequest value for student lng.
pasteDetectedstringyesRequest value for paste detected.
deviceFingerprintstringnoRequest value for device fingerprint.

Response: JSON response fields observed in the handler include message, distanceMeters, blocked, reason, markedAt, status. Explicit status codes include 400, 401, 403, 404, 410, 500. Attendance code is required

Source: server/src/routes/attendance.routes.js:611; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/report

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Retrieves report.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters:

FieldTypeRequiredDescription
startDatestring (date/time)noQuery value for start date.
endDatestring (date/time)noQuery value for end date.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include startDate, endDate, totalSessions, students, message. Explicit status codes include 500. Server error generating report

Source: server/src/routes/attendance.routes.js:806; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/active

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

Roles: Authenticated classroom member.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requirePlan("PRO"), requireClassroomMember

What it does: Retrieves active.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

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 active, session, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:896; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/suspicious

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requirePlan("PRO"), requireClassroomOwner

What it does: Retrieves suspicious.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters:

FieldTypeRequiredDescription
pagenumbernoQuery value for page.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include records, total, page, pages, mode, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:947; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/:classroomId/manual-override

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requirePlan("PRO"), requireClassroomOwner

What it does: Creates or processes manual override.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
sessionIdstringyesRequest value for session id.
studentIdstringyesRequest value for student id.
actionstringnoRequest value for action.

Response: JSON response fields observed in the handler include message, action, student. Explicit status codes include 400, 404, 500. sessionId, studentId, and action (mark_present|mark_absent) are required

Source: server/src/routes/attendance.routes.js:999; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/sessions

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requirePlan("PRO"), requireClassroomOwner

What it does: Retrieves sessions.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters:

FieldTypeRequiredDescription
pagenumbernoQuery value for page.
filterstringnoQuery value for filter.
monthnumbernoQuery value for month.
yearnumbernoQuery value for year.
semesternumbernoQuery value for semester.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include sessions, total, page, pages, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:1091; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/report

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Retrieves report.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters:

FieldTypeRequiredDescription
monthnumbernoQuery value for month.
yearnumbernoQuery value for year.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include month, year, totalSessions, totalStudents, defaulterCount, students, defaulters, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:1135; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/:classroomId/my-attendance

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

Roles: Authenticated classroom member.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

What it does: Retrieves my attendance.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters:

FieldTypeRequiredDescription
monthnumbernoQuery value for month.
yearnumbernoQuery value for year.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include month, year, totalSessions, present, absent, percentage, isDefaulter, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:1182; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/appeal

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), (req,res,next)=>{appealUpload.single("proof")(req,res,err=>{if(err){if(err instanceof multer.MulterError&&err.code==="LIMIT_FILE_SIZE"){return res.status(400).json({message:"File must be under 2MB"});}return res.status(400).json({message:err.message||"Upload error"});}next();});}

What it does: Student creates an appeal. Creates or processes appeal.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
sessionIdstringyesRequest value for session id.
reasonstringnoRequest value for reason.
prooffilenoRequest value for proof.

Response: JSON response fields observed in the handler include message, appeal. Explicit status codes include 201, 400, 403, 404, 409, 500. sessionId and reason are required

Source: server/src/routes/attendance.routes.js:1224; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/appeals

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Faculty fetches appeals for a classroom. Retrieves appeals.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
classroomIdstringyesQuery value for classroom id.
statusstringnoQuery value for status.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include message, appeals. Explicit status codes include 400, 403, 404, 500. classroomId is required

Source: server/src/routes/attendance.routes.js:1322; handler inline handler in server/src/routes/attendance.routes.js.

PATCH /api/attendance/appeal/:id

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Faculty approves or rejects. Updates appeal.

Path parameters:

FieldTypeRequiredDescription
idstringyesPath identifier/value for id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
actionstringnoRequest value for action.
commentstringnoRequest value for comment.

Response: JSON response fields observed in the handler include message, appeal. Explicit status codes include 400, 403, 404, 500. action must be 'approve' or 'reject'

Source: server/src/routes/attendance.routes.js:1366; handler inline handler in server/src/routes/attendance.routes.js.

GET /api/attendance/my-appeals

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Student fetches own appeals. Retrieves my appeals.

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 appeals, bySession, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance.routes.js:1443; handler inline handler in server/src/routes/attendance.routes.js.

POST /api/attendance/dashboard/submit

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

Roles: faculty, org_admin

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

What it does: Admin / Faculty: Submit the daily master attendance register. Submit daily attendance controller.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
hierarchyIdstringnoRequest value for hierarchy id.
datestring (date/time)noRequest value for date.
sessionTypestringnoRequest value for session type.
studentRecordsArraystringnoRequest value for student records array.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1484; handler submitDailyAttendanceController in server/src/controllers/attendance.controller.js.

GET /api/attendance/dashboard/register/:hierarchyId

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

Roles: faculty, org_admin

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

What it does: Admin / Faculty: View a specific day's submitted attendance register. Get attendance register controller.

Path parameters:

FieldTypeRequiredDescription
hierarchyIdstringyesPath identifier/value for hierarchy id.

Query parameters:

FieldTypeRequiredDescription
datestring (date/time)noQuery value for date.
sessionTypestringnoQuery value for session type.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1487; handler getAttendanceRegisterController in server/src/controllers/attendance.controller.js.

GET /api/attendance/analytics/student/:studentId/hierarchy/:hierarchyId

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: All Authenticated: Get a student's calculated attendance percentage. Get student attendance percentage controller.

Path parameters:

FieldTypeRequiredDescription
studentIdstringyesPath identifier/value for student id.
hierarchyIdstringyesPath identifier/value for hierarchy id.

Query parameters:

FieldTypeRequiredDescription
startDatestringnoQuery value for start date.
endDatestringnoQuery value for end date.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1490; handler getStudentAttendancePercentageController in server/src/controllers/attendance.controller.js.

GET /api/attendance/analytics/batch/:hierarchyId

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

Roles: faculty, org_admin

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

What it does: Admin / Faculty: Get the pre-calculated stats and absentees for a batch. Get batch attendance report controller.

Path parameters:

FieldTypeRequiredDescription
hierarchyIdstringyesPath identifier/value for hierarchy id.

Query parameters:

FieldTypeRequiredDescription
datestring (date/time)noQuery value for date.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1493; handler getBatchAttendanceReportController in server/src/controllers/attendance.controller.js.

POST /api/attendance/leave/apply

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole('student')

Roles: student

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole('student')

What it does: Student: Apply for a leave of absence. Apply leave controller.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
hierarchyIdstringnoRequest value for hierarchy id.
startDatestringnoRequest value for start date.
endDatestringnoRequest value for end date.
reasonstringnoRequest value for reason.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1496; handler applyLeaveController in server/src/controllers/attendance.controller.js.

GET /api/attendance/leave/pending/:hierarchyId

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

Roles: faculty, org_admin

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

What it does: Admin / Faculty: Get all pending leave requests for their specific batch. Get pending leave requests controller.

Path parameters:

FieldTypeRequiredDescription
hierarchyIdstringyesPath identifier/value for hierarchy id.

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 success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1499; handler getPendingLeaveRequestsController in server/src/controllers/attendance.controller.js.

GET /api/attendance/leave/history/:studentId?

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: All Authenticated: View a student's leave history (Student sees own, Admin sees any). Get student leave history controller.

Path parameters:

FieldTypeRequiredDescription
studentIdstringyesPath identifier/value for student id.

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 success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1502; handler getStudentLeaveHistoryController in server/src/controllers/attendance.controller.js.

POST /api/attendance/leave/process/:leaveRequestId

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

Roles: faculty, org_admin

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireRole(['faculty','org_admin'])

What it does: Admin / Faculty: Approve or reject a leave request. Process leave controller.

Path parameters:

FieldTypeRequiredDescription
leaveRequestIdstringyesPath identifier/value for leave request id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
statusstringnoRequest value for status.
remarksstringnoRequest value for remarks.

Response: JSON response fields observed in the handler include success, data, error. Explicit status codes include 200, 400.

Source: server/src/routes/attendance.routes.js:1505; handler processLeaveController in server/src/controllers/attendance.controller.js.

attendance_dashboard.routes.js

Mounted at: /api/attendance

File-wide middleware: isAuthenticated, attachInstitutionProfile({required:false})

MethodPathAccess
GET/api/attendance/active-sessionsAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/dashboard-summaryAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/dashboard-trendsAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/dashboard-insightsAny authenticated user, subject to organization, plan, and feature middleware listed below.
POST/api/attendance/:classroomId/bulk-overrideAuthenticated classroom owner.
POST/api/attendance/:classroomId/appealAuthenticated classroom member.
GET/api/attendance/:classroomId/exportAuthenticated classroom owner.
GET/api/attendance/classroom-members/:classroomIdAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/attendance/subject-statsAny authenticated user, subject to organization, plan, and feature middleware listed below.

GET /api/attendance/active-sessions

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: Active Sessions (for home screen banner). Retrieves active sessions.

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 sessions, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:19; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

GET /api/attendance/dashboard-summary

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: A. GET /dashboard-summary (Fast). Retrieves dashboard summary.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
classroomIdstringnoQuery value for classroom id.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include overallAttendance, totalPresent, totalAbsent, currentStreak, riskLevel, totalSessions, message, detail. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:62; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: B. GET /dashboard-trends. Retrieves dashboard trends.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
classroomIdstringnoQuery value for classroom id.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include timeline, facultySessions, message, detail. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:117; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

GET /api/attendance/dashboard-insights

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: C. GET /dashboard-insights. Retrieves dashboard insights.

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 velocity, recoveryTarget, bunkAllowance, message, velocityAlerts, detail. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:218; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

POST /api/attendance/:classroomId/bulk-override

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: Processes the requested bulk operation.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
sessionIdstringnoRequest value for session id.
actionstringnoRequest value for action.
confirmOverwritestringyesRequest value for confirm overwrite.

Response: JSON response fields observed in the handler include message, detail. Explicit status codes include 400, 404, 500. Risk confirmation required.

Source: server/src/routes/attendance_dashboard.routes.js:260; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

POST /api/attendance/:classroomId/appeal

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

Roles: Authenticated classroom member.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomMember

What it does: E. POST /:classroomId/appeal. Creates or processes appeal.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
sessionIdstringyesRequest value for session id.
reasonstringyesRequest value for reason.

Response: JSON response fields observed in the handler include message, detail. Explicit status codes include 400, 409, 500. Reason is required.

Source: server/src/routes/attendance_dashboard.routes.js:297; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

GET /api/attendance/:classroomId/export

Auth: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

Roles: Authenticated classroom owner.

Middleware: isAuthenticated, attachInstitutionProfile({required:false}), requireClassroomOwner

What it does: F. GET /:classroomId/export. Retrieves export.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

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, data. Explicit status codes include 500. Export ready (stub)

Source: server/src/routes/attendance_dashboard.routes.js:321; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

GET /api/attendance/classroom-members/:classroomId

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: G. GET /classroom-members/:classroomId Fetch student list for Quick Mark. Retrieves classroom members.

Path parameters:

FieldTypeRequiredDescription
classroomIdstringyesPath identifier/value for classroom id.

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, message. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:330; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

GET /api/attendance/subject-stats

Auth: isAuthenticated, attachInstitutionProfile({required:false})

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated, attachInstitutionProfile({required:false})

What it does: H. GET /subject-stats Per-subject + weekly attendance breakdown for student analytics. Retrieves subject stats.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
periodstringnoQuery value for period.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include subjects, weeklyPct, monthlyPct, weekTotal, monthTotal, message, detail. Explicit status codes include 500. Server error

Source: server/src/routes/attendance_dashboard.routes.js:356; handler inline handler in server/src/routes/attendance_dashboard.routes.js.

leave.routes.js

Mounted at: /api/leave

MethodPathAccess
POST/api/leave/requestAny authenticated user, subject to organization, plan, and feature middleware listed below.
POST/api/leave/quickAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/leave/meAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/leave/teacherfaculty, org_admin
PUT/api/leave/:requestId/statusfaculty, org_admin
DELETE/api/leave/:requestIdAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/leave/summaryAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/leave/calendarfaculty, org_admin

POST /api/leave/request

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: STUDENT: Apply Normal / Casual / Sick / Long Leave. Creates or processes request.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
classroomIdstringnoRequest value for classroom id.
from_datestring (date/time)yesRequest value for from date.
to_datestring (date/time)noRequest value for to date.
leave_typestringnoRequest value for leave type. Default: casual.
day_typenumbernoRequest value for day type. Default: full.
reasonstringnoRequest value for reason.
attachment_urlstringnoRequest value for attachment url.
total_daysnumbernoRequest value for total days.

Response: JSON response fields observed in the handler include message, leaveRequest. Explicit status codes include 201, 400, 500. From date is required

Source: server/src/routes/leave.routes.js:48; handler inline handler in server/src/routes/leave.routes.js.

POST /api/leave/quick

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: STUDENT: Quick Leave (no approval needed). Creates or processes quick.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
datestring (date/time)yesRequest value for date.
day_typenumbernoRequest value for day type. Default: full.
classroomIdstringnoRequest value for classroom id.

Response: JSON response fields observed in the handler include message, leaveRequest. Explicit status codes include 201, 400, 500. Date is required

Source: server/src/routes/leave.routes.js:103; handler inline handler in server/src/routes/leave.routes.js.

GET /api/leave/me

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: STUDENT: My Leave Requests. Retrieves me.

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/leave.routes.js:160; handler inline handler in server/src/routes/leave.routes.js.

GET /api/leave/teacher

Auth: isAuthenticated, requireRole("faculty","org_admin")

Roles: faculty, org_admin

Middleware: isAuthenticated, requireRole("faculty","org_admin")

What it does: TEACHER: All Leave Requests for My Classes. Retrieves teacher.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
statusstringnoQuery value for status.

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/leave.routes.js:178; handler inline handler in server/src/routes/leave.routes.js.

PUT /api/leave/:requestId/status

Auth: isAuthenticated, requireRole("faculty","org_admin")

Roles: faculty, org_admin

Middleware: isAuthenticated, requireRole("faculty","org_admin")

What it does: TEACHER: Approve / Reject. Updates status.

Path parameters:

FieldTypeRequiredDescription
requestIdstringyesPath identifier/value for request id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
statusstringnoRequest value for status.
teacherNotestringnoRequest value for teacher note.

Response: JSON response fields observed in the handler include message, leaveRequest. Explicit status codes include 400, 403, 500. Invalid status

Source: server/src/routes/leave.routes.js:200; handler inline handler in server/src/routes/leave.routes.js.

DELETE /api/leave/:requestId

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: STUDENT: Cancel Pending Leave. Deletes resource.

Path parameters:

FieldTypeRequiredDescription
requestIdstringyesPath identifier/value for request id.

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. Cannot cancel this leave request

Source: server/src/routes/leave.routes.js:237; handler inline handler in server/src/routes/leave.routes.js.

GET /api/leave/summary

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: STUDENT: Leave Summary (balance + breakdown). Retrieves summary.

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 totalRequests, totalDaysUsed, pendingCount, typeBreakdown, monthlyUsage, message. Explicit status codes include 500. Server error

Source: server/src/routes/leave.routes.js:261; handler inline handler in server/src/routes/leave.routes.js.

GET /api/leave/calendar

Auth: isAuthenticated, requireRole("faculty","org_admin")

Roles: faculty, org_admin

Middleware: isAuthenticated, requireRole("faculty","org_admin")

What it does: Shows which students are on leave for each day of the current/given week. Retrieves calendar.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
weekStartstringnoQuery value for week start.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include weekStart, weekEnd, calendar, message. Explicit status codes include 500. Server error

Source: server/src/routes/leave.routes.js:317; handler inline handler in server/src/routes/leave.routes.js.

holidays.routes.js

Mounted at: /api/holidays

MethodPathAccess
GET/api/holidaysAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/holidays/upcomingAny authenticated user, subject to organization, plan, and feature middleware listed below.
GET/api/holidays/todayAny authenticated user, subject to organization, plan, and feature middleware listed below.
PATCH/api/holidays/:idorg_admin
POST/api/holidays/manualorg_admin
POST/api/holidays/syncorg_admin

GET /api/holidays

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:

FieldTypeRequiredDescription
monthnumbernoQuery value for month.
searchstringnoQuery value for search.
yearnumbernoQuery value for year.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include message, holidays. Explicit status codes include 400, 500. Organization required

Source: server/src/routes/holidays.routes.js:81; handler inline handler in server/src/routes/holidays.routes.js.

GET /api/holidays/upcoming

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: Retrieves upcoming.

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, holidays. Explicit status codes include 400, 500. Organization required

Source: server/src/routes/holidays.routes.js:135; handler inline handler in server/src/routes/holidays.routes.js.

GET /api/holidays/today

Auth: isAuthenticated

Roles: Any authenticated user, subject to organization, plan, and feature middleware listed below.

Middleware: isAuthenticated

What it does: Retrieves 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 message. Explicit status codes include 400, 500. Organization required

Source: server/src/routes/holidays.routes.js:180; handler inline handler in server/src/routes/holidays.routes.js.

PATCH /api/holidays/:id

Auth: isAuthenticated, requireRole("org_admin")

Roles: org_admin

Middleware: isAuthenticated, requireRole("org_admin")

What it does: Updates resource.

Path parameters:

FieldTypeRequiredDescription
idstringyesPath identifier/value for id.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
is_holidaybooleannoRequest value for is holiday.

Response: JSON response fields observed in the handler include message, holiday. Explicit status codes include 400, 404, 500. is_holiday must be boolean

Source: server/src/routes/holidays.routes.js:198; handler inline handler in server/src/routes/holidays.routes.js.

POST /api/holidays/manual

Auth: isAuthenticated, requireRole("org_admin")

Roles: org_admin

Middleware: isAuthenticated, requireRole("org_admin")

What it does: Creates or processes manual.

Path parameters: None detected in the route or handler.

Query parameters: None detected in the route or handler.

Body:

FieldTypeRequiredDescription
titlestringyesRequest value for title.
datestring (date/time)yesRequest value for date.
end_datestring (date/time)noRequest value for end date.

Response: JSON response fields observed in the handler include message, holiday. Explicit status codes include 201, 400, 500. Title and date are required

Source: server/src/routes/holidays.routes.js:230; handler inline handler in server/src/routes/holidays.routes.js.

POST /api/holidays/sync

Auth: isAuthenticated, requireRole("org_admin")

Roles: org_admin

Middleware: isAuthenticated, requireRole("org_admin")

What it does: Creates or processes sync.

Path parameters: None detected in the route or handler.

Query parameters:

FieldTypeRequiredDescription
yearnumbernoQuery value for year.

Body: None detected in the route or handler.

Response: JSON response fields observed in the handler include message. Explicit status codes include 400, 500. Organization required

Source: server/src/routes/holidays.routes.js:267; handler inline handler in server/src/routes/holidays.routes.js.

Was this helpful?
M↓Markdown supportedMessage is optional