API 문서
오늘시간표 Open API는 학교 홈페이지의 가정통신문과 급식 사진을 REST + JSON으로 제공합니다. 이 문서 하나면 연동에 필요한 모든 내용을 확인할 수 있습니다.
개요
Base URL
https://api.onultime.com
- 모든 응답은
application/json(UTF-8)입니다. - 모든 엔드포인트는 CORS를 허용하므로 브라우저에서 바로 호출할 수 있습니다.
- 응답은 최대 24시간 캐시됩니다. 실시간성이 필요한 용도에는 적합하지 않습니다.
인증
모든 데이터 엔드포인트는 API 키가 필요합니다. 키는 키 발급 페이지에서 카카오 로그인으로만 발급됩니다 (카카오 계정당 1개, 3초 소요).
발급받은 키를 X-API-Key 헤더로 보내세요. 헤더를 쓸 수 없는 환경이면 ?key= 쿼리 파라미터도 지원합니다.
curl "$BASE/v1/notices?officeCode=J10&schoolCode=7611009" \ -H "X-API-Key: YOUR_KEY"
호출 한도
| 항목 | 기본값 |
|---|---|
| 일일 호출 한도 | 키당 1,000회 (한국 시간 자정 리셋) |
| 한도 초과 시 | 429 Too Many Requests |
더 큰 한도가 필요하면 이메일로 사용 목적과 함께 문의해주세요.
학교 코드 찾기
학교는 NEIS 표준 코드 2개로 식별합니다.
| 파라미터 | NEIS 필드 | 예시 |
|---|---|---|
officeCode | ATPT_OFCDC_SC_CODE (시도교육청코드) | 경기 J10, 서울 B10 |
schoolCode | SD_SCHUL_CODE (행정표준코드) | 7611009 (초지중학교) |
학교명으로 schoolCode를 찾으려면 NEIS 학교기본정보 API를 사용하세요 (키 없이 테스트 가능). 결과의 SD_SCHUL_CODE가 학교 코드입니다:
curl "https://open.neis.go.kr/hub/schoolInfo?SCHUL_NM=초지중학교&Type=json"
시도교육청코드(officeCode) 표
📥 시도교육청코드.xlsx 다운로드 — 전국 17개 시도교육청코드 목록
| officeCode | 시도교육청 | officeCode | 시도교육청 |
|---|---|---|---|
B10 | 서울 | J10 | 경기 |
C10 | 부산 | K10 | 강원 |
D10 | 대구 | M10 | 충북 |
E10 | 인천 | N10 | 충남 |
F10 | 광주 | P10 | 전북 |
G10 | 대전 | Q10 | 전남 |
H10 | 울산 | R10 | 경북 |
I10 | 세종 | S10 | 경남 |
T10 | 제주 | ||
GET/v1/notices
학교의 가정통신문·공지사항 목록을 작성자와 첨부파일 포함으로 가져옵니다.
쿼리 파라미터
| 이름 | 타입 | 설명 |
|---|---|---|
officeCode 필수 | string | 시도교육청코드 |
schoolCode 필수 | string | 행정표준코드 |
page 선택 | number | 페이지 번호. 기본 1, 최대 10 |
응답
{
"school": {
"officeCode": "J10",
"schoolCode": "7611009",
"homepage": "https://choji-m.goeas.kr"
},
"page": 1,
"notices": [
{
"title": "2026. 7. 21.(화) 방학식 일과 안내 가정통신문",
"date": "2026.07.13",
"writer": "최지혜",
"boardName": "가정통신문",
"nttSn": "1521211",
"detailUrl": "https://choji-m.goeas.kr/choji-m/na/ntt/selectNttInfo.do?mi=2412&bbsId=5802&nttSn=1521211",
"files": [
{
"name": "방학식 일과 안내.hwp",
"url": "https://choji-m.goeas.kr/upload/…/xxxx.hwp"
}
]
}
]
}
| 필드 | 설명 |
|---|---|
title | 게시글 제목 (새글·공지 등 뱃지 텍스트 제거됨) |
date | 등록일 YYYY.MM.DD |
writer | 작성자. 게시판이 노출하지 않으면 빈 문자열 |
boardName | 가정통신문 · 공지사항 · 알림 |
nttSn | 게시글 고유 번호 (중복 제거용 키로 사용 권장) |
detailUrl | 원문 페이지 URL. /v1/notices/detail에 그대로 전달 |
files | 첨부파일 배열 {name, url} |
GET/v1/notices/detail
가정통신문 1건의 본문 텍스트·첨부파일·본문 이미지를 가져옵니다.
쿼리 파라미터
| 이름 | 타입 | 설명 |
|---|---|---|
detailUrl 필수 | string | /v1/notices 응답의 detailUrl. URL 인코딩 필요 |
curl -G "$BASE/v1/notices/detail" \ --data-urlencode "detailUrl=https://choji-m.goeas.kr/choji-m/na/ntt/selectNttInfo.do?mi=2412&bbsId=5802&nttSn=1521211" \ -H "X-API-Key: YOUR_KEY"
응답
{
"content": "학부모님 안녕하십니까 … (최대 2,000자)",
"files": [ { "name": "방학식 일과 안내.hwp", "url": "https://…" } ],
"images": [ "https://…/dext5editordata/…/img.png" ]
}
본문이 첨부파일(hwp·pdf)에만 있는 게시글은
content가 빈 문자열일 수 있습니다. 이 경우 files의 파일을 안내하세요.GET/v1/meals/photos
해당 날짜의 실제 급식 사진(영양사님이 학교 홈페이지에 올린 사진)과 메뉴를 가져옵니다.
쿼리 파라미터
| 이름 | 타입 | 설명 |
|---|---|---|
officeCode 필수 | string | 시도교육청코드 |
schoolCode 필수 | string | 행정표준코드 |
date 필수 | string | 날짜 YYYY-MM-DD |
응답
{
"school": { "officeCode": "J10", "schoolCode": "7611009", "homepage": "https://choji-m.goeas.kr" },
"date": "2026-07-17",
"photos": [
{
"imageUrl": "https://choji-m.goeas.kr/upload/common/fm/images/…/img.jpg",
"menuSummary": "찹쌀밥 \n육개장 \n도토리묵야채무침 \n돈육동그랑땡/케찹 \n깍두기",
"calorie": "812 kcal"
}
]
}
사진을 올리지 않는 학교·날짜는
photos가 빈 배열입니다. 급식 식단 텍스트가 필요하면 NEIS 급식식단정보 API를 함께 사용하세요.에러 코드
모든 에러는 아래 형식으로 반환됩니다.
{ "error": { "code": "unauthenticated", "message": "유효하지 않은 API 키입니다." } }
| HTTP | code | 의미 |
|---|---|---|
400 | invalid-argument | 파라미터 누락·형식 오류 |
401 | unauthenticated | API 키 없음 또는 무효 |
404 | not-found | 학교 홈페이지를 찾을 수 없음 / 없는 엔드포인트 |
429 | resource-exhausted | 일일 호출 한도 초과 |
500 | internal | 서버 내부 오류 (재시도 권장) |
정책·제한사항
- 지원 범위: 전국 대부분의 교육청 학교 홈페이지를 지원합니다 (경기·서울·인천·대전·강원·충북·충남·울산·전북·경북·전남·제주 등). 대구·경남 일부처럼 로그인(SSO)이 걸린 홈페이지나 표준 CMS가 아닌 학교는 빈 목록이 반환될 수 있습니다.
- 캐시: 목록·상세·사진 응답은 최대 24시간 캐시됩니다. 학교 서버 보호를 위한 정책으로, 우회를 시도하지 마세요.
- 출처 표기: 데이터 출처는 각 학교 홈페이지의 공개 게시물입니다. 서비스에 사용할 때 출처(학교명)를 함께 표기해주세요.
- 금지: 대량 자동 수집(전국 학교 전수 크롤 등), 키 공유·재판매, 학교·학생에게 피해를 주는 사용은 예고 없이 키가 비활성화될 수 있습니다.
- 베타: 본 API는 무료 베타로 제공되며, 변경 시 문서에 먼저 공지합니다.
문의: syselec208@gmail.com · © 2026 오늘시간표