Index: iknow-api/DTOs/AdminDTO.cs
===================================================================
--- iknow-api/DTOs/AdminDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
+++ iknow-api/DTOs/AdminDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
@@ -0,0 +1,121 @@
+namespace iknow_api.DTOs
+{
+    // ---------- UC012 subjects ----------
+
+    public class AdminSubjectDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public string? Code { get; set; }
+        public int AwardedCredits { get; set; }
+        public int? DependencyCredit { get; set; }
+        public List<SubjectMajorDto> Majors { get; set; } = new();
+        public List<SubjectRefDto> Prerequisites { get; set; } = new();
+        /// <summary>How many enrolments already contain this subject; it cannot be deleted while this is above zero.</summary>
+        public int EnrolledCount { get; set; }
+    }
+
+    public class SubjectMajorDto
+    {
+        public int MajorId { get; set; }
+        public string? MajorName { get; set; }
+        public int MandatorySemester { get; set; }
+    }
+
+    public class SubjectRefDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public string? Code { get; set; }
+    }
+
+    public class SubjectWriteDto
+    {
+        public string? Name { get; set; }
+        public string? Code { get; set; }
+        public int AwardedCredits { get; set; }
+        public int? DependencyCredit { get; set; }
+    }
+
+    public class MajorLinkDto
+    {
+        public int MajorId { get; set; }
+        public int MandatorySemester { get; set; }
+    }
+
+    public class PrerequisiteDto
+    {
+        public int DependencyId { get; set; }
+    }
+
+    // ---------- UC013 semesters ----------
+
+    public class AdminSemesterDto
+    {
+        public int Id { get; set; }
+        public int Year { get; set; }
+        public string? Type { get; set; }
+        public string? Name { get; set; }
+        public int EnrolmentCount { get; set; }
+        /// <summary>Subjects with no professor teaching them in this semester.</summary>
+        public List<SubjectRefDto> UncoveredSubjects { get; set; } = new();
+    }
+
+    public class SemesterWriteDto
+    {
+        public int Year { get; set; }
+        /// <summary>"winter" or "summer".</summary>
+        public string? Type { get; set; }
+    }
+
+    // ---------- UC014 schedule ----------
+
+    public class ScheduleDto
+    {
+        public int SemesterId { get; set; }
+        public string? SemesterName { get; set; }
+        public List<ScheduleRowDto> Assignments { get; set; } = new();
+        public List<ProfessorLoadDto> Load { get; set; } = new();
+        public List<SubjectRefDto> UncoveredSubjects { get; set; } = new();
+        public List<SubjectRefDto> AllSubjects { get; set; } = new();
+        public List<ProfessorRefDto> Professors { get; set; } = new();
+    }
+
+    public class ScheduleRowDto
+    {
+        public int SubjectId { get; set; }
+        public string? SubjectName { get; set; }
+        public string? SubjectCode { get; set; }
+        public int ProfessorId { get; set; }
+        public string? ProfessorName { get; set; }
+    }
+
+    public class ProfessorRefDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+    }
+
+    public class ProfessorLoadDto
+    {
+        public int ProfessorId { get; set; }
+        public string? ProfessorName { get; set; }
+        public int Subjects { get; set; }
+    }
+
+    public class ScheduleWriteDto
+    {
+        public int ProfessorId { get; set; }
+        public int SemesterId { get; set; }
+        public int SubjectId { get; set; }
+    }
+
+    // ---------- shared ----------
+
+    public class AdminResultDto
+    {
+        public bool Ok { get; set; }
+        public string? Message { get; set; }
+        public int? Id { get; set; }
+    }
+}
Index: iknow-api/DTOs/EnrollmentDTO.cs
===================================================================
--- iknow-api/DTOs/EnrollmentDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
+++ iknow-api/DTOs/EnrollmentDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
@@ -0,0 +1,57 @@
+namespace iknow_api.DTOs
+{
+    /// <summary>Everything the enrolment form needs to render.</summary>
+    public class EnrollmentOptionsDto
+    {
+        /// <summary>How many subjects an enrolment must contain.</summary>
+        public int RequiredSubjects { get; set; }
+
+        /// <summary>Semesters this student has not enrolled in yet.</summary>
+        public List<SemesterOptionDto> Semesters { get; set; } = new();
+
+        public List<MajorOptionDto> Majors { get; set; } = new();
+
+        /// <summary>The major from the most recent enrolment, if there is one.</summary>
+        public int? DefaultMajorId { get; set; }
+    }
+
+    public class SemesterOptionDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public int Year { get; set; }
+        public string? Type { get; set; }
+    }
+
+    public class MajorOptionDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public List<SubjectOptionDto> Subjects { get; set; } = new();
+    }
+
+    public class SubjectOptionDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public string? Code { get; set; }
+        public int Credits { get; set; }
+        public int MandatorySemester { get; set; }
+        /// <summary>True when the student already passed this subject.</summary>
+        public bool AlreadyPassed { get; set; }
+    }
+
+    public class EnrollSemesterRequestDto
+    {
+        public int SemesterId { get; set; }
+        public int MajorId { get; set; }
+        public List<int> SubjectIds { get; set; } = new();
+    }
+
+    public class EnrollSemesterResultDto
+    {
+        public bool Ok { get; set; }
+        public string? Message { get; set; }
+        public int? EnrolledSemesterId { get; set; }
+    }
+}
Index: iknow-api/DTOs/ProfDTO.cs
===================================================================
--- iknow-api/DTOs/ProfDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
+++ iknow-api/DTOs/ProfDTO.cs	(revision ea405569ef29f56fbfc4d77708b6b3faf9286097)
@@ -0,0 +1,36 @@
+namespace iknow_api.DTOs
+{
+    /// <summary>One subject a professor teaches, with the students enrolled in it.</summary>
+    public class SubjectStudentsDto
+    {
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        public string? Code { get; set; }
+        public List<EnrolledStudentDto> Users { get; set; } = new();
+    }
+
+    public class EnrolledStudentDto
+    {
+        /// <summary>users.id - what the grading endpoints expect as StudentId.</summary>
+        public int Id { get; set; }
+        public string? Name { get; set; }
+        /// <summary>users.index - the number a professor actually recognises.</summary>
+        public string? Index { get; set; }
+        /// <summary>0 when the subject has not been graded yet.</summary>
+        public int Grade { get; set; }
+        public string? Semester { get; set; }
+    }
+
+    public class GradeRequestDto
+    {
+        public int StudentId { get; set; }
+        public int SubjectId { get; set; }
+        public int Grade { get; set; }
+    }
+
+    public class GradeResultDto
+    {
+        public bool Ok { get; set; }
+        public string? Message { get; set; }
+    }
+}
