Department and term codes
These methods return the code tables used by the lecture timetable screen of the school’s student information system (SIS): organization categories, terms, departments, course types and selective domains. No login is needed. Do not hard-code codes or names: get them from these methods and pass them on to the others. Department codes use the same system as the departmentCode in a logged-in student’s SIS result. Common rules are on Common rules.
Request parameters
Section titled “Request parameters”There are five methods: organization_categories(), terms(category_code), departments(category_code, year, semester_code), course_types(), selective_domains(). Node.js and Java use camelCase (organizationCategories(), courseTypes(), …), and in Node.js departments takes an object: departments({ categoryCode, year, semesterCode }).
| Parameter | Type | Required | Default | Meaning |
|---|---|---|---|---|
category_code |
string | required for terms, departments |
- | Organization category code. Pass the code that organization_categories() returned, not a hard-coded list |
year |
string | required for departments |
- | Year. Pass the year that terms(category_code) returned |
semester_code |
string | required for departments |
- | Term code (table below) |
The other three methods (organization_categories, course_types, selective_domains) take no parameters.
| Term code | Term |
|---|---|
10 |
1st semester |
11 |
summer session |
20 |
2nd semester |
21 |
winter session |
School request
- Endpoints under
POST https://sjpt.sejong.ac.kr/sch/sch/ext/SueOpenTimeQ/:doOnload.dofor organization categories, course types and selective domains,doYearsmtlist.dofor terms,doLesndeptgroup.dofor departments. The body is{"dm_search": {...}}JSON. - The department request’s
dm_searchcarriesORGN_CLSF_CD,YEAR,SMT_CDandYEAR_SMT(<year>/<term code>, for exampleyear/20). - Organization categories, course types and selective domains come from the same
doOnload.doanswer, but each method has its own cache entry.
Response data structure
Section titled “Response data structure”All return lists (OrganizationCategory, Term, Department, CourseType, SelectiveDomain). In the example JSON, field names are Python snake_case; Node.js and Java use camelCase (for example name_en is nameEn). School data changes, so the values are examples.
// terms("20")[{ "year": "2026", "semester_code": "20", "code": "2026/20", "name": "2026/2학기", "extra": {} }]
// organization_categories()[{ "code": "20", "name": "학부", "name_en": "Undergraduate", "extra": { "PRT_ORD": "200" } }]
// departments("20", "2026", "20")[{ "code": "3517", "level": "2", "college_code": "3500", "college_name": "인공지능융합대학", "unit_code": "3517", "unit_name": "AI로봇학과", "major_code": "", "major_name": "", "name_en": "College of AI Convergence Department of Artificial Intelligence and Robotics", "extra": { "DEPT_NM": "인공지능융합대학 AI로봇학과【3517 학부】", "ORGN_CLSF_CD": "20" }}]
// course_types()[{ "code": "11", "name": "교필", "category_code": "20", "extra": { "CURI_TYPE_FULL_NM": "교양필수" } }]
// selective_domains()[{ "code": "10", "name": "인성과도덕", "name_en": "Character & Morality", "extra": { "PRT_ORD": "1" } }]Missing values are empty strings, and every model has extra (a string map).
Organization category (OrganizationCategory)
Section titled “Organization category (OrganizationCategory)”| Field | School key | Meaning |
|---|---|---|
code |
COM_CD |
Category code (undergraduate 20, general graduate school 30, …). Pass it as category_code to other methods |
name, name_en |
CD_NM, CD_NM_ENG |
Korean and English name |
extra |
other fields | for example the display order PRT_ORD |
The school’s response has CD_ALIAS1 to CD_ALIAS3 fields, one of which holds a staff member’s name. The library neither reads them nor puts them in extra.
Term (Term)
Section titled “Term (Term)”| Field | School key | Meaning |
|---|---|---|
year |
YEAR |
Year (string) |
semester_code |
SMT_CD |
Term code (table above) |
code |
YEAR_SMT_CD |
In the form <year>/<term code> |
name |
YEAR_SMT_NM |
Name as the school writes it |
Department (Department)
Section titled “Department (Department)”| Field | School key | Meaning |
|---|---|---|
code |
DEPT_CD |
Department code, the same system as departmentCode in a student’s SIS result |
level |
DEPT_LEVEL_CD |
2 department or division, 3 major inside a division |
college_code, college_name |
DEPT_L_CD, DEPT_L_PRINT |
College code and clean name |
unit_code, unit_name |
DEPT_M_CD, DEPT_M_PRINT |
Department or division code and name |
major_code, major_name |
DEPT_S_CD, DEPT_S_PRINT |
Major code and name (only when level is 3) |
name_en |
DEPT_NM_ENG |
English name (empty on some rows) |
- When
levelis2,codeequalsunit_code. When it is3,codeequalsmajor_codeand the parent isunit_code. - The
*_PRINTnames are clean. The*_NMfields that land inextra(such asDEPT_NM) carry a decoration like【3517 학부】, and the library does not strip it. college_codeis not always a real college. Interdisciplinary majors and legacy grouping codes can appear, so use the code only as a join key.- Every school column outside the fields above goes to
extra.
Course type (CourseType) and selective domain (SelectiveDomain)
Section titled “Course type (CourseType) and selective domain (SelectiveDomain)”| Model | Fields | School keys |
|---|---|---|
CourseType |
code, name, category_code |
CURI_TYPE_CD, CURI_TYPE_CD_NM, ORGN_CLSF_CD |
SelectiveDomain |
code, name, name_en |
COM_CD, CD_NM, CD_NM_ENG |
These are codes with the same names as course_type_code and domain_code in course listings (Course listings).
- Cached per method and arguments for one day (86400 seconds by default). Departments are cached separately for each category, year and term, with one school request per call.
- A connection failure, timeout, missing dataset key or a
_SUBMIT_ERROR_answer from the school (the school can answer HTTP 200 with an error object) returns the last cached value or an empty list, without raising. - An empty list can be a valid answer: for example, some organization categories have no departments in a term.
- These five methods never raise for input problems.
Known limits
Section titled “Known limits”- Unofficial, unversioned endpoints. The school can change or remove them without notice.
- The department list differs by term. Departments are added and renamed, so always pass the term you want.
- This list holds the departments that offer courses in that term (for the timetable filter). It is not every administrative unit: non-academic units such as centers and offices are not included.
- That
codematches the student’s SIS department code holds for an undergraduate student account. Codes for graduate students, double majors and staff accounts may differ. - Contract source: spec/REFERENCE_DATA.md
Example code
Section titled “Example code”List<OrganizationCategory> categories = publicData.organizationCategories();List<Term> terms = publicData.terms("20"); // undergraduate termsList<Department> departments = publicData.departments("20", "2026", "20"); // undergraduate, term code 20 = 2nd semestercategories = public_data.organization_categories()terms = public_data.terms("20") # undergraduate termsdepartments = public_data.departments("20", "2026", "20") # undergraduate, term code 20 = 2nd semesterconst categories = await publicData.organizationCategories();const terms = await publicData.terms('20'); // undergraduate termsconst departments = await publicData.departments({ categoryCode: '20', year: '2026', semesterCode: '20' }); // undergraduate, term code 20 = 2nd semesterFor a full example that searches lectures from the department list, see Department and lecture search.
