API Documentation

Base URL: /api — click any endpoint to expand and try it.

Auth: Protected endpoints need Authorization: Bearer <token>. Log in top-right and Try it will use your token automatically.
Access: visitor no login   user logged in   admin admin role
Auth
POST/api/auth/registervisitor

Register a new user account. Returns the user and a signed JWT.

Body fields
FieldType
namestringrequired
emailstringrequired
passwordstring, min 8 charsrequired
Response
201 Created
{
  "message": "User registered",
  "user": {
    "id": "664a1f...",
    "name": "Jens Debakker",
    "role": "user"
  },
  "token": "eyJhbGci..."
}
POST/api/auth/loginvisitor

Log in and receive a JWT token.

Body fields
FieldType
emailstringrequired
passwordstringrequired
Response
200 OK
{
  "message": "Logged in",
  "token": "eyJhbGci...",
  "user": { "id": "664a1f...", "name": "Jens Debakker", "role": "user" }
}
GET/api/auth/meuser

Return the profile of the currently logged-in user.

Parameters

No body or path parameters.

Response
200 OK
{
  "user": { "_id": "664a1f...", "name": "Jens Debakker", "role": "user" }
}
Schools
GET/api/schoolsvisitor

Return all schools.

Parameters

None.

Response
200 OK
{
  "data": [{ "_id": "664a1f...", "name": "VIVES Hogeschool", "city": "Bruges", "classes": [...] }]
}
GET/api/schools/:schoolIdvisitor

Return a single school by its ID.

Path parameters
ParamType
schoolIdObjectIdrequired
Response
200 OK 404
{
  "data": { "_id": "664a1f...", "name": "VIVES Hogeschool", "classes": [...] }
}
POST/api/schoolsadmin

Create a new school. Requires admin role.

Body fields
FieldType
namestringrequired
citystringoptional
descriptionstringoptional
Response
201 Created
{
  "data": { "_id": "664a1f...", "name": "VIVES Hogeschool", "city": "Bruges", "classes": [] }
}
PUT/api/schools/:schoolIdadmin

Update an existing school. Requires admin role.

Path parameters
ParamType
schoolIdObjectIdrequired
Body fields
FieldType
namestringrequired
citystringoptional
Response
200 OK 404
{
  "data": { "_id": "664a1f...", "name": "VIVES Updated", "city": "Kortrijk" }
}
DELETE/api/schools/:schoolIdadmin

Delete a school and all its embedded data.

Path parameters
ParamType
schoolIdObjectIdrequired
Response
204 No Content 404
GET/api/schools/:schoolId/classesvisitor

Return all embedded classes for a school.

Path parameters
ParamType
schoolIdObjectIdrequired
Response
200 OK
{
  "data": [{ "_id": "664b2a...", "name": "TI-B", "teacherName": "Prof. Peeters" }]
}
Classes
GET/api/classesvisitor

Return all classes across all schools.

Parameters

None.

Response
200 OK
{
  "data": [{ "_id": "664b2a...", "name": "TI-B", "schoolId": "664a1f..." }]
}
GET/api/classes/:classIdvisitor

Return a single class by its embedded ID.

Path parameters
ParamType
classIdObjectIdrequired
Response
200 OK 404
{
  "data": { "_id": "664b2a...", "name": "TI-B", "schoolId": "664a1f..." }
}
POST/api/schools/:schoolId/classesadmin

Create a class inside a school. Requires admin role.

Path parameters
ParamType
schoolIdObjectIdrequired
Body fields
FieldType
namestringrequired
teacherNamestringoptional
academicYearstringoptional
Response
201 Created
{
  "data": { "_id": "664b2a...", "name": "TI-B", "students": [], "schoolId": "664a1f..." }
}
PUT/api/classes/:classIdadmin

Update a class. Requires admin role.

Path parameters
ParamType
classIdObjectIdrequired
Body fields
FieldType
namestringrequired
teacherNamestringoptional
academicYearstringoptional
Response
200 OK 404
{
  "data": { "_id": "664b2a...", "name": "TI-B Updated", "schoolId": "664a1f..." }
}
DELETE/api/classes/:classIdadmin

Delete a class and all its embedded students.

Path parameters
ParamType
classIdObjectIdrequired
Response
204 No Content 404
GET/api/classes/:classId/studentsvisitor

Return all embedded students for a class.

