Admin builds the form → student uploads a file with their response → admin approves or rejects it. Swagger · Media upload test · Student payments
One form per school. POST creates it (409 if one already exists),
PATCH replaces its contents, DELETE soft-deletes it.
The form body is free-form JSON — the backend stores it as-is.
Enrolled students comes from GET /student, which only lists students whose
enrollment is approved and paid. Applicants walks
GET /student/enrollments and loads each one with GET /student/:id — that is how
you review a file before approving the enrollment. Both show
formBuilderResponse and the formBuilderFileReview block.
The form is fetched per school, so pick the school you applied to.
GET /school/:schoolId/form-builder needs only a valid token — no enrollment required.