실서버 확인 현황¶
메서드마다 실제 KORAIL 서버에 요청해 응답을 확인했는지 정리했습니다. 먼저 2026년 9월 28일의 7.0.8 재검증 결과를 보여주고, 아래 전체 목록에는 2026년 9월 24~26일의 7.0.6 시기 기록을 보존합니다. 개인정보와 식별자는 적지 않았습니다.
7.0.8 요청 변경 실서버 재검증 (2026-09-28)¶
조회, 인증, 임시 예약·취소 요청을 실서버에 보냈습니다. 공통 필드를 싣는 폼과 직접 은행 조회 폼에서 AppVersion=7.0.8을 확인했습니다. URL 쿼리를 쓰거나 본문이 없는 요청은 폼 기록만으로 버전을 판정하지 않았습니다. 공개 메서드 84개의 재검증 범위와 근거는 7.0.8 전수 확인표에 있습니다.
| 메서드 | 7.0.8 요청 | 실서버 결과 |
|---|---|---|
get_common_code("app.display.image") |
공통 필드와 코드·기기 정보를 전송 | HTTP 200, SUCC/API.I00000 |
get_train_calendar() |
공통 필드와 timeStamp 전송 |
HTTP 200, SUCC/API.I00000, 운행일 32개 |
get_maas_menu_list() |
공통 필드와 timeStamp 전송 |
HTTP 200, SUCC/API.I00000, 메뉴 11개 |
get_app_data(timestamp_ms=1) |
공통 필드·timeStamp·srtCheckYn=Y 전송 |
HTTP 200, JSON 파싱 성공, version·notice 객체 존재. 이 캐시 응답에는 strResult가 없습니다. |
login() |
로그인 요청에 AppVersion=7.0.8 전송 |
HTTP 200, 세션 쿠키를 받았으며 SDK 로그인이 성공함. |
get_deposit_banks() |
직접 @Field 네 개(Device, Version, AppVersion, Key) 전송 |
인증 세션에서 HTTP 200, SUCC/API.I00000, 은행 56개. 세션 없이 같은 필드로 보낸 요청은 P058을 받음. |
search_trains() |
7.0.8 공통 필드로 직통 열차 조회 | SUCC/IRG000000, 예약 가능 행 10개. |
reserve() → get_ticket_reservation_detail() |
미결제 홀드 하나를 만든 뒤 그 PNR의 상세를 조회 | 예약 SUCC/IRR000018, 상세 HTTP 200·SUCC/IRZ000001. 한 여정에 h_run_dt가 실제로 있었고 모델의 run_date와 원문 값이 일치함. |
cancel_unpaid_hold() |
위 미결제 홀드를 즉시 취소 | HTTP 200, SUCC/IRG000000. 이후 예약 이력은 P100·0여정. |
| 예약대기·병합·좌석 지정·환승·공항버스 예약 | 각 유형의 실제 미결제 홀드 생성 | 예약대기 옵션 저장까지 성공했고, 병합·좌석 지정·환승·공항버스 홀드도 성공했습니다. 모두 취소 후 예약 이력 0건을 확인했습니다. |
recalculate_price() |
실제 홀드의 할인 재계산 요청 | 요청은 서버에 도달했지만 WZZ000001과 변경 내용 없음 ERR930202를 받았습니다. 7.0.8 성공 응답은 미확인입니다. |
get_ticket_list(mode="2") → 발권 후 조회 |
3개월 이내 승차일 범위로 과거 이력 조회 | 7개 예약·8장 승차권을 받았고, 이 중 한 장의 영수증·원표·환불 상세·지연확인증·대리수령 명세 응답을 파싱했습니다. |
get_product_detail()·get_pbp_acceptance_specifications() |
계정의 실제 과거 여행상품·승차권 식별자로 조회 | 고객 취소된 여행상품 1건의 상세와 대리수령 대상 과거 승차권 2건의 명세를 파싱했습니다. 두 명세의 회수 가능 플래그는 모두 N이었습니다. |
get_discount_card_schedule() |
알려진 N카드 상품 코드로 읽기 전용 조회 | 서버의 EAZ000028 스케줄 조회 오류를 받았습니다. 보유 N카드가 없으므로 성공 경로는 미확인입니다. |
이는 각 경로의 현재 서버 응답과 파싱을 확인한 결과입니다. 재검증 전 예약 이력은 P100으로 비었고 현재 승차권은 WRT300005였습니다. 첫 과거 승차권 조회의 WRT100101은 자료 부재가 아니라 3개월 초과 날짜 범위 오류였고, 범위를 바로잡아 성공했습니다. 여러 미결제 홀드를 순차적으로 만들고 모두 취소했으며 최종 예약 이력은 0건이었습니다. 결제·환불 요청은 보내지 않았고 검증용 로그인 세션은 종료했습니다. 84개 중 실서버 응답 파싱 59개, 서버 거절 확인 10개, 자료 부족으로 미실행 13개, 로컬 메서드 2개입니다.
7.0.6 시기 기존 전체 목록 (2026-09-24~26)¶
| 상태 | 수 | 뜻 |
|---|---|---|
| 확인됨 | 66 | 실서버에서 정상 응답을 받았습니다. |
| 서버 응답만 확인 | 4 | 요청은 서버까지 갔지만 계정에 해당 자료나 자격이 없어 실패 결과 코드만 확인했습니다. |
| 미확인 | 12 | 필요한 카드·승차권·상태가 없어 정상 응답을 확인하지 못했습니다. 일부는 요청을 보내 실패 결과 코드만 받았습니다. |
| 해당 없음 | 2 | 네트워크를 쓰지 않는 메서드입니다. |
실서버 확인은 그 시점의 결과입니다. KORAIL이 서버나 앱을 바꾸면 결과가 달라질 수 있습니다.
세션·공통¶
| 메서드 | 상태 | 결과 |
|---|---|---|
login |
확인됨 | 로그인에 성공했습니다. 하이픈이 든 ID는 요청 전에 거절합니다. |
logout |
확인됨 | 로그아웃한 뒤의 요청은 FAIL/P058을 받으며, 세션 만료로 처리합니다. |
clear_session |
해당 없음 | - |
close |
해당 없음 | 닫은 뒤에 호출하면 요청을 보내지 않고 KorailProtocolError가 발생합니다. |
get_service_status |
확인됨 | SUCC/S100을 받았습니다. |
get_app_data |
확인됨 | - |
get_notice |
확인됨 | - |
get_common_code |
확인됨 | SUCC/API.I00000을 받았습니다. |
get_uuid |
확인됨 | - |
get_station_info |
확인됨 | - |
get_station_data |
확인됨 | 역 281개를 받았습니다. |
get_train_calendar |
확인됨 | 32일치 날짜를 받았습니다. |
get_crew_request_list |
확인됨 | 요청 사유 3건을 받았습니다. |
열차 조회·좌석¶
| 메서드 | 상태 | 결과 |
|---|---|---|
search_trains |
확인됨 | 서울→부산 열차 10편을 받았습니다. 청소년·유아·안내견 인원은 앱과 같이 어른·어린이 인원에 합쳐 보냅니다. peak_season=True일 때의 peak_season_inquiry 관문과 use_special_schedule=True일 때의 product_inquiry 관문은 실서버에서 확인하지 못했습니다. |
search_transfer_trains |
확인됨 | 강릉→목포 환승 여정 2개를 받았습니다. |
search_trains_with_transfer_fallback |
확인됨 | 강릉→목포 조회가 환승 조회로 전환돼 여정 2개를 받았습니다. |
get_transfer_stations |
확인됨 | 환승역 2개를 받았습니다. |
get_train_schedule |
확인됨 | 정차역 9개를 받았습니다. |
get_seat_cars |
확인됨 | 호차 13~14개를 받았습니다. 응답에 없는 호차 필드 가운데 네 개는 앱 기본값(문자열은 "", 숫자는 None)으로 읽습니다. |
get_seat_inventory |
확인됨 | 좌석 56석과 창문 6개를 받았습니다. 세 자리 숫자가 아닌 좌석 속성 코드는 요청 전에 거절합니다. |
get_free_seat_car_info |
확인됨 | 열차 203편을 조회했습니다. 자유석 칸이 있는 183편은 호차 안내 문구(KTX 18호차, KTX-산천 8·18호차, ITX-새마을 6호차 등)를 받았습니다. 자유석 칸이 없는 20편은 IRZ000005를 받았습니다. 모두 열차 조회 결과의 자유석 칸 수와 일치했습니다. |
get_seat_assignment_schedule |
확인됨 | 열차 10편을 받았습니다. 추석 기간 날짜로 조회하면 WRD000057을 받았습니다. peak_season=True일 때의 peak_season_inquiry 관문은 실서버에서 확인하지 못했습니다. |
get_merge_seats_inquiry |
확인됨 | 열차 2편을 받았습니다. |
get_guide_seat_condition |
서버 응답만 확인 | seat_attribute_code와 관계없이 FAIL/MRR800011을 받았습니다. seat_attribute_code가 "999"일 때도 같았습니다. 로그인 전에는 P058을 받았습니다. |
get_price_fare_quote |
확인됨 | SUCC/API.I00000을 받았습니다. 받은 운임은 홀드의 total_price와 같았습니다. 실제 결제액인 홀드의 received_amount는 좌석 할인만큼 더 낮을 수 있습니다. 환승 2구간 조회는 운임 4행을 받았습니다. |
예약¶
| 메서드 | 상태 | 결과 |
|---|---|---|
reserve |
확인됨 | SUCC/IRR000018로 홀드를 만든 뒤 바로 취소했습니다. 일반 예약과 좌석 지정 예약 모두 홀드를 만들었습니다. 예약대기 홀드는 결제할 수 없는 상태로 표시됩니다. 선택한 객실에 빈 좌석이 확인되지 않는 행(입석만 남은 행 포함)은 요청 전에 거절합니다. |
reserve_transfer |
확인됨 | 2구간 환승 홀드를 만든 뒤 취소했습니다. 두 구간이 같은 열차이거나 탑승 순서가 아니면 요청 전에 거절합니다. |
reserve_merge |
확인됨 | 병합 예약 홀드를 만든 뒤 취소했습니다. 첫 홀드도 결제할 수 있는 상태였습니다. 병합할 행의 운행일이 첫 홀드와 다르면 요청 전에 거절합니다. |
confirm_standby_hold |
확인됨 | ITX-새마을 예약대기 홀드(IRR000014, 결제할 수 없는 상태)로 확인했습니다. 옵션 저장은 SUCC/IRZ000003을 받았습니다. 홀드 취소는 IRG000000을 받았고, 이후 예약 내역 조회는 P100을 받았습니다. |
cancel_unpaid_hold |
확인됨 | SUCC/IRG000000을 받았습니다. |
get_reservation_history |
확인됨 | 홀드가 없는 상태에서 P100을 받았습니다. |
get_ticket_reservation_detail |
확인됨 | SUCC/IRZ000001을 받았습니다. |
check_ticket_duplication |
확인됨 | 홀드의 PNR로 SUCC를 받았습니다. |
get_cart_list |
확인됨 | 장바구니에 담은 열차 홀드와 공항버스 홀드가 행으로 나왔습니다. |
add_to_cart |
확인됨 | SUCC/IRZ000002를 받았습니다. 홀드를 취소하면 장바구니에서도 빠졌습니다. |
결제·환불¶
| 메서드 | 상태 | 결과 |
|---|---|---|
pay_with_card |
확인됨 | 7,500원 홀드를 결제해 IRT000000을 받았고, 수수료 0원으로 환불했습니다. 예약대기 홀드, 0원 홀드, 형식이 잘못된 카드 입력은 요청 전에 거절합니다. |
recalculate_price |
확인됨 | 평일 열차의 할인을 바꾸자 SUCC/IRZ000008과 함께 금액이 21,500원에서 15,000원으로 바뀌었습니다. 토요일 열차는 같은 결과 코드를 받았지만 금액이 그대로였습니다. 할인이 바뀌지 않으면 ERR930202를 받았습니다. 결제에는 재계산 결과로 받은 홀드를 사용합니다. add_to_cart=True와 PriceRecalculationRequest.for_hold()로 만든 요청도 실서버에서 확인했습니다. |
get_refund_ticket_detail |
확인됨 | - |
get_refund_commission |
확인됨 | 결제한 승차권의 수수료로 0원을 받았습니다. 이미 환불한 승차권은 WRT200399, 승차일이 지난 승차권은 WRT200022를 받았습니다. |
refund |
확인됨 | 수수료 0원 승차권 환불을 두 번 실행해 모두 SUCC/IRT200277을 받았습니다. commission이 get_refund_commission의 응답이 아니면(None 포함) 요청 전에 KorailProtocolError가 발생합니다. settle_mileage=True는 사용할 수 있는 마일리지가 수수료 이상일 때만 받습니다. |
verify_station_ticket_refund |
미확인 | 역에서 발권한 승차권이 없어 확인하지 못했습니다. |
execute_station_ticket_refund |
미확인 | 역에서 발권한 승차권이 없어 확인하지 못했습니다. |
승차권·계정¶
| 메서드 | 상태 | 결과 |
|---|---|---|
get_ticket_list |
확인됨 | 현재 승차권 0장과 지난 이력 131건을 받았습니다. |
get_ticket_receipt |
확인됨 | 영수증 1건을 받았습니다. |
get_korail_point_summary |
확인됨 | - |
get_mileage_history |
확인됨 | - |
get_discount_coupons |
확인됨 | 할인쿠폰 0장을 받았습니다. |
get_delay_discount_tickets |
확인됨 | 지연할인권 0장을 받았습니다. |
get_deposit_banks |
확인됨 | 은행 56개를 받았습니다. |
get_customer_trip_info |
확인됨 | SUCC/IRS100002를 받았습니다. |
get_multi_child_discount_targets |
서버 응답만 확인 | 다자녀 할인 대상이 아닌 계정에서 WRC800029를 받았습니다. |
get_trip_change_dates |
확인됨 | 변경할 수 있는 날짜 15일을 받았습니다. |
get_original_ticket_inquiry |
확인됨 | 인쇄를 마친 승차권 2장으로 SUCC/IRT000001을 받았습니다. 환불한 승차권은 WRT200399를 받았습니다. |
get_self_seat_change_info |
확인됨 | 운행 중인 KTX 열차로 SUCC를 받았습니다. 운행 시간 밖의 열차는 WRT800176을 받았습니다. |
get_delay_certificate |
확인됨 | 지연된 승차권 2장으로 SUCC/IAZ000006과 지연 행 1개를 받았습니다. 받은 행에는 운행일이 없어 run_date가 None이었습니다. 지연되지 않은 승차권은 WRT400456을 받았습니다. |
get_delay_return_receipt |
서버 응답만 확인 | 지연료를 돌려받은 승차권이 없어 IRZ000005를 받았습니다. |
대리수령·셀프 체크인¶
| 메서드 | 상태 | 결과 |
|---|---|---|
get_recent_delivery_history |
확인됨 | 수령자 1명을 받았습니다. 응답에 해당 값이 없어 changed_acceptance_reservation_no는 None이었습니다. |
get_delivery_recipient |
미확인 | N카드 2인 승차권이 없어 수령자 응답을 확인하지 못했습니다. 서버는 IRZ000005를 반환했습니다. |
get_pbp_acceptance_specifications |
확인됨 | 대리수령 대상 승차권 6장으로 6장의 명세를 받았습니다. 대상이 아닌 승차권은 0건이었습니다. |
retrieve_delivered_ticket |
미확인 | 회수 가능한 전달 승차권이 없어 확인하지 못했습니다. 7.0.8에서 조회한 과거 명세 2건도 회수 가능 플래그가 모두 N입니다. |
get_self_checkin_info |
서버 응답만 확인 | 체크인한 승차권이 없어 WRZ000001을 받았습니다. |
check_self_checkin_seat |
미확인 | 열차 좌석의 QR 코드가 필요해 요청을 보내지 않았습니다. |
register_self_checkin |
미확인 | 열차 좌석의 QR 코드가 필요해 요청을 보내지 않았습니다. 앱 안내에 따르면 부정 사용 시 부가금이 있어 임의 값도 보내지 않았습니다. |
cancel_self_checkin |
미확인 | 체크인한 승차권이 없어 확인하지 못했습니다. |
정기권·패스·N카드·여행상품¶
| 메서드 | 상태 | 결과 |
|---|---|---|
get_pass_menu |
확인됨 | 메뉴 22항목을 받았습니다. |
get_pass_available_dates |
확인됨 | - |
get_pass_schedule |
확인됨 | 일반정기권(0001)과 기간자유형(0028) 조합 다섯 가지 모두 SUCC를 받았습니다(서울→부산 7편, 서울→대전 4편). 내일로 상품 코드(0046)로는 실패했습니다. |
get_commuter_kind_menu |
확인됨 | SUCC/IRZ000001을 받았습니다. |
get_commuter_info |
확인됨 | 초기 단계와 인원 단계는 IRZ000008을 받았습니다. 원표 단계는 정기권이 아닌 승차권으로 요청해 ERR000100을 받았습니다. |
get_trip_menu |
확인됨 | 메뉴 5개를 받았습니다. |
get_discount_card_usage_history |
미확인 | N카드가 없어 확인하지 못했습니다. 서버는 ERR000100을 반환했습니다. |
get_discount_card_schedule |
미확인 | N카드가 없어 확인하지 못했습니다. 서버는 WRR000100을 반환했습니다. |
register_discount_card |
미확인 | 호출하면 결제 전 N카드 구매가 실제로 만들어지므로 요청을 보내지 않았습니다. |
extend_discount_card |
미확인 | N카드가 없어 확인하지 못했습니다. |
reserve_with_discount_card |
미확인 | N카드가 없어 확인하지 못했습니다. |
get_product_reservations |
확인됨 | 웹에서 만든 결제 전 예약이 예약확정(03)으로 나왔고, 취소한 뒤에는 05로 나왔습니다. |
get_product_detail |
확인됨 | 상품 금액 15,400원, 취소 수수료 0원, 포함 열차 2개를 받았습니다. |
cancel_product_reservation |
확인됨 | 결제 전 예약을 취소해 SUCC를 받았습니다. 상품을 결제할 수 없어 결제한 예약의 취소는 확인하지 못했습니다. |
공항버스·부가서비스¶
| 메서드 | 상태 | 결과 |
|---|---|---|
get_limousine_schedules |
확인됨 | 광명→인천공항 30편을 받았습니다. |
get_limousine_seat_inventory |
확인됨 | 좌석 28석을 받았습니다. |
reserve_limousine |
확인됨 | 16,000원 홀드와 24,000원 홀드를 만든 뒤 취소했습니다. 16,000원 홀드는 결제한 뒤 수수료 0원으로 환불했습니다. |
get_maas_menu_list |
확인됨 | 메뉴 11개를 받았습니다. |
get_maas_station_data |
확인됨 | 역 101개를 받았습니다. |
get_maas_service_details |
확인됨 | 빈 목록을 받았습니다. |