πŸš„ rail-api

Korail gateway API β€” agent-oriented docs. This same content is at /llms.txt (plain) and /openapi.json (spec).

# rail-api β€” Korail gateway API (agent guide)

A systematized pass-through over the Korail (μ½”λ ˆμΌ) mobile API. 159 operations,
all reachable through one generic endpoint. This service handles anti-macro (m-token),
login/session reuse, cookies, form-encoding and error mapping for you.

Base URL: https://rail-api.coderyn.com

## How to call
- Generic (any operation):  POST https://rail-api.coderyn.com/v1/op/{operationId}   body = JSON of raw korail fields
- Named aliases:            POST /v1/sessions (login), GET /v1/trains (=trains.search)
- List operations:          GET  https://rail-api.coderyn.com/v1/ops        (id, kind, auth, mToken, charge, note)
- Machine spec:             GET  https://rail-api.coderyn.com/openapi.json
- Health:                   GET  https://rail-api.coderyn.com/v1/health

## Auth model
- This service has its OWN users. Each user stores ONE set of korail credentials (encrypted).
- Send: Authorization: Bearer <apiKey>  on member operations.
- Admin (needs ADMIN_TOKEN):
    POST https://rail-api.coderyn.com/admin/users {"name":"..."}                         -> {userId, apiKey}
    POST https://rail-api.coderyn.com/admin/users/{userId}/credentials {"member_no","password"[,"model","os"]}
- auth levels per op:  none (reference), member (needs Bearer), nonmember (send name+phone+ticket-pw in body).

## Rules
- It is a PASS-THROUGH: you supply the raw korail field names (txt*, hid*, h_*) in the JSON body.
  The gateway adds Device/Version/Key/Lang, the m-token (for 6 protected paths), and the session cookie.
- Mutations (kind write/pay/refund) REQUIRE an Idempotency-Key header.
- pay/refund move real money β€” treat as gated.
- Reservation window: boarding date <= 31 days ahead, else NOT_YET_OPEN.

## Recipes (concrete field maps)

### A. Reference read (no auth)
POST https://rail-api.coderyn.com/v1/op/global.stations   body: {"stnLang":"ko"}
POST https://rail-api.coderyn.com/v1/op/codes.get         body: {"code":"app.login.cphd"}

### B. Establish session (member)
POST https://rail-api.coderyn.com/v1/sessions   header: Authorization: Bearer <apiKey>
β†’ {ok, custNo, mbCrdNo}. A session is also auto-established on the first member op.

### C. Search trains (op: trains.search β€” m-token handled for you)
POST https://rail-api.coderyn.com/v1/op/trains.search
body: {
  "radJobId":"1","srtCheckYn":"N",
  "txtGoAbrdDt":"YYYYMMDD",          // boarding date, <= 31 days ahead
  "txtGoStart":"μ„œμšΈ","txtGoEnd":"λΆ€μ‚°",
  "txtGoHour":"060000",              // from-time HHMMSS
  "txtTrnGpCd":"100",               // 100=KTX 101=ITX/μƒˆλ§ˆμ„ 102=무ꢁ화 109=all
  "txtPsgFlg_1":"1"
}
β†’ data.trn_infos.trn_info[]: each has h_trn_no, h_trn_clsf_cd, h_trn_gp_cd, h_run_dt,
  h_dpt_dt, h_dpt_tm, h_dpt_rs_stn_cd, h_dpt_stn_cons_ordr, h_dpt_stn_run_ordr,
  h_arv_rs_stn_cd, h_arv_stn_cons_ordr, h_arv_stn_run_ordr,
  h_gen_rsv_cd ("00"=seats available, "13"=sold out), h_spe_rsv_cd (special/first class).

