{"openapi":"3.0.1","info":{"version":"1.0.0","title":"Alabuga School Platform API","description":"School social platform API for the React Native mobile app and the dev SPA.\nAll endpoints under `\/api\/` (except the public allow-list in\n`config\/packages\/security.yaml`) require a JWT bearer token issued by\n`POST \/api\/auth\/login`. PII (152-\u0424\u0417) is never exposed via OpenAPI examples.\n"},"paths":{"\/api\/classrooms\/{classroom}\/attendance":{"get":{"description":"Classroom attendance summary with counters per student over an optional period.","operationId":"api_classroom_attendance_summary","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassroomAttendanceSummaryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ClassroomAttendanceSummaryView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"put":{"description":"Upsert attendance entries for one date across one or more subjects, over a list of {student, status} pairs \u2014 one atomic Save covers every Apply made on the marking screen, including mixed statuses and subjects.","operationId":"api_classroom_attendance_save","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SaveAttendanceForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"AttendanceEntryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AttendanceEntryView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/subjects":{"get":{"description":"List all subjects from the school catalog. Powers the attendance marking screen, so access is restricted to teachers\/admins \u2014 parents and students never need it.","operationId":"api_subjects_list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SubjectView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/SubjectView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/classrooms\/{classroom}\/attendance\/marking":{"get":{"description":"Marking-screen context: students, subjects catalog and any attendance already saved for the given date.","operationId":"api_classroom_attendance_marking","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"AttendanceMarkingView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AttendanceMarkingView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/points\/export":{"get":{"description":"Export classroom points history as CSV (Content-Disposition: attachment).","operationId":"api_classroom_points_export","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"$ref":"#\/components\/responses\/CsvDownload"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/groups\/{group}":{"put":{"description":"Update a group","operationId":"api_classroom_groups_update","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"group","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateClassGroupForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassGroupView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ClassGroupView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Delete a group","operationId":"api_classroom_groups_delete","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"group","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/points":{"post":{"description":"Award points to students. Either `students` or `group` must be set, but not both.","operationId":"api_classroom_points_award","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AwardPointsForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PointTransactionView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms":{"get":{"description":"List classrooms for current user","operationId":"api_classroom_list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassroomView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ClassroomView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/classrooms\/{classroom}\/points\/reset":{"post":{"description":"Reset all points in classroom","operationId":"api_classroom_points_reset","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/students\/{student}\/points":{"get":{"description":"Get points history for a student","operationId":"api_classroom_student_points","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"student","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PointTransactionView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/students":{"get":{"description":"List students in a classroom","operationId":"api_classroom_students_list","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassroomStudentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ClassroomStudentView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/point-reasons\/{reason}":{"delete":{"description":"Delete a point reason from classroom","operationId":"api_classroom_point_reasons_delete","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"reason","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"put":{"description":"Update a point reason for classroom","operationId":"api_classroom_point_reasons_update","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"reason","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdatePointReasonForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PointReasonView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/point-reasons":{"get":{"description":"List point reasons for classroom","operationId":"api_classroom_point_reasons_list","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PointReasonView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"post":{"description":"Create a point reason for classroom","operationId":"api_classroom_point_reasons_create","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreatePointReasonForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PointReasonView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/points\/history":{"get":{"description":"Get points history for classroom","operationId":"api_classroom_points_history","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PointTransactionView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/students\/random":{"get":{"description":"Get a random student from classroom","operationId":"api_classroom_students_random","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserBriefView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserBriefView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/points\/{transaction}\/cancel":{"post":{"description":"Cancel a point transaction","operationId":"api_classroom_points_cancel","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PointTransactionView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/groups\/{group}\/members":{"post":{"description":"Set group members","operationId":"api_classroom_groups_members","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"group","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ManageGroupMembersForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassGroupView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ClassGroupView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}":{"get":{"description":"Get classroom details","operationId":"api_classroom_get","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassroomView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ClassroomView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/groups":{"post":{"description":"Create a group in classroom","operationId":"api_classroom_groups_create","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreateClassGroupForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassGroupView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ClassGroupView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"get":{"description":"List groups in a classroom","operationId":"api_classroom_groups_list","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ClassGroupView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ClassGroupView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/classrooms\/{classroom}\/students\/{student}\/points\/reset":{"post":{"description":"Reset points for a student","operationId":"api_classroom_student_points_reset","parameters":[{"name":"classroom","in":"path","required":true,"schema":{"type":"string"}},{"name":"student","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/media\/{mediaFile}":{"get":{"description":"Get media file status and variant URLs","operationId":"api_media_get","parameters":[{"name":"mediaFile","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MediaFileView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/media\/upload":{"post":{"description":"Upload a media file. Send as multipart\/form-data \u2014 the `file` field carries the binary payload. Returns 429 when the per-user rate limit is exceeded.","operationId":"api_media_upload","requestBody":{"content":{"multipart\/form-data":{"schema":{"$ref":"#\/components\/schemas\/UploadForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MediaFileView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["data"]}}}},"429":{"$ref":"#\/components\/responses\/RateLimitError"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/events\/{event}":{"put":{"description":"Update an event","operationId":"api_event_update","parameters":[{"name":"event","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateEventForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedItemView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Delete an event","operationId":"api_event_delete","parameters":[{"name":"event","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/events":{"post":{"description":"Create a new event","operationId":"api_event_create","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreateEventForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedItemView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/healthz":{"get":{"description":"Liveness\/readiness probe \u2014 checks PostgreSQL, Redis, S3.","operationId":"api_healthcheck","security":[],"responses":{"200":{"description":"HealthcheckView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HealthcheckView"}},"required":["data"]}}}}}}},"\/api\/students\/{student}\/portfolio":{"get":{"description":"List portfolio entries for a student","operationId":"api_portfolio_list","parameters":[{"name":"student","in":"path","required":true,"schema":{"type":"string"}},{"name":"academicYear","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioEntryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PortfolioEntryView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"post":{"description":"Create a portfolio entry for a student","operationId":"api_portfolio_create","parameters":[{"name":"student","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreatePortfolioEntryForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioEntryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioEntryView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/portfolio\/{entry}":{"get":{"description":"Get a portfolio entry","operationId":"api_portfolio_get","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioEntryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioEntryView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Delete a portfolio entry","operationId":"api_portfolio_delete","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"put":{"description":"Update a portfolio entry","operationId":"api_portfolio_update","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdatePortfolioEntryForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioEntryView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioEntryView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/portfolio\/{entry}\/comments":{"post":{"description":"Add a comment to a portfolio entry","operationId":"api_portfolio_comments_create","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreatePortfolioCommentForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioCommentView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"get":{"description":"List comments on a portfolio entry","operationId":"api_portfolio_comments_list","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PortfolioCommentView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/portfolio-comments\/{comment}":{"put":{"description":"Update the text of a portfolio comment","operationId":"api_portfolio_comments_update","parameters":[{"name":"comment","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdatePortfolioCommentForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioCommentView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Delete a portfolio comment","operationId":"api_portfolio_comments_delete","parameters":[{"name":"comment","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/portfolio\/{entry}\/media":{"post":{"description":"Attach a media file to a portfolio entry","operationId":"api_portfolio_media_attach","parameters":[{"name":"entry","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AttachPortfolioMediaForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PortfolioMediaView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PortfolioMediaView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/portfolio-media\/{media}":{"delete":{"description":"Detach a media file from a portfolio entry","operationId":"api_portfolio_media_detach","parameters":[{"name":"media","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/students\/{student}\/activate":{"post":{"description":"Operator-side activation of an existing student account. Sets password (or generates one); the student personally confirms by changing the password on first login. Available to admins and to a parent of the student.","operationId":"api_student_activate","parameters":[{"name":"student","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ActivateStudentForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"StudentActivationView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/StudentActivationView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/profile\/social\/{provider}":{"delete":{"description":"Unlink a social provider from the current user account","operationId":"api_profile_social_unlink","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/students":{"get":{"description":"List all students. Filter: ?house=none for unassigned","operationId":"api_students_list","parameters":[{"name":"house","in":"query","required":false,"schema":{"type":"string"}},{"name":"pendingActivation","in":"query","required":false,"schema":{"$ref":"#\/components\/schemas\/BooleanType"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"AdminStudentRowView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AdminStudentRowView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/users\/{user}\/profile":{"get":{"description":"Get public profile for user","operationId":"api_user_public_profile","parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PublicProfileView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/PublicProfileView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/me\/children":{"get":{"description":"List linked student profiles for parent","operationId":"api_me_children","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChildrenListView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChildrenListView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/profile\/social\/apple":{"post":{"description":"Link Apple ID to current user account","operationId":"api_profile_social_apple_link","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/LinkSocialForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SocialLoginView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/SocialLoginView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/profile\/social\/yandex":{"post":{"description":"Link Yandex ID to current user account","operationId":"api_profile_social_yandex_link","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/LinkSocialForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SocialLoginView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/SocialLoginView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/users":{"get":{"description":"List school users for the chat user picker (teachers, parents).","operationId":"api_users_chat_picker","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatUserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChatUserView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/settings":{"put":{"description":"Update current user settings","operationId":"api_settings_update","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateSettingsForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SettingsView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/SettingsView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}},"get":{"description":"Get current user settings","operationId":"api_settings_get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SettingsView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/SettingsView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/profile\/avatar":{"delete":{"description":"Remove current user profile avatar","operationId":"api_profile_avatar_delete","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}},"put":{"description":"Set current user profile avatar","operationId":"api_profile_avatar_update","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateProfileAvatarForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/profile\/social":{"get":{"description":"List social accounts linked to the current user","operationId":"api_profile_social_list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SocialLoginView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/SocialLoginView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/profile":{"put":{"description":"Update current user profile (first name, last name, phone)","operationId":"api_profile_update","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateProfileForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/me\/active-child\/{student}":{"put":{"description":"Switch active child context for parent","operationId":"api_me_active_child_switch","parameters":[{"name":"student","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/data-exports\/{id}\/download":{"get":{"description":"Download a ready personal data export archive. The token is the sole credential \u2014 no JWT required.","operationId":"api_me_data_export_download","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":true,"schema":{"type":"string"},"description":"One-time download token sent in the export confirmation email"}],"security":[],"responses":{"302":{"$ref":"#\/components\/responses\/ZipDownload"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"410":{"$ref":"#\/components\/responses\/GoneError"},"200":{"description":"RedirectResponse","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/RedirectResponse"}},"required":["data"]}}}},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/users\/{user}\/points-history":{"get":{"description":"Cursor-paginated history of point transactions for a student","operationId":"api_user_points_history","parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"PointsHistoryItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PointsHistoryItemView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/me\/data-export":{"post":{"description":"Request personal data export for the current user","operationId":"api_me_data_export","security":[{"bearerAuth":[]}],"responses":{"202":{"$ref":"#\/components\/responses\/Accepted"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/mercure\/token":{"get":{"description":"Issue a Mercure subscriber JWT with auto-injected user notification topic","operationId":"api_mercure_token","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MercureTokenView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MercureTokenView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/feed\/{feed}\/views":{"get":{"description":"Get feed item view statistics","operationId":"api_feed_views_stats","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedViewStatsView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedViewStatsView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/translation\/{language}":{"get":{"description":"Get translation of a feed item. Returns 200 when ready, 202 while the translation job is queued, or 400 for an unsupported language code.","operationId":"api_feed_translation_get","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"language","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedTranslationView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedTranslationView"}},"required":["data"]}}}},"202":{"$ref":"#\/components\/responses\/TranslationPending"},"400":{"$ref":"#\/components\/responses\/BadRequestError"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/view":{"post":{"description":"Track a feed item view","operationId":"api_feed_view_track","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/comments\/{comment}":{"patch":{"description":"Update a comment on a feed item","operationId":"api_feed_comments_update","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateCommentForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedCommentView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Delete a comment from a feed item","operationId":"api_feed_comments_delete","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/likes":{"get":{"description":"List likes on a feed item","operationId":"api_feed_likes_list","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedLikeView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/FeedLikeView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/comments":{"post":{"description":"Add a comment to a feed item","operationId":"api_feed_comments_create","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreateCommentForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedCommentView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"get":{"description":"List comments on a feed item","operationId":"api_feed_comments_list","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedCommentView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/FeedCommentView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed\/{feed}\/like":{"post":{"description":"Toggle like on a feed item","operationId":"api_feed_like_toggle","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"LikeToggledView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/LikeToggledView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/feed":{"get":{"description":"Get unified feed (posts and events) with cursor-based pagination","operationId":"api_unified_feed_list","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["post","event"]}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","enum":["school","class"]}},{"name":"classroom","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/FeedItemView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/feed\/{feed}":{"get":{"description":"Get a single feed item (post or event) by ID","operationId":"api_feed_item_get","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedItemView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/admin\/push":{"post":{"description":"Send an admin push to school \/ class \/ class parents","operationId":"api_admin_push_send","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SendAdminPushForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"AdminPushResultView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AdminPushResultView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/notifications\/read-all":{"post":{"description":"Mark all notifications as read for the current user","operationId":"api_notification_mark_all_read","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UnreadCountView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UnreadCountView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/notifications":{"get":{"description":"List notifications for the current user","operationId":"api_notification_list","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["chat_message","post_created","post_comment","post_like","moderation_result","event_created","event_updated","event_cancelled","event_reminder","portfolio_entry","portfolio_updated","portfolio_comment","points_awarded","student_transferred","admin_push"]}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"NotificationView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/NotificationView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/devices":{"post":{"description":"Register FCM device token","operationId":"api_device_register","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RegisterDeviceForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"DeviceTokenView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/DeviceTokenView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/notifications\/unread-count":{"get":{"description":"Unread notifications count for the current user","operationId":"api_notification_unread_count","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UnreadCountView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UnreadCountView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/devices\/{device}":{"delete":{"description":"Deactivate a registered device token","operationId":"api_device_unregister","parameters":[{"name":"device","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/devices\/current":{"delete":{"description":"Deactivate the current installation device token for the authenticated user","operationId":"api_device_unregister_current","parameters":[{"name":"installationId","in":"query","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/notifications\/{notification}\/read":{"post":{"description":"Mark a notification as read","operationId":"api_notification_mark_read","parameters":[{"name":"notification","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"NotificationView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/NotificationView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/{house}\/points":{"get":{"description":"Get house points history","operationId":"api_house_points_history","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"schema":{"type":"integer"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HousePointTransactionView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"post":{"description":"Award points to a house","operationId":"api_house_points_award","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AwardHousePointsForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HousePointTransactionView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/point-reasons":{"get":{"description":"List current teacher\u0027s house point reasons","operationId":"api_house_point_reasons_list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HousePointReasonView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}},"post":{"description":"Create a house point reason","operationId":"api_house_point_reasons_create","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreateHousePointReasonForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HousePointReasonView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/houses\/reset-all":{"post":{"description":"Reset points for all houses","operationId":"api_house_points_reset_all","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HouseView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/houses\/rankings":{"get":{"description":"Get house rankings","operationId":"api_house_rankings","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"schema":{"type":"integer"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseRankingItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HouseRankingItemView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/houses\/my-contribution":{"get":{"description":"Get current user contribution to their house","operationId":"api_house_my_contribution","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MyHouseContributionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MyHouseContributionView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/houses\/{house}\/reset":{"post":{"description":"Reset all house points for the current period","operationId":"api_house_points_reset","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HouseView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/{house}":{"get":{"description":"Get house details","operationId":"api_house_get","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HouseView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/my-children-contribution":{"get":{"description":"Per-child house contribution for the current parent","operationId":"api_house_my_children_contribution","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChildHouseContributionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChildHouseContributionView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/houses":{"get":{"description":"List all houses","operationId":"api_house_list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HouseView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/houses\/point-reasons\/{reason}":{"delete":{"description":"Delete a house point reason","operationId":"api_house_point_reasons_delete","parameters":[{"name":"reason","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"put":{"description":"Update a house point reason","operationId":"api_house_point_reasons_update","parameters":[{"name":"reason","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateHousePointReasonForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointReasonView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HousePointReasonView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/{house}\/members":{"get":{"description":"List house members with classroom and points; optional ?classroom= filter.","operationId":"api_house_members_list","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}},{"name":"classroom","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HouseMemberView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/HouseMemberView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/houses\/{house}\/points\/{transaction}\/cancel":{"post":{"description":"Cancel a house point transaction","operationId":"api_house_points_cancel","parameters":[{"name":"house","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"HousePointTransactionView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/HousePointTransactionView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/invitations\/verify":{"post":{"description":"Verify activation invite token, return existing user info","operationId":"api_invitation_verify","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VerifyInvitationForm"}}}},"security":[],"responses":{"200":{"description":"InvitationInfoView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/InvitationInfoView"}},"required":["data"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/invitations\/send":{"post":{"description":"Send activation invite to existing CMS-created user. Backend resolves role and context from the user record.","operationId":"api_invitation_send","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SendInvitationForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"InvitationAcceptedView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/InvitationAcceptedView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/invitations\/complete":{"post":{"description":"Activate the account after a successful login with the invitation credentials. Records PII consent against the authenticated user and marks the invitation used. The authenticated user MUST match the invitation\u0027s target email.","operationId":"api_invitation_complete","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CompleteInvitationForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"InvitationAcceptedView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/InvitationAcceptedView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/chats\/{chat}\/messages\/{message}":{"delete":{"description":"Delete a message. mode=all removes it for everyone (author only); mode=self hides it only for the current user.","operationId":"api_chat_message_delete","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}},{"name":"message","in":"path","required":true,"schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["self","all"]}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}\/members":{"post":{"description":"Add a member to a custom group chat","operationId":"api_chat_member_add","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AddChatMemberForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatMemberView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatMemberView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}\/avatar":{"put":{"description":"Set avatar for a custom group chat","operationId":"api_chat_avatar_update","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateChatAvatarForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Remove avatar from a custom group chat","operationId":"api_chat_avatar_delete","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}\/typing":{"post":{"description":"Publish a typing indicator event","operationId":"api_chat_typing","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}\/members\/{user}":{"delete":{"description":"Remove a member from a custom group chat","operationId":"api_chat_member_remove","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/direct":{"post":{"description":"Get or create a direct chat with another user","operationId":"api_chat_direct_init","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/InitDirectChatForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"DirectChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/DirectChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/chats\/{chat}\/messages\/{message}\/read":{"post":{"description":"Mark a message as read","operationId":"api_chat_message_read","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}},{"name":"message","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MessageReadView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MessageReadView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}\/messages":{"post":{"description":"Send a message to a chat","operationId":"api_chat_message_send","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SendMessageForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MessageView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/MessageView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"get":{"description":"List messages in a chat","operationId":"api_chat_message_list","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor from the previous response metadata.next. Omit to fetch the first page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"MessageView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/MessageView"}},"metadata":{"$ref":"#\/components\/schemas\/PaginationMetadata"}},"required":["data","metadata"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats\/{chat}":{"get":{"description":"Get a chat by ID","operationId":"api_chat_get","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"delete":{"description":"Hide a chat for the current user only (soft delete).","operationId":"api_chat_delete_for_me","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"patch":{"description":"Rename a custom group chat","operationId":"api_chat_update","parameters":[{"name":"chat","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdateChatForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/chats":{"get":{"description":"List chats for the current user","operationId":"api_chat_list","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["group","custom_group","direct"]}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatListItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChatListItemView"}}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/chats\/custom":{"post":{"description":"Create a custom group chat","operationId":"api_chat_custom_group_create","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreateCustomGroupChatForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"ChatView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/ChatView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/posts\/{post}":{"delete":{"description":"Delete a post","operationId":"api_post_delete","parameters":[{"name":"post","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}},"put":{"description":"Update a post","operationId":"api_post_update","parameters":[{"name":"post","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/UpdatePostForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedItemView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"404":{"$ref":"#\/components\/responses\/NotFoundError"}}}},"\/api\/posts":{"post":{"description":"Create a new post","operationId":"api_post_create","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CreatePostForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"FeedItemView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/FeedItemView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/auth\/password-reset\/request":{"post":{"description":"Request password reset email","operationId":"api_auth_password_reset_request","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RequestPasswordResetForm"}}}},"security":[],"responses":{"200":{"description":"StatusMessageView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/StatusMessageView"}},"required":["data"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/auth\/social":{"post":{"description":"Login via social provider (Apple \/ Yandex)","operationId":"api_auth_social_login","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SocialLoginForm"}}}},"security":[],"responses":{"200":{"description":"SocialLoginResultView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/SocialLoginResultView"}},"required":["data"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/auth\/password-reset\/confirm":{"post":{"description":"Confirm password reset with token and new password","operationId":"api_auth_password_reset_confirm","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ConfirmPasswordResetForm"}}}},"security":[],"responses":{"200":{"description":"StatusMessageView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/StatusMessageView"}},"required":["data"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/me":{"get":{"description":"Get current authenticated user","operationId":"api_me","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"UserView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/UserView"}},"required":["data"]}}}},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/auth\/logout":{"post":{"description":"Logout: rotate user secret to invalidate all tokens","operationId":"api_auth_logout","security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"}}}},"\/api\/auth\/login":{"post":{"description":"Authenticate with email and password. Returns JWT token on success.","operationId":"api_auth_login","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/LoginForm"}}}},"security":[],"responses":{"401":{"$ref":"#\/components\/responses\/LoginUnauthorized"},"200":{"description":"AuthenticationSuccessView","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/AuthenticationSuccessView"}},"required":["data"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/me\/password":{"post":{"description":"Change current user password","operationId":"api_me_password_change","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ChangePasswordForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}},"\/api\/me\/password\/initial":{"post":{"description":"First-login set-password. Only allowed when mustChangePassword=true; otherwise use POST \/api\/me\/password.","operationId":"api_me_password_set_initial","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SetInitialPasswordForm"}}}},"security":[{"bearerAuth":[]}],"responses":{"204":{"$ref":"#\/components\/responses\/NoContent"},"401":{"$ref":"#\/components\/responses\/UnauthorizedError"},"403":{"$ref":"#\/components\/responses\/ForbiddenError"},"422":{"$ref":"#\/components\/responses\/ValidationError"}}}}},"components":{"schemas":{"MediaVariantView":{"properties":{"name":{"type":"string"},"mimeType":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"size":{"type":"integer"},"file":{"type":"string"}},"required":["name","mimeType"]},"MediaFileView":{"properties":{"id":{"type":"string","format":"uuid"},"mediaType":{"type":"string","enum":["image","video","document"]},"status":{"type":"string","enum":["uploaded","queued","processing","ready","failed"]},"fileSize":{"type":"integer"},"variants":{"type":"array","items":{"$ref":"#\/components\/schemas\/MediaVariantView"}},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","mediaType","status","fileSize","variants","createdDatetime"]},"UserBriefView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName"]},"AttendanceStudentSummaryRowView":{"properties":{"student":{"$ref":"#\/components\/schemas\/UserBriefView"},"houseName":{"type":"string"},"presentCount":{"type":"integer"},"absentCount":{"type":"integer"},"lateCount":{"type":"integer"}},"required":["student","presentCount","absentCount","lateCount"]},"ClassroomAttendanceSummaryView":{"properties":{"from":{"type":"string"},"to":{"type":"string"},"rows":{"type":"array","items":{"$ref":"#\/components\/schemas\/AttendanceStudentSummaryRowView"}}},"required":["rows"]},"SubjectView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"AttendanceEntryView":{"properties":{"id":{"type":"string","format":"uuid"},"student":{"$ref":"#\/components\/schemas\/UserBriefView"},"subject":{"$ref":"#\/components\/schemas\/SubjectView"},"date":{"type":"string"},"status":{"type":"string","enum":["present","absent","late"]}},"required":["id","student","subject","date","status"]},"AttendanceMarkingView":{"properties":{"date":{"type":"string"},"students":{"type":"array","items":{"$ref":"#\/components\/schemas\/UserBriefView"}},"subjects":{"type":"array","items":{"$ref":"#\/components\/schemas\/SubjectView"}},"entries":{"type":"array","items":{"$ref":"#\/components\/schemas\/AttendanceEntryView"}}},"required":["date","students","subjects","entries"]},"SaveAttendanceItemType":{"properties":{"student":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["present","absent","late"]}},"required":["student","status"]},"SaveAttendanceForm":{"properties":{"date":{"type":"string","format":"date"},"subject":{"type":"string","format":"uuid","nullable":true},"subjects":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true},"items":{"type":"array","items":{"$ref":"#\/components\/schemas\/SaveAttendanceItemType"},"minItems":1}},"required":["date","items"]},"UpdateClassGroupForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true}},"required":["name"]},"UserProfileView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName"]},"ClassGroupView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"members":{"type":"array","items":{"$ref":"#\/components\/schemas\/UserProfileView"}},"membersCount":{"type":"integer"}},"required":["id","name","members","membersCount"]},"AwardPointsForm":{"properties":{"students":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true},"group":{"type":"string","format":"uuid","nullable":true},"reason":{"type":"string","format":"uuid"},"value":{"type":"integer","minimum":-5,"maximum":5},"comment":{"type":"string","nullable":true}},"required":["reason","value"]},"PointReasonView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"type":"string","enum":["positive","negative"]},"defaultValue":{"type":"integer"},"icon":{"type":"string"}},"required":["id","name","type","defaultValue"]},"PointTransactionView":{"properties":{"id":{"type":"string","format":"uuid"},"value":{"type":"integer"},"comment":{"type":"string"},"isCancelled":{"type":"boolean"},"cancelledDatetime":{"type":"string","format":"date-time"},"createdDatetime":{"type":"string","format":"date-time"},"student":{"$ref":"#\/components\/schemas\/UserProfileView"},"reason":{"$ref":"#\/components\/schemas\/PointReasonView"},"author":{"$ref":"#\/components\/schemas\/UserProfileView"}},"required":["id","value","isCancelled","createdDatetime","student","reason","author"]},"ClassroomView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"academicYear":{"type":"string"},"isArchived":{"type":"boolean"},"teacher":{"$ref":"#\/components\/schemas\/UserProfileView"},"studentsCount":{"type":"integer"}},"required":["id","name","academicYear","isArchived","studentsCount"]},"ClassroomStudentView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"},"pointsBalance":{"type":"integer"},"houseName":{"type":"string"}},"required":["id","firstName","lastName","pointsBalance"]},"UpdatePointReasonForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string"},"defaultValue":{"type":"integer"},"icon":{"type":"string","maxLength":100,"nullable":true}},"required":["name","type","defaultValue"]},"CreatePointReasonForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string"},"defaultValue":{"type":"integer"},"icon":{"type":"string","maxLength":100,"nullable":true}},"required":["name","type","defaultValue"]},"ManageGroupMembersForm":{"properties":{"students":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["students"]},"CreateClassGroupForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true}},"required":["name"]},"UploadForm":{"properties":{"file":{"type":"string","format":"binary"}},"required":["file"]},"UpdateEventForm":{"properties":{"title":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","maxLength":5000,"nullable":true},"startDatetime":{"type":"string"},"endDatetime":{"type":"string","nullable":true},"scope":{"type":"string","enum":["school","class"]},"classroom":{"type":"string","format":"uuid","nullable":true},"place":{"type":"string","maxLength":255,"nullable":true}},"required":["title","startDatetime","scope"]},"FeedItemClassroomView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"FeedItemAuthorView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName","role"]},"FeedItemMediaView":{"properties":{"id":{"type":"string","format":"uuid"},"mediaFile":{"$ref":"#\/components\/schemas\/MediaFileView"},"sortOrder":{"type":"integer"}},"required":["id","mediaFile","sortOrder"]},"FeedItemView":{"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["post","event"]},"title":{"type":"string"},"text":{"type":"string"},"scope":{"type":"string","enum":["school","class"]},"classroom":{"$ref":"#\/components\/schemas\/FeedItemClassroomView"},"author":{"$ref":"#\/components\/schemas\/FeedItemAuthorView"},"moderationStatus":{"type":"string","enum":["pending","approved","rejected","review"]},"approvedDatetime":{"type":"string","format":"date-time"},"likesCount":{"type":"integer"},"commentsCount":{"type":"integer"},"viewsCount":{"type":"integer"},"isLikedByMe":{"type":"boolean"},"media":{"type":"array","items":{"$ref":"#\/components\/schemas\/FeedItemMediaView"}},"startDatetime":{"type":"string","format":"date-time"},"endDatetime":{"type":"string","format":"date-time"},"place":{"type":"string"},"createdDatetime":{"type":"string","format":"date-time"},"sourceLanguage":{"type":"string"}},"required":["id","type","title","text","scope","author","moderationStatus","likesCount","commentsCount","viewsCount","isLikedByMe","media","createdDatetime","sourceLanguage"]},"CreateEventForm":{"properties":{"title":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","maxLength":5000,"nullable":true},"startDatetime":{"type":"string"},"endDatetime":{"type":"string","nullable":true},"scope":{"type":"string","enum":["school","class"]},"classroom":{"type":"string","format":"uuid","nullable":true},"place":{"type":"string","maxLength":255,"nullable":true},"mediaFiles":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true}},"required":["title","startDatetime","scope"]},"HealthcheckView":{"properties":{"checks":{"type":"array","items":{"type":"object"}}},"required":["checks"]},"PortfolioAuthorView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName","role"]},"PortfolioMediaView":{"properties":{"id":{"type":"string","format":"uuid"},"mediaFile":{"$ref":"#\/components\/schemas\/MediaFileView"},"sortOrder":{"type":"integer"}},"required":["id","mediaFile","sortOrder"]},"PortfolioEntryView":{"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string"},"academicYear":{"type":"string"},"student":{"$ref":"#\/components\/schemas\/PortfolioAuthorView"},"author":{"$ref":"#\/components\/schemas\/PortfolioAuthorView"},"media":{"type":"array","items":{"$ref":"#\/components\/schemas\/PortfolioMediaView"}},"commentsCount":{"type":"integer"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","title","academicYear","student","author","media","commentsCount","createdDatetime"]},"CreatePortfolioCommentForm":{"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}},"required":["text"]},"PortfolioCommentView":{"properties":{"id":{"type":"string","format":"uuid"},"author":{"$ref":"#\/components\/schemas\/PortfolioAuthorView"},"text":{"type":"string"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","author","text","createdDatetime"]},"CreatePortfolioEntryForm":{"properties":{"title":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","maxLength":5000,"nullable":true},"mediaFiles":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true}},"required":["title"]},"UpdatePortfolioCommentForm":{"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}},"required":["text"]},"AttachPortfolioMediaForm":{"properties":{"mediaFile":{"type":"string","format":"uuid"}},"required":["mediaFile"]},"UpdatePortfolioEntryForm":{"properties":{"title":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","maxLength":5000,"nullable":true}},"required":["title"]},"ActivateStudentForm":{"properties":{"password":{"type":"string","format":"password","nullable":true},"generatePassword":{"type":"boolean","nullable":true}}},"StudentActivationView":{"properties":{"studentId":{"type":"string","format":"uuid"},"login":{"type":"string"},"generatedPassword":{"type":"string"},"activated":{"type":"boolean"}},"required":["studentId","login","activated"]},"BooleanType":{"properties":[]},"AdminStudentRowView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"emailConfirmed":{"type":"boolean"},"hasPassword":{"type":"boolean"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName","email","emailConfirmed","hasPassword"]},"PublicProfileView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"classroomName":{"type":"string"},"houseName":{"type":"string"},"houseColor":{"type":"string"},"pointsBalance":{"type":"integer"}},"required":["id","firstName","lastName","role","pointsBalance"]},"ClassroomBriefView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"HouseBriefView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]},"ChildProfileView":{"properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"},"isConfirmed":{"type":"boolean"},"hasPassword":{"type":"boolean"},"isActive":{"type":"boolean"},"classroom":{"$ref":"#\/components\/schemas\/ClassroomBriefView"},"house":{"$ref":"#\/components\/schemas\/HouseBriefView"}},"required":["id","email","firstName","lastName","isConfirmed","hasPassword","isActive"]},"ChildrenListView":{"properties":{"children":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChildProfileView"}}},"required":["children"]},"LinkSocialForm":{"properties":{"token":{"type":"string"}},"required":["token"]},"SocialLoginView":{"properties":{"id":{"type":"string","format":"uuid"},"provider":{"type":"string","enum":["apple","yandex"]},"linkedDatetime":{"type":"string","format":"date-time"}},"required":["id","provider","linkedDatetime"]},"ChatUserView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"}},"required":["id","firstName","lastName","role"]},"UpdateSettingsForm":{"properties":{"interfaceLanguage":{"type":"string","enum":["ru"]},"translationLanguage":{"type":"string","enum":["ru","tr"]},"pushChats":{"type":"boolean","nullable":true},"pushFeed":{"type":"boolean","nullable":true},"pushPortfolio":{"type":"boolean","nullable":true},"pushEvents":{"type":"boolean","nullable":true},"pushHouse":{"type":"boolean","nullable":true}},"required":["interfaceLanguage","translationLanguage"]},"SettingsView":{"properties":{"interfaceLanguage":{"type":"string","enum":["ru","en","tt","de","fr","zh","ar","es","tr"]},"translationLanguage":{"type":"string","enum":["ru","en","tt","de","fr","zh","ar","es","tr"]},"pushChats":{"type":"boolean"},"pushFeed":{"type":"boolean"},"pushPortfolio":{"type":"boolean"},"pushEvents":{"type":"boolean"},"pushHouse":{"type":"boolean"},"mustChangePassword":{"type":"boolean"}},"required":["interfaceLanguage","translationLanguage","pushChats","pushFeed","pushPortfolio","pushEvents","pushHouse","mustChangePassword"]},"UserView":{"properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string"},"encodedUserId":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"isActive":{"type":"boolean"},"firstName":{"type":"string"},"lastName":{"type":"string"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"},"mustChangePassword":{"type":"boolean"},"activeChild":{"$ref":"#\/components\/schemas\/ChildProfileView"}},"required":["id","email","encodedUserId","role","isActive","firstName","lastName","mustChangePassword"]},"UpdateProfileForm":{"properties":{"firstName":{"type":"string","maxLength":100},"lastName":{"type":"string","maxLength":100},"phone":{"type":"string","maxLength":20,"pattern":"\/^\\+?[\\d\\s\\-\\(\\)]+$\/","nullable":true}},"required":["firstName","lastName"]},"UpdateProfileAvatarForm":{"properties":{"avatar":{"type":"string","format":"uuid"}},"required":["avatar"]},"ResponseHeaderBag":{"properties":{"computedCacheControl":{"type":"array","items":{"type":"object"}},"cookies":{"type":"array","items":{"type":"object"}},"headerNames":{"type":"array","items":{"type":"object"}},"headers":{"type":"array","items":{"type":"object"}},"cacheControl":{"type":"array","items":{"type":"object"}}},"required":["computedCacheControl","cookies","headerNames","headers","cacheControl"]},"RedirectResponse":{"properties":{"targetUrl":{"type":"string"},"headers":{"$ref":"#\/components\/schemas\/ResponseHeaderBag"},"content":{"type":"string"},"version":{"type":"string"},"statusCode":{"type":"integer"},"statusText":{"type":"string"},"charset":{"type":"string"},"statusTexts":{"type":"array","items":{"type":"object"}}},"required":["targetUrl","headers","content","version","statusCode","statusText","statusTexts"]},"PointsHistoryItemView":{"properties":{"id":{"type":"string","format":"uuid"},"value":{"type":"integer"},"comment":{"type":"string"},"isCancelled":{"type":"boolean"},"reasonName":{"type":"string"},"classroomName":{"type":"string"},"authorFirstName":{"type":"string"},"authorLastName":{"type":"string"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","value","isCancelled","reasonName","classroomName","authorFirstName","authorLastName","createdDatetime"]},"MercureTopicsView":{"properties":{"notifications":{"type":"string"},"requested":{"type":"array","items":{"type":"object"}}},"required":["notifications","requested"]},"MercureTokenView":{"properties":{"token":{"type":"string"},"topics":{"$ref":"#\/components\/schemas\/MercureTopicsView"}},"required":["token","topics"]},"FeedViewerView":{"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":"string"},"lastName":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"viewedAt":{"type":"string","format":"date-time"}},"required":["id","firstName","lastName","role","viewedAt"]},"FeedViewStatsView":{"properties":{"viewsCount":{"type":"integer"},"viewers":{"type":"array","items":{"$ref":"#\/components\/schemas\/FeedViewerView"}}},"required":["viewsCount","viewers"]},"FeedTranslationView":{"properties":{"language":{"type":"string","enum":["ru","en","tt","de","fr","zh","ar","es","tr"]},"translatedFields":{"type":"array","items":{"type":"object"}},"translatedDatetime":{"type":"string","format":"date-time"}},"required":["language","translatedFields","translatedDatetime"]},"UpdateCommentForm":{"properties":{"text":{"type":"string","maxLength":2000}},"required":["text"]},"FeedCommentView":{"properties":{"id":{"type":"string","format":"uuid"},"author":{"$ref":"#\/components\/schemas\/FeedItemAuthorView"},"text":{"type":"string"},"createdDatetime":{"type":"string","format":"date-time"},"updatedDatetime":{"type":"string","format":"date-time"}},"required":["id","author","text","createdDatetime"]},"FeedLikeView":{"properties":{"id":{"type":"string","format":"uuid"},"user":{"$ref":"#\/components\/schemas\/FeedItemAuthorView"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","user","createdDatetime"]},"CreateCommentForm":{"properties":{"text":{"type":"string","maxLength":2000}},"required":["text"]},"LikeToggledView":{"properties":{"isLiked":{"type":"boolean"},"likesCount":{"type":"integer"}},"required":["isLiked","likesCount"]},"SendAdminPushForm":{"properties":{"audience":{"type":"string","enum":["school","class","class_parents"]},"classroom":{"type":"string","format":"uuid","nullable":true},"title":{"type":"string","minLength":1,"maxLength":255},"text":{"type":"string","minLength":1,"maxLength":1000}},"required":["audience","title","text"]},"AdminPushResultView":{"properties":{"recipientsCount":{"type":"integer"}},"required":["recipientsCount"]},"UnreadCountView":{"properties":{"unreadCount":{"type":"integer"}},"required":["unreadCount"]},"NotificationView":{"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["chat_message","post_created","post_comment","post_like","moderation_result","event_created","event_updated","event_cancelled","event_reminder","portfolio_entry","portfolio_updated","portfolio_comment","points_awarded","student_transferred","admin_push"]},"title":{"type":"string"},"body":{"type":"string"},"data":{"type":"array","items":{"type":"object"}},"isRead":{"type":"boolean"},"readDatetime":{"type":"string","format":"date-time"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","type","title","body","isRead","createdDatetime"]},"RegisterDeviceForm":{"properties":{"token":{"type":"string","maxLength":255},"platform":{"type":"string","enum":["ios","android","web"]},"installationId":{"type":"string","maxLength":64}},"required":["token","platform","installationId"]},"DeviceTokenView":{"properties":{"id":{"type":"string","format":"uuid"},"installationId":{"type":"string"},"platform":{"type":"string","enum":["ios","android","web"]},"isActive":{"type":"boolean"},"lastUsedDatetime":{"type":"string","format":"date-time"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","installationId","platform","isActive","lastUsedDatetime","createdDatetime"]},"HousePointReasonView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"type":"string","enum":["positive","negative"]},"defaultValue":{"type":"integer"},"icon":{"type":"string"}},"required":["id","name","type","defaultValue"]},"HousePointTransactionView":{"properties":{"id":{"type":"string","format":"uuid"},"value":{"type":"integer"},"comment":{"type":"string"},"isCancelled":{"type":"boolean"},"cancelledDatetime":{"type":"string","format":"date-time"},"createdDatetime":{"type":"string","format":"date-time"},"reason":{"$ref":"#\/components\/schemas\/HousePointReasonView"},"author":{"$ref":"#\/components\/schemas\/UserProfileView"},"student":{"$ref":"#\/components\/schemas\/UserProfileView"}},"required":["id","value","isCancelled","createdDatetime","reason","author"]},"AwardHousePointsForm":{"properties":{"student":{"type":"string","format":"uuid","nullable":true},"reason":{"type":"string","format":"uuid"},"value":{"type":"integer","minimum":-10,"maximum":10},"comment":{"type":"string","nullable":true}},"required":["reason","value"]},"HouseView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"icon":{"$ref":"#\/components\/schemas\/MediaFileView"},"color":{"type":"string"},"description":{"type":"string"},"motto":{"type":"string"},"membersCount":{"type":"integer"},"totalPoints":{"type":"integer"}},"required":["id","name","color","membersCount","totalPoints"]},"HouseRankingItemView":{"properties":{"house":{"$ref":"#\/components\/schemas\/HouseBriefView"},"points":{"type":"integer"},"rank":{"type":"integer"}},"required":["house","points","rank"]},"CreateHousePointReasonForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string"},"defaultValue":{"type":"integer"},"icon":{"type":"string","maxLength":100,"nullable":true}},"required":["name","type","defaultValue"]},"MyHouseContributionView":{"properties":{"houseId":{"type":"string","format":"uuid"},"houseName":{"type":"string"},"contribution":{"type":"integer"}},"required":["contribution"]},"ChildHouseContributionView":{"properties":{"student":{"$ref":"#\/components\/schemas\/UserBriefView"},"house":{"$ref":"#\/components\/schemas\/HouseBriefView"},"contribution":{"type":"integer"}},"required":["student","contribution"]},"UpdateHousePointReasonForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"type":{"type":"string"},"defaultValue":{"type":"integer"},"icon":{"type":"string","maxLength":100,"nullable":true}},"required":["name","type","defaultValue"]},"HouseMemberView":{"properties":{"id":{"type":"string","format":"uuid"},"student":{"$ref":"#\/components\/schemas\/UserBriefView"},"classroom":{"$ref":"#\/components\/schemas\/ClassroomBriefView"},"points":{"type":"integer"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","student","points","createdDatetime"]},"VerifyInvitationForm":{"properties":{"token":{"type":"string"}},"required":["token"]},"InvitationInfoView":{"properties":{"email":{"type":"string"},"role":{"type":"string","enum":["ROLE_SUPER_ADMIN","ROLE_ADMIN","ROLE_TEACHER","ROLE_PARENT","ROLE_STUDENT"]},"schoolName":{"type":"string"},"isEmailConfirmed":{"type":"boolean"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["email","role","schoolName","isEmailConfirmed"]},"SendInvitationForm":{"properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"InvitationAcceptedView":{"properties":{"accepted":{"type":"boolean"}},"required":["accepted"]},"CompleteInvitationForm":{"properties":{"token":{"type":"string"},"agreedToTerms":{"type":"boolean","nullable":true}},"required":["token"]},"AddChatMemberForm":{"properties":{"user":{"type":"string","format":"uuid"}},"required":["user"]},"ChatMemberView":{"properties":{"id":{"type":"string","format":"uuid"},"user":{"$ref":"#\/components\/schemas\/ChatUserView"},"joinedDatetime":{"type":"string","format":"date-time"},"isActive":{"type":"boolean"}},"required":["id","user","joinedDatetime","isActive"]},"UpdateChatAvatarForm":{"properties":{"avatar":{"type":"string","format":"uuid"}},"required":["avatar"]},"ChatClassroomView":{"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"MessagePreviewView":{"properties":{"id":{"type":"string","format":"uuid"},"authorName":{"type":"string"},"text":{"type":"string"},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","authorName","text","createdDatetime"]},"ChatView":{"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["group","custom_group","direct"]},"name":{"type":"string"},"classroom":{"$ref":"#\/components\/schemas\/ChatClassroomView"},"avatar":{"$ref":"#\/components\/schemas\/MediaFileView"},"unreadCount":{"type":"integer"},"lastMessage":{"$ref":"#\/components\/schemas\/MessagePreviewView"},"members":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChatMemberView"}},"createdDatetime":{"type":"string","format":"date-time"}},"required":["id","type","unreadCount","members","createdDatetime"]},"InitDirectChatForm":{"properties":{"targetUser":{"type":"string","format":"uuid"}},"required":["targetUser"]},"DirectChatView":{"properties":{"chat":{"$ref":"#\/components\/schemas\/ChatView"},"isNew":{"type":"boolean"}},"required":["chat","isNew"]},"MessageReadView":{"properties":{"id":{"type":"string","format":"uuid"},"user":{"$ref":"#\/components\/schemas\/ChatUserView"},"readDatetime":{"type":"string","format":"date-time"}},"required":["id","user","readDatetime"]},"SendMessageForm":{"properties":{"text":{"type":"string","maxLength":4096,"nullable":true},"mediaFiles":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true}}},"MessageMediaView":{"properties":{"id":{"type":"string","format":"uuid"},"mediaFile":{"$ref":"#\/components\/schemas\/MediaFileView"},"sortOrder":{"type":"integer"}},"required":["id","mediaFile","sortOrder"]},"MessageView":{"properties":{"id":{"type":"string","format":"uuid"},"author":{"$ref":"#\/components\/schemas\/ChatUserView"},"text":{"type":"string"},"media":{"type":"array","items":{"$ref":"#\/components\/schemas\/MessageMediaView"}},"isDeletedForAll":{"type":"boolean"},"createdDatetime":{"type":"string","format":"date-time"},"readBy":{"type":"array","items":{"$ref":"#\/components\/schemas\/MessageReadView"}}},"required":["id","author","text","media","isDeletedForAll","createdDatetime","readBy"]},"UpdateChatForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255}},"required":["name"]},"ChatListItemView":{"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["group","custom_group","direct"]},"name":{"type":"string"},"unreadCount":{"type":"integer"},"lastMessage":{"$ref":"#\/components\/schemas\/MessagePreviewView"}},"required":["id","type","unreadCount"]},"CreateCustomGroupChatForm":{"properties":{"name":{"type":"string","minLength":1,"maxLength":255},"avatar":{"type":"string","format":"uuid","nullable":true},"members":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true}},"required":["name"]},"CreatePostForm":{"properties":{"title":{"type":"string","maxLength":255},"text":{"type":"string","maxLength":5000},"scope":{"type":"string","enum":["school","class"]},"classroom":{"type":"string","format":"uuid","nullable":true},"mediaFiles":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true}},"required":["title","text","scope"]},"UpdatePostForm":{"properties":{"title":{"type":"string","maxLength":255},"text":{"type":"string","maxLength":5000}},"required":["title","text"]},"RequestPasswordResetForm":{"properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"StatusMessageView":{"properties":{"message":{"type":"string"}},"required":["message"]},"SocialLoginForm":{"properties":{"provider":{"type":"string","enum":["apple","yandex"]},"token":{"type":"string"}},"required":["provider","token"]},"SocialLoginResultView":{"properties":{"token":{"type":"string"},"user":{"$ref":"#\/components\/schemas\/UserView"}},"required":["token","user"]},"ConfirmPasswordResetForm":{"properties":{"token":{"type":"string"},"password":{"type":"string","format":"password"},"confirmPassword":{"type":"string","format":"password"}},"required":["token","password","confirmPassword"]},"LoginForm":{"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"}},"required":["email","password"]},"AuthenticationSuccessView":{"properties":{"user":{"$ref":"#\/components\/schemas\/UserView"},"token":{"type":"string"}},"required":["user","token"]},"ChangePasswordForm":{"properties":{"currentPassword":{"type":"string","format":"password"},"newPassword":{"type":"string","format":"password"},"confirmNewPassword":{"type":"string","format":"password"}},"required":["currentPassword","newPassword","confirmNewPassword"]},"SetInitialPasswordForm":{"properties":{"newPassword":{"type":"string","format":"password"},"confirmNewPassword":{"type":"string","format":"password"}},"required":["newPassword","confirmNewPassword"]},"PaginationMetadata":{"type":"object","description":"Cursor pagination metadata returned alongside any paginated list payload.\nEmit a follow-up request with `?cursor=\u003Cnext\u003E` to fetch the next page;\n`next` is null on the last page.\n","properties":{"cursor":{"type":"string","nullable":true,"description":"Cursor of the current page (echo of the request cursor)."},"next":{"type":"string","nullable":true,"description":"Cursor of the next page, or null if no more results."},"previous":{"type":"string","nullable":true,"description":"Cursor of the previous page, or null on the first page."},"limit":{"type":"integer","description":"Maximum number of items returned per page."}},"required":["limit"]}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"responses":{"TranslationPending":{"description":"Translation is being prepared asynchronously. Poll again in a few seconds.","content":{"application\/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"pending"}},"required":["status"]}}}},"RateLimitError":{"description":"Too many requests. Check the Retry-After header for the next allowed attempt time.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":429}},"required":["type","title","status"]}}}},"CsvDownload":{"description":"CSV file attachment. Check Content-Disposition for the filename.","content":{"text\/csv":{"schema":{"type":"string","format":"binary"}}}},"NoContent":{"description":"Operation succeeded; response has no body."},"Accepted":{"description":"Request accepted; processing continues asynchronously."},"ZipDownload":{"description":"ZIP archive attachment.","content":{"application\/zip":{"schema":{"type":"string","format":"binary"}}}},"GoneError":{"description":"The requested resource existed but has expired and is no longer available.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":410}},"required":["type","title","status"]}}}},"LoginUnauthorized":{"description":"Invalid credentials. The WWW-Authenticate: Bearer header is always present.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string","example":"Invalid credentials."},"status":{"type":"integer","example":401},"localisedMessage":{"type":"string","nullable":true,"description":"Translated error message for display."}},"required":["type","title","status"]}}}},"UnauthorizedError":{"description":"JWT token is missing, invalid, or expired.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":401}},"required":["type","title","status"]}}}},"ForbiddenError":{"description":"Authenticated user does not have permission to perform this action.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":403}},"required":["type","title","status"]}}}},"NotFoundError":{"description":"The requested resource was not found.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":404}},"required":["type","title","status"]}}}},"BadRequestError":{"description":"The request is malformed or contains an unsupported value.","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","example":400}},"required":["type","title","status"]}}}},"ValidationError":{"description":"Form validation failed. The violations array contains one entry per\ninvalid field. Each violation has a human-readable title and the\ndot-separated propertyPath indicating the invalid field.\n","content":{"application\/json":{"schema":{"type":"object","properties":{"type":{"type":"string","example":"https:\/\/symfony.com\/errors\/validation"},"title":{"type":"string","example":"Validation Failed"},"detail":{"type":"string","description":"Concatenation of all violation titles, newline-separated."},"violations":{"type":"array","items":{"type":"object","properties":{"propertyPath":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","nullable":true},"id":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}},"required":["propertyPath","title","id","parameters"]}}},"required":["type","title","detail","violations"]}}}}}}}