openapi: 3.0.3 info: version: 'latest' title: HEI Admin API description: | _Programmatically connect to a computer programming [school](https://hei.school)._ After [joining us](mailto:contact@mail.hei.school), you can get an identification token from our [dev](https://dev-hei-admin.auth.eu-west-3.amazoncognito.com/oauth2/authorize?client_id=5s8cg50doahmu855rlc8fr6qmp&response_type=token&scope=email+openid&redirect_uri=https%3A%2F%2Fapi-dev.hei.school%2Fwhoami) or [prod](https://prod-hei-admin.auth.eu-west-3.amazoncognito.com/oauth2/authorize?client_id=i8bg538jpfu6mqmqb61m26trd&response_type=token&scope=email+openid&redirect_uri=https%3A%2F%2Fapi-prod.hei.school%2Fwhoami) authentication service. Then, start playing with our system! The implementation of our API is [publicly disclosed](https://github.com/hei-school/hei-admin-api). You are welcome to try and compromise it. Happy hacking! servers: - url: 'https://api-dev.hei.school' - url: 'https://api-prod.hei.school' security: - BearerAuth: [ ] paths: '/health/db': get: tags: - Health summary: Check database health. operationId: dummyTable_should_not_be_empty responses: '200': description: Return OK if database is ready else KO content: text/plain: schema: type: string example: OK '400': $ref: '#/components/responses/400' '500': $ref: '#/components/responses/500' '/whoami': get: tags: - Security summary: Who am I? Tells you who you are. operationId: whoami responses: '200': description: Who you are content: application/json: schema: $ref: '#/components/schemas/Whoami' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/ping': get: tags: - Security summary: pong operationId: ping responses: '200': description: pong content: text/plain: schema: type: string example: pong '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/non-accessible-by-suspended': get: tags: - Security summary: Assert that the connected user is not SUSPENDED operationId: amISuspended responses: '200': description: Assertion that user(STUDENT) is not SUSPENDED content: text/plain: schema: type: string example: not suspended '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/authentication/login-url': get: tags: - Security summary: Get login page URL operationId: getLoginPageURL parameters: - name: redirect_uri required: false in: query description: "specified redirection url" schema: type: string responses: '200': description: Return login page URL content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '500': $ref: '#/components/responses/500' '/authentication/signin': post: tags: - Security summary: Get token operationId: getToken parameters: - name: code required: true in: query description: "Oauth2 authorization code" schema: type: string - name: state required: true in: query description: "Application name" schema: type: string responses: '200': description: get token content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '500': $ref: '#/components/responses/500' '/global_search/user': get: tags: - Search summary: Global search across user entities description: Retrieve users from multiple user-related entities based on a search term. parameters: - name: search in: query description: Search term used to filter users. required: false schema: type: string responses: '200': description: Search results content: application/json: schema: $ref: '#/components/schemas/SearchResultsUser' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/groups/{id}': get: tags: - Groups summary: Get group by identifier parameters: - name: id in: path required: true schema: type: string operationId: getGroupById responses: '200': description: The identified group content: application/json: schema: $ref: '#/components/schemas/Group' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /groups: get: tags: - Groups summary: Get all groups operationId: getGroups parameters: - name: ref in: query schema: type: string - name: student_ref in: query description: Filter group by student ref schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' responses: '200': description: List of groups content: application/json: schema: type: array items: $ref: '#/components/schemas/Group' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Groups summary: Create new groups or update existing groups description: Update groups when `id` are provided, create them otherwise. operationId: createOrUpdateGroups requestBody: description: Groups to update required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateGroup' responses: '200': description: The created or updated groups content: application/json: schema: type: array items: $ref: '#/components/schemas/Group' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /groups/students/stats: get: tags: - Users summary: Get some stats infos about students. operationId: getGroupStats responses: '200': description: Stats info content: application/json: schema: $ref: '#/components/schemas/GroupStatistics' /students/stats: get: tags: - Users summary: Get some stats infos about students. operationId: getStats responses: '200': description: Stats info content: application/json: schema: $ref: '#/components/schemas/Statistics' /students/{id}/work_info: get: tags: - Users summary: Get student work info. parameters: - name: id required: true in: path schema: type: string operationId: getStudentWorkInfo responses: '200': description: List of Student work info content: application/json: schema: type: array items: $ref: '#/components/schemas/WorkStudyStudent' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create or update work study info of Student. parameters: - name: id required: true schema: type: string in: path operationId: createOrUpdateStudentWorkStudyInfo requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateWorkStudyStudent' responses: '200': description: List of Student work info content: application/json: schema: type: array items: $ref: '#/components/schemas/WorkStudyStudent' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{id}: get: tags: - Users summary: Get student by identifier parameters: - name: id in: path required: true schema: type: string operationId: getStudentById responses: '200': description: The identified student content: application/json: schema: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Update student operationId: updateStudent parameters: - name: id in: path required: true schema: type: string requestBody: description: Student to update required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateStudent' responses: '200': description: student updated. content: application/json: schema: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/level: get: tags: - Users summary: Get student level operationId: getStudentLevel parameters: - name: student_id in: path required: true schema: type: string responses: '200': description: The student level content: application/json: schema: $ref: '#/components/schemas/StudentLevel' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/grades: get: tags: - Grades summary: Get student grades. operationId: getGradesByStudentId parameters: - name: student_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' responses: '200': description: List of a student's grades, showing the exam and the course of these grades. content: application/json: schema: type: array items: $ref: '#/components/schemas/Grade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/yearly_results/{student_level}: get: tags: - Grades summary: Get the yearly result of a given student for the given level. operationId: getYearlyResult parameters: - $ref: "#/components/parameters/PathStudentId" - name: student_level required: true in: path schema: $ref: "#/components/schemas/StudentLevel" responses: '200': description: Yearly result of the specified student. content: application/json: schema: $ref: "#/components/schemas/YearlyResult" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/yearly_results/{student_level}/transcript: get: tags: - Grades summary: Get the yearly result transcript of a given student for the given level. operationId: getYearlyResultTranscript parameters: - $ref: "#/components/parameters/PathStudentId" - name: student_level required: true in: path schema: $ref: "#/components/schemas/StudentLevel" responses: '200': description: Yearly result transcript for the specified student. content: application/json: schema: $ref: "#/components/schemas/YearlyResultGenerationTranscript" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/courses/{course_id}/grades: get: tags: - Grades summary: Get the Grades of a given student for a given course. operationId: getCourseGrades parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/UpdateDateSort' - $ref: "#/components/parameters/PathStudentId" - $ref: "#/components/parameters/PathCourseId" responses: '200': description: List of Grades of the specified student. content: application/json: schema: type: array items: $ref: "#/components/schemas/Grade" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/results_summary: get: tags: - Grades summary: Get the results of a given student for all levels operationId: getResultsSummary parameters: - $ref: "#/components/parameters/PathStudentId" responses: '200': description: Yearly result of the specified student. content: application/json: schema: $ref: "#/components/schemas/ResultSummary" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/results_summary_transcript: get: tags: - Grades summary: Get over all the results summary transcript of a given student operationId: getResultsSummaryTranscript parameters: - $ref: "#/components/parameters/PathStudentId" responses: '200': description: Pdf file of all results summary transcript of the specified student. content: application/pdf: schema: type: string format: binary '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students: get: tags: - Users summary: Get all students operationId: getStudents parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: ref in: query description: "Filter students by ref, case is ignored" schema: type: string - name: first_name in: query description: "Filter students by first name, case is ignored" schema: type: string - name: last_name in: query description: "Filter students by last name, case is ignored" schema: type: string - name: course_id in: query description: "Filter students by course they are linked to" schema: type: string - name: status required: false in: query description: Filter students by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter students by sex value return all by default schema: $ref: '#/components/schemas/Sex' - name: work_study_status required: false in: query description: Filter students by work study status schema: $ref: '#/components/schemas/WorkStudyStatus' - name: commitment_begin_date required: false in: query description: Filter students by commitment begin date schema: type: string format: date-time - name: exclude_groups required: false in: query description: List of group ids to exclude students from schema: type: array items: type: string responses: '200': description: List of students, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create new students or update existing students description: Update students when `id` are provided, create them otherwise. operationId: createOrUpdateStudents parameters: - name: due_datetime required: false in: query schema: type: string format: date-time requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateStudent' responses: '200': description: The created or updated students content: application/json: schema: type: array items: allOf: - $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/import/template: get: tags: - Users summary: Get a presigned url to get the template for student import operationId: getStudentImportTemplateURL responses: '200': description: The presigned URL for getting the student import template content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/import: post: tags: - Users summary: Import students from an excel file operationId: importStudents parameters: - in: query name: due_datetime required: false schema: type: string format: date-time requestBody: description: Form containing the xlsx file for students to import required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadFile' responses: '200': description: Status of the validation of imported students content: application/json: schema: $ref: '#/components/schemas/StudentImportValidationResult' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /monitors/link: post: tags: - Monitoring summary: Approve or deny a list of monitor student link requests operationId: updateMonitorStudentLinkStatus requestBody: required: true description: List of monitor student link ids and status to set content: application/json: schema: type: object properties: monitor_student_link: type: array items: $ref: '#/components/schemas/UpdateMonitorStudentLink' responses: '200': description: List of student linked to a monitor content: application/json: schema: type: array items: $ref: '#/components/schemas/MonitorStudentLink' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' get: tags: - Monitoring parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' summary: Get all link request to a monitor that is pending operationId: getLinkStudentRequests responses: '200': description: List of monitor student linked content: application/json: schema: type: array items: $ref: '#/components/schemas/MonitorStudentLink' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /monitors/{id}: put: tags: - Users summary: Update monitor by identifier operationId: updateMonitorById parameters: - name: id in: path required: true schema: type: string requestBody: description: Monitor to update required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateMonitor' responses: '200': description: monitor updated. content: application/json: schema: $ref: '#/components/schemas/Monitor' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' get: tags: - Users summary: Get monitor by identifier operationId: getMonitorById parameters: - name: id in: path required: true schema: type: string responses: '200': description: monitor by identifier. content: application/json: schema: $ref: '#/components/schemas/Monitor' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /monitors: get: tags: - Users summary: Get All monitors operationId: getMonitors parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: ref in: query description: "Filter students by ref, case is ignored" schema: type: string - name: first_name in: query description: "Filter students by first name, case is ignored" schema: type: string - name: last_name in: query description: "Filter students by last name, case is ignored" schema: type: string responses: '200': description: List of monitors, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Monitor' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create new monitors or update existing monitors description: Update monitors when `id` are provided, create them otherwise. operationId: createOrUpdateMonitors requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateMonitor' responses: '200': description: The created or updated monitors content: application/json: schema: type: array items: $ref: '#/components/schemas/Monitor' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /monitors/{monitor_id}/students/{student_id}: get: tags: - Monitoring summary: Get a student using its monitor id. parameters: - name: monitor_id in: path required: true schema: type: string - name: student_id in: path required: true schema: type: string operationId: getLinkedStudentByIdAndMonitorId responses: '200': description: A student monitored by the monitor_id with the given student_id content: application/json: schema: $ref: "#/components/schemas/Student" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/courses/{course_id}': get: tags: - Courses summary: Get course by identifier parameters: - $ref: '#/components/parameters/PathCourseId' operationId: getCourseById responses: '200': description: The identified course content: application/json: schema: $ref: '#/components/schemas/Course' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /courses/{course_id}/course_assignments: put: tags: - Courses summary: Add or update course_assignments for a given course id. parameters: - name: course_id in: path required: true schema: type: string operationId: createOrUpdateCourseAssignmentsByCourseId requestBody: required: true description: course_assignment to create / update content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateCourseAssignment' responses: '200': description: All course_assignments that have been created / updated content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' get: tags: - Courses summary: Get all course_assignments for a given course parameters: - name: course_id in: path required: true schema: type: string - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' operationId: getCourseAssignmentsByCourseId responses: '200': description: List of all course_assignments for a course content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/courses/{course_id}/students/grades': get: tags: - Grades summary: Get students grade for exams in a specific course parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/UpdateDateSort' - $ref: '#/components/parameters/PathCourseId' - $ref: '#/components/parameters/GroupRef' operationId: getCourseStudentsGrade responses: '200': description: Student list with grade for this course content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentIdentifierGrade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/courses/{course_id}/student/{student_id}/grade/stats': get: tags: - Grades summary: Get student grade statistics for exams in a specific course parameters: - $ref: '#/components/parameters/PathCourseId' - $ref: '#/components/parameters/PathStudentId' operationId: getStudentCourseGradeStats responses: '200': description: The student grade statistics for this course content: application/json: schema: $ref: '#/components/schemas/StudentCourseGradeStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/courses/{course_id}/student/{student_id}/exams/grades': get: tags: - Grades summary: Get student exams grade in a specific course parameters: - $ref: '#/components/parameters/PathCourseId' - $ref: '#/components/parameters/PathStudentId' operationId: getStudentExamsGrade responses: '200': description: The student exams grade for this course content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentExamGrade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /courses: get: tags: - Courses summary: Get all courses operationId: getCourses parameters: - name: code in: query description: "Filter courses by code, case is ignored" schema: type: string - name: name in: query description: "Filter courses by name, case is ignored" schema: type: string - name: credits in: query description: "Filter courses by credits" schema: type: integer - name: teacher_first_name in: query description: "Filter courses by teacher firstname, case is ignored" schema: type: string - name: teacher_last_name in: query description: "Filter courses by teacher lastname, case is ignored" schema: type: string - name: credits_order in: query schema: $ref: '#/components/schemas/CourseDirection' - name: code_order in: query schema: $ref: '#/components/schemas/CourseDirection' - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - name: level in: query description: Filter by student academic level schema: $ref: '#/components/schemas/StudentLevel' responses: '200': description: List of all courses content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Courses summary: Create new courses or update existing courses description: Update courses when `id` are provided, create them otherwise. operationId: CreateOrUpdateCourses requestBody: description: Courses to update required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' responses: '200': description: Course created or modified content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /course_assignments/{course_assignment_id}/exams: get: tags: - Exams summary: Get all exam infos of a specified course_assignment. parameters: - name: course_assignment_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' operationId: getExamsByCourseAssignment responses: '200': description: List of exam infos without the participants of the specified course content: application/json: schema: type: array items: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Exams summary: Create new exams or update existing exams description: Update exams when `id` are provided, create them otherwise. parameters: - name: course_assignment_id in: path required: true schema: type: string operationId: createOrUpdateExams requestBody: required: true description: Exams to update content: application/json: schema: type: array items: $ref: '#/components/schemas/Exam' responses: '200': description: Exams infos without the students participated content: application/json: schema: type: array items: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams: get: tags: - Exams summary: Get all exam infos. parameters: - $ref: '#/components/parameters/TeacherId' - name: title in: query required: false schema: type: string - name: course_code in: query required: false example: PROG1 schema: type: string - $ref: "#/components/parameters/GroupRef" - name: examination_date_from in: query required: false schema: type: string format: date-time - name: examination_date_to in: query required: false schema: type: string format: date-time - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' operationId: getAllExams responses: '200': description: List of exam infos without the participants content: application/json: schema: type: array items: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Exams summary: Create new exams or update existing exams operationId: CreateOrUpdateExamsInfos requestBody: required: true description: Exams to update content: application/json: schema: $ref: '#/components/schemas/CrupdateExam' responses: '200': description: Exams infos without the students participated content: application/json: schema: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{id}: get: tags: - Exams summary: Get exam by id operationId: getExamOneExamById parameters: - name: id in: path required: true schema: type: string responses: '200': description: A specific exam content: application/json: schema: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /course_assignments/{course_assignment_id}/exams/{exam_id}: get: tags: - Exams summary: Get a course_assignment exam. operationId: getExamById parameters: - name: course_assignment_id in: path required: true schema: type: string - name: exam_id in: path required: true schema: type: string responses: '200': description: A specific exam content: application/json: schema: $ref: '#/components/schemas/Exam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exam_sessions: get: tags: - RetakeExam summary: Get list of retake exams sessions infos filtered by criteria. parameters: - name: title in: query required: false schema: type: string - name: student_level in: query required: false schema: type: array items: $ref: '#/components/schemas/StudentLevel' - $ref: '#/components/parameters/DatetimeFromFilter' - $ref: '#/components/parameters/DatetimeToFilter' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' operationId: getRetakeExamSessions responses: '200': description: List of retake exam sessions info content: application/json: schema: type: array items: $ref: '#/components/schemas/RetakeExamSession' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - RetakeExam summary: Create or update list of retake exam sessions operationId: createOrUpdateRetakeExamSessions requestBody: required: true description: List of retake exam sessions to save content: application/json: schema: $ref: '#/components/schemas/RetakeExamSession' responses: '200': description: List of retake exam sessions saved content: application/json: schema: $ref: '#/components/schemas/RetakeExamSession' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exam_sessions/{session_id}: get: tags: - RetakeExam summary: Get retake exam session by identifier parameters: - name: session_id in: path required: true schema: type: string operationId: getRetakeExamSessionById responses: '200': description: Retake exam session by identifier content: application/json: schema: $ref: '#/components/schemas/RetakeExamSession' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exams: get: tags: - RetakeExam summary: Get all retake exams infos parameters: - $ref: '#/components/parameters/RetakeExamStatuses' - $ref: '#/components/parameters/StudentRef' - $ref: '#/components/parameters/DatetimeFromFilter' - $ref: '#/components/parameters/DatetimeToFilter' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' operationId: getAllRetakeExams responses: '200': description: List of retake exams for a specific session content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentRetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exams/to_cancel: patch: tags: - RetakeExam summary: Request to cancel multiple retake exams operationId: requestToCancelRetakeExams requestBody: required: true content: application/json: schema: type: array items: $ref: "#/components/schemas/CancelRetakeExamRequest" responses: '200': description: Request to cancel retake exams content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentRetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exams/cancel: patch: tags: - RetakeExam summary: Cancel multiple retake exams operationId: cancelRetakeExams requestBody: required: true content: application/json: schema: type: array items: $ref: "#/components/schemas/RetakeExamToCancel" responses: '200': description: Retake exams successfully canceled content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentRetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exams/reject: patch: tags: - RetakeExam summary: Reject multiple retake exam cancellation requests operationId: rejectToCancelRetakeExamRequests requestBody: required: true content: application/json: schema: type: array items: $ref: "#/components/schemas/CancelRetakeExamRequest" responses: '200': description: Retake exam successfully rejected content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentRetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exam_sessions/{session_id}/retake_exams: put: tags: - RetakeExam summary: Create or update existing list of retake exam parameters: - name: session_id in: path required: true schema: type: string operationId: createOrUpdateRetakeExam requestBody: required: true description: List of retake exams to save content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateRetakeExam' responses: '200': description: List of retake exams created or updated content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentRetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exam_sessions/{session_id}/retake_exam_courses: get: tags: - RetakeExam summary: Get all retake exam courses for a specific session parameters: - name: session_id in: path required: true schema: type: string - name: course_code in: query required: false schema: type: string - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' operationId: getRetakeExamCoursesBySessionId responses: '200': description: List of retake exams courses for a specific session content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /retake_exam_sessions/{session_id}/retake_exam_courses/{course_id}/participants: get: tags: - RetakeExam summary: Get all participant for a specific retake exam course inside a session parameters: - name: session_id in: path required: true schema: type: string - name: course_id in: path required: true schema: type: string - $ref: '#/components/parameters/StudentRef' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' operationId: getRetakeExamParticipantByCourseIdAndSessionId responses: '200': description: List of retake exam participant for a specific course in session content: application/json: schema: type: array items: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/sessions/{session_id}/retake_exams: get: tags: - RetakeExam summary: Get a student retake exams for a session operationId: getStudentRetakeExamBySession parameters: - name: student_id in: path required: true schema: type: string - name: session_id in: path required: true schema: type: string - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' responses: '200': description: List of retake exams for a specific student content: application/json: schema: type: array items: $ref: '#/components/schemas/RetakeExam' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /groups/{group_id}/course_assignments: get: tags: - Courses summary: Get all group course_assignments parameters: - name: group_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' operationId: getCourseAssignmentsByGroupId responses: '200': description: List of all course_assignments in specific group content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /teachers/{teacher_id}/course_assignments: get: tags: - Courses summary: Get all course_assignments to a teacher parameters: - name: teacher_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' operationId: getCourseAssignmentByTeacherId responses: '200': description: List of all course_assignments for a teacher content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /groups/{id}/students/raw: get: tags: - Groups summary: Get all students as xlsx file of a group operationId: generateStudentsGroupInXlsx parameters: - name: id in: path required: true schema: type: string responses: '200': description: List of students group in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /teachers/raw: get: tags: - Users summary: Get all teachers as xlsx file operationId: generateTeachersInXlsx responses: '200': description: List of teacher in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /event/{event_id}/students/raw/xlsx: get: tags: - Events summary: Get all students in event as xlsx file operationId: generateEventStudentsParticipantInXlsx parameters: - name: event_id in: path required: true schema: type: string responses: '200': description: List of students in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /promotion/{promotion_id}/students/raw/xlsx: get: tags: - Promotions summary: Get all students in promotion as xlsx file operationId: generateStudentsPromotionInXlsx parameters: - name: promotion_id in: path required: true schema: type: string responses: '200': description: List of students in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/raw/xlsx: get: tags: - Users summary: Get all students with filter as xlsx file operationId: generateStudentsInXlsx parameters: - name: course_id in: query description: "Filter students by course they are linked to" schema: type: string - name: status required: false in: query description: Filter students by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter students by sex value return all by default schema: $ref: '#/components/schemas/Sex' - name: work_study_status required: false in: query description: Filter students by work study status schema: $ref: '#/components/schemas/WorkStudyStatus' - name: exclude_groups required: false in: query description: List of group ids to exclude students from schema: type: array items: type: string responses: '200': description: List of students in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /groups/{id}/students: get: tags: - Groups summary: Get all students who follow a group parameters: - name: id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - name: first_name in: query required: false description: Filter group students by first name schema: type: string operationId: getStudentsByGroupId responses: '200': description: List of all student in specific course_assignments and group content: application/json: schema: type: array items: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{id}/group_flows: post: tags: - Groups summary: Moving or removing a student from a group. parameters: - name: id in: path required: true schema: type: string operationId: moveOrDeleteStudentInGroup requestBody: description: Movement of a student towards a group to create. required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateGroupFlow' responses: '200': description: Detail of student flow in a group content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupFlow' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /course_assignments: get: tags: - Courses summary: Get all course_assignments parameters: - name: teacher_id in: query schema: type: string required: false - name: group_id required: false in: query schema: type: string - name: course_id in: query schema: type: string required: false - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false operationId: getCourseAssignmentsByCriteria responses: '200': description: List of all course_assignments content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Courses summary: Add or update course_assignments for a given course id. operationId: createOrUpdateCourseAssignments requestBody: required: true description: course_assignment to create / update content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateCourseAssignment' responses: '200': description: All course_assignments that have been created / updated content: application/json: schema: type: array items: $ref: '#/components/schemas/CourseAssignment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exams_id}/grade/stats: get: tags: - Grades summary: Get the exam grade stats operationId: getExamGradeStats parameters: - $ref: '#/components/parameters/PathExamId' responses: '200': description: The exam grade stats content: application/json: schema: $ref: '#/components/schemas/ExamGradeStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/students/{student_id}/grade: get: tags: - Grades summary: Return a participant with his exam grade operationId: getParticipantGrade parameters: - name: exam_id in: path required: true schema: type: string - name: student_id in: path required: true schema: type: string responses: '200': description: The specified participant with his grade content: application/json: schema: $ref: '#/components/schemas/Grade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Grades summary: Create a participant exam grade operationId: createParticipantGrade parameters: - name: exam_id in: path required: true schema: type: string - name: student_id in: path required: true schema: type: string requestBody: description: Specific student's grade which should be creates required: true content: application/json: schema: $ref: '#/components/schemas/CreateGrade' responses: '200': description: The created grade for the specified student content: application/json: schema: $ref: '#/components/schemas/Grade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/students/{student_id}/grade/update: post: tags: - Grades summary: Correct a participant exam grade operationId: correctParticipantGrade parameters: - name: exam_id in: path required: true schema: type: string - name: student_id in: path required: true schema: type: string requestBody: description: Updated grade for a specific student required: true content: application/json: schema: $ref: '#/components/schemas/UpdateGrade' responses: '200': description: The specified participant with his grade content: application/json: schema: $ref: '#/components/schemas/Grade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/grades: get: tags: - Grades summary: Return all students with their grade operationId: getStudentGradesForExam parameters: - name: exam_id in: path required: true schema: type: string - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/StudentRef' responses: '200': description: All students grades from an exam specific content: application/json: schema: items: $ref: '#/components/schemas/StudentGrade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Grades summary: Create student grades in exam operationId: createParticipantsGradeForExam parameters: - name: exam_id in: path required: true schema: type: string requestBody: description: Created grades for a specific students in exam required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateGrade' responses: '200': description: All students grades from an exam specific content: application/json: schema: items: $ref: '#/components/schemas/StudentGrade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/grades/import: post: tags: - Grades summary: Import students exam grade from an excel file operationId: importStudentsExamGrade parameters: - name: exam_id in: path required: true schema: type: string requestBody: description: Form containing the xlsx file for students exam grade to import required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Status of the validation of imported students exam grade content: application/json: schema: $ref: '#/components/schemas/ImportGradeResult' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/grades/import/update: post: tags: - Grades summary: Import students exam grade updated from an excel file operationId: importStudentsExamGradeUpdated parameters: - name: exam_id in: path required: true schema: type: string - name: comment in: query required: true schema: type: string requestBody: description: Form containing the xlsx file for students exam grade to update required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadFile' responses: '200': description: Status of the validation of imported students exam grade updated content: application/json: schema: $ref: '#/components/schemas/ImportGradeResult' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/grades/import/template: get: tags: - Grades summary: Return grade template operationId: getStudentsGradesTemplateForExam parameters: - name: exam_id in: path required: true schema: type: string responses: '200': description: Grades template for a specific exam content: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: type: string format: binary '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /exams/{exam_id}/grades/update: post: tags: - Grades summary: Correct student grades in exam operationId: correctParticipantsGradeForExam parameters: - name: exam_id in: path required: true schema: type: string requestBody: description: Corrected grades for a specific students in exam required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/UpdateGrade' responses: '200': description: All students grades from an exam specific content: application/json: schema: items: $ref: '#/components/schemas/StudentGrade' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/teachers/{id}': get: tags: - Users summary: Get teacher by identifier parameters: - name: id in: path required: true schema: type: string operationId: getTeacherById responses: '200': description: The identified teacher content: application/json: schema: $ref: '#/components/schemas/Teacher' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Update teacher operationId: updateTeacher parameters: - name: id in: path required: true schema: type: string requestBody: description: Teacher to update required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateTeacher' responses: '200': description: updated teacher. content: application/json: schema: $ref: '#/components/schemas/Teacher' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /teachers: get: tags: - Users summary: Get all teachers operationId: getTeachers parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: ref in: query description: "Filter teachers by ref, case is ignored" schema: type: string - name: first_name in: query description: "Filter teachers by first name, case is ignored" schema: type: string - name: last_name in: query description: "Filter teachers by last name, case is ignored" schema: type: string - name: status required: false in: query description: Filter teachers by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter teachers by sex value return all by default schema: $ref: '#/components/schemas/Sex' responses: '200': description: List of teachers, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Teacher' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create new teachers or update existing teachers description: Update teachers when `id` are provided, create them otherwise. operationId: createOrUpdateTeachers requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateTeacher' responses: '200': description: The created or updated teachers content: application/json: schema: type: array items: $ref: '#/components/schemas/Teacher' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/managers/{id}': get: tags: - Users summary: Get manager by identifier parameters: - name: id in: path required: true schema: type: string operationId: getManagerById responses: '200': description: The identified manager content: application/json: schema: $ref: '#/components/schemas/Manager' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Update manager operationId: updateManager parameters: - name: id in: path required: true schema: type: string requestBody: description: manager to update required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateManager' responses: '200': description: updated manager. content: application/json: schema: $ref: '#/components/schemas/Manager' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/admins/{id}': get: tags: - Users summary: Get admin by identifier parameters: - name: id in: path required: true schema: type: string operationId: getAdminById responses: '200': description: The identified admin content: application/json: schema: $ref: '#/components/schemas/Admin' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Update admin operationId: updateAdmin parameters: - name: id in: path required: true schema: type: string requestBody: description: admin to update required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateManager' responses: '200': description: updated manager. content: application/json: schema: $ref: '#/components/schemas/Manager' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /managers: get: tags: - Users summary: Get all managers operationId: getManagers parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: status required: false in: query description: Filter managers by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter managers by sex value return all by default schema: $ref: '#/components/schemas/Sex' responses: '200': description: List of managers, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Manager' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /delay_penalty_change: post: tags: - Paying summary: Change current delay penalty configuration operationId: createDelayPenaltyChange requestBody: description: Delay penalties to create required: true content: application/json: schema: $ref: '#/components/schemas/CreateDelayPenaltyChange' responses: '200': description: List of created delay penalties content: application/json: schema: $ref: '#/components/schemas/DelayPenalty' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /staff_members: get: tags: - Users summary: Get all staff members operationId: getStaffMembers parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: status required: false in: query description: Filter staff members by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter staff members by sex value return all by default schema: $ref: '#/components/schemas/Sex' - name: first_name in: query description: Filter staff members by first name, case is ignored schema: type: string - name: last_name in: query description: Filter staff members by last name, case is ignored schema: type: string responses: '200': description: List of staff members, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/StaffMember' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create or update staff members operationId: crupdateStaffMembers requestBody: description: staff members required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/StaffMember' responses: '200': description: List of staff members, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/StaffMember' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /organizers: get: tags: - Users summary: Get all organizers operationId: getOrganizers parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: status required: false in: query description: Filter organizers by status value return all by default schema: $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query description: Filter organizers by sex value return all by default schema: $ref: '#/components/schemas/Sex' - name: first_name required: false in: query description: Filter organizers by first name, case is ignored schema: type: string - name: last_name required: false in: query description: Filter organizers by last name, case is ignored schema: type: string - name: ref required: false in: query description: Filter organizers by ref schema: type: string responses: '200': description: List of organizers, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Organizer' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Create or update organizers operationId: crupdateOrganizers requestBody: description: organizers required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/Organizer' responses: '200': description: List of organizer, ordered by ref. content: application/json: schema: type: array items: $ref: '#/components/schemas/Organizer' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /organizers/{id}: get: tags: - Users summary: Get organizer by id operationId: getOrganizerById parameters: - name: id in: path required: true schema: type: string responses: '200': description: The organizer. content: application/json: schema: $ref: '#/components/schemas/Organizer' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /staff_members/raw/xlsx: get: tags: - Users summary: Get all staff members as xlsx file operationId: getStaffMembersIntoXlsx responses: '200': description: An excel file containing a list of all staff members. content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /staff_members/{id}: get: tags: - Users summary: Get staff member by the given id operationId: getStaffMemberById parameters: - in: path name: id required: true schema: type: string responses: '200': description: The staff member content: application/json: schema: $ref: '#/components/schemas/StaffMember' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Users summary: Update staff member info operationId: updateStaffMember parameters: - in: path name: id required: true schema: type: string requestBody: description: staff member required: true content: application/json: schema: $ref: '#/components/schemas/StaffMember' responses: '200': description: List of staff members, ordered by ref. content: application/json: schema: $ref: '#/components/schemas/StaffMember' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /delay_penalty: get: tags: - Paying summary: Get current delay penalty operationId: getDelayPenalty responses: '200': description: Active delay penalty content: application/json: schema: $ref: '#/components/schemas/DelayPenalty' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}/payments/{payment_id}/receipt/raw: get: tags: - Paying summary: Get receipt of paid fee parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string - name: payment_id in: path required: true schema: type: string operationId: getPaidFeeReceipt responses: '200': description: Paid fee receipt content: application/pdf: schema: type: string format: byte example: PDF VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/payments/receipts/raw: put: tags: - Paying summary: Send email with a S3 pre-sign link of fee receipts in a mandatory date range requestBody: description: fee receipts info to send required: true content: application/json: schema: $ref: '#/components/schemas/GenerationReceiptsRequest' operationId: generateFeeReceipts responses: '200': description: statistic about fee receipts to process content: application/json: schema: $ref: '#/components/schemas/GeneratedReceiptsStatistic' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}: get: tags: - Paying summary: Get student fee by identifier parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string operationId: getStudentFeeById responses: '200': description: Identified student fee content: application/json: schema: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' delete: tags: - Paying summary: Delete student fee by identifier. description: Soft delete operationId: deleteStudentFeeById parameters: - name: fee_id in: path required: true schema: type: string - name: student_id in: path required: true schema: type: string responses: '200': description: student fee deleted by identifier. content: application/json: schema: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees: get: tags: - Paying summary: Get all student fees ordered by due datetime desc description: Fees can be filtered with an optional payment status parameter. parameters: - name: student_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: status in: query schema: $ref: '#/components/schemas/FeeStatusEnum' operationId: getStudentFees responses: '200': description: List of all student fees content: application/json: schema: type: array items: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Paying summary: Create student fees parameters: - name: student_id in: path required: true schema: type: string operationId: createStudentFees requestBody: description: Student fees to create required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateFee' responses: '200': description: Created student fees content: application/json: schema: type: array items: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Paying summary: Update student fees, can only modify due_datetime and comment, must contain an ID parameters: - name: student_id in: path required: true schema: type: string operationId: updateStudentFees requestBody: description: Student fees to update required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/Fee' responses: '200': description: Update student fees content: application/json: schema: type: array items: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/raw: get: tags: - Paying summary: Generate fees list as xlsx operationId: generateFeesListAsXlsx parameters: - name: status in: query required: false schema: $ref: '#/components/schemas/FeeStatusEnum' - name: from_due_datetime in: query required: false schema: type: string format: date-time - name: to_due_datetime in: query required: false schema: type: string format: date-time responses: '200': description: List of fees in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees: put: tags: - Paying summary: Crupdate student fees operationId: crupdateStudentFees requestBody: description: Student fees to update if id is provided, create otherwise. required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CrupdateStudentFee' responses: '200': description: Created or updated student fees content: application/json: schema: type: array items: $ref: '#/components/schemas/Fee' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' get: tags: - Paying summary: Get all student fees filtered by status and month parameters: - name: transaction_status required: false in: query schema: $ref: '#/components/schemas/MpbsStatus' - name: type required: false in: query schema: $ref: '#/components/schemas/FeeTypeEnum' - name: status in: query description: "See the PaymentStatus object for its value." schema: type: string default: LATE allOf: - $ref: '#/components/schemas/FeeStatusEnum' - name: category in: query schema: type: string allOf: - $ref: '#/components/schemas/FeeCategory' - name: month_from in: query schema: type: string format: date-time required: false - name: month_to in: query schema: type: string format: date-time required: false - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: isMpbs in: query schema: type: boolean - name: student_ref in: query required: false schema: type: string operationId: getFees responses: '200': description: List of filtered student fees content: application/json: schema: $ref: '#/components/schemas/FeesWithStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/stats: get: tags: - Paying summary: Get monthly statistics on Fees, the actual month by default parameters: - name: month_from in: query schema: type: string format: date-time required: false - name: month_to in: query schema: type: string format: date-time required: false operationId: getFeesStats responses: '200': description: Fees stats info content: application/json: schema: $ref: '#/components/schemas/FeesStatistics' /fees/advanced-stats-generate: post: tags: - Paying summary: Triggers a generation of the statistics of all the fees in the given date range to cache them parameters: - name: date_from in: query schema: type: string format: date-time required: true - name: date_to in: query schema: type: string format: date-time required: true operationId: generateAdvancedStats responses: '200': description: Advanced Fees stats info content: application/json: schema: $ref: '#/components/schemas/AdvancedFeeStatisticsGeneration' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/advanced-stats: get: tags: - Paying summary: Get advanced monthly statistics on Fees, the actual month by default parameters: - name: month_from in: query schema: type: string format: date required: false - name: month_to in: query schema: type: string format: date required: false - name: type in: query schema: $ref: "#/components/schemas/AdvancedFeeStatisticsType" operationId: getAdvancedFeesStats responses: '200': description: Advanced Fees stats info content: application/json: schema: $ref: '#/components/schemas/AdvancedFeesStatistics' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/export: get: tags: - Paying summary: Generate fees xlxs file with an optional month range. description: Generate an fees excel file, stores it in (S3 compatible storage), and returns a presigned URL that can later be user to view the file. operationId: exportAllFees parameters: - name: month_from in: query schema: type: string format: date-time required: false - name: month_to in: query schema: type: string format: date-time required: false - name: type in: query required: true schema: $ref: "#/components/schemas/AdvancedFeeStatisticsType" responses: '200': description: File successfully generated and stored content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/advanced-stats/export: get: tags: - Paying summary: Generate advanced fees statistics file with an optional month range. description: Generates an advanced fees statistics excel file, stores it in (S3 compatible storage), and returns a presigned URL that can later be used to view the file. operationId: exportAdvancedFeesStats parameters: - name: month_from in: query schema: type: string format: date required: false - name: month_to in: query schema: type: string format: date required: false - name: type in: query required: true schema: $ref: "#/components/schemas/AdvancedFeeStatisticsType" - name: status in: query description: "See the PaymentStatus object for its value." required: false schema: type: string allOf: - $ref: '#/components/schemas/FeeStatusEnum' responses: '200': description: File successfully generated and stored content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/templates: get: tags: - Paying summary: Get all fee templates parameters: - name: name in: query schema: type: string - name: amount in: query schema: type: integer - name: number_of_payments in: query schema: type: integer - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' operationId: getFeeTemplates responses: '200': description: List of templates of fee content: application/json: schema: type: array items: $ref: '#/components/schemas/FeeTemplate' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /fees/templates/{id}: get: tags: - Paying summary: Get fee template by id parameters: - name: id in: path required: true schema: type: string description: Get fee template by `id` if `id` exists operationId: getFeeTemplateById responses: '200': description: The fee template requested content: application/json: schema: $ref: '#/components/schemas/FeeTemplate' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Paying summary: Create a new fee type or update existing fee type parameters: - name: id in: path required: true schema: type: string description: Update fee type if `id` exist, create it otherwise. operationId: crupdateFeeTemplate requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateFeeTemplate' responses: '200': description: The created or updated fee type content: application/json: schema: $ref: '#/components/schemas/FeeTemplate' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /mpbs: get: tags: - Paying summary: Get all mobile payment by student. description: Fetched mobile payment by student. parameters: - name: student_ref in: query required: false schema: type: string - name: transaction_ref in: query required: false schema: type: string - name: from in: query required: false schema: type: string format: date-time - name: to in: query required: false schema: type: string format: date-time operationId: getFetchedMobileTransactions responses: '200': description: List of all fetched mobile transactions content: application/json: schema: type: array items: $ref: '#/components/schemas/Mpbs' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /mpbs/{mpbs_id}/pend: post: tags: - Paying summary: Pend failed mobile payment description: Convert failed mobile payment to pending parameters: - $ref: '#/components/parameters/PathMpbsId' operationId: pendFailedMpbs responses: '200': description: The pended mobile payment content: application/json: schema: $ref: '#/components/schemas/Mpbs' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}/mpbs: get: tags: - Paying summary: Get, if exists, all Mobile Payment By Student - All (MPBS) associated to the fee. operationId: getMpbs parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string responses: '200': description: List of all MPBS content: application/json: schema: type: array items: $ref: '#/components/schemas/Mpbs' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Paying summary: | Create a MPBS. Only the student that owns the fee can do it. No manager nor teacher can. description: | The payload has no `amount` field since a MPBS implicitly pays the remaining unpaid amount of the fee. In case the amount paid by the student differs, then the (scheduled) verifications will fail and manual fix from a manager is required. When the verification succeeds, and only then, a `Fee.Payment` object is automatically created to reflect the `Fee.Mbps`. operationId: crupdateMpbs parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string requestBody: description: The MPBS to create required: true content: application/json: schema: $ref: '#/components/schemas/CrupdateMpbs' responses: '200': description: The created MPBS content: application/json: schema: $ref: '#/components/schemas/Mpbs' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/mpbs/verify': post: tags: - Paying summary: Verify mpbs from xls provided by Orange operationId: verifyMpbs requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: The mpbs updated content: application/json: schema: items: $ref: '#/components/schemas/Mpbs' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}/mpbs/verifications: get: tags: - Paying summary: | Get list of MpbsVerification associated to the Mpbs. Verifications are scheduled 4 times a day. operationId: getMpbsVerifications parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string responses: '200': description: The list of MbpsVerification content: application/json: schema: type: array items: $ref: '#/components/schemas/MpbsVerification' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}/payments: get: tags: - Paying summary: Get all student payments of a specific fee. Resulting list is ordered by creation datetime desc. parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' operationId: getStudentPayments responses: '200': description: List of all student payments content: application/json: schema: type: array items: $ref: '#/components/schemas/Payment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Paying summary: Create student payments parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string operationId: createStudentPayments requestBody: description: Student payments to create required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreatePayment' responses: '200': description: Created student payments content: application/json: schema: type: array items: $ref: '#/components/schemas/Payment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{student_id}/fees/{fee_id}/payments/{payment_id}: delete: tags: - Paying summary: Delete student payment on a fee. description: Soft delete operationId: deleteStudentFeePaymentById parameters: - name: student_id in: path required: true schema: type: string - name: fee_id in: path required: true schema: type: string - name: payment_id in: path required: true schema: type: string responses: '200': description: deleted payment content: application/json: schema: $ref: '#/components/schemas/Payment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/attendance/movement': post: tags: - Attendance summary: Create attendance movement of one student operationId: createAttendanceMovement deprecated: true requestBody: description: Attendance movement to create required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateAttendanceMovement' responses: '200': description: Created student attendance movement content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentAttendanceMovement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/teachers/{teacher_id}/picture/raw': post: tags: - Users summary: Upload teacher profile picture operationId: uploadTeacherProfilePicture parameters: - name: teacher_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Teacher updated content: application/json: schema: $ref: '#/components/schemas/Teacher' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/organizers/{organizer_id}/picture/raw': post: tags: - Users summary: Upload organizer profile picture operationId: uploadOrganizerProfilePicture parameters: - name: organizer_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Organizer updated content: application/json: schema: $ref: '#/components/schemas/Organizer' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/managers/{manager_id}/picture/raw': post: tags: - Users summary: Upload manager profile picture operationId: uploadManagerProfilePicture parameters: - name: manager_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Manager updated content: application/json: schema: $ref: '#/components/schemas/Manager' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/picture/raw': post: tags: - Users summary: Upload student profile picture operationId: uploadStudentProfilePicture parameters: - name: student_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Student updated content: application/json: schema: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/admins/{admin_id}/picture/raw': post: tags: - Users summary: Upload admin profile picture operationId: uploadAdminProfilePicture parameters: - name: admin_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Admin updated content: application/json: schema: $ref: '#/components/schemas/Admin' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/staff_members/{staff_id}/picture/raw': post: tags: - Users summary: Upload staff member profile picture operationId: uploadStaffMemberProfilePicture parameters: - name: staff_id in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: Staff updated content: application/json: schema: $ref: '#/components/schemas/StaffMember' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/attendance': get: tags: - Attendance summary: Get all attendances by courses ids or student key word operationId: getStudentsAttendance deprecated: true parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' - name: page_size in: query schema: $ref: '#/components/schemas/PageSize' - name: courses_ids required: false in: query description: Filter attendance by courses ids schema: type: array items: example: 'course1_id' - name: teachers_ids required: false in: query description: Filter attendance by teachers ids schema: type: array items: example: 'teacher1_id' - name: student_key_word in: query required: false description: Filter attendance by student `ref, lastname, firstname` schema: type: string - name: from in: query required: false description: Filter attendance from a date, return attendances of the current week by default schema: type: string format: date-time - name: to required: false in: query description: Filter attendance before a date, return attendances of the current week by default schema: type: string format: date-time - name: attendance_statuses required: false in: query description: Filter attendance by attendance status value schema: type: array items: $ref: '#/components/schemas/AttendanceStatus' responses: '200': description: List of attendance by courses ids or student key word content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentAttendance' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/school/files': get: tags: - Files summary: Get school documents operationId: getSchoolRegulations parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: true - name: page_size in: query description: Set value to 15 by default if null is provided required: true schema: $ref: '#/components/schemas/PageSize' responses: '200': description: List of school documents content: application/json: schema: type: array items: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/school/files/{id}': get: tags: - Files summary: Get school documents by identifier. operationId: getSchoolRegulationById parameters: - name: id in: path required: true description: file id schema: type: string responses: '200': description: File by id content: application/json: schema: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/school/files/raw': post: tags: - Files summary: Upload school documents parameters: - name: file_type required: true schema: $ref: '#/components/schemas/FileType' in: query - name: filename required: true schema: type: string in: query operationId: uploadSchoolFile requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadFile' responses: '200': description: Document uploaded content: application/json: schema: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/school/files/share_link': get: tags: - Files summary: get a share link to access files or folder in owncloud operationId: getSchoolFilesShareLink parameters: - name: path in: query required: true description: should begin with `/` example: "/path/to/the/folder" schema: type: string responses: '200': description: Share link with additional infos content: application/json: schema: $ref: '#/components/schemas/ShareInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/users/{user_id}/files/{id}': get: tags: - Files summary: Get user file by identifier operationId: getUserFilesById parameters: - name: user_id in: path required: true schema: type: string - name: id in: path required: true description: file id schema: type: string responses: '200': description: File by id content: application/json: schema: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/work_files': get: tags: - Files summary: Get student work documents operationId: getStudentWorkDocuments parameters: - name: student_id required: true schema: type: string in: path - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: true - name: page_size in: query description: Set value to 15 by default if null is provided required: true schema: $ref: '#/components/schemas/PageSize' - name: professional_experience in: query description: Filter student work files by Professional Experience status required: false schema: $ref: '#/components/schemas/ProfessionalExperienceFileTypeEnum' responses: '200': description: List of student work documents content: application/json: schema: type: array items: $ref: '#/components/schemas/WorkDocumentInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/work_files/{id}': get: tags: - Files summary: Get student work documents operationId: getStudentWorkDocumentsById parameters: - name: student_id required: true schema: type: string in: path - name: id required: true in: path schema: type: string responses: '200': description: Student work documents content: application/json: schema: $ref: '#/components/schemas/WorkDocumentInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/work_files/raw': post: tags: - Files summary: Upload student work file parameters: - name: student_id required: true schema: type: string in: path - name: filename required: true schema: type: string in: query - name: commitment_begin required: true in: query schema: type: string format: date-time - name: commitment_end required: false in: query schema: type: string format: date-time - name: creation_datetime required: false in: query schema: type: string format: date-time - name: experience_type required: true in: query schema: $ref: '#/components/schemas/ProfessionalExperienceFileTypeEnum' operationId: uploadStudentWorkFile requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadFile' responses: '200': description: File uploaded content: application/json: schema: $ref: '#/components/schemas/WorkDocumentInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/users/{user_id}/files/raw': post: tags: - Files summary: Upload user file parameters: - name: user_id required: true schema: type: string in: path - name: file_type required: true schema: $ref: '#/components/schemas/FileType' in: query - name: filename required: true schema: type: string in: query operationId: uploadUserFile requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadFile' responses: '200': description: File uploaded content: application/json: schema: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/users/{user_id}/files': get: tags: - Files summary: Get user files operationId: getUserFiles parameters: - name: user_id in: path required: true schema: type: string - name: file_type in: query required: false schema: $ref: '#/components/schemas/FileType' - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: true - name: page_size in: query required: true description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' responses: '200': description: List of user files content: application/json: schema: type: array items: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{id}/scholarship_certificate/raw': get: tags: - Files summary: Get scholarship certificate of a student. operationId: getStudentScholarshipCertificate parameters: - name: id in: path required: true schema: type: string responses: '200': description: Scholarship certificate of student content: application/pdf: schema: type: string format: byte example: PDF VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /monitors/{id}/students: get: tags: - Monitoring summary: Get all students linked to a monitor description: All students linked to a monitor order by Ref ASC operationId: getLinkedStudentsByMonitorId parameters: - name: id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: true - name: page_size in: query required: true description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' responses: '200': description: List of student linked to a monitor content: application/json: schema: type: array items: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Monitoring summary: Link students to monitor description: Link given students to a monitor operationId: linkStudentsByMonitorId parameters: - name: id in: path required: true schema: type: string requestBody: required: true description: Students to be linked to a monitor content: application/json: schema: type: object properties: students_ids: type: array items: type: string responses: '200': description: List of student linked to a monitor content: application/json: schema: type: array items: $ref: '#/components/schemas/Student' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /events: get: tags: - Events summary: Get all events. parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - name: from in: query description: Filter events from a given date, return events of current week by default schema: type: string format: date-time required: false - name: to in: query description: Filter events after a given date, return events of current week by default schema: type: string format: date-time required: false - name: event_type in: query required: false description: Filter events by event type schema: $ref: '#/components/schemas/EventType' - name: title in: query required: false description: Filter events by title schema: type: string - name: group_id in: query required: false description: Filter events by group id schema: type: string - $ref: '#/components/parameters/TeacherId' - $ref: '#/components/parameters/GroupRef' operationId: getEvents responses: '200': description: List of events content: application/json: schema: type: array items: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Events summary: Create or update events description: | Update if `id` is provided, create otherwise. Create by frequency if `frequency_day`, `frequency_number`, `frequency_beginning_hour` and `frequency_ending_hour` are provided **Note:** This function creates an initial event from the payload, then schedules weekly events based on the `frequency` query parameter. operationId: crupdateEvents parameters: - name: frequency_day required: false in: query description: define the day frequency, the next event will be scheduled on `frequency_day`. schema: $ref: '#/components/schemas/FrequencyScopeDay' example: Monday - name: frequency_number required: false in: query description: define the number of frequency. Determines how many events will be created. schema: type: integer example: 1 - name: frequency_beginning_hour required: false in: query description: | what time does the frequency start, format HH:MM **IMPORTANT** The frequency_beginning_hour must be send as UTC+3 schema: type: string example: "08:00" - name: frequency_ending_hour required: false in: query description: | what time does the frequency end, format HH:MM **IMPORTANT** The frequency_beginning_hour must be send as UTC+3 schema: type: string example: "10:00" requestBody: required: true description: Event to create or update content: application/json: schema: type: array items: $ref: '#/components/schemas/CreateEvent' example: - title: 'exam - salle B' description: 'exam - salle B' color: '#f6bf26' begin_datetime: '2025-02-24T09:00:00Z' end_datetime: '2025-02-24T09:30:00Z' event_type: 'EXAM' planner_id: 'teacher_id_1' course_id: 'course_id_1' groups: [ ] - title: 'test' description: 'description' color: '#f6bf26' begin_datetime: '2025-01-01T00:00:00Z' end_datetime: '2025-01-01T00:00:00Z' event_type: 'EXAM' planner_id: 'teacher_id_1' course_id: 'course_id_1' groups: [ ] responses: '200': description: Event created content: application/json: schema: type: array items: $ref: '#/components/schemas/Event' example: - id: 123456 type: 'EXAM' title: 'exam - salle B' color: '#f6bf26' description: 'exam - salle B' begin_datetime: '2025-02-24T09:00:00Z' end_datetime: '2025-02-24T09:30:00Z' planner_id: id: 'teacher_id_1' course_id: id: 'course_id_1' groups: [ ] - id: 223456 type: 'EXAM' title: 'exam - salle B' color: '#f6bf26' description: 'exam - salle B' begin_datetime: '2025-03-03T08:00:00Z' end_datetime: '2025-03-03T10:00:00Z' planner_id: id: 'teacher_id_1' course_id: id: 'course_id_1' groups: [ ] '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /events/{id}: get: tags: - Events summary: Get event by identifier parameters: - name: id required: true schema: type: string in: path operationId: getEventById responses: '200': description: Event by identifier content: application/json: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' delete: tags: - Events summary: Delete event by id description: Soft delete operationId: deleteEventById parameters: - name: id in: path required: true schema: type: string responses: '200': description: event deleted by id content: application/json: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /events/{id}/participants: get: tags: - Events summary: Users taking parts to event operationId: getEventParticipants parameters: - name: id in: path schema: type: string required: true - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - name: group_ref in: query description: Filter by group ref schema: type: string required: false - name: student_ref in: query description: Filter by student std schema: type: string required: false - name: name in: query description: Filter by student name schema: type: string required: false - name: status in: query description: Filter by AttendanceStatus schema: $ref: "#/components/schemas/AttendanceStatus" required: false responses: '200': description: Participants of the event content: application/json: schema: type: array items: $ref: '#/components/schemas/EventParticipant' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Events summary: Update event participants status parameters: - name: id in: path schema: type: string required: true operationId: updateEventParticipantsStatus requestBody: description: Participants attend for given event required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/UpdateEventParticipant' responses: '200': description: Participants attended for given event content: application/json: schema: type: array items: $ref: '#/components/schemas/EventParticipant' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /event_participants: get: tags: - Events summary: All users events participations operationId: getAllEventParticipants parameters: - name: course_id in: query required: false description: Filter event participants by the given course id value schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - $ref: '#/components/parameters/DatetimeFromFilter' - $ref: '#/components/parameters/DatetimeToFilter' - name: attendance_status required: false in: query description: Filter event participants by attendance status value schema: $ref: '#/components/schemas/AttendanceStatus' - $ref: '#/components/parameters/GroupRef' - $ref: '#/components/parameters/StudentRef' - $ref: '#/components/parameters/StudentName' responses: '200': description: Filtered participants of all the events content: application/json: schema: type: array items: $ref: "#/components/schemas/EventAttendance" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /events/students/{student_id}/stats: get: tags: - Events summary: Get stats for a student operationId: getEventParticipantStats parameters: - name: from_event_begin description: from event datetime to fetch, by default the current date_time. required: false in: query schema: type: string format: date-time - name: to_event_begin description: to event datetime to fetch, by default the current date_time. required: false in: query schema: type: string format: date-time - name: student_id in: path required: true schema: type: string responses: '200': description: EventParticipantStats filtered by criteria if provided content: application/json: schema: $ref: '#/components/schemas/EventParticipantStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /events/stats: get: tags: - Events summary: Get stats infos about events. operationId: getEventStats parameters: - name: id in: query description: the eventId of the event, this can be left empty and will return the stats of all events required: false schema: type: string - name: from required: false in: query description: | specify the date of start of the event. If `to` is specified but this parameter is left blank, the default value will be the current date_time If both `from` and `to` is not provided, this will return the stats for all the events schema: type: string format: date-time - name: to required: false description: | specify the date of end of the event. If `from` is specified but this parameter is left blank, the default value will be the current date_time If both `from` and `to` is not provided, this will return the stats for all the events in: query schema: type: string format: date-time responses: '200': description: Stats info content: application/json: schema: $ref: '#/components/schemas/EventStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/comments': get: tags: - Comments summary: Get all comments. operationId: getComments parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: timestamp_direction in: query schema: $ref: '#/components/schemas/OrderDirection' - name: student_ref in: query schema: type: string required: false responses: '200': description: Comments filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/comments': get: tags: - Comments summary: Get all student comments with filter criteria if provided operationId: getStudentComments parameters: - name: student_id in: path required: true schema: type: string - name: observer_id in: query required: false schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false responses: '200': description: Comments filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Comments summary: Teacher or manager comments about a student operationId: postComment parameters: - name: student_id in: path required: true schema: type: string - name: observer_id in: query required: true schema: type: string requestBody: description: The content of the comment required: true content: application/json: schema: $ref: '#/components/schemas/CreateComment' responses: '200': description: The content: application/json: schema: $ref: '#/components/schemas/Comment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/letters': get: tags: - Letters summary: All students letters paginated operationId: getStudentsLetters parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: student_ref in: query description: Filter by student ref schema: type: string required: false - name: ref in: query description: Filter by letter ref schema: type: string required: false - name: status in: query description: Filter by status schema: $ref: '#/components/schemas/LetterStatus' - name: name in: query description: Filter by student name schema: type: string required: false - name: fee_id in: query description: Filter letter by fee id required: false schema: type: string - name: is_linked_with_fee in: query required: false schema: type: boolean responses: '200': description: Letters content: application/json: schema: type: array items: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/letters': get: tags: - Letters summary: All letters paginated operationId: getLetters parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - $ref: '#/components/parameters/StudentRef' - name: ref in: query description: Filter by letter ref schema: type: string required: false - name: status in: query description: Filter by status schema: $ref: '#/components/schemas/LetterStatus' - name: name in: query description: Filter by student name schema: type: string required: false - name: fee_id in: query description: Filter letter by fee id required: false schema: type: string - name: is_linked_with_fee in: query required: false schema: type: boolean - $ref: '#/components/parameters/RoleParamEnum' responses: '200': description: Letters content: application/json: schema: type: array items: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Letters summary: Update letters status operationId: updateLettersStatus requestBody: required: true content: application/json: schema: type: array items: $ref: '#/components/schemas/UpdateLettersStatus' responses: '200': description: The letters updated content: application/json: schema: type: array items: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/letters/{id}': get: tags: - Letters summary: Letter by the given id operationId: getLetterById parameters: - name: id in: path required: true schema: type: string responses: '200': description: The letters updated content: application/json: schema: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/letters/stats': get: tags: - Letters summary: Get stats for letters operationId: getStudentsLetterStats responses: '200': description: Some stats for letters content: application/json: schema: $ref: '#/components/schemas/LetterStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/letters/stats': get: tags: - Letters summary: Get stats for letters operationId: getLetterStats parameters: - $ref: '#/components/parameters/RoleParamEnum' responses: '200': description: Some stats for letters content: application/json: schema: $ref: '#/components/schemas/LetterStats' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/users/{user_id}/letters': get: tags: - Letters summary: Letters by the given user id operationId: getLettersByUserId parameters: - name: user_id in: path required: true schema: type: string - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' - name: status in: query description: Filter by status schema: $ref: '#/components/schemas/LetterStatus' responses: '200': description: All letters by the given student id content: application/json: schema: type: array items: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Letters summary: Create a letter for the given user id operationId: createLetter parameters: - name: user_id in: path required: true schema: type: string - name: filename in: query required: true schema: type: string - name: description in: query required: true schema: type: string - name: fee_id in: query required: false schema: type: string - name: amount in: query required: false schema: type: integer - name: event_participant_id in: query required: false schema: type: string requestBody: required: true content: multipart/form-data: schema: $ref: "#/components/schemas/UploadFile" responses: '200': description: The letter by the given student id content: application/json: schema: $ref: '#/components/schemas/Letter' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/announcements': get: tags: - Announcements summary: All announcements operationId: getAnnouncements parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: from in: query description: Filter announcements from a given date schema: type: string format: date-time required: false - name: to in: query description: Filter events before a given date schema: type: string format: date-time - name: author_ref in: query description: Filter announcements by author ref schema: type: string - name: scope in: query description: Filter by scope schema: $ref: '#/components/schemas/Scope' responses: '200': description: Announcements filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Announcement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' post: tags: - Announcements summary: Create an announcement operationId: createAnnouncement requestBody: description: Infos about the announcement to create required: true content: application/json: schema: $ref: '#/components/schemas/CreateAnnouncement' responses: '200': description: The announcement created content: application/json: schema: $ref: '#/components/schemas/Announcement' /announcements/{id}: get: tags: - Announcements summary: Get announcement by identifier parameters: - name: id required: true schema: type: string in: path operationId: getAnnouncementById responses: '200': description: Announcement by identifier content: application/json: schema: $ref: '#/components/schemas/Announcement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /announcements/{announcements_id}/reaction: put: tags: - Announcements summary: change the reaction for an announcement parameters: - name: announcements_id required: true schema: type: string in: path operationId: reactToAnnouncement requestBody: description: the reaction for the announcement required: true content: application/json: schema: type: object properties: reaction: $ref: '#/components/schemas/ReactionEnum' responses: '200': description: Announcement with reactions content: application/json: schema: $ref: '#/components/schemas/Announcement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/status-check': post: tags: - Student summary: Create a student status check description: Create status check for a given student operationId: createStatusChecks parameters: - name: student_id in: path required: true schema: type: string requestBody: description: The status checks to create on a given student required: true content: application/json: schema: $ref: '#/components/schemas/CreateStatusCheck' responses: '200': description: The created status checks for the given student content: application/json: schema: $ref: '#/components/schemas/StatusCheck' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/status-checks/{status_check_id}': patch: tags: - Student summary: Update a student status check description: Update status check for a given student operationId: updateStatusCheck parameters: - name: student_id in: path required: true schema: type: string - name: status_check_id in: path required: true schema: type: string requestBody: description: status check to update required: true content: application/json: schema: $ref: '#/components/schemas/UpdateStatusCheck' responses: '200': description: The created or updated status-checks content: application/json: schema: $ref: '#/components/schemas/StatusCheck' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/status-checks': get: tags: - Student operationId: getStudentStatusChecks summary: Get all status checks for a given student parameters: - name: student_id in: path required: true schema: type: string responses: '200': description: All status checks asked by all teachers on a given student content: application/json: schema: type: array items: $ref: '#/components/schemas/StatusCheck' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/status-checks': get: tags: - Student operationId: getAllStatusChecks summary: Get all status checks with student info description: Retrieve all status checks across all students, including their associated student information. parameters: - name: result in: query required: false schema: allOf: - $ref: '#/components/schemas/StatusCheckResult' description: Filter status checks by result. responses: '200': description: All status checks with their associated student information content: application/json: schema: type: array items: $ref: '#/components/schemas/StatusCheck' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/announcements': get: tags: - Announcements operationId: getStudentsAnnouncements summary: Get all announcements for students parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: from in: query description: Filter announcements from a given date schema: type: string format: date-time required: false - name: to in: query description: Filter events before a given date schema: type: string format: date-time - name: author_ref in: query description: Filter announcements by author ref schema: type: string - name: group_ref in: query description: Filter announcements by group ref of the target schema: type: string responses: '200': description: Announcements filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Announcement' /students/announcements/{id}: get: tags: - Announcements summary: Get announcement for student by identifier parameters: - name: id required: true schema: type: string in: path operationId: getStudentsAnnouncementById responses: '200': description: Announcement by identifier content: application/json: schema: $ref: '#/components/schemas/Announcement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /students/{id}/attendance: get: tags: - Attendance operationId: getStudentAttendance summary: Get student attendance between date intervals parameters: - in: query name: from schema: type: string format: date-time required: true - in: query name: to schema: type: string format: date-time required: true - in: path name: id schema: type: string required: true - in: query name: attendanceStatus schema: $ref: '#/components/schemas/AttendanceStatus' description: Filter student attendance by status. Default value is MISSING. - in: query name: title schema: type: array items: type: string description: | Filter student attendance by list of titles. Usually, title substitutes course code, for example PROG1. required: false responses: 200: description: List of student attendance between date intervals content: application/json: schema: type: array items: $ref: '#/components/schemas/StudentGlobalAttendance' '/teachers/announcements': get: tags: - Announcements operationId: getTeachersAnnouncements summary: Get all announcements for teachers parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: from in: query description: Filter announcements from a given date schema: type: string format: date-time required: false - name: to in: query description: Filter events before a given date schema: type: string format: date-time - name: author_ref in: query description: Filter announcements by author ref schema: type: string responses: '200': description: Announcements filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Announcement' /teachers/announcements/{id}: get: tags: - Announcements summary: Get teacher announcement by identifier parameters: - name: id required: true schema: type: string in: path operationId: getTeacherAnnouncementById responses: '200': description: Announcement by identifier content: application/json: schema: $ref: '#/components/schemas/Announcement' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/promotions': get: tags: - Promotions operationId: getPromotions summary: Get all promotions parameters: - name: page in: query schema: $ref: '#/components/schemas/Page' description: Set value to 1 by default if null is provided required: false - name: page_size in: query description: Set value to 15 by default if null is provided schema: $ref: '#/components/schemas/PageSize' required: false - name: name in: query description: Filter promotion by name schema: type: string required: false - name: ref in: query description: Filter promotion by ref schema: type: string required: false - name: group_ref in: query description: Filter promotion by group ref schema: type: string required: false responses: '200': description: Promotions filtered with criteria if provided content: application/json: schema: type: array items: $ref: '#/components/schemas/Promotion' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Promotions operationId: crupdatePromotion summary: Update promotion if `id` provided, create otherwise requestBody: description: Create or update promotion required: true content: application/json: schema: $ref: '#/components/schemas/CrupdatePromotion' responses: '200': description: The promotion created content: application/json: schema: $ref: '#/components/schemas/Promotion' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/promotions/{id}': get: tags: - Promotions operationId: getPromotionById summary: Get promotion by the given id parameters: - name: id in: path required: true schema: type: string responses: '200': description: The promotion queried content: application/json: schema: $ref: '#/components/schemas/Promotion' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/promotions/{id}/students': get: tags: - Promotions operationId: getStudentsByPromotion summary: Get students in the promotion parameters: - name: id in: path required: true schema: type: string responses: '200': description: List of students in a xlsx file content: application/xlsx: schema: type: string format: byte example: XLSX VERSION '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/promotions/{id}/groups': put: tags: - Promotions operationId: updatePromotionGroups summary: Add or remove promotion's groups parameters: - name: id in: path required: true schema: type: string requestBody: description: List of group ids to add content: application/json: schema: $ref: '#/components/schemas/UpdatePromotionSGroup' responses: '200': description: The promotion created content: application/json: schema: $ref: '#/components/schemas/Promotion' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/grades/{grade_id}/history': get: tags: - Grades operationId: getOrderedGradeHistory summary: Get the history for specific garde parameters: - $ref: '#/components/parameters/PathGradeId' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/DatetimeFromFilter' - $ref: '#/components/parameters/DatetimeToFilter' - name: comment in: query description: filter results if the string contains this one given - case insensitive required: false schema: type: string responses: '200': description: Change history for specific garde content: application/json: schema: type: array items: $ref: '#/components/schemas/GradeHistory' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/cors': get: tags: - Cor operationId: getCors summary: Get all CORs parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/DatetimeFromFilter' - $ref: '#/components/parameters/DatetimeToFilter' - $ref: '#/components/parameters/StudentRef' - $ref: '#/components/parameters/GroupRef' - $ref: '#/components/parameters/CorStatuses' responses: '200': description: List of COR content: application/json: schema: type: array items: $ref: "#/components/schemas/Cor" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/cors/{cor_id}': get: tags: - Cor operationId: getCorById summary: Get COR by id parameters: - $ref: '#/components/parameters/PathCorId' responses: '200': description: The COR with the corresponding id content: application/json: schema: $ref: '#/components/schemas/Cor' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/cors/{cor_id}/comment': post: tags: - Cor operationId: commentCorById summary: Change the status of the COR and add some comment about the change parameters: - $ref: '#/components/parameters/PathCorId' requestBody: description: Comment for the cor content: application/json: schema: $ref: '#/components/schemas/CorCommentInfo' responses: '200': description: The COR with the corresponding id content: application/json: schema: $ref: '#/components/schemas/CorComment' '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' '/students/{student_id}/cors': get: tags: - Cor - User operationId: getStudentCors summary: Get all CORs for the given student_id parameters: - in: path name: student_id required: true schema: type: string - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' responses: '200': description: List of COR for the given student_id content: application/json: schema: type: array items: $ref: "#/components/schemas/Cor" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' put: tags: - Cor - User operationId: crupdateStudentCors parameters: - in: path name: student_id required: true schema: type: string summary: Create cor or update cor information for the current student requestBody: description: CORs to Crupdate required: true content: application/json: schema: $ref: "#/components/schemas/CrupdateCor" responses: '200': description: Crupdated COR content: application/json: schema: $ref: "#/components/schemas/Cor" '400': $ref: '#/components/responses/400' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' components: securitySchemes: BearerAuth: type: http scheme: bearer parameters: PageSize: name: page_size in: query example: 50 required: false description: Page size for the retrieved ressources schema: $ref: '#/components/schemas/PageSize' Page: name: page in: query example: 1 required: false description: Page number for the retrieved ressources schema: $ref: '#/components/schemas/Page' DatetimeFromFilter: name: from in: query description: Filter creation date result by a given date schema: type: string format: date-time required: false DatetimeToFilter: name: to in: query description: Filter creation date result by a given date schema: type: string format: date-time required: false UpdateDateSort: name: sortDate in: query description: Sort update date result, no sort by default required: false schema: $ref: '#/components/schemas/SortOrder' GroupRef: name: group_ref in: query required: false description: Filter by group ref schema: type: array items: type: string CorStatuses: name: cor_status in: query required: false description: Filter by cor actual status schema: type: array items: $ref: '#/components/schemas/CorStatus' StudentRef: name: student_ref in: query example: STD21001 required: false description: Filter by student ref schema: type: string StudentName: name: student_name in: query required: false description: Filter by student first name or last name schema: type: string TeacherId: name: teacher_id in: query required: false schema: type: string PathExamId: name: exams_id in: path required: true schema: type: string PathCourseId: name: course_id in: path required: true schema: type: string PathStudentId: name: student_id in: path required: true schema: type: string PathGradeId: name: grade_id in: path required: true schema: type: string PathMpbsId: name: mpbs_id in: path required: true schema: type: string PathCorId: name: cor_id in: path required: true schema: type: string RetakeExamStatuses: name: retake_exam_status in: query required: false description: Filter by retake exam actual status schema: type: array items: $ref: '#/components/schemas/RetakeExamStatus' RoleParamEnum: name: role in: query description: Filter by role required: false schema: type: array items: $ref: '#/components/schemas/RoleEnum' responses: '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestException' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/NotAuthorizedException' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/ResourceNotFoundException' '429': description: Too many requests to the API content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsException' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/InternalServerException' schemas: Whoami: properties: id: type: string role: type: string enum: - MONITOR - STUDENT - TEACHER - MANAGER - ADMIN - STAFF_MEMBER - ORGANIZER bearer: type: string UserIdentifier: type: object properties: id: type: string ref: type: string example: STD000001 first_name: type: string last_name: type: string email: type: string nic: type: string StudentAttendanceMovement: properties: id: type: string attendance_movement_type: $ref: '#/components/schemas/AttendanceMovementType' created_at: type: string format: date-time place: $ref: '#/components/schemas/PlaceEnum' student: $ref: '#/components/schemas/Student' SortOrder: type: string enum: - ASCENDING - DESCENDING CrupdateUser: allOf: - $ref: '#/components/schemas/UserIdentifier' - type: object properties: sex: $ref: '#/components/schemas/Sex' birth_date: type: string format: date birth_place: type: string address: type: string phone: type: string entrance_datetime: type: string format: date-time coordinates: $ref: '#/components/schemas/Coordinates' high_school_origin: type: string status: $ref: '#/components/schemas/EnableStatus' WorkStudyStatus: type: string enum: - HAVE_BEEN_WORKING - WILL_BE_WORKING - WORKING - NOT_WORKING SpecializationField: type: string enum: - COMMON_CORE - EL - TN Sex: type: string enum: - M - F EnableStatus: type: string enum: - ENABLED - DISABLED - SUSPENDED - ALUMNI FileType: type: string enum: - TRANSCRIPT - DOCUMENT - WORK_DOCUMENT - OTHER - PROFILE_PICTURE EventType: type: string enum: - EXAM - COURSE - INTEGRATION - SEMINAR - SUPPORT_SESSION - OTHER ### TODO: Rename to StudentAttendance when actual is renamed into StudentEventAttendance StudentGlobalAttendance: allOf: - $ref: '#/components/schemas/EventBase' type: object properties: attendance_status: $ref: '#/components/schemas/AttendanceStatus' ### TODO: rename to StudentEventAttendance or it is Student Attendance for a specific course StudentAttendance: type: object properties: id: type: string created_at: type: string format: date-time late_of: type: integer description: if the student is late, that defines how late he or she is place: $ref: '#/components/schemas/PlaceEnum' is_late: type: boolean course_session: $ref: '#/components/schemas/CourseSession' student: $ref: '#/components/schemas/Student' CourseSession: type: object properties: id: type: string course_assignment: $ref: '#/components/schemas/CourseAssignment' begin: type: string format: date-time end: type: string format: date-time CrupdateStudent: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: specialization_field: $ref: '#/components/schemas/SpecializationField' payment_frequency: $ref: '#/components/schemas/PaymentFrequency' CrupdateMonitor: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: student_refs: type: array items: type: string example: "STD20001" CrupdateTeacher: allOf: - $ref: '#/components/schemas/CrupdateUser' CrupdateManager: allOf: - $ref: '#/components/schemas/CrupdateUser' CrupdateOrganizer: allOf: - $ref: '#/components/schemas/CrupdateUser' CrupdateWorkStudyStudent: properties: id: type: string student_id: type: string commitment_begin_date: type: string format: date-time commitment_end_date: type: string format: date-time business: type: string company: type: string WorkStudyInfo: properties: id: type: string commitment_begin_date: type: string format: date-time commitment_end_date: type: string format: date-time business: type: string company: type: string WorkStudyStudent: allOf: - $ref: '#/components/schemas/UserIdentifier' properties: work_study_info: type: array items: $ref: '#/components/schemas/WorkStudyInfo' Student: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: specialization_field: $ref: '#/components/schemas/SpecializationField' professional_experience: $ref: '#/components/schemas/ProfessionalExperienceFileTypeEnum' work_study_status: $ref: '#/components/schemas/WorkStudyStatus' commitment_begin_date: type: string format: date-time commitment_end_date: type: string format: date-time profile_picture: type: string groups: type: array items: $ref: '#/components/schemas/Group' is_repeating_year: type: boolean Monitor: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: profile_picture: type: string Teacher: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: profile_picture: type: string Manager: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: profile_picture: type: string Admin: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: profile_picture: type: string Organizer: allOf: - $ref: '#/components/schemas/CrupdateUser' properties: profile_picture: type: string GroupIdentifier: type: object properties: attributed_color: type: string id: type: string name: type: string example: The group number one ref: type: string example: G1 Group: type: object properties: id: type: string name: type: string example: The group number one ref: type: string example: G1 creation_datetime: type: string format: date-time size: type: integer attributed_color: type: string CreateGroup: type: object properties: students: type: array items: type: string allOf: - $ref: '#/components/schemas/Group' GroupFlow: type: object properties: id: type: string flow_datetime: type: string format: date-time allOf: - $ref: '#/components/schemas/CreateGroupFlow' CreateGroupFlow: type: object properties: move_type: type: string enum: - JOIN - LEAVE group_id: type: string student_id: type: string CourseTemplate: type: object properties: id: type: string level: $ref: "#/components/schemas/StudentLevel" code: type: string example: PROG1 name: type: string example: Algorithmics credits: type: integer total_hours: type: integer UpdateMonitorStudentLink: type: object properties: id: type: string student_id: type: string monitor_id: type: string status: $ref: '#/components/schemas/MonitorStudentLinkStatus' MonitorStudentLinkStatus: type: string enum: - LINKED - DENIED MonitorStudentLink: type: object properties: id: type: string monitor: $ref: '#/components/schemas/Monitor' student: $ref: '#/components/schemas/Student' Course: allOf: - $ref: '#/components/schemas/CourseTemplate' CrupdateCourseAssignment: type: object properties: id: type: string main_teacher_id: type: string course_id: type: string group_ids: type: array items: type: string WorkDocumentInfo: allOf: - $ref: '#/components/schemas/FileInfo' type: object properties: professional_experience: $ref: '#/components/schemas/ProfessionalExperienceFileTypeEnum' FileInfo: type: object properties: id: type: string name: type: string creation_datetime: type: string format: date-time file_type: $ref: '#/components/schemas/FileType' file_url: type: string OwnCloudPermission: type: string enum: - READ - DELETE - UPDATE - CREATE - SHARE ShareInfo: type: object properties: expiration: type: string path: type: string url: type: string permission: type: array items: $ref: '#/components/schemas/OwnCloudPermission' CourseAssignment: type: object properties: id: type: string main_teacher: $ref: '#/components/schemas/Teacher' course: $ref: '#/components/schemas/Course' groups: type: array items: $ref: '#/components/schemas/Group' StudentExamGrade: type: object properties: score: type: number format: double example: 12.5 exam: $ref: '#/components/schemas/Exam' Exam: type: object properties: id: type: string coefficient: $ref: '#/components/schemas/Fraction' title: type: string examination_date: type: string format: date-time course_assignment: $ref: '#/components/schemas/CourseAssignment' Fraction: type: object properties: numerator: type: integer denominator: type: integer CrupdateExam: type: object properties: id: type: string coefficient: $ref: '#/components/schemas/Fraction' title: type: string examination_date: type: string format: date-time course_assignment_id: type: string Grade: type: object required: - score properties: id: type: string exam: $ref: "#/components/schemas/Exam" score: type: number format: double example: 12.5 created_at: type: string format: date-time update_date: type: string format: date-time StudentLevel: type: string enum: - L1 - L2 - L3 - M1 - M2 ExamGradeStats: type: object properties: average: type: number format: double example: 12.5 StudentCourseGradeStats: type: object properties: average: type: number format: double example: 12.5 CourseResult: type: object properties: id: type: string course: $ref: "#/components/schemas/Course" weighted_average: type: number status: $ref: "#/components/schemas/CourseResultStatus" CourseResultStatus: type: string enum: - VALIDATED - IN_PROGRESS - INCOMPLETE - NOT_STARTED ResultSummary: type: object allOf: - $ref: "#/components/schemas/ResultsOverview" properties: yearly_results: type: array items: $ref: "#/components/schemas/YearlyResult" YearlyResult: type: object allOf: - $ref: "#/components/schemas/ResultsOverview" properties: level: $ref: "#/components/schemas/StudentLevel" course_results: type: array items: $ref: "#/components/schemas/CourseResult" YearlyResultGenerationTranscript: type: object properties: status: $ref: "#/components/schemas/YearlyResultGenerationStatus" link: type: string YearlyResultGenerationStatus: type: string enum: - GENERATING - AVAILABLE StudentIdentifierGrade: type: object properties: weighted_average: type: number format: double example: 12.5 student: $ref: '#/components/schemas/UserIdentifier' CreateGrade: type: object properties: score: type: number format: double example: 12.5 student_id: type: string ResultsOverview: type: object properties: weighted_average: type: number obtained_credits: type: number status: $ref: '#/components/schemas/ResultOverviewStatus' total_credits: type: number ResultOverviewStatus: type: string enum: - VALIDATED - INVALIDATED - IN_PROGRESS - NOT_STARTED StudentGrade: properties: grade: $ref: '#/components/schemas/Grade' student: $ref: '#/components/schemas/Student' UpdateGrade: properties: grade: $ref: '#/components/schemas/CreateGrade' student_ref: type: string comment: type: string GradeHistory: properties: created_at: type: string format: date-time score: type: number format: double example: 12.5 comment: type: string CourseAssignmentExam: allOf: - $ref: '#/components/schemas/CourseAssignment' properties: exams: type: array items: $ref: '#/components/schemas/StudentGrade' RetakeExamSession: type: object properties: id: type: string title: type: string date_from: type: string format: date-time date_to: type: string format: date-time student_levels: type: array items: $ref: '#/components/schemas/StudentLevel' RetakeExam: type: object properties: id: type: string course: $ref: "#/components/schemas/Course" session: $ref: "#/components/schemas/RetakeExamSession" registration_date: type: string format: date-time cancel_reason: type: string rejection_reason: type: string status: $ref: "#/components/schemas/RetakeExamStatus" CrupdateRetakeExam: type: object properties: id: type: string course_id: type: string session_id: type: string student_id: type: string status: $ref: "#/components/schemas/RetakeExamStatus" CancelRetakeExamRequest: type: object properties: retake_exam_id: type: string reason: type: string description: Reason provided by the student or manager for canceling or not cancelling the retake request required: - reason - retake_exam_id RetakeExamToCancel: type: object properties: retake_exam_id: type: string required: - retake_exam_id StudentRetakeExam: type: object allOf: - $ref: "#/components/schemas/RetakeExam" properties: ### TODO: must be Student resource ou some attributes only ? student_identifier: $ref: "#/components/schemas/UserIdentifier" RetakeExamStatus: type: string enum: - REGISTERED - TO_CANCEL - CANCELED - INVALIDATE - VALIDATE CreateAttendanceMovement: type: object properties: student_id: type: string created_at: type: string format: date-time attendance_movement_type: $ref: '#/components/schemas/AttendanceMovementType' place: $ref: '#/components/schemas/PlaceEnum' ProfessionalExperienceFileTypeEnum: type: string enum: - WORKER_STUDENT - BUSINESS_OWNER - INTERN_STUDENT - INTERN_PROJECT PlaceEnum: type: string enum: - IVANDRY - ANDRAHARO - UNKNOWN RoleEnum: type: string enum: - STUDENT - TEACHER - STAFF_MEMBER CreateFee: type: object properties: type: $ref: '#/components/schemas/FeeTypeEnum' comment: type: string total_amount: type: integer creation_datetime: type: string format: date-time due_datetime: type: string format: date-time category: $ref: '#/components/schemas/FeeCategory' frequency: $ref: '#/components/schemas/FeeFrequency' CrupdateStudentFee: properties: id: type: string student_id: type: string allOf: - $ref: '#/components/schemas/CreateFee' ModelFee: allOf: - $ref: '#/components/schemas/Fee' properties: payments: type: array items: $ref: '#/components/schemas/Payment' FeesWithStats: properties: statistics: $ref: '#/components/schemas/FeesStatistics' data: type: array items: $ref: '#/components/schemas/Fee' Fee: allOf: - $ref: '#/components/schemas/CreateFee' type: object properties: id: type: string student_ref: type: string student_id: type: string remaining_amount: type: integer status: $ref: '#/components/schemas/FeeStatusEnum' updated_at: type: string format: date-time mpbs: type: array items: $ref: '#/components/schemas/Mpbs' letter: $ref: '#/components/schemas/FeeLetter' student_first_name: type: string FeeCategory: type: string enum: - L1 - L2 - L3 - OTHER - UNKNOWN - WORK_FEES FeeLetter: type: object properties: id: type: string approval_datetime: type: string format: date-time creation_datetime: type: string format: date-time ref: type: string status: $ref: '#/components/schemas/LetterStatus' file_url: type: string CreateDelayPenaltyChange: type: object properties: interest_percent: type: integer interest_timerate: type: string enum: - DAILY grace_delay: type: integer applicability_delay_after_grace: type: integer DelayPenalty: allOf: - $ref: '#/components/schemas/CreateDelayPenaltyChange' type: object properties: id: type: string creation_datetime: type: string format: date-time MpbsStatus: type: string enum: - PENDING - SUCCESS - FAILED MobileMoneyType: type: string enum: - MVOLA - ORANGE_MONEY - AIRTEL_MONEY CreatePayment: type: object properties: type: type: string enum: - BANK_TRANSFER - CASH - MOBILE_MONEY - SCHOLARSHIP - FIX amount: type: integer comment: type: string creation_datetime: type: string format: date-time Coordinates: type: object properties: longitude: type: number format: double latitude: type: number format: double CrupdateFeeTemplate: type: object properties: id: type: string name: type: string category: $ref: "#/components/schemas/FeeCategory" frequency: $ref: "#/components/schemas/FeeFrequency" type: $ref: '#/components/schemas/FeeTypeEnum' amount: type: integer number_of_payments: type: integer FeeTemplate: allOf: - $ref: '#/components/schemas/CrupdateFeeTemplate' type: object properties: creation_datetime: type: string format: date-time FeeFrequency: type: string enum: - YEARLY - MONTHLY - UNKNOWN Payment: allOf: - $ref: '#/components/schemas/CreatePayment' type: object properties: id: type: string fee_id: type: string creation_datetime: type: string format: date-time CrupdateMpbs: type: object properties: id: type: string student_id: type: string fee_id: type: string psp_id: type: string description: The couple `(fee_id, psp_id)` MUST be unique psp_type: $ref: '#/components/schemas/MobileMoneyType' Mpbs: allOf: - $ref: '#/components/schemas/CrupdateMpbs' type: object properties: amount: type: integer creation_datetime: type: string format: date-time psp_own_datetime_verification: type: string format: date-time successfully_verified_on: type: string format: date-time last_datetime_verification: type: string format: date-time status: $ref: '#/components/schemas/MpbsStatus' remainingRetry: type: integer MpbsVerification: allOf: - $ref: '#/components/schemas/CrupdateMpbs' type: object properties: amount_of_fee_remaining_payment: type: integer amount_in_psp: type: integer creation_datetime_of_payment_in_psp: type: string format: date-time creation_datetime_of_mpbs: type: string format: date-time creation_datetime: type: string format: date-time comment: type: string description: In particular, PSP error messages go here EventBase: type: object properties: id: type: string title: type: string description: type: string begin_datetime: type: string format: date-time end_datetime: type: string format: date-time is_online: type: boolean event_type: $ref: '#/components/schemas/EventType' location: $ref: '#/components/schemas/EventLocation' CreateEvent: allOf: - $ref: '#/components/schemas/EventBase' type: object properties: id: type: string color: type: string planner_id: description: user id type: string course_id: type: string groups: type: array items: $ref: '#/components/schemas/GroupIdentifier' EventLocation: type: object properties: room: $ref: '#/components/schemas/RoomEnum' place: $ref: '#/components/schemas/PlaceEnum' RoomEnum: type: string enum: - ALGEBRE - PI - SIGMA - NP - B - UNKNOWN MissingStatus: type: string enum: - JUSTIFIED - UNJUSTIFIED AttendanceStatus: type: string enum: - MISSING - LATE - PRESENT - UNCHECKED - JUSTIFIED_ABSENCE - UNJUSTIFIED_ABSENCE UpdateEventParticipant: type: object properties: id: type: string event_status: $ref: '#/components/schemas/AttendanceStatus' group_id: type: string EventParticipantLetter: type: object properties: description: type: string file_url: type: string status: $ref: '#/components/schemas/LetterStatus' ref: type: string creation_datetime: type: string format: date-time EventAttendance: type: object properties: event_participant: $ref: '#/components/schemas/EventParticipant' event: $ref: '#/components/schemas/Event' EventParticipant: allOf: - $ref: '#/components/schemas/UserIdentifier' type: object properties: student_status: $ref: '#/components/schemas/EnableStatus' group_name: type: string event_status: $ref: '#/components/schemas/AttendanceStatus' student_id: type: string letter: type: array items: $ref: '#/components/schemas/EventParticipantLetter' Event: allOf: - $ref: '#/components/schemas/EventBase' type: object properties: id: type: string type: $ref: '#/components/schemas/EventType' color: type: string planner: $ref: '#/components/schemas/UserIdentifier' course: $ref: '#/components/schemas/Course' groups: type: array items: $ref: '#/components/schemas/GroupIdentifier' count: $ref: '#/components/schemas/EventStats' MissedEventStats: type: object properties: total: type: integer format: int64 justified: type: integer format: int64 unjustified: type: integer format: int64 EventStats: type: object properties: missed_stats: $ref: "#/components/schemas/MissedEventStats" present: type: integer format: int64 late: type: integer format: int64 unchecked: type: integer format: int64 total: type: integer format: int64 EventParticipantStats: type: object properties: missed_events: $ref: "#/components/schemas/MissedEventStats" assisted_events: type: integer format: int64 late_events: type: integer format: int64 unchecked_events: type: integer format: int64 total_events: type: integer format: int64 CrupdatePromotion: type: object properties: id: type: string name: type: string ref: type: string cycle_level: $ref: '#/components/schemas/CycleEnum' UpdatePromotionSGroup: type: object properties: type: type: string enum: - ADD - REMOVE group_ids: type: array items: type: string Promotion: type: object allOf: - $ref: '#/components/schemas/CrupdatePromotion' properties: creation_datetime: type: string format: date-time groups: type: array items: $ref: '#/components/schemas/GroupIdentifier' cycle: $ref: '#/components/schemas/CycleEnum' studentLevels: type: array items: $ref: '#/components/schemas/StudentLevel' readOnly: true required: - cycle CycleEnum: type: string enum: - BACHELOR - MASTER - DOCTORATE FeeStatusEnum: type: string enum: - UNPAID - PAID - LATE - PENDING FeeTypeEnum: type: string enum: - TUITION - HARDWARE - STUDENT_INSURANCE - RETAKE_EXAM_COSTS UploadFile: type: object properties: file_to_upload: type: string format: binary description: User profile picture OrderDirection: type: string enum: - ASC - DESC Page: type: integer description: Start at `1` PageSize: type: integer description: Cannot exceed `500` default: 15 AttendanceMovementType: type: string enum: - IN - OUT CourseDirection: type: string enum: - ASC - DESC Comment: type: object properties: id: type: string subject: $ref: '#/components/schemas/Student' observer: $ref: '#/components/schemas/Observer' content: type: string creation_datetime: type: string format: date-time CreateComment: type: object properties: id: type: string student_id: type: string observer_id: type: string content: type: string Observer: type: object properties: id: type: string ref: type: string first_name: type: string last_name: type: string profile_picture: type: string role: type: string enum: - MANAGER - TEACHER - ADMIN CreateAnnouncement: type: object properties: id: type: string title: type: string content: type: string author_id: type: string scope: $ref: '#/components/schemas/Scope' target_group_list: type: array items: type: string example: [ "G1", "G2" ] $ref: '#/components/schemas/GroupIdentifier' Scope: type: string enum: - GLOBAL - TEACHER - STUDENT - MANAGER Announcement: type: object properties: id: type: string title: type: string content: type: string author: type: object properties: id: type: string first_name: type: string last_name: type: string email: type: string profile_picture: type: string creation_datetime: type: string format: date-time scope: $ref: '#/components/schemas/Scope' reaction_count: type: integer default: 0 hasCurrentUserReaction: type: boolean default: false ReactionEnum: type: string enum: - UNCHECK - CHECK GroupStatistics: type: object properties: total_students: type: integer men: $ref: '#/components/schemas/StatisticsDetails' women: $ref: '#/components/schemas/StatisticsDetails' Statistics: type: object properties: total_students: type: integer format: int64 students_alternating: type: object properties: total: type: integer format: int64 working: type: integer format: int64 have_been_working: type: integer format: int64 not_working: type: integer format: int64 will_work: type: integer format: int64 men: $ref: '#/components/schemas/StatisticsDetails' women: $ref: '#/components/schemas/StatisticsDetails' total_groups: type: integer format: int64 StatisticsDetails: type: object properties: total: type: integer format: int64 disabled: type: integer format: int64 enabled: type: integer format: int64 suspended: type: integer format: int64 alumni: type: integer format: int64 AdvancedFeeStatisticsGeneration: type: object properties: data: type: string AdvancedFeeStatisticsType: type: string enum: - ACCOUNTING - RECEIPT AdvancedFeesStatistics: type: object properties: total_expected_fees_count: $ref: "#/components/schemas/TotalExpectedFeesStats" paid_fees_count: $ref: "#/components/schemas/PaidFeesStats" pending_fees_count: $ref: "#/components/schemas/PendingFeesStats" late_fees_count: $ref: "#/components/schemas/LateFeesStats" unpaid_fees_count: $ref: "#/components/schemas/UnpaidFeesStats" update_datetime: type: string format: date-time expired: type: boolean description: Ths field will be `true` when the returned stats is outdated or needs to be generated. BaseFeesStats: type: object properties: first_grade_monthly: type: integer format: int64 second_grade_monthly: type: integer format: int64 third_grade_monthly: type: integer format: int64 first_grade_yearly: type: integer format: int64 second_grade_yearly: type: integer format: int64 third_grade_yearly: type: integer format: int64 other: type: integer format: int64 unknown_grade: type: integer format: int64 work_study: type: integer format: int64 monthly: type: integer format: int64 yearly: type: integer format: int64 unknown_frequency: type: integer format: int64 TotalExpectedFeesStats: type: object allOf: - $ref: "#/components/schemas/BaseFeesStats" - $ref: "#/components/schemas/RetakeExamFeesCount" PaidFeesStats: type: object allOf: - $ref: "#/components/schemas/BaseFeesStats" - $ref: "#/components/schemas/RetakeExamFeesCount" properties: mobile_money: type: number format: int64 bank_fees: type: number format: int64 PendingFeesStats: type: object allOf: - $ref: "#/components/schemas/BaseFeesStats" - $ref: "#/components/schemas/RetakeExamFeesCount" LateFeesStats: type: object allOf: - $ref: "#/components/schemas/BaseFeesStats" - $ref: "#/components/schemas/RetakeExamFeesCount" UnpaidFeesStats: type: object allOf: - $ref: "#/components/schemas/BaseFeesStats" - $ref: "#/components/schemas/RetakeExamFeesCount" RetakeExamFeesCount: type: object properties: retakeExam_first_grade_count: type: integer format: int64 retakeExam_second_grade_count: type: integer format: int64 retakeExam_third_grade_count: type: integer format: int64 FeesStatistics: type: object properties: total_fees: type: integer paid_fees: type: integer unpaid_fees: type: integer late_fees: type: integer pending_transaction: type: integer paid_by_transaction: type: integer total_monthly_fees: type: integer total_yearly_fees: type: integer Letter: type: object properties: id: type: string description: type: string creation_datetime: type: string format: date-time approval_datetime: type: string format: date-time ref: type: string status: $ref: '#/components/schemas/LetterStatus' file_url: type: string fee: type: object properties: id: type: string comment: type: string amount: type: integer type: $ref: '#/components/schemas/FeeTypeEnum' user: allOf: - $ref: '#/components/schemas/UserIdentifier' properties: profile_picture: type: string reason_for_refusal: type: string PagedLettersResponse: type: object allOf: - $ref: '#/components/schemas/PagedResponse' - properties: data: type: array items: $ref: '#/components/schemas/Letter' pending_count: type: integer rejected_count: type: integer approved_count: type: integer LetterStats: type: object properties: pending: type: integer received: type: integer rejected: type: integer LetterStatus: type: string enum: - PENDING - RECEIVED - REJECTED PagedResponse: type: object properties: page_size: type: integer page_number: type: integer has_previous: type: boolean count: type: integer FrequencyScopeDay: type: string enum: - MONDAY - TUESDAY - WEDNESDAY - THURSDAY - FRIDAY - SATURDAY PaymentFrequency: type: string enum: - YEARLY - MONTHLY StatusCheckResult: type: string enum: - PENDING - WITHDRAWN - ENROLLED UpdateStatusCheck: type: object properties: description: type: string result: $ref: '#/components/schemas/StatusCheckResult' CreateStatusCheck: type: object properties: id: type: string concerned_student_id: type: string requesting_user_id: type: string description: type: string StatusCheck: type: object required: - concerned_student - requesting_user properties: id: type: string concerned_student: $ref: '#/components/schemas/UserIdentifier' requesting_user: $ref: '#/components/schemas/UserIdentifier' description: type: string result: $ref: '#/components/schemas/StatusCheckResult' creation_datetime: type: string format: date-time update_datetime: type: string format: date-time CorBase: type: object properties: id: type: string description: type: string interview_date: type: string format: date-time status: $ref: '#/components/schemas/CorStatus' CrupdateCor: type: object allOf: - $ref: '#/components/schemas/CorBase' properties: concerned_student_id: type: string interviewer_ids: type: array items: type: string Cor: type: object allOf: - $ref: "#/components/schemas/CorBase" properties: concerned_student: $ref: "#/components/schemas/UserIdentifier" interviewers: type: array items: $ref: "#/components/schemas/UserIdentifier" creation_datetime: type: string format: date-time comments: type: array items: $ref: '#/components/schemas/CorComment' CorCommentInfo: type: object properties: comment: type: string description: explanation of the reason or comment on change of status CorComment: type: object allOf: - $ref: '#/components/schemas/CorCommentInfo' properties: creation_date: type: string format: date-time CorStatus: type: string enum: - IN_PROGRESS - STAY - CANCELED - LEAVE - NO_SHOW UpdateLettersStatus: type: object properties: id: type: string status: $ref: '#/components/schemas/LetterStatus' reason_for_refusal: type: string UpdateLettersStatusResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/Letter' StaffMember: allOf: - $ref: '#/components/schemas/Teacher' type: object properties: ending_service: type: string format: date-time cnaps: type: string ostie: type: string function: type: string degree: type: string GenerationReceiptsRequest: type: object properties: from: type: string format: date-time to: type: string format: date-time GeneratedReceiptsStatistic: type: object properties: processedFileCount: type: integer Exception: type: object properties: type: type: string message: type: string BadRequestException: allOf: - $ref: '#/components/schemas/Exception' example: type: BadRequestException message: Bad request NotAuthorizedException: allOf: - $ref: '#/components/schemas/Exception' example: type: NotAuthorizedException message: Not authorized ResourceNotFoundException: allOf: - $ref: '#/components/schemas/Exception' example: type: ResourceNotFoundException message: Resource of type identified by not found TooManyRequestsException: allOf: - $ref: '#/components/schemas/Exception' example: type: TooManyRequestsException message: Too many requests InternalServerException: allOf: - $ref: '#/components/schemas/Exception' example: type: InternalServerException message: Unexpected error StudentImportValidationResult: type: "object" properties: validStudentNumber: type: "integer" StudentExamGradeImportValidationResult: type: "object" properties: validStudentExamGradeNumber: type: "integer" ImportGradeStat: type: object properties: totalRows: type: integer example: 50 validRows: type: integer example: 45 invalidRows: type: integer example: 5 GradeValidRow: type: object properties: ref: type: string example: "STD21001" score: type: number example: 18 GradeInvalidRow: type: object properties: ref: type: string nullable: true example: "STD21001" score: type: number nullable: true example: 30 reason: type: string example: "Score must be <= 20" ImportGradeResult: type: object properties: importGradeStats: $ref: "#/components/schemas/ImportGradeStat" validGrades: type: array items: $ref: "#/components/schemas/GradeValidRow" invalidGrades: type: array items: $ref: "#/components/schemas/GradeInvalidRow" SearchResultsUser: type: object properties: students: type: array items: $ref: "#/components/schemas/Student" teachers: type: array items: $ref: "#/components/schemas/Teacher" managers: type: array items: $ref: "#/components/schemas/Manager" organisers: type: array items: $ref: '#/components/schemas/Organizer' monitors: type: array items: $ref: '#/components/schemas/Monitor' staffMembers: type: array items: $ref: '#/components/schemas/StaffMember'