{
  "researched": "2026-10-14",
  "scope": "Official no-account APIs and static catalog sources for in-map line, stop, schedule, ETA and alert features. Research only; no app integration claimed.",
  "sources": {
    "kmb": "https://data.gov.hk/en-data/dataset/hk-td-tis_21-etakmb",
    "citybus": "https://data.gov.hk/en-data/dataset/ctb-eta-transport-realtime-eta",
    "citybusSpec": "https://www.citybus.com.hk/datagovhk/bus_eta_api_specifications.pdf",
    "citybusDictionary": "https://www.citybus.com.hk/datagovhk/bus_eta_data_dictionary.pdf",
    "mtr": "https://data.gov.hk/en-data/dataset/mtr-data2-nexttrain-data",
    "mtrSpec": "https://opendata.mtr.com.hk/doc/Next_Train_API_Spec_v1.7.pdf",
    "mtrDictionary": "https://opendata.mtr.com.hk/doc/Next_Train_DataDictionary_v1.7.pdf",
    "lightRail": "https://data.gov.hk/en-data/dataset/mtr-lrnt_data-light-rail-nexttrain-data",
    "lightRailDictionary": "https://opendata.mtr.com.hk/doc/LR_Next_Train_DataDictionary_v1.2.pdf",
    "mtrBus": "https://data.gov.hk/en-data/dataset/mtr-mtr_bus-mtr-bus-eta-data",
    "mtrBusSpec": "https://opendata.mtr.com.hk/doc/MTR_BUS_API_Spec_v1.14.pdf",
    "gmb": "https://data.gov.hk/en-data/dataset/hk-td-sm_7-real-time-arrival-data-of-gmb",
    "gmbSpec": "https://data.etagmb.gov.hk/static/GMB_ETA_API_Specification.pdf",
    "gmbCoverage": "https://www.td.gov.hk/en/transport_in_hong_kong/its/intelligent_transport_systems_strategy_review_and_/rtais/index.html",
    "nlb": "https://data.gov.hk/en-data/dataset/nlb-bus-nlb-bus-service-v2",
    "hkkf": "https://data.gov.hk/en-data/dataset/hkkf-hkkfdata-hkkf-eta-data",
    "hkkfSpec": "https://www.hkkfeta.com/datagovhk/HKKF_ETA_API_Specification.pdf",
    "sunFerry": "https://data.gov.hk/en-data/dataset/sunferry-eta-eta",
    "sunFerrySpec": "https://www.sunferry.com.hk/eta/SunFerry_ETA_API_Specification_and_Data_Dictionary.pdf",
    "starFerry": "https://data.gov.hk/en-data/dataset/starferry-starferry-ferry-service-timetables-and-fare-tables-of-star-ferry",
    "ferrySchedules": "https://data.gov.hk/en-data/dataset/hk-td-wcms_8-ferry-services-tt-ft",
    "tramRoutes": "https://data.gov.hk/en-data/dataset/hktramways-hktramways-main-routes",
    "tramStops": "https://data.gov.hk/en-data/dataset/hktramways-hktramways-tram-stops",
    "staticRoutes": "https://data.gov.hk/en-data/dataset/hk-td-tis_14-routes-fares-xml",
    "staticRoutesDictionary": "https://static.data.gov.hk/td/routes-fares-xml/dataspec/ptroutefare_xml_dataspec.pdf",
    "alerts": "https://data.gov.hk/en-data/dataset/hk-td-tis_19-special-traffic-news-v2",
    "alertsDictionary": "https://static.data.gov.hk/td/special-traffic-news/en/Data_Specification_for_STN_Eng_v4.0.pdf",
    "terms": "https://data.gov.hk/en/terms-and-conditions"
  },
  "providers": [
    {
      "id": "kmb",
      "name": "KMB / Long Win",
      "kind": "bus",
      "coverage": "Operator routes, directions and service variants, stop coordinates and ETAs.",
      "live": "ETA; entries can be null or scheduled.",
      "cors": "200 and * observed for routes and ETA.",
      "endpoints": {
        "routes": "https://data.etabus.gov.hk/v1/transport/kmb/route/",
        "stops": "https://data.etabus.gov.hk/v1/transport/kmb/stop",
        "routeStops": "https://data.etabus.gov.hk/v1/transport/kmb/route-stop/{route}/{direction}/{service_type}",
        "eta": "https://data.etabus.gov.hk/v1/transport/kmb/eta/{stop_id}/{route}/{service_type}",
        "routeETA": "https://data.etabus.gov.hk/v1/transport/kmb/route-eta/{route}/{service_type}"
      },
      "parameters": "direction=inbound|outbound; preserve service_type, dir, stop sequence. Do not collapse route variants.",
      "notes": "Filter ETA by selected direction/sequence; retain remarks and data_timestamp. Route 1A probe returned eta:null overnight.",
      "sources": [
        "kmb"
      ]
    },
    {
      "id": "citybus",
      "name": "Citybus V2",
      "kind": "bus",
      "coverage": "Citybus including former NWFB routes under company CTB.",
      "live": "ETA; empty array is possible.",
      "cors": "200 and * observed for routes, route-stops, individual stop and ETA; initial ETA/stop timeout succeeded on retry.",
      "endpoints": {
        "routes": "https://rt.data.gov.hk/v2/transport/citybus/route/CTB",
        "routeStops": "https://rt.data.gov.hk/v2/transport/citybus/route-stop/CTB/{route}/{direction}",
        "stop": "https://rt.data.gov.hk/v2/transport/citybus/stop/{stop_id}",
        "eta": "https://rt.data.gov.hk/v2/transport/citybus/eta/CTB/{stop_id}/{route}"
      },
      "parameters": "direction=inbound|outbound; stop_id six digits. Preserve leading zeros.",
      "notes": "Use V2. Retain direction and remarks; ETA response cache max-age=45 observed. Build stop→routes index from route-stop data for map clicks. ETA keys: co,route,dir,seq,stop,dest_en/tc/sc,eta_seq,eta,rmk_en/tc/sc,data_timestamp. Keep remark-only empty eta rows (e.g. KMB Cycle). Circular routes split at a midway turning point; no circular flag.",
      "sources": [
        "citybus",
        "citybusSpec",
        "citybusDictionary"
      ]
    },
    {
      "id": "mtr",
      "name": "MTR heavy rail",
      "kind": "rail",
      "coverage": "AEL, TCL, TML, TKL, EAL, SIL, TWL, ISL, KTL, DRL; next up to four trains.",
      "live": "Next-train schedule/estimate; overnight first-train values are possible.",
      "cors": "200 and * observed for next-train API. Official static station CSV returned 200 without CORS header: ingest at build time.",
      "endpoints": {
        "eta": "https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line={line}&sta={station}&lang={language}",
        "stationCatalog": "https://opendata.mtr.com.hk/data/mtr_lines_and_stations.csv"
      },
      "parameters": "lang=EN|TC. Map station code plus line, not station name. Response key is LINE-STATION; UP/DOWN include destination/platform.",
      "notes": "Read status/message/isdelay and source time. Missing directions or status=0 need explicit unavailable/disruption states. Parse naive timestamps as Asia/Hong_Kong. API cache max-age=10 observed. Dictionary labels source, ttnt and valid as Dummy/N/A: do not infer live/scheduled from source=+ or source=- and compute display from time instead. status1=normal,0=error/alert; isdelay Y=delayed,N=on time. EAL timetype A/D identifies arrival/departure and route=RAC identifies via Racecourse.",
      "sources": [
        "mtr",
        "mtrSpec",
        "mtrDictionary"
      ]
    },
    {
      "id": "lightRail",
      "name": "MTR Light Rail",
      "kind": "rail",
      "coverage": "Station/platform next-train data; optional special routes.",
      "live": "Platform arrival or terminus departure estimates.",
      "cors": "200 and * observed.",
      "endpoints": {
        "eta": "https://rt.data.gov.hk/v1/transport/mtr/lrt/getSchedule?station_id={station_id}&with_special=1"
      },
      "parameters": "Numeric station_id. Special entries use additionalInfo1 as route label when special=1.",
      "notes": "Dictionary v1.2 dated 5 July 2026 renames stop250 to Hoi Wong Road. Preserve arrival_departure A/D. Probe returned status2 with empty platforms; dictionary only defines 0/1, so do not infer undocumented status meaning.",
      "sources": [
        "lightRail",
        "lightRailDictionary"
      ]
    },
    {
      "id": "mtrBus",
      "name": "MTR Bus / feeder bus",
      "kind": "bus",
      "coverage": "Routes listed by current API specification; listing does not guarantee availability.",
      "live": "Estimated and scheduled entries, identified by isScheduled.",
      "cors": "POST and OPTIONS both 200; ACAO *; preflight allows POST and content-type.",
      "endpoints": {
        "eta": "https://rt.data.gov.hk/v1/transport/mtr/bus/getSchedule"
      },
      "method": "POST",
      "requestExample": {
        "language": "en",
        "routeName": "K12"
      },
      "parameters": "language=en|zh; routeName. Current API spec1.14 dated28September2026.",
      "notes": "Follow appRefreshTimeInSecond (probe60); preserve routeStatus, caseNumber, footerRemarks, isSuspended, isScheduled and busStopStatus. Empty buses are not a network failure. Ignore zero coordinates as missing, not a real bus location.",
      "sources": [
        "mtrBus",
        "mtrBusSpec"
      ]
    },
    {
      "id": "gmb",
      "name": "Green minibuses",
      "kind": "minibus",
      "coverage": "TD states rollout covers all GMB routes since October2022; not red minibuses.",
      "live": "Up to next three ETA entries; scheduled remarks and enabled=false can occur.",
      "cors": "200 and * observed for regional catalog, route detail and ETA.",
      "endpoints": {
        "routes": "https://data.etagmb.gov.hk/route/{region}",
        "route": "https://data.etagmb.gov.hk/route/{region}/{route_code}",
        "routeStops": "https://data.etagmb.gov.hk/route-stop/{route_id}/{route_seq}",
        "stop": "https://data.etagmb.gov.hk/stop/{stop_id}",
        "stopRoutes": "https://data.etagmb.gov.hk/stop-route/{stop_id}",
        "eta": "https://data.etagmb.gov.hk/eta/route-stop/{route_id}/{route_seq}/{stop_seq}",
        "stopETA": "https://data.etagmb.gov.hk/eta/stop/{stop_id}",
        "lastUpdate": "https://data.etagmb.gov.hk/last-update/route"
      },
      "parameters": "region=HKI|KLN|NT. Keep provider route_id and route_seq; a route code may have variants.",
      "notes": "Respect enabled and unavailable descriptions; Scheduled remarks must remain visible. No data must never mean no further service.",
      "sources": [
        "gmb",
        "gmbSpec",
        "gmbCoverage"
      ]
    },
    {
      "id": "nlb",
      "name": "New Lantao Bus V2",
      "kind": "bus",
      "coverage": "NLB route list, directional route IDs, stops, fares and ETA.",
      "live": "Estimated arrivals endpoint; inspect status and remarks.",
      "cors": "Routes and route stops200, ACAO*; ETA separately not probed in bounded pass.",
      "endpoints": {
        "routes": "https://rt.data.gov.hk/v2/transport/nlb/route.php?action=list",
        "routeStops": "https://rt.data.gov.hk/v2/transport/nlb/stop.php?action=list&routeId={routeId}",
        "eta": "https://rt.data.gov.hk/v2/transport/nlb/stop.php?action=estimatedArrivals&routeId={routeId}&stopId={stopId}&language={language}"
      },
      "parameters": "routeId is not the displayed route number; en is a documented language example.",
      "notes": "RouteId2 is TaiO→MuiWo and first stop221 in probe. Opposite direction has its own routeId. Useful for trailhead access.",
      "sources": [
        "nlb"
      ]
    },
    {
      "id": "hkkf",
      "name": "Hong Kong & Kowloon Ferry",
      "kind": "ferry",
      "coverage": "Central–Sok Kwu Wan; Central–Yung Shue Wan; Central–Peng Chau; Peng Chau–Hei Ling Chau.",
      "live": "Running-vessel destination ETA; not next departure.",
      "cors": "Route and ETA200, ACAO* observed.",
      "endpoints": {
        "routes": "https://www.hkkfeta.com/opendata/route",
        "pier": "https://www.hkkfeta.com/opendata/pier/{pier_id}",
        "timetable": "https://www.hkkfeta.com/opendata/time_table/{route_id}/{direction}",
        "fare": "https://www.hkkfeta.com/opendata/fare_table/{route_id}",
        "eta": "https://www.hkkfeta.com/opendata/eta/{route_id}/{direction}"
      },
      "parameters": "Route IDs1–4 respectively; direction=inbound|outbound.",
      "notes": "Timetable/fare areCSV. Pair planned departure with running-vessel ETA, label separately. Empty ETA at night is normal possible response.",
      "sources": [
        "hkkf",
        "hkkfSpec"
      ]
    },
    {
      "id": "sunFerry",
      "name": "Sun Ferry",
      "kind": "ferry",
      "coverage": "Central–Cheung Chau/Mui Wo, North Point–Hung Hom/Kowloon City, documented inter-island segments.",
      "live": "Departed-ferry arrival estimate; not next departure.",
      "cors": "200 and * observed.",
      "endpoints": {
        "eta": "https://www.sunferry.com.hk/eta/?route={route_code}"
      },
      "parameters": "Documented codes:CECC,CCCE,CEMW,MWCE,NPHH,HHNP,NPKC,KCNP,IIPECMUW,IIMUWPEC,IIMUWCMW,IICMWMUW,IICMWCHC,IICHCCMW,IICHCMUW,IIMUWCHC.",
      "notes": "Fields can contain null eta/location. Probe returned version1.1 although published spec1.0, so preserve extra fields. Observed cache max-age300/s-maxage900: freshness cannot be assumed from fetch time.",
      "sources": [
        "sunFerry",
        "sunFerrySpec"
      ]
    },
    {
      "id": "starFerry",
      "name": "Star Ferry",
      "kind": "ferry",
      "coverage": "Central–Tsim Sha Tsui and Wan Chai–Tsim Sha Tsui timetable/fare files.",
      "live": "No supported public live-arrival API verified in this research.",
      "cors": "Static files not probed; ingest at build time.",
      "endpoints": {
        "centralTimetable": "https://www.starferry.com.hk/sites/default/files/upload/open_data/csv/ferry_sf_central_tsimshatsui_timetable_eng.csv",
        "wanChaiTimetable": "https://www.starferry.com.hk/sites/default/files/upload/open_data/csv/ferry_sf_wanchai_tsimshatsui_timetable_eng.csv"
      },
      "notes": "Display timetable/headway, clearly labelled Scheduled. Do not synthesize a live countdown.",
      "sources": [
        "starFerry"
      ]
    },
    {
      "id": "trams",
      "name": "Hong Kong Tramways",
      "kind": "tram",
      "coverage": "Official static main routes and tram stops, multilingual CSV.",
      "live": "Supported public live-arrival API not verified; third-party wrappers are not a substitute for operator API permission.",
      "cors": "Static CSV not probed; ingest at build time.",
      "endpoints": {
        "routes": "https://static.data.gov.hk/tramways/datasets/main_routes/tramways_main_routes_en.csv",
        "stops": "https://static.data.gov.hk/tramways/datasets/tram_stops/summary_tram_stops_en.csv"
      },
      "notes": "Use official static route/stop detail inside map. Do not call static main-route table live.",
      "sources": [
        "tramRoutes",
        "tramStops"
      ]
    },
    {
      "id": "tdStatic",
      "name": "TD multimodal static catalog",
      "kind": "catalog",
      "coverage": "Routes/fares, stop sequences and locations for buses, GMB, ferries, Peak Tram and trams; GMB static catalog provides termini.",
      "live": "Static, twice-monthly route/fare update; temporary diversions may be absent.",
      "cors": "Not probed; download and normalize at build time.",
      "endpoints": {
        "ferries": "https://static.data.gov.hk/td/routes-fares-xml/ROUTE_FERRY.xml"
      },
      "notes": "Use separate licensed-ferry schedule datasets for departure calendars. Discovery Bay, smaller operators and kai-to live coverage remains unverified. This catalog is broader than available ETA feeds.",
      "sources": [
        "staticRoutes",
        "staticRoutesDictionary",
        "ferrySchedules"
      ]
    },
    {
      "id": "alerts",
      "name": "TD Special Traffic News v2",
      "kind": "alerts",
      "coverage": "Cross-modal traffic/public-transport incidents; not guaranteed complete operator alerts.",
      "live": "Published incident updates, not vehicle arrivals.",
      "cors": "200 and * observed for EN XML.",
      "endpoints": {
        "en": "https://www.td.gov.hk/en/special_news/trafficnews.xml",
        "tc": "https://www.td.gov.hk/tc/special_news/trafficnews.xml",
        "sc": "https://www.td.gov.hk/sc/special_news/trafficnews.xml"
      },
      "notes": "Parse XML, preserve incident ID/date and official wording. Show relevant operator/location notices inside map; operator-specific notices remain a coverage gap.",
      "sources": [
        "alerts",
        "alertsDictionary"
      ]
    }
  ],
  "probes": [
    {
      "id": "kmbRoutes",
      "url": "https://data.etabus.gov.hk/v1/transport/kmb/route/",
      "at": "2026-10-14T18:03:39.335Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "max-age=300;",
      "bytes": 352231,
      "sample": "{\"type\":\"RouteList\",\"version\":\"1.0\",\"generated_timestamp\":\"2026-10-15T02:03:46+08:00\",\"data\":[{\"route\":\"1\",\"bound\":\"O\",\"service_type\":\"1\",\"orig_en\":\"CHUK YUEN ESTATE\",\"orig_tc\":\"竹園邨\",\"orig_sc\":\"竹园邨\",\"dest_en\":\"STAR FERRY\",\"dest_tc\":\"尖沙咀碼頭\",\"dest_sc\":"
    },
    {
      "id": "kmbETA",
      "url": "https://data.etabus.gov.hk/v1/transport/kmb/eta/A3ADFCDF8487ADB9/1A/1",
      "at": "2026-10-14T18:03:39.347Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "max-age=300;",
      "bytes": 584,
      "sample": "{\"type\":\"ETA\",\"version\":\"1.0\",\"generated_timestamp\":\"2026-10-15T02:03:46+08:00\",\"data\":[{\"co\":\"KMB\",\"route\":\"1A\",\"dir\":\"O\",\"service_type\":1,\"seq\":1,\"dest_tc\":\"尖沙咀碼頭\",\"dest_sc\":\"尖沙咀码头\",\"dest_en\":\"STAR FERRY\",\"eta_seq\":1,\"eta\":null,\"rmk_tc\":\"\",\"rmk_sc\""
    },
    {
      "id": "citybusRoutes",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/route/CTB",
      "at": "2026-10-14T18:03:39.349Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "max-age=300",
      "bytes": 112885,
      "sample": "{\"type\": \"RouteList\", \"version\": \"2.0\", \"generated_timestamp\": \"2026-10-15T01:59:12+08:00\", \"data\": [{\"co\": \"CTB\", \"route\": \"1\", \"orig_tc\": \"中環 (港澳碼頭)\", \"orig_en\": \"Central (Macao Ferry)\", \"dest_tc\": \"跑馬地 (上)\", \"dest_en\": \"Happy Valley (Upper)\", \"ori"
    },
    {
      "id": "citybusStops",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/route-stop/CTB/1/outbound",
      "at": "2026-10-14T18:03:39.350Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "max-age=300",
      "bytes": 2432,
      "sample": "{\"type\": \"RouteStop\", \"version\": \"2.0\", \"generated_timestamp\": \"2026-10-15T02:03:46+08:00\", \"data\": [{\"co\": \"CTB\", \"route\": \"1\", \"dir\": \"O\", \"seq\": 1, \"stop\": \"001027\", \"data_timestamp\": \"2026-10-14T05:00:04+08:00\"}, {\"co\": \"CTB\", \"route\": \"1\", \"dir\""
    },
    {
      "id": "mtrHeavy",
      "url": "https://rt.data.gov.hk/v1/transport/mtr/getSchedule.php?line=ISL&sta=ADM&lang=EN",
      "at": "2026-10-14T18:03:39.351Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "public, must-revalidate, max-age=10",
      "bytes": 1044,
      "sample": "{\"sys_time\":\"2026-10-15 02:03:44\",\"curr_time\":\"2026-10-15 02:03:43\",\"data\":{\"ISL-ADM\":{\"curr_time\":\"2026-10-15 02:03:43\",\"sys_time\":\"2026-10-15 02:03:44\",\"UP\":[{\"seq\":\"1\",\"dest\":\"CHW\",\"plat\":\"3\",\"time\":\"2026-10-15 06:09:31\",\"ttnt\":\"245\",\"valid\":\"Y\",\""
    },
    {
      "id": "mtrLight",
      "url": "https://rt.data.gov.hk/v1/transport/mtr/lrt/getSchedule?station_id=600",
      "at": "2026-10-14T18:03:39.351Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "public, must-revalidate, max-age=10",
      "bytes": 243,
      "sample": "{\r\n  \"platform_list\": [\r\n    {\r\n      \"platform_id\": 2\r\n    },\r\n    {\r\n      \"platform_id\": 3\r\n    },\r\n    {\r\n      \"platform_id\": 4\r\n    },\r\n    {\r\n      \"platform_id\": 5\r\n    }\r\n  ],\r\n  \"status\": 2,\r\n  \"system_time\": \"2026-10-15 02:03:46\"\r\n}"
    },
    {
      "id": "gmbRoutes",
      "url": "https://data.etagmb.gov.hk/route/HKI",
      "at": "2026-10-14T18:03:39.352Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 761,
      "sample": "{\"type\":\"Routes-Regional\",\"version\":\"1.0\",\"generated_timestamp\":\"2026-10-15T02:03:45.259+08:00\",\"data\":{\"routes\":[\"1\",\"10\",\"10P\",\"12\",\"13\",\"14M\",\"16A\",\"16M\",\"16X\",\"18M\",\"1A\",\"2\",\"20\",\"20M\",\"21A\",\"21M\",\"22\",\"22S\",\"22X\",\"23\",\"23M\",\"24A\",\"24M\",\"25\",\"26\""
    },
    {
      "id": "nlbRoutes",
      "url": "https://rt.data.gov.hk/v2/transport/nlb/route.php?action=list",
      "at": "2026-10-14T18:03:39.352Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 19313,
      "sample": "{\"routes\":[{\"routeId\":\"2\",\"routeNo\":\"1\",\"routeName_c\":\"\\u5927\\u6fb3 > \\u6885\\u7aa9\\u78bc\\u982d\",\"routeName_s\":\"\\u5927\\u6fb3 > \\u6885\\u7a9d\\u7801\\u5934\",\"routeName_e\":\"Tai O > Mui Wo Ferry Pier\",\"overnightRoute\":0,\"specialRoute\":0},{\"routeId\":\"1\",\"rou"
    },
    {
      "id": "citybusETA",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/eta/CTB/001027/1",
      "at": "2026-10-14T18:06:23.292Z",
      "error": "TimeoutError: The operation was aborted due to timeout"
    },
    {
      "id": "citybusStop",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/stop/001027",
      "at": "2026-10-14T18:06:23.302Z",
      "error": "TimeoutError: The operation was aborted due to timeout"
    },
    {
      "id": "gmbRoute",
      "url": "https://data.etagmb.gov.hk/route/HKI/1",
      "at": "2026-10-14T18:06:23.304Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 4660,
      "rawPath": "data/city/transit-research/gmbRoute.txt",
      "sample": "{\"type\":\"Route\",\"version\":\"1.0\",\"generated_timestamp\":\"2026-10-15T02:06:39.212+08:00\",\"data\":[{\"route_id\":2006408,\"region\":\"HKI\",\"route_code\":\"1\",\"description_tc\":\"正常班次\",\"description_sc\":\"正常班次\",\"description_en\":\"Normal Departure\",\"directions\":[{\"route_seq\":1,\"orig_tc\":\"山頂(公共交通總站)\",\"orig_sc\":\"山顶(公共交通总站)\",\"orig_en\":\"The Peak (Public Transport Terminus)\",\"dest_tc\":\"中環(香港站公共運輸交匯處)\",\"dest_sc\":\"中环(香港站公共运输交汇处)\",\"dest_en\":\"Central (Hong Kong Station Public Transport Interchange)\",\"remarks_tc\":null,\"remarks_sc\":null,\"remarks_en\":null,\"headways\":[{\"weekd"
    },
    {
      "id": "nlbStops",
      "url": "https://rt.data.gov.hk/v2/transport/nlb/stop.php?action=list&routeId=2",
      "at": "2026-10-14T18:06:23.304Z",
      "error": "TimeoutError: The operation was aborted due to timeout"
    },
    {
      "id": "hkkfRoutes",
      "url": "https://www.hkkfeta.com/opendata/route",
      "at": "2026-10-14T18:06:23.305Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 1325,
      "rawPath": "data/city/transit-research/hkkfRoutes.txt",
      "sample": "{\"type\": \"Route\", \"version\": \"1.2\", \"generated_timestamp\": \"2026-10-15T02:06:39+08:00\", \"data\": [{\"route_id\": 1, \"route_name_en\": \"Central<=>Sok Kwu Wan\", \"route_name_tc\": \"中環往來索罟灣\", \"route_name_sc\": \"中环往来索罟湾\", \"origin_en\": \"Central\", \"origin_tc\": \"中環\", \"origin_sc\": \"中环\", \"destination_en\": \"Sok Kwu Wan\", \"destination_tc\": \"索罟灣\", \"destination_sc\": \"索罟湾\"}, {\"route_id\": 2, \"route_name_en\": \"Central<=>Yung Shue Wan\", \"route_name_tc\": \"中環往來榕樹灣\", \"route_name_sc\": \"中环往来榕树湾\", \"origin_en\": \"Central\", \"origin_tc\": \"中環\", \"origin_sc\": \"中环\", \"destination_en"
    },
    {
      "id": "hkkfETA",
      "url": "https://www.hkkfeta.com/opendata/eta/2/inbound",
      "at": "2026-10-14T18:06:23.306Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 97,
      "rawPath": "data/city/transit-research/hkkfETA.txt",
      "sample": "{\"type\": \"ETA\", \"version\": \"1.2\", \"generated_timestamp\": \"2026-10-15T02:06:38+08:00\", \"data\": []}"
    },
    {
      "id": "tdAlerts",
      "url": "https://www.td.gov.hk/en/special_news/trafficnews.xml",
      "at": "2026-10-14T18:06:23.307Z",
      "status": 200,
      "allowOrigin": "*",
      "allowMethods": null,
      "cacheControl": "s-maxage=300",
      "bytes": 1552,
      "rawPath": "data/city/transit-research/tdAlerts.txt",
      "sample": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<list xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"https://www.td.gov.hk/en/special_news/trafficnews.xsd\">\r\n  <message>\r\n    <INCIDENT_NUMBER>IN-26-07542</INCIDENT_NUMBER>\r\n    <INCIDENT_HEADING_EN>Highwind Incident</INCIDENT_HEADING_EN>\r\n    <INCIDENT_HEADING_CN>強風管理</INCIDENT_HEADING_CN>\r\n    <INCIDENT_DETAIL_EN>Strong Wind</INCIDENT_DETAIL_EN>\r\n    <INCIDENT_DETAIL_CN>強風</INCIDENT_DETAIL_CN>\r\n    <LOCATION_EN>Hong Kong Link Road</LOCATION_EN>\r\n    <LOCATION_CN>香港連接路</LOCATI"
    },
    {
      "id": "mtrStations",
      "url": "https://opendata.mtr.com.hk/data/mtr_lines_and_stations.csv",
      "at": "2026-10-14T18:06:23.307Z",
      "status": 200,
      "allowOrigin": null,
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 14158,
      "rawPath": "data/city/transit-research/mtrStations.txt",
      "sample": "\"Line Code\",\"Direction\",\"Station Code\",\"Station ID\",\"Chinese Name\",\"English Name\",\"Sequence\"\r\n\"AEL\",\"DT\",\"AWE\",\"56\",\"博覽館\",\"AsiaWorld-Expo\",1.00\r\n\"AEL\",\"DT\",\"AIR\",\"47\",\"機場\",\"Airport\",2.00\r\n\"AEL\",\"DT\",\"TSY\",\"46\",\"青衣\",\"Tsing Yi\",3.00\r\n\"AEL\",\"DT\",\"KOW\",\"45\",\"九龍\",\"Kowloon\",4.00\r\n\"AEL\",\"DT\",\"HOK\",\"44\",\"香港\",\"Hong Kong\",5.00\r\n\"AEL\",\"UT\",\"HOK\",\"44\",\"香港\",\"Hong Kong\",1.00\r\n\"AEL\",\"UT\",\"KOW\",\"45\",\"九龍\",\"Kowloon\",2.00\r\n\"AEL\",\"UT\",\"TSY\",\"46\",\"青衣\",\"Tsing Yi\",3.00\r\n\"AEL\",\"UT\",\"AIR\",\"47\",\"機場\",\"Airport\",4.00\r\n\"AEL\",\"UT\",\"AWE\",\"56\",\"博覽館\",\"AsiaWorld-Expo\",5.00\r\n\"DRL"
    },
    {
      "id": "citybusETA-retry",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/eta/CTB/001027/1",
      "method": "GET",
      "at": "2026-10-14T18:07:09.807Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": null,
      "allowMethods": null,
      "cacheControl": "max-age=45",
      "bytes": 97,
      "rawPath": "data/city/transit-research/citybusETA-retry.txt",
      "sample": "{\"type\": \"ETA\", \"version\": \"2.0\", \"generated_timestamp\": \"2026-10-15T02:07:23+08:00\", \"data\": []}"
    },
    {
      "id": "citybusStop-retry",
      "url": "https://rt.data.gov.hk/v2/transport/citybus/stop/001027",
      "method": "GET",
      "at": "2026-10-14T18:07:09.818Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": null,
      "allowMethods": null,
      "cacheControl": "max-age=300",
      "bytes": 322,
      "rawPath": "data/city/transit-research/citybusStop-retry.txt",
      "sample": "{\"type\": \"Stop\", \"version\": \"2.0\", \"generated_timestamp\": \"2026-10-15T02:07:23+08:00\", \"data\": {\"stop\": \"001027\", \"name_tc\": \"中環 (港澳碼頭)\", \"name_en\": \"Central (Macao Ferry)\", \"lat\": \"22.288274152091\", \"long\": \"114.15042248053\", \"name_sc\": \"中环 (港澳码头)\", \"data_timestamp\": \"2026-10-14T05:00:02+08:00\"}}"
    },
    {
      "id": "nlbStops-retry",
      "url": "https://rt.data.gov.hk/v2/transport/nlb/stop.php?action=list&routeId=2",
      "method": "GET",
      "at": "2026-10-14T18:07:09.820Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": null,
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 18779,
      "rawPath": "data/city/transit-research/nlbStops-retry.txt",
      "sample": "{\"stops\":[{\"stopId\":\"221\",\"stopName_c\":\"\\u5927\\u6fb3\",\"stopName_s\":\"\\u5927\\u6fb3\",\"stopName_e\":\"Tai O\",\"stopLocation_c\":\"\\u5927\\u6fb3\\u9053\",\"stopLocation_s\":\"\\u5927\\u6fb3\\u9053\",\"stopLocation_e\":\"Tai O Road\",\"latitude\":\"22.25253000\",\"longitude\":\"113.86275300\",\"fare\":\"12.7\",\"fareHoliday\":\"21.4\",\"someDepartureObserveOnly\":0},{\"stopId\":\"222\",\"stopName_c\":\"\\u9f8d\\u7530\\u90a8\",\"stopName_s\":\"\\u9f99\\u75"
    },
    {
      "id": "sunFerry",
      "url": "https://www.sunferry.com.hk/eta/?route=CECC",
      "method": "GET",
      "at": "2026-10-14T18:07:09.820Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": "Content-Type, Authorization",
      "allowMethods": "GET, POST, OPTIONS",
      "cacheControl": "no-transform,public,max-age=300,s-maxage=900",
      "bytes": 346,
      "rawPath": "data/city/transit-research/sunFerry.txt",
      "sample": "{\"type\":\"ETA\",\"version\":\"1.1\",\"generated_timestamp\":\"2026-10-15T02:07:06+08:00\",\"data\":[{\"routecode\":\"CECCH\",\"route_en\":\"Central - Cheung Chau\",\"route_tc\":\"中環 - 長洲\",\"route_sc\":\"中环 - 长洲\",\"depart_time\":\"01:30\",\"eta\":null,\"lat\":null,\"lng\":null,\"rmk_en\":null,\"rmk_tc\":null,\"rmk_sc\":null,\"date_timestamp\":\"2026-10-15T02:07:06+08:00\"}]}"
    },
    {
      "id": "gmbETA",
      "url": "https://data.etagmb.gov.hk/eta/route-stop/2006408/1/1",
      "method": "GET",
      "at": "2026-10-14T18:07:09.821Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": null,
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 147,
      "rawPath": "data/city/transit-research/gmbETA.txt",
      "sample": "{\"type\":\"ETA-Route-Stop\",\"version\":\"1.0\",\"generated_timestamp\":\"2026-10-15T02:07:16.753+08:00\",\"data\":{\"stop_id\":20014489,\"enabled\":true,\"eta\":[]}}"
    },
    {
      "id": "mtrBusOptions",
      "url": "https://rt.data.gov.hk/v1/transport/mtr/bus/getSchedule",
      "method": "OPTIONS",
      "at": "2026-10-14T18:07:09.822Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": "content-type",
      "allowMethods": "POST",
      "cacheControl": null,
      "bytes": 0,
      "rawPath": "data/city/transit-research/mtrBusOptions.txt",
      "sample": ""
    },
    {
      "id": "mtrBusPost",
      "url": "https://rt.data.gov.hk/v1/transport/mtr/bus/getSchedule",
      "method": "POST",
      "at": "2026-10-14T18:07:09.822Z",
      "status": 200,
      "allowOrigin": "*",
      "allowHeaders": null,
      "allowMethods": null,
      "cacheControl": null,
      "bytes": 588,
      "rawPath": "data/city/transit-research/mtrBusPost.txt",
      "sample": "{\"appRefreshTimeInSecond\":\"60\",\"busStop\":[],\"caseNumber\":15,\"caseNumberDetail\":\"\",\"footerRemarks\":\"System testing in progress.  Estimated arrival time may vary from actual arrival time.  Please allow sufficient time for travel. Scheduled and arrival times are for reference only and are subject to change without prior notice.\",\"routeColour\":\"\",\"routeName\":\"K12\",\"routeStatus\":\"3\",\"routeStatusColour\""
    }
  ],
  "terms": {
    "source": "https://data.gov.hk/en/terms-and-conditions",
    "summary": "DATA.GOV.HK permits free commercial/noncommercial reuse subject to its terms, source attribution and acknowledgement of Government/relevant organisation ownership. Data are provided as is. Do not label these datasets CC0 or assume a service-level guarantee.",
    "numericRateLimits": "No numeric request quota was verified in the reviewed official specs. Several document HTTP429. Respect server headers and Retry-After."
  },
  "implementation": {
    "priority": [
      "KMB route/direction/service variant→stops→selected stop ETA",
      "Citybus CTB V2 route/direction→stops→selected stop ETA",
      "MTR selected station→line/platform/destination→next trains",
      "GMB and NLB for hiking access; MTR feeder/Light Rail next",
      "Ferry departures from timetable plus separately labelled running-vessel arrivals",
      "Tram/StarFerry/other ferries: comprehensive static detail with explicit schedule status"
    ],
    "performance": [
      "Prebuild compact route and stop indexes; defer full route-stop lists until selection. Static MTR CSV is same-origin build asset because upstream CORS was absent.",
      "Poll only the selected visible stop/station, not every viewport marker. Suggested client cadence: bus/GMB60s, heavy/light rail10–15s; obey MTRbus appRefreshTimeInSecond and provider freshness headers. These are design choices, not contractual rate limits.",
      "Abort selection changes, pause on hidden tab, deduplicate identical in-flight requests, backoff429/5xx with jitter and retain last successful data with stale label.",
      "Separate map pan/render state from arrival fetch state; bound concurrency for catalog ingestion."
    ],
    "correctness": [
      "Use Asia/Hong_Kong for times with no timezone; preserve source timestamps and remarks.",
      "Normalize states: estimated, scheduled, unavailable, stale, disrupted. Null/empty/error must not be displayed as zero minutes or service ended.",
      "Cross-harbour buses are ordinary KMB/CTB routes. Preserve both operator IDs and directions; do not merge stop IDs or double-count joint-route data blindly.",
      "Connect stop coordinates as a stop sequence only; do not present straight segments as road-accurate route geometry. Obtain authoritative polylines separately.",
      "UI can be localized into all site languages; provider data supply mainly EN/TC/SC. Preserve official Chinese/English proper names; translate interface and clearly distinguish translated service notices.",
      "Do not market all-HK live arrivals: red minibuses, trams, Star Ferry, smaller ferries, Peak Tram, HSR and temporary operator alerts have unverified or absent public live coverage."
    ]
  }
}
