文档

API 文档

面向开发者的 v2 API 文档,覆盖鉴权、每日记录、历史查询、时刻表、配属与导出接口,并附带可交互的调试器。

接口约定

调用前先看这里

在调用下面的接口之前,先花一分钟了解这些约定,可以少踩很多坑。

基础路径

所有 v2 接口都以 /api/v2 作为基础路径,页面里展示的接口路径会自动拼接上前缀。

鉴权方式

大部分查询接口支持匿名访问;需要读取账户信息或更高额度的接口,使用 API Key 或登录会话。API Key 通过 authorization 请求头以 Bearer 方式传递,在用户页的“开发”页即可签发。第三方应用接入登录流程请看 OAuth 文档

额度与响应头

游客默认上限 300 点,登录用户默认上限 2000 点,同一用户的所有 API Key 共享同一份额度;额度每 60 秒恢复 10 点。每次响应的 meta 字段和响应头(x-api-remain、x-api-cost、Retry-After)都会带上剩余额度、本次扣费和重试等待时间。

响应结构

成功时返回 meta + data,失败时返回 meta + error(包含 code 和 message)。支持分页的接口还会返回 cursor、limit 和 nextCursor。

{
    "meta": {
        "remain": 199,
        "cost": 1
    },
    "data": {}
}
{
    "meta": {
        "remain": 199,
        "cost": 1
    },
    "error": {
        "code": "invalid_param",
        "message": "date 必须使用 YYYYMMDD 格式。"
    }
}

字段命名

JSON 字段统一使用小驼峰命名,例如 serviceDayStart。

可选字段会省略

没有数据的可选字段会直接不返回,而不是返回空值;普通字段则总是返回默认值(0、空字符串、false 或空数组)。

64 位整数按数字返回

时间戳等 64 位整数字段会以数字形式返回。日常使用没有问题,但如果数值超过 2^53,需要注意精度。

分页方式

分页接口用 cursor 翻页:第一页不传 cursor,之后把上一页的 nextCursor 原样传回。limit 不传时默认 20,上限 200。

原始文件下载

交路图和日导出文件支持 binary=true 直接返回原始内容(PNG/PDF/CSV),否则返回 JSON 包装结构。

如果你想直接用程序读取这份文档(例如接入 AI 工具或自动生成客户端),可以下载 openapi.json ,它是与页面同源的 OpenAPI 3.1 规范文件。

身份

与当前登录会话、API Key 和额度状态相关的接口。

get/api/v2/auth/me

读取当前鉴权会话

返回当前登录用户、正在使用的 API Key 摘要,以及当前额度桶的状态。通常用于接入方在请求前确认自己的凭证是否仍然有效。

api.auth.me.read

扣费规则:固定 1 点额度/次

记录

按日期分页读取车次与车组的担当记录。

get/api/v2/records/daily

分页读取每日记录

读取某一天里所有车次与车组的担当记录。每一条记录表示一个车次在某一天由某个车组担当,适合做数据同步或离线分析。

可匿名访问api.records.daily.read

扣费规则:按本页返回条数计费,0.10 额度/条,向上取整,最低扣费额度为 1

时刻表

读取车次当前时刻表、历史时刻表、车站时刻表,以及交路图图片。

get/api/v2/timetable/train/{trainCode}/current

按车次读取当前完整时刻表

返回某车次当前的完整时刻表,包括经停站、各站到达/发车时间、检票口、站台、参考车型,以及交路信息。适合做列车详情页。

可匿名访问api.timetable.train.current.read

扣费规则:固定 1 点额度/次

get/api/v2/timetable/train/{trainCode}/circulation/image

获取交路图图片

根据车次的交路表和首末站坐标生成交路图。默认返回 JSON 包装结构(含图片直链),也可以让接口直接返回 PNG 或 PDF 文件内容。

可匿名访问api.timetable.train.circulation.image.read

扣费规则:缓存命中 2 点/次,缓存未命中 20 点/次,失败 2 点/次

get/api/v2/timetable/train/{trainCode}/history

按车次读取历史时刻表

返回指定车次的历史时刻表覆盖范围,并通过 timetableMappings 一并返回每份历史时刻表的完整内容(包含全部经停站)。v2 已把“历史时刻表详情”合并进这个接口,不需要再单独请求一次。

可匿名访问api.timetable.train.history.read

扣费规则:按本页返回条数计费,0.20 额度/条,向上取整,最低扣费额度为 1

get/api/v2/timetable/station/{stationName}

按车站读取当日站内时刻表

返回指定车站当日的计划车次列表,按列车到站时间升序排列,并附上每趟车的参考车型。适合做车站查询页。

可匿名访问api.timetable.station.read

扣费规则:按本页返回条数计费,0.08 额度/条,向上取整,最低扣费额度为 1

历史

按车次号或车组号查询历史担当记录。

get/api/v2/history/train/{trainCode}

返回单个车次的历史担当记录

按车次号分页查询历史担当记录,也就是“这趟车在过去每一天由哪个车组担当”。支持用时间范围过滤,也支持游标翻页。

可匿名访问api.history.train.read

扣费规则:按本页返回条数计费,0.04 额度/条,向上取整,最低扣费额度为 1

get/api/v2/history/emu/{emuCode}

返回单一车组的历史担当记录

按车组号分页查询历史担当记录,也就是“这个车组在过去每一天跑了哪些车次”。支持时间范围过滤和游标翻页。

可匿名访问api.history.emu.read

扣费规则:按本页返回条数计费,0.04 额度/条,向上取整,最低扣费额度为 1

配属

查询动车组的配属基础信息。

get/api/v2/allocation/emu/{emuCode}

返回单一车组的配属信息

返回一个动车组的配属基础信息,包括车型、配属路局、动车段/所、制造商、速度等级、座椅与服务设施,以及车厢布局。

可匿名访问api.allocation.emu.read

扣费规则:固定 1 点额度/次

导出

列出并下载按日生成的 CSV 导出文件。

get/api/v2/exports/daily

列出可用的日导出文件

按年和月列出已生成的日导出文件。接口会返回当前选中的年月、可选年份和月份,以及该月每一天是否有导出文件。

可匿名访问api.exports.daily.read

扣费规则:固定 10 点额度/次

get/api/v2/exports/daily/{date}

读取单日导出文件

读取某一天的车次-车组对应关系导出文件。默认返回 JSON 包装结构(CSV 文本放在 content 字段里),也可以让接口直接返回原始 CSV 文本并附带下载响应头。

可匿名访问api.exports.daily.read

扣费规则:固定 200 点额度/次