Skip to content

Academic calendar (undergraduate and graduate)

Give a date range and get the academic calendar with titles, start dates and end dates. No login is needed. Undergraduate and graduate schedules come from different school sources, so there are two methods. calendar reads the homepage calendar (undergraduate 0001, graduate 0002 to 0007); graduate_calendar reads the per-site graduate school calendars. Both return the same result model (CalendarEvent), but the date formats differ. For a widget that shows the next 30 days, see Academic calendar widget. Common rules are on Common rules.

Parameter Type Required Default Meaning
start (calendar) string yyyy-MM-dd required none Start of the range
end (calendar) string yyyy-MM-dd required none End of the range. Several months can be read in one call
category_code (calendar) string optional 0001 Selects the category: 0001 undergraduate, 0002 to 0007 graduate. Check the category name in the result’s category_name
site_id (graduate_calendar) string required none The graduate school’s site name (for example graduate, gsi, mba). The caller passes it, so a newly created graduate school needs no release. It becomes a host name, so it must match [a-z0-9][a-z0-9-]{0,30}, otherwise INVALID_INPUT with no request
year (graduate_calendar) integer required none Year (Node.js accepts a number or a string)
month (graduate_calendar) integer required none Month (Node.js accepts a number or a string)
  • Naming: Python uses snake_case, Node.js and Java use camelCase (categoryCode, siteId). Node.js takes one object: calendar({ start, end, categoryCode? }), graduateCalendar({ siteId, year, month }). Java is calendar(startDate, endDate), calendar(startDate, endDate, categoryCode) and graduateCalendar(siteId, year, month); the two-argument version uses 0001.
  • calendar school request: GET https://www.sejong.ac.kr/kor/academics/academic-calendar.do?mode=getCalendarData&start=<yyyy-MM-dd>&end=<yyyy-MM-dd>&collDiv=<code>, answer array data.
  • graduate_calendar school request: GET https://<site_id>.sejong.ac.kr/_custom/sejong/_app/calendar-graduate/proc/getCalendarData.jsp?year=<yyyy>&month=<m>&siteId=<site_id>.
  • items in the answer is a JSON string, so the library parses it once more (an array is accepted too). If success is not true or items is missing, it counts as a school-side failure. A month with no events is a normal answer.

Example of calendar (field names in Python style; Node.js and Java use camelCase). School data changes, so the values are examples.

[
{
"year": "2026", "month": "3", "category_code": "0001", "category_name": "Undergraduate",
"title": "Start of classes", "title_en": "Start of classes",
"start_date": "2026-03-02", "end_date": "2026-03-02", "extra": {}
}
]

Example of graduate_calendar. Dates are MM.dd, and extra carries the day of the week.

[
{
"year": "2026", "month": "3", "category_code": "0002", "category_name": "Graduate school",
"title": "Thesis submission", "title_en": "Thesis submission",
"start_date": "03.04", "end_date": "03.10", "extra": { "frDtKo": "Wed", "toDtKo": "Tue" }
}
]

All fields are strings, and a missing value is an empty string.

Field School key Meaning
year, month scmYear, scmMonth Year and month the event belongs to
category_code, category_name collDiv, collDivNm Category code and name (for example 0001)
title scmSubject Title (school’s own text)
title_en scmSubjectEng English title
start_date, end_date frDt, toDt Start and end date
extra other fields For example frDtKo, toDtKo of graduate_calendar (day of the week of each date)
Method start_date / end_date format Note
calendar yyyy-MM-dd String order equals date order
graduate_calendar MM.dd The year comes from the row’s year; a range crossing year end is not expanded

Convert them yourself when merging both into one list. The library does not convert.

  • Cached for one day (86400 seconds by default) per method, category or site, and range. One call sends one request.
  • A school failure (connection, timeout, bad answer, missing expected key) returns the last cached value or an empty list. With no cache, it returns an empty list without a request for 60 seconds (default).
  • The only exception is a malformed site name in graduate_calendar (INVALID_INPUT). calendar never raises.
  • An empty list cannot tell “no events in that range” from “a problem on the school side”.
  • Titles are the school’s own text. If the school changes wording they change, so do not branch on titles.
  • graduate_calendar returns only MM.dd, so the end year of an event crossing year end is unknown.
  • Which graduate school each calendar code 0002 to 0007 stands for, check in the result’s category_name.
  • The sites share a similar screen, but answers can differ per site, so try your own site_id.
  • Business periods that need login are not part of these methods (Business periods).
  • Contract source: spec/PUBLIC_DATA.md
// Undergraduate calendar (yyyy-MM-dd)
List<CalendarEvent> events = publicData.calendar("2026-10-30", "2026-11-30");
// Graduate site calendar (site name, year, month)
List<CalendarEvent> graduateEvents = publicData.graduateCalendar("graduate", 2026, 10);