Path parameters
ParamType
classIdObjectIdrequired
Response
200 OK
{
  "data": [{ "_id": "664c3b...", "firstName": "Jan", "lastName": "Janssen" }]
}
Students
GET/api/studentsvisitor

Return all students across all schools.

Parameters

None.

Response
200 OK
{
  "data": [{ "_id": "664c3b...", "firstName": "Jan", "lastName": "Janssen", "classId": "664b2a..." }]
}
GET/api/students/:studentIdvisitor

Return a single student by their embedded ID.

Path parameters
ParamType
studentIdObjectIdrequired
Response
200 OK 404
{
  "data": { "_id": "664c3b...", "firstName": "Jan", "lastName": "Janssen" }
}
POST/api/classes/:classId/studentsadmin

Create a student inside a class. Requires admin role.

Path parameters
ParamType
classIdObjectIdrequired
Body fields
FieldType
firstNamestringrequired
lastNamestringrequired
emailstringoptional
Response
201 Created
{
  "data": { "_id": "664c3b...", "firstName": "Jan", "exercises": [], "classId": "664b2a..." }
}
PUT/api/students/:studentIdadmin

Update a student. Requires admin role.

Path parameters
ParamType
studentIdObjectIdrequired
Body fields
FieldType
firstNamestringrequired
lastNamestringrequired
emailstringoptional
Response
200 OK 404
{
  "data": { "_id": "664c3b...", "firstName": "Jan", "lastName": "Janssen Updated" }
}
DELETE/api/students/:studentIdadmin

Delete a student and all their exercises.

Path parameters
ParamType
studentIdObjectIdrequired
Response
204 No Content 404
GET/api/students/:studentId/exercisesvisitor

Return all exercises for a student.

Path parameters
ParamType
studentIdObjectIdrequired
Response
200 OK
{
  "data": [{ "_id": "664d4c...", "title": "Exercise 1", "scores": [...] }]
}
Exercises
GET/api/exercisesvisitor

Return all exercises across all students.

Parameters

None.

Response
200 OK
{
  "data": [{ "_id": "664d4c...", "title": "Exercise 1", "studentId": "664c3b..." }]
}
GET/api/exercises/:exerciseIdvisitor

Return a single exercise by its embedded ID.

Path parameters
ParamType
exerciseIdObjectIdrequired
Response
200 OK 404
{
  "data": { "_id": "664d4c...", "title": "Exercise 1", "scores": [...] }
}
POST/api/students/:studentId/exercisesuser

Create an exercise for a student. Any logged-in user can do this.

Path parameters
ParamType
studentIdObjectIdrequired
Body fields
FieldType
titlestringrequired
descriptionstringoptional
dueAtISO dateoptional
Response
201 Created
{
  "data": { "_id": "664d4c...", "title": "Exercise 1", "scores": [] }
}
PUT/api/exercises/:exerciseIduser

Update an exercise.

Path parameters
ParamType
exerciseIdObjectIdrequired
Body fields
FieldType
titlestringrequired
descriptionstringoptional
dueAtISO dateoptional
Response
200 OK 404
{
  "data": { "_id": "664d4c...", "title": "Exercise 1 Updated" }
}
DELETE/api/exercises/:exerciseIduser

Delete an exercise and all its scores.

Path parameters
ParamType
exerciseIdObjectIdrequired
Response
204 No Content 404
Scores
GET/api/exercises/:exerciseId/scoresvisitor

Return all scores for an exercise.

Path parameters
ParamType
exerciseIdObjectIdrequired
Response
200 OK
{
  "data": [
    { "_id": "664e5d...", "label": "Theory",    "value": 85 },
    { "_id": "664e5e...", "label": "Practical", "value": 92 }
  ]
}
POST/api/exercises/:exerciseId/scoresuser

Add a score to an exercise. Value must be 0–100.

Path parameters
ParamType
exerciseIdObjectIdrequired
Body fields
FieldType
labelstringrequired
valuenumber 0–100required
Response
201 Created
{
  "data": {
    "_id": "664d4c...",
    "title": "Exercise 1",
    "scores": [{ "_id": "664e5d...", "label": "Theory", "value": 85 }]
  }
}
Other
GET/api/statusvisitor

Health check — returns server status and uptime in seconds.

Parameters

None.

Response
200 OK
{
  "status": "ok",
  "uptime": 3724.5
}