### D. Reserve a seat hold (op: reservation.ticketReserve β€” WRITE, needs Idempotency-Key)
Pick a train t from search where h_gen_rsv_cd=="00". 1 adult, auto general seat, one-way:
POST https://rail-api.coderyn.com/v1/op/reservation.ticketReserve
header: Idempotency-Key: <uuid>
body: {
  "txtMenuId":"11","txtJobId":"1101","hidFreeFlg":"N","txtStndFlg":"N",
  "txtTotPsgCnt":"1","txtJrnyCnt":"1",
  "txtSeatAttCd1":"000","txtSeatAttCd2":"000","txtSeatAttCd3":"000","txtSeatAttCd4":"015","txtSeatAttCd5":"000",
  "txtCompaCnt1":"1","txtPsgTpCd1":"1","txtDiscKndCd1":"000",
  "txtJrnyTpCd1":"11","txtJrnySqno1":"001",
  "txtTrnNo1":t.h_trn_no,"txtTrnClsfCd1":t.h_trn_clsf_cd,"txtTrnGpCd1":t.h_trn_gp_cd,
  "txtRunDt1":t.h_run_dt,"txtDptDt1":t.h_dpt_dt,"txtDptTm1":t.h_dpt_tm,
  "txtDptRsStnCd1":t.h_dpt_rs_stn_cd,"txtDptStnConsOrdr1":pad6(t.h_dpt_stn_cons_ordr),"txtDptStnRunOrdr1":pad6(t.h_dpt_stn_run_ordr),
  "txtArvRsStnCd1":t.h_arv_rs_stn_cd,"txtArvStnConsOrdr1":pad6(t.h_arv_stn_cons_ordr),"txtArvStnRunOrdr1":pad6(t.h_arv_stn_run_ordr),
  "txtChgFlg1":"N","txtPsrmClCd1":"1"
}
(pad6 = left-pad numeric to 6 digits, e.g. 1 -> "000001")
β†’ data.h_pnr_no (reservation id), data.h_jrny_cnt, data.h_ntisu_lmt_dt + h_ntisu_lmt_tm (payment deadline).
The hold auto-cancels if unpaid by the deadline.

### E. Cancel the hold (op: reservation.cancelCheck β€” this actually performs the cancel)
POST https://rail-api.coderyn.com/v1/op/reservation.cancelCheck
body: {"txtPnrNo":<h_pnr_no>,"txtJrnySqno":"001","txtJrnyCnt":<h_jrny_cnt>,"hidRsvChgNo":"000"}
β†’ h_msg_cd "IRG000000" on success. Verify with op reservation.view -> data.jrny_infos empty.

### F. My tickets / reservation view
POST https://rail-api.coderyn.com/v1/op/myTicket.list       body: {}
POST https://rail-api.coderyn.com/v1/op/reservation.view    body: {"timeStamp":"<epoch-ms>"}

### G. Payment & refund β€” GATED (real money). Not executed by default.
Payment (op: pay.reservationPayment) and refund (op: refund.request / refund.commission)
move real money. Build them the same way (pass-through fields) but only fire with explicit intent.


## Response envelope & error codes
Every op returns: {ok, code, data, korail:{strResult,h_msg_cd,h_msg_txt}, requestId}
- ok=true  β†’ success (or benign "no data"). HTTP 200.
- ok=false β†’ code tells you why; korail.h_msg_cd is the upstream reason.

Gateway codes (HTTP status):
  OK                 success
  MTOKEN_REJECTED    429  anti-macro tripped; the gateway auto-regenerates the token & retries once
  NOT_YET_OPEN       409  WRD000058 β€” reservation window not open (>31 days out)
  SESSION_EXPIRED    401  handled internally: the gateway re-logs-in and retries
  KORAIL_FAIL        409  upstream strResult:FAIL (usually input error; see korail.h_msg_txt)
  UPSTREAM_ERROR     502  korail 5xx; retried once for reads/idempotent
  AUTH_REQUIRED      401  member op without a valid Bearer apiKey
  LOCK_TIMEOUT       409  another mutation for the same user is in flight
  NO_CREDENTIALS     400  user has no korail credentials registered

Common upstream h_msg_cd you'll see:
  IRG000000 = success (generic)      IRR000018 = reserve success (hold created)
  IRZ000001 = query success          WRT300005 = "no data" (benign)
  WRR000100 = input error (you omitted/mis-typed a required field)
  WRD000058 = reservation not yet open


