Skip to main content

API Reference

SA3 exposes 66 API route files across 8 domains. All routes are Next.js App Router API routes under src/app/api/.

info

The /api/admin/ prefix is a naming artifact from early development. It does not act as a permission gate. All handlers enforce access via resolvePermissionsForResource for data-level access control.

Authentication

POST /api/auth/[...nextauth] -- next-auth v4 endpoints (sign in, sign out, session, CSRF)

Academic Systems (12 routes)

MethodPathPurpose
GET, POST/api/admin/academic-systemsList / create
GET, PATCH, DELETE/api/admin/academic-systems/[id]Detail / update / delete
GET, POST/api/admin/academic-systems/[id]/sectionsSections
GET, PATCH, DELETE/api/admin/academic-systems/[id]/sections/[sectionId]Section CRUD
GET, POST/api/admin/academic-systems/[id]/sections/[sectionId]/year-groupsYear groups
GET, PATCH, DELETE/api/admin/academic-systems/[id]/sections/[sectionId]/year-groups/[ygId]Year group CRUD
GET, POST/api/admin/academic-systems/[id]/grade-scalesGrade scales
GET, PATCH, DELETE/api/admin/academic-systems/[id]/grade-scales/[scaleId]Grade scale CRUD
GET/api/admin/academic-systems/[id]/grade-scales/[scaleId]/boundariesBoundaries
GET, POST/api/admin/academic-systems/[id]/assessment-typesAssessment types
GET, PATCH, DELETE/api/admin/academic-systems/[id]/assessment-types/[typeId]Type CRUD
GET, PUT/api/admin/academic-systems/[id]/weighting-rulesWeighting rules

Academic Years (4 routes)

MethodPathPurpose
GET, POST/api/admin/academic-yearsList / create
GET, PATCH, DELETE/api/admin/academic-years/[id]Detail / update / delete
GET, POST/api/admin/academic-years/[id]/periodsPeriods
GET, PATCH, DELETE/api/admin/academic-years/[id]/periods/[periodId]Period CRUD

Subjects (5 routes)

MethodPathPurpose
GET, POST/api/admin/subjectsList / create
GET, PATCH, DELETE/api/admin/subjects/[id]Detail / update / delete
GET, POST/api/admin/subjects/[id]/documentsDocuments
GET, DELETE/api/admin/subjects/[id]/documents/[docId]Document CRUD
GET/api/admin/subjects/[id]/documents/[docId]/download-urlPresigned download

Staff (6 routes)

MethodPathPurpose
GET, POST/api/admin/staffList / create
GET, PATCH, DELETE/api/admin/staff/[id]Detail / update / soft delete
POST/api/admin/staff/[id]/rolesAssign role
DELETE/api/admin/staff/[id]/roles/[staffRoleId]Revoke role (sets revokedAt)
POST/api/admin/staff/[id]/departmentsAssign department
DELETE/api/admin/staff/[id]/departments/[departmentId]Remove department

Roles & Departments (4 routes)

MethodPathPurpose
GET, POST/api/admin/rolesList / create
GET, PATCH, DELETE/api/admin/roles/[id]Role CRUD
GET, POST/api/admin/departmentsList / create
PATCH, DELETE/api/admin/departments/[id]Department CRUD

Students (4 routes)

MethodPathPurpose
GET, POST/api/admin/studentsList / create (PII encrypted)
GET, PATCH, DELETE/api/admin/students/[id]Detail / update / soft delete
POST/api/admin/students/[id]/photoPresigned PUT URL for upload
GET/api/admin/students/[id]/photoPresigned GET URL for download

Classes (11 routes)

MethodPathPurpose
GET, POST/api/admin/classesList / create
GET, PATCH, DELETE/api/admin/classes/[id]Detail / update / archive
GET, POST/api/admin/classes/[id]/studentsEnroll students
DELETE/api/admin/classes/[id]/students/[studentId]Unenrol
GET, POST/api/admin/classes/[id]/teachersAssign teachers
DELETE/api/admin/classes/[id]/teachers/[staffId]Remove teacher
GET, POST/api/admin/classes/[id]/subjectsAdd subjects
PATCH, DELETE/api/admin/classes/[id]/subjects/[csId]Update / remove subject
GET, POST/api/admin/classes/[id]/materialsUpload materials
DELETE/api/admin/classes/[id]/materials/[materialId]Remove material
GET/api/admin/classes/[id]/materials/[materialId]/download-urlDownload URL

Assessments (8 routes)

MethodPathPurpose
GET, POST/api/admin/assessmentsList / create
GET, PATCH, DELETE/api/admin/assessments/[id]CRUD + status transitions
POST/api/admin/assessments/[id]/documentUpload document
POST/api/admin/assessments/[id]/marking-schemeUpload marking scheme
POST/api/admin/assessments/[id]/rubricUpload rubric
GET/api/admin/assessments/[id]/scoresList scores
PUT/api/admin/assessments/[id]/scores/[studentId]Enter/update score
POST/api/admin/assessments/[id]/sync-scoresOffline batch sync

Reports (6 routes)

MethodPathPurpose
GET, POST/api/admin/report-groupsList / create
GET, PATCH/api/admin/report-groups/[id]Detail / update
POST/api/admin/report-groups/[id]/finalizeFinalize report group
POST/api/admin/report-groups/[id]/generateTrigger PDF generation
GET/api/admin/report-groups/[id]/preview/[studentId]Preview single report
GET, PUT/api/admin/teacher-remarksList / upsert remarks

Dashboard (6 routes)

MethodPathPurpose
GET/api/dashboard/class-performanceClass performance by subject
GET/api/dashboard/student-progressStudent score trends
GET/api/dashboard/completion-rateScore entry completion
GET/api/dashboard/grade-distributionGrade distribution
GET/api/dashboard/staff-workloadStaff workload
GET/api/admin/dashboard/grade-distributionAdmin-scoped grades