---
title: "Get Schedule Details"
method: GET
path: "/schedules/{schedule_id}/details"
---

# Get Schedule Details

`GET /schedules/{schedule_id}/details`

Return the submitted configuration and generation count for one session.

Args:
    schedule_id: Unique identifier returned by schedule submission.

Returns:
    The full combined configuration augmented with session id and current count.

Raises:
    HTTPException: Status 404 when the session does not exist, or status 422 if
        its queued scheduler initialization fails.

Behavior:
    Access refreshes the session's idle timestamp and awaits scheduler
    construction so failed initialization cannot masquerade as a usable session.
    The endpoint reports retained results but does not initialize or advance the
    model generator.

## Path parameters

- `schedule_id` string, required

## Response `200`

Successful Response

- ScheduleDetailsResponse — Response model for schedule details requests. Inherits all fields from CombinedConfig and adds: **Usage:** ```python ScheduleDetailsResponse(schedule_id='...', total_generated=0, **combined.model_dump()) ``` **Fields:** - schedule_id: Unique identifier for the schedule session - total_generated: Total number of schedules generated
  - `config` SchedulerConfigOutput, required — Represents a scheduler configuration. **Usage:** ```python SchedulerConfig( rooms=[RoomConfig(name="Room 101", capacity=40)], labs=[LabConfig(name="Lab 101", capacity=24)], courses=[...], faculty=[...], ) ``` Python type: `SchedulerConfig`.
    - `rooms` RoomConfigOutput[], required — List of available room definitions Python type: `list[RoomConfig]`.
      - `name` string, required — Unique, nonblank room name used by references and schedule output Python type: `str`.
      - `capacity` integer, required — Maximum number of students the room can accommodate Python type: `int`.
      - `features` string[] — Facility and equipment feature tags supplied by this room Python type: `set[str]`.
      - `times` object, nullable — Optional weekday room availability windows; null means unrestricted availability Python type: `dict[Day, list[TimeRange]] | None`.
    - `labs` LabConfigOutput[], required — List of available lab definitions Python type: `list[LabConfig]`.
      - `name` string, required — Unique, nonblank lab name used by references and schedule output Python type: `str`.
      - `capacity` integer, required — Maximum number of students the lab can accommodate Python type: `int`.
      - `features` string[] — Facility and equipment feature tags supplied by this lab Python type: `set[str]`.
      - `times` object, nullable — Optional weekday lab availability windows; null means unrestricted availability Python type: `dict[Day, list[TimeRange]] | None`.
    - `courses` CourseConfigOutput[], required — List of course configurations Python type: `list[CourseConfig]`.
      - `course_id` string, required — Course name Python type: `Course`.
      - `section_id` string, nullable — Optional stable section suffix; null uses the generated zero-padded input-order number Python type: `str | None`.
      - `credits` integer, required — Number of credit hours Python type: `int`.
      - `capacity` integer, required — Expected section enrollment that any assigned rooms and labs must accommodate Python type: `int`.
      - `room` Room[], required — Allowed room names; empty is valid only for compatible patterns that do not occupy a room Python type: `list[Room]`.
      - `lab` Lab[] — Acceptable labs; an empty list means the course has no lab meeting Python type: `list[Lab]`.
      - `conflicts` Course[], required — Base course IDs whose sections cannot overlap; an empty list means no declared conflicts Python type: `list[Course]`.
      - `faculty` Faculty[], nullable, required — Non-empty faculty candidates, or null to derive candidates from faculty course-preference keys Python type: `list[Faculty] | None`.
      - `modality` 'in_person' | 'online' | 'hybrid' — Required mixture of meeting delivery modes for a course section. Python type: `CourseModality`.
      - `required_room_features` string[] — Feature tags every assigned lecture room must provide Python type: `set[str]`.
      - `required_lab_features` string[] — Feature tags every assigned lab must provide Python type: `set[str]`.
      - `reserve_room_during_lab` boolean — Whether the lab meeting also occupies the section's assigned lecture room Python type: `bool`.
    - `faculty` FacultyConfigOutput[], required — List of faculty configurations Python type: `list[FacultyConfig]`.
      - `name` string, required — Faculty name Python type: `Faculty`.
      - `maximum_credits` integer, required — Maximum credit hours they can teach Python type: `int`.
      - `maximum_days` integer — Maximum number of days they are willing to teach (0-5, optional) Python type: `int`.
      - `minimum_credits` integer, required — Minimum credit hours they must teach Python type: `int`.
      - `unique_course_limit` integer, required — Maximum number of different courses they can teach Python type: `int`.
      - `times` object, required — Availability ranges keyed by weekday; omitted days and empty lists mean unavailable Python type: `dict[Day, list[TimeRange]]`.
      - `course_preferences` object — Dictionary mapping course IDs to preference scores Python type: `dict[Course, Preference]`.
      - `room_preferences` object — Dictionary mapping room IDs to preference scores Python type: `dict[Room, Preference]`.
      - `lab_preferences` object — Dictionary mapping lab IDs to preference scores Python type: `dict[Lab, Preference]`.
      - `mandatory_days` Day[] — Set of days the faculty must teach on Python type: `set[Day]`.
  - `time_slot_config` TimeSlotConfigOutput, required — Represents a time slot configuration. **Usage:** ```python TimeSlotConfig(times={...}, classes=[...]) ``` Python type: `TimeSlotConfig`.
    - `times` object, required — Time blocks keyed by weekday; every Monday-Friday list must be non-empty Python type: `dict[Day, list[TimeBlock]]`.
    - `classes` ClassPattern[], required — Meeting patterns; at least one pattern must be enabled Python type: `list[ClassPattern]`.
      - `credits` integer, required — Number of credit hours Python type: `int`.
      - `meetings` Meeting[], required — List of meeting times Python type: `list[Meeting]`.
        - `day` 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI', required — Day of the week Python type: `Day`.
        - `start_time` string — Time in HH:MM format Python type: `TimeString`.
        - `duration` integer, required — Duration of the meeting in minutes Python type: `int`.
        - `lab` boolean — Whether this is the pattern's single lab meeting Python type: `bool`.
        - `delivery` 'in_person' | 'online' — Delivery mode for one generated meeting. Python type: `DeliveryMode`.
      - `disabled` boolean — Whether the pattern is disabled Python type: `bool`.
      - `start_time` string — Time in HH:MM format Python type: `TimeString`.
    - `max_time_gap` integer — Maximum gap in minutes used to determine whether meetings are adjacent Python type: `int`.
    - `min_time_overlap` integer — Minimum clock-time overlap in minutes between meetings on different pattern days Python type: `int`.
  - `limit` integer — Maximum number of schedules to generate
  - `optimizer_flags` OptimizerFlags[] — List of optimizer flags
  - `schedule_id` string, required
  - `total_generated` integer, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-07-20** `f728bfcee693` — 3 breaking, 15 info
  - the `config/courses/items/room` response property's minItems was decreased from `1` to `0` for the response status `200`
  - the `config/labs/items/` response's property type changed from `string` to `object` for status `200`
  - the `config/rooms/items/` response's property type changed from `string` to `object` for status `200`
  - added the optional property `config/courses/items/modality` to the response with the `200` status
  - …14 more
- **2026-07-19** `56f0e753f2e4` — 2 breaking
  - response property `config/courses/items/faculty` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - the `config/courses/items/faculty` response property's minItems was decreased from `1` to `0` for the response status `200`
- **2026-07-19** `a414b25abf70` — 1 breaking
  - the response property `config/courses/items/lab` became optional for the status `200`

[Change history](https://skmtc.dev/mucsci/apis/course-scheduler-api/changes/schedules/:schedule_id/details/get.md)

---

[API](https://skmtc.dev/mucsci/apis/course-scheduler-api.md) · [All operations](https://skmtc.dev/mucsci/apis/course-scheduler-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/mucsci/course-scheduler-api/revisions/592f7d3013d3/schema)