## All operations (159)
refund.executeOnline  [refund,charge]  auth=member  refunds.executeOnlineRefunds  β€” 온라인 ν™˜λΆˆ μ‹€ν–‰ β€” ꡬ맀이λ ₯ λΆˆμš”(pnrNo+μ›κΆŒνŠœν”Œλ§Œ).
goods.cacheRead  [read]  auth=none  goods.cacheRead.do
research.commutationInfo  [read]  auth=member  research.cmtrInfo.do
push.crewCallList  [read]  auth=member  push.crwCallRq.do
global.stations  [read]  auth=none  /ebizcom/com.korail.mobile.global.stations.do
maas.cancelFee  [read]  auth=member  maas.cncFee.do
copt.maasDetailList  [read]  auth=member  copt.gdReqQry.do
ncard.history  [read]  auth=member  ticket.dcntCrdUseQry.do
product.detail  [read]  auth=member  product.ReservationDetail
product.list  [read]  auth=member  product.ReservationList
goods.meta  [read]  auth=none  goods.meta.do
pass.seatInfo  [read]  auth=member  pass.seatInfo.do  β€” 패슀 μ’Œμ„μ§€μ • λŒ€μƒ 쑰회(wctNo/saleDt/saleSqno/tkRetPwd νŽ˜μ΄μ§•).
tripChange.originalTicket  [read]  auth=member  research.tripChgOgtk.do  β€” μ—¬μ •λ³€κ²½μš© μ›κΆŒ(μ›μŠΉμ°¨κΆŒ) 쑰회.
tripChange.dates  [read]  auth=member  reservation.tripChgDate.do  β€” λ³€κ²½κ°€λŠ₯ λ‚ μ§œ 쑰회(GET).
pass.otrReserve  [write]  auth=member  pass.passOtrReserve  β€” OTR(μ’Œμ„μ—†λŠ” 패슀ꢌ) μ˜ˆμ•½, passOtrPayIssue 둜 이어짐.
product.payInfo  [read]  auth=member  product.payInfo  β€” μ—¬ν–‰μƒν’ˆ 결제 사전확인(strLumpStlTgtNo νšλ“).
maas.reserveStatus  [read]  auth=member  maas.rsvStt.do  β€” 응닡 empty(λ΄‰νˆ¬λ§Œ).
mileage.accompanySave  [write]  auth=member  mileage.acpnMlgSave.do
delay.acceptProcess  [write]  auth=member  delay.acptPrs.do  β€” μ§€μ—°λ°°μƒκΈˆ 수락처리.
research.actualSchedule  [read]  auth=member  research.actualTrainSchedule.do
cart.add  [write]  auth=member  cart.addCartList
seats.airportBusResidual  [read]  auth=member  lms.TResidualSeatsResearch.do  β€” κ³΅ν•­λ²„μŠ€ μ’Œμ„λ§΅ β€” research.TResidualSeatsResearch 와 동일 μŠ€ν‚€λ§ˆ.
mileage.amountSpec  [read]  auth=member  mlg.amtSpec.do
research.assignScheduleView  [read]  auth=member  research.assignScheduleView.do
addService.buyConfirm  [write]  auth=member  addService.buyConfirm.do
goods.cacheCheck  [read]  auth=none  goods.cacheCheck.do
checkin.cancel  [write]  auth=member  checkin.cnc.do  β€” ν•„λ“œλͺ… saleDt(psbFlg/reg λŠ” saleDd).
addService.wheelchairCancel  [write]  auth=member  addService.reserve.do  β€” addService.reserve.do λŠ” λ‹€κΈ°λŠ₯ 경둜(postRequestWheelchairWithHistory 와 곡유), jobDvCd 둜 λΆ„κΈ°.
cashReceipt.issue  [write]  auth=member  cashReceipt.issue.do
delay.cashRefund  [write]  auth=member  dlay.cashRfn.do  β€” λͺ…μ‹œμ  @Field λ°”λ””(In λͺ¨λΈ μ—†μŒ) β€” κ³„μ’Œν™˜λΆˆ(dmnPrsDvCd/dptnBankCd/dptnAcntNo).
cert.congressperson  [read]  auth=member  certification.assemblyCert  β€” κ΅­νšŒμ˜μ› λ¬΄μž„(GET).
cert.merit  [read]  auth=member  certification.MeritCert  β€” κ΅­κ°€μœ κ³΅μž 인증.
qry.transferStation  [read]  auth=member  qry.chtnStn.do
codes.get  [read]  auth=none  common.code.do  β€” common.code.do 곡유 β€” 단일 μ½”λ“œμ…‹.
codes.getMulti  [read]  auth=none  common.code.do  β€” common.code.do 곡유 β€” 볡수 μ½”λ“œμ…‹ λ³€ν˜•.
crypto.encrypt  [read]  auth=none  common.encrypt.do  β€” common.encrypt.do 곡유(postKBPayEncrypt 와 동일 경둜).
passCard.coupons  [read]  auth=member  passCard.CouponView
research.custTripInfo  [read]  auth=member  research.custTripInfo.do
research.ncardInfo  [read]  auth=member  research.dcntCrdInfo.do
research.ncardScheduleView  [read]  auth=member  research.dcntCrdScheduleView.do
crypto.decrypt  [read]  auth=none  common.decrypt.do
delay.certificate  [read]  auth=member  dlay.athnIsu.do  β€” 지연증λͺ…μ„œ λ°œκΈ‰μ‘°νšŒ.
passCard.delayDiscount  [read]  auth=member  passCard.DelayDiscountView  β€” νŽ˜μ΄μ§• Query h_page_no.
delay.returnReceipt  [read]  auth=member  dlay.pymtRcet.do
account.delete  [write]  auth=member  login.mbSced.do  β€” νšŒμ›νƒˆν‡΄ β€” login.mbSced.do μ΄μ§€λ§Œ 둜그인 μ„Έμ…˜ ν•„μš”.
addSrv.wheelchairHistoryDelete  [write]  auth=member  addSrv.helpSrvCust.do  β€” helpSrvCust.do λ‹€κΈ°λŠ₯ 경둜(qryDvCd/addSrvDvCd λΆ„κΈ°).
tk.receivedTicketHistory  [read]  auth=member  tk.pbpAcepSpec.do  β€” λ°›μ€μŠΉμ°¨κΆŒ λ‚΄μ—­.
tk.deliveryReceiver  [read]  auth=member  tk.dlvRcvCust.do
gift.send  [write]  auth=member  giftInfo.GiftSend  β€” 승차ꢌ μ„ λ¬Ό λ°œμ†‘(+presentMap) β†’ λ³€κ²½ μ˜ˆμ•½λ²ˆν˜Έ chgePbpRsvNo.
tk.deviceReset  [write]  auth=member  tk.dvcInfoInit.do  β€” 기기정보 μ΄ˆκΈ°ν™”(λ””λ°”μ΄μŠ€ 바인딩 리셋).
cert.disability  [read]  auth=member  certification.disabled.do
passCard.discountCheck  [read]  auth=member  passCard.DiscountCheck
delay.depositBankList  [read]  auth=member  dlay.dptnBank.do  β€” λͺ…μ‹œμ  @Field(Device/Version/Key만) β€” κ³„μ’Œν™˜λΆˆμš© 은행λͺ©λ‘.
ebizcross.uuid  [read]  auth=none  /ebizcross/getUUID.do  β€” ν¬λ‘œμŠ€μ„œλΉ„μŠ€ UUID λ°œκΈ‰ μœ ν‹Έ(인증 μ „).
trn.freeSeatCar  [read]  auth=member  trn.fresScar.do
copt.stationConvenienceMenu  [read]  auth=member  copt.gdMenuLt.do  β€” μ—­νŽΈμ˜ URL 메뉴(μ—˜λ¦¬λ² μ΄ν„°/μ£Όμ°¨/BIS).
refund.ticketDetail  [read]  auth=member  refunds.SelTicketInfo  β€” refunds.* μ΄μ§€λ§Œ 쑰회(λ°˜ν™˜λŒ€μƒ 상세).
tk.guardianSms  [write]  auth=member  tk.gurdSmsSnd.do  β€” 보호자 SMS λ°œμ†‘(μ‚¬μ΄λ“œμ΄νŽ™νŠΈ μ•‘μ…˜).
reservation.guideSeatCondition  [read]  auth=member  reservation.guideSeatCnd.do
login.inquiryIsMember  [read]  auth=none  login.joinCfm.do  β€” joinCfm β€” νšŒμ›μ‘΄μž¬ 확인(인증 μ „).
reservation.ticketRsvInquiry  [read]  auth=member  certification.ReservationList  β€” certification.ReservationList 곡유 β€” κ²½λŸ‰λ³€ν˜•(hidPnrNo만).
pay.integratedSettlement  [pay,charge]  auth=member  pay.intgStl.do  β€” 톡합(μž₯λ°”κ΅¬λ‹ˆ) μ •μ‚°(+PaymentMethod κ·Έλ¦¬λ“œ).
crypto.kbPayEncrypt  [read]  auth=none  common.encrypt.do  β€” common.encrypt.do 곡유(postCommonEncrypt 와 동일 경둜) β€” KB페이 λ³€ν˜•.
krPass.list  [read]  auth=nonmember  /ebizcom/krPassLstDtl.do  β€” 외ꡭ인 μ½”λ ˆμΌνŒ¨μŠ€ 쑰회(μ—¬κΆŒ/이메일/λΉ„λ²ˆ).
krPass.changeStartDate  [write]  auth=nonmember  /ebizcom/krPassChgStDt.do
krPass.flexiDateFix  [write]  auth=nonmember  /ebizcom/krPassFxDateFix.do  β€” Flexi 이용일 ν™•μ •.
krPass.payment  [pay,charge]  auth=nonmember  /ebizcom/krPassPayment.do  β€” enc μΉ΄λ“œν•„λ“œ+3DS, 외ꡭ인 결제.
mileage.lpointAuth  [read]  auth=member  mlg.lpotAthn.do  β€” L포인트 인증(auth/cert 성격).
qr.localRailwayAuth  [read]  auth=member  qr.bchTripSv.do  β€” λ²½μ§€λ…Έμ„  μ—¬ν–‰ QR 인증.
session.login  [write,mtoken]  auth=none  login.Login  β€” πŸ”’ m-token 게이트 β€” μ„Έμ…˜ 확립(JSESSIONID).
login.authRegister  [write]  auth=member  login.loginAthnReg.do  β€” 둜그인 인증(생체 λ“±) 등둝.
login.authRemove  [write]  auth=member  login.loginAthnRmv.do  β€” 둜그인 인증 ν•΄μ œ.
session.logout  [write]  auth=none  login.Logout  β€” μ„Έμ…˜ 파기.
ebizcom.lostCenterSearch  [read]  auth=none  /ebizcom/cs/guide/lost/srchLostCenter.do  β€” λΆ„μ‹€λ¬Όμ„Όν„° 검색(곡개).
addService.maasCancelPay  [write]  auth=member  addService.cancelPay.do
addService.maasServiceCancel  [write]  auth=member  addService.coptCnc.do  β€” addService.coptCnc.do.
ebizmaas.stationList  [read]  auth=none  /ebizmaas/EbizMaasStationList.do  β€” MaaS μ—­λͺ©λ‘(참쑰데이터).
cust.matchedDiscountTarget  [read]  auth=member  cust.mchdDcntTgt.do
member.verify  [read]  auth=none  member.verify.do
research.mergeSeats  [read]  auth=member  research.mergeSeatsC.do  β€” μ€‘κ°„μŠΉμ°¨μ—­ μ’Œμ„μ—°μ† 쑰회.
file.mobilePlusMain  [read]  auth=none  /file/CACHE/prdMobilePlusMain.cache  β€” 정적 μΊμ‹œ 파일.
file.mobileService  [read]  auth=none  /file/CACHE/MobileService.cache  β€” 정적 μΊμ‹œ 파일.
myTicket.list  [read]  auth=member  myTicket.MyTicketNewList.do
xPoint.myView  [read]  auth=member  xPoint.MyXPointView
reservation.ncardExtension  [write]  auth=member  reservation.dcntCrdExtn.do  β€” NμΉ΄λ“œ μ—°μž₯(μƒνƒœλ³€κ²½).
pay.naverPayMoney  [pay,charge]  auth=member  pay.naverPayMoneyRsv.do
pay.naverPay  [pay,charge]  auth=member  pay.naverPayRsv.do  β€” stlScnUrl(κ²°μ œν™”λ©΄ URL) λ°˜ν™˜ β€” μ›Ήλ·° λ¦¬λ‹€μ΄λ ‰νŠΈ.
nonMember.ticketReserve  [write,mtoken]  auth=nonmember  nonMember.NonMemTicket  β€” πŸ”’ m-token β€” λΉ„νšŒμ› 예맀(이름+μ „ν™”+λΉ„λ²ˆ), PNR 생성, μ„Έμ…˜ μ—†μŒ.
nonMember.ticketList  [read]  auth=nonmember  nonMember.NonMemTicketList
xPoint.okCashbagCert  [read]  auth=member  xPoint.OkCashbagCertView
pass.infoList  [read]  auth=member  pass.passInfoList
pass.menu  [read]  auth=member  pass.passMenu.do
pass.otrPayIssue  [pay,charge]  auth=member  pass.passOtrPayIssue  β€” OTR 발ꢌ(결제+발ꢌ, 3 map).
pass.payIssue  [pay,charge]  auth=member  pass.passPayIssue  β€” 패슀 결제+발ꢌ(fromPassReserveInfo 둜 μ˜ˆμ•½κ°μ²΄β†’κ²°μ œμš”μ²­).
pass.reserve  [write]  auth=member  pass.passReserve
pass.scheduleInfoList  [read]  auth=member  pass.passScheduleInfoList
pay.payco  [pay,charge]  auth=member  payment.reserve.payco.do
delay.pnrQuery  [read]  auth=member  delay.pnrQry.do
login.popupConfirmRecord  [write]  auth=member  login.poppCfmRec.do  β€” νŒμ—… 확인 기둝 μ €μž₯.
trn.priceFare  [read,mtoken]  auth=member  trn.prcFare.do  β€” πŸ”’ m-token 게이트 β€” μš΄μž„κ³„μ‚°(쑰회).
reservation.priceReCalculation  [write]  auth=member  certification.PriceReCalculation  β€” PNR μž¬κ³„μ‚°(6개 병렬 @Field μŠΉκ°ν–‰) β€” λ§ˆμŠ€ν„°ν‘œ W.
push.update  [write]  auth=member  push.update  β€” ν‘Έμ‹œ 등둝/토큰 κ°±μ‹ .
railplus.autoCharge  [write]  auth=member  railplus.autoCharge.do
tk.recentDeliveryHistory  [read]  auth=member  tk.rcntDlvHst.do
refund.commission  [read]  auth=member  refunds.CommissionView  β€” CommonIn 미상속 β€” Device/Version/Key/Lang + h_comp_nm/h_comp_cert_no/ctlDvCd λͺ…μ‹œ 전솑.
refund.request  [refund,charge]  auth=member  refunds.RefundsRequest  β€” CommonIn 미상속 β€” ν™˜λΆˆ μ‹€ν–‰.
addSrv.wheelchairRequest  [write]  auth=member  addSrv.helpSrvCust.do  β€” helpSrvCust.do λ‹€κΈ°λŠ₯ 경둜.
addService.wheelchairReRequest  [write]  auth=member  addService.reserve.do  β€” addService.reserve.do λ‹€κΈ°λŠ₯ 경둜(postCancelWheelchair 와 곡유) β€” 이λ ₯ μž¬μ‹ μ²­.
reservation.cancel  [write]  auth=member  reservationCancel.ReservationCancel  β€” μ‹€μ œ μ·¨μ†Œ μ‹€ν–‰(txtPnrNo/txtJrnySqno/txtJrnyCnt).
reservation.cancelCheck  [read]  auth=member  reservationCancel.ReservationCancelChk  β€” μ·¨μ†Œ 사전확인(수수료/addSrvRetList λ°˜ν™˜) β€” μ‹€μ œ μ·¨μ†ŒλŠ” ReservationCancel 이 μˆ˜ν–‰.
reservation.change  [write]  auth=member  reservation.reservationChange.do
reservation.list  [read]  auth=member  certification.ReservationList  β€” certification.ReservationList 곡유 β€” μ „μ²΄λ³€ν˜•(psgDisc0019List).
pay.reservationPayment  [pay,charge]  auth=member  payment.ReservationPayment  β€” payment.ReservationPayment 곡유(postRsvPayment 와 동일 경둜) +PaymentMethod κ·Έλ¦¬λ“œ β€” 평문 PAN/VAN_PWD.
reservation.view  [read]  auth=member  reservation.ReservationView  β€” timeStamp μΊμ‹œλ²„μŠ€ν„°.
reservationWait.register  [write]  auth=member  reservationWait.ReservationWait  β€” λͺ…μ ˆ λŒ€κΈ°μ˜ˆμ•½(κΈ°μ‘΄ PNR에 등둝).
tk.retrieveTicket  [write]  auth=member  tk.pbpWdrw.do  β€” λ³΄λ‚ΈμŠΉμ°¨κΆŒ 철회(withdraw).
pay.rsvPayment  [pay,charge]  auth=member  payment.ReservationPayment  β€” payment.ReservationPayment 곡유(postReservationPayment 와 동일 경둜) β€” RsvPaymentIn λ³€ν˜•(hidRsvChgNo).
schedule.runDate  [read]  auth=member  schedule.runDt
lmu.scheduleQuery  [read]  auth=member  lmu.scdlQry.do
trains.search  [read,mtoken]  auth=member  seatMovie.ScheduleView  β€” πŸ”’ m-token β€” μ—΄μ°¨μ‘°νšŒ, νŽ˜μ΄μ§• h_next_pg_flg + qryStNo/qryStTrnNo.
trains.searchSpecial  [read,mtoken]  auth=member  seatMovie.ScheduleViewSpecial  β€” πŸ”’ m-token β€” νŠΉλ³„μ—΄μ°¨ 쑰회.
ebizcom.travelProductSearch  [read]  auth=member  /ebizcom/gdLstDtl.do
reservation.seatAssign  [write]  auth=member  reservation.seatAssign.do  β€” μ’Œμ„μ§€μ • μ˜ˆμ•½ β†’ ReservationOut(PNR 생성).
checkin.info  [read]  auth=member  checkin.info.do  β€” ν•„λ“œλͺ… saleDt(psbFlg/reg λŠ” saleDd).
checkin.possible  [read]  auth=member  checkin.psbFlg.do  β€” ν•„λ“œλͺ… saleDd + qrcode.
checkin.register  [write]  auth=member  checkin.reg.do  β€” ν•„λ“œλͺ… saleDd + λ¬Όλ¦¬μ’Œμ„(scarNo/seatNo).
crypto.shinhanEncrypt  [read]  auth=member  shinhan.Encrypt.do  β€” μ‹ ν•œμΉ΄λ“œ μ•”ν˜Έν™” μœ ν‹Έ.
cart.show  [read]  auth=member  cart.showCartList
pay.samsungPayDecrypt  [pay,charge]  auth=member  pay.spayCphdDatVal.do  β€” μ‚Όμ„±νŽ˜μ΄ β€” μ„œλ²„λ³΅ν˜Έλ‘œ stlCrCrdNo λ°˜ν™˜.
pay.monimoDecrypt  [pay,charge]  auth=member  pay.monimoDecrypt.do  β€” λͺ¨λ‹ˆλͺ¨ β€” μ„œλ²„λ³΅ν˜Έ stlCrCrdNo.
pay.samsungPayOrderNo  [pay,charge]  auth=member  pay.spayOrdNo.do  β€” encTotTxnAmt AES-256-CBC(ν‚€=AppLoginCphd).
common.specificDateData  [read]  auth=none  common.specificDateData.do
integrate.srCheck  [read]  auth=none  integrate.srCheck.do
integrate.srJoin  [write]  auth=member  integrate.srJoin.do  β€” SR ν†΅ν•©νšŒμ› κ°€μž…(join).
common.stationData  [read]  auth=none  common.stationdata
common.stationInfo  [read]  auth=none  common.stationinfo
pay.realtimeAccount  [pay,charge]  auth=member  pay.stbkAcnt.do  β€” μ‹€μ‹œκ°„κ³„μ’Œμ΄μ²΄ β€” 예금주 쑰회(pay.* 경둜라 kind=pay).
pay.stbkBankList  [pay,charge]  auth=member  pay.stbkRegBank.do  β€” 은행λͺ©λ‘ 쑰회(pay.* 경둜라 kind=pay).
pay.settlementKeyProcess  [pay,charge]  auth=member  pay.stlKeyPrs.do  β€” μ •μ‚°ν‚€ 등둝.
pay.settlementKeyQuery  [pay,charge]  auth=member  pay.stlKeyQry.do  β€” 등둝 μ •μ‚°ν‚€ λͺ©λ‘ 쑰회(pay.* 경둜라 kind=pay).
seats.residual  [read]  auth=member  research.TResidualSeatsResearch.do  β€” μ’Œμ„λ§΅(μž”μ—¬μ„).
ticket.dupCheck  [read]  auth=member  ticket.ticketDupCheck.do
receipt.info  [read]  auth=member  receipt.ReceiptInfo
reservation.ticketReserve  [write,mtoken]  auth=member  certification.TicketReservation  β€” πŸ”’ m-token β€” λ°œκΆŒμš”μ²­(μžλ™/μž…μ„), PNR 생성.
myTicket.widget  [read]  auth=member  myTicket.MyTicketWidget.do  β€” encMbCrdNo(μ•”ν˜Έ νšŒμ›μΉ΄λ“œ).
pay.tossBillingKey  [pay,charge]  auth=member  pay.tossautoC.do  β€” ν† μŠ€ λΉŒλ§ν‚€.
trainsInfo.tourTrainSpecialRoom  [read]  auth=member  trainsInfo.TourTrainSpecialRoom
pass.travelGoodsMenu  [read]  auth=member  pass.trGdMenuLt.do
research.trainResearch  [read]  auth=member  research.TrainResearch
tripChange.handleCancel  [write]  auth=member  ticket.tripChgHndgCnc.do  β€” λ³€κ²½ μˆ˜κΈ°μ·¨μ†Œ(+lumpStlTgtMap 동적).
tripChange.process  [write]  auth=member  reservation.tripChgPrsC.do  β€” μ—¬μ •λ³€κ²½ ν™•μ • β†’ μ‹ κ·œ PNR(ReservationOut).
login.userCheck  [read]  auth=none  login.userCheck
addSrv.wheelchairHistory  [read]  auth=member  addSrv.helpSrvCust.do  β€” helpSrvCust.do λ‹€κΈ°λŠ₯ 경둜(쑰회 λ³€ν˜•).
addSrv.wheelchairResult  [read]  auth=member  addSrv.helpSrvTk.do
xPoint.view  [read]  auth=member  xPoint.XPointView
product.cancel  [write]  auth=member  product.ReservationCancel  β€” GET λ©”μ„œλ“œμ΄μ§€λ§Œ μ·¨μ†Œ μ‹€ν–‰.
push.crewCall  [write]  auth=member  push.callCrew.do  β€” μŠΉλ¬΄μ› 호좜(μ‚¬μ΄λ“œμ΄νŽ™νŠΈ μ•‘μ…˜).
self.seatChangeInfo  [read]  auth=member  self.seatChgInfo.do  β€” μ’Œμ„λ³€κ²½ κ°€λŠ₯쑰회.
refund.verifyOnline  [read]  auth=member  refunds.verifyOnlineRefunds  β€” refunds.* μ΄μ§€λ§Œ 쑰회(검증) β€” CommonOut 미상속.