Extracurricular programs
Query the schedule that the school’s extracurricular program portal (do.sejong.ac.kr) serves publicly, by date range. No login is needed. It includes the category, start and end time, location, description and detail address. Common rules are on Common rules.
Request parameters
Section titled “Request parameters”| Parameter | Type | Required | Default | Meaning |
|---|---|---|---|---|
start |
string yyyy-MM-dd |
required | none | Start of the range |
end |
string yyyy-MM-dd |
required | none | End of the range |
category |
string | optional | "" |
The school’s category value. Empty returns all. Check category names in the result’s category_title |
- Naming: Python uses
snake_case, Node.js and Java usecamelCase. Node.js isextracurricularEvents({ start, end, category = '' }); Java isextracurricularEvents(startDate, endDate)andextracurricularEvents(startDate, endDate, category)(pass""to leave the optional one empty). - School request:
POST https://do.sejong.ac.kr/ko/process/schedule/getEvents, formcid=eco,category,start,end,start_year,end_year(the year fields are the first four characters of each date), answer arrayevents. - Form request headers are
application/x-www-form-urlencoded; charset=UTF-8andX-Requested-With: XMLHttpRequest.
Response data structure
Section titled “Response data structure”A list of ExtracurricularEvent (field names in Python style; Node.js and Java use camelCase). School data changes, so the values are examples.
[ { "id": "event-id", "title": "Program title", "start": "2026-03-10T14:00:00+09:00", "end": "2026-03-10T16:00:00+09:00", "category_title": "Category name", "url": "https://do.sejong.ac.kr/ko/program/all/view/0000", "description": "Program description", "location": "Place" }]All are strings, and a missing value is an empty string. This model has no extra.
| Field | School key | Meaning |
|---|---|---|
id |
id |
Program number |
title |
title |
Title |
start, end |
start, end |
Start and end (date-time strings, school’s own text) |
category_title |
category_title |
Category name |
url |
data.url |
Detail address |
description |
data.description |
Description |
location |
data.location |
Place |
url, description and location are read from the data object of the school answer.
Failure behaviour
Section titled “Failure behaviour”- Cached for one day (86400 seconds by default) per range and category. One call sends one request.
- A school failure (connection, timeout, bad answer, no
events) returns the last cached value or an empty list. With no cache, it returns an empty list without a request for 60 seconds (default). - This method never raises.
- An empty list cannot tell “no programs in that range” from “a problem on the school side”.
Known limits
Section titled “Known limits”- No list of usable
categoryvalues is provided. Check category names in the result’scategory_title. startandendare in the school’s own format, so check real values before parsing.- The maximum range of one call is not specified, so try a real call before using a long range.
- Contract source: spec/PUBLIC_DATA.md
Example code
Section titled “Example code”List<ExtracurricularEvent> events = publicData.extracurricularEvents("2026-10-01", "2026-10-31");events = public_data.extracurricular_events("2026-10-01", "2026-10-31")for event in events: print(event.start, event.title, event.location)const events = await publicData.extracurricularEvents({ start: '2026-10-01', end: '2026-10-31' });