Timora 开放 API
把高校课表接入你的机器人、网站或应用。学生的个人数据——资料、成绩、截止日期和证明——只有经本人同意,通过“使用 Timora 登录”获取。只读访问。
可以获取什么
API 提供的数据
公开数据
有项目令牌即可。与网站上无需登录即可看到的数据相同。
institutions高校和学院:名称、城市、可用功能groups高校的班级schedule班级每天的课程——每次请求最多 31 天teachers教师(SibSUTIS)exams考试、考查和答疑
经学生同意
学生自己决定开放哪些板块的访问权限,并可随时撤销。
profile姓名、班级和学校schedule学生所在班级的课表gradesEIOS 成绩deadlinesEIOS 课程中未提交的作业和测验certificates证明申请及其状态
如何获取访问权限
四步完成第一次请求
介绍你的项目:做什么、需要哪些数据、代码放在哪里。如果在 GitHub 上——请发送链接。
注明 Timora、GitHub 协作者、安全要求——见本页下方。
tmr_… 令牌单独发放且只显示一次。Timora 只保存它的指纹——丢失了会发新的。
API 地址 — https://mytimora.ru/api/v1,请求头 Authorization: Bearer tmr_…。
使用 Timora 登录
个人数据——仅经同意
学生在已登录 Timora 的任意地方确认登录:iOS 和 Android 应用、Telegram 机器人或 Telegram 和 VK 小程序。你的项目看不到密码和登录数据。
规则
项目要求
获取令牌即表示你接受这些条款。如有违反,令牌将被直接撤销——所有学生对你项目的授权也会一并失效。
注明 Timora
- 在项目界面中注明“由 Timora 提供支持”并链接到 mytimora.ru:放在“关于”页面、网站页脚或机器人简介中。
- 在 README 和简介中说明项目使用了 Timora 开放 API。
- 不得把 Timora 的名称、标志和设计据为己有。项目不得看起来像 Timora 的官方客户端。
GitHub
- 如果项目代码在 GitHub 上(公开或私有仓库)——请把 @y0rence 添加为协作者:Settings → Collaborators → Add people。
- 在 README 的贡献者(Contributors)部分注明 @y0rence。
令牌安全
- 项目令牌是机密。它只存放在你的服务器上:环境变量或密钥存储中。
- 不要放在代码里、git 里、移动应用里,也不要放在浏览器或小程序的 JavaScript 中。
- 只使用校验证书的 HTTPS。令牌泄露时请立即联系 @timora_support:我们会撤销旧令牌并发放新令牌。
学生数据
- 不要向学生索要 EIOS 密码和 Timora 登录代码——只使用“使用 Timora 登录”。
- 只申请需要的板块:学生会在同意页面看到它们。
- 学生令牌要加密保存。学生退出时——调用
POST /me/disconnect并删除令牌。 - 数据只能用于获得授权的功能。不得转让或出售,不得用于广告和模型训练,学生要求时须删除。遵守俄罗斯联邦第 152-FZ 号法律。
- 向学生显示他是通过 Timora 登录的,并提供退出按钮。
限制与缓存
- 缓存公开数据:班级课表——每 10–15 分钟最多请求一次。
- 收到 429 响应时——等待
Retry-After请求头中指定的秒数。
禁止事项
- 绕过限制:使用多个令牌、更换地址。
- 批量抓取数据。
- 转售 API 访问权限。
参考文档
已有令牌的用户
地址 — https://mytimora.ru/api/v1。响应为 JSON,响应中的日期格式为 dd.mm.yyyy,参数中为 yyyy-mm-dd 或 dd.mm.yyyy。错误 — {"detail": "text"}。
请求头
| 请求头 | 何时 |
|---|---|
Authorization: Bearer tmr_… | 始终——项目令牌 |
X-Timora-User: tmu_… | 用于 /me/…——通过“使用 Timora 登录”获得的学生令牌 |
公开数据
| 方法 | 返回内容 |
|---|---|
GET /institutions | 高校:id、name、short、city、features |
GET /groups?institution=nstu | 高校的班级 |
GET /schedule?institution=nstu&group=ПМИ-31&from=2026-10-05&to=2026-10-11 | 每天的课程,每次请求最多 31 天 |
GET /teachers?institution=sibsutis | 教师(SibSUTIS) |
GET /exams?institution=sibsutis&group=ИП-514 | 考试、考查、答疑 |
“使用 Timora 登录”
POST /connect/start,请求体 {"scopes": ["profile", "schedule", "grades"]} → deviceCode、userCode(形如 ABCD-EFGH)、expiresIn(600 秒)、interval(3 秒)和 links:telegram、vk、app——学生用来确认登录的链接。
向学生显示代码以及“在 Telegram 中确认”“在 Timora 应用中确认”按钮。每隔 interval 秒用 {"deviceCode": "tmc_…"} 调用 POST /connect/poll:响应为 pending、slow_down、denied、expired,或带有只发放一次的 userToken(tmu_…)的 approved。
不指定 scopes 时,请求 profile 和 schedule。
学生数据
两个请求头都必须提供。只能访问学生允许的板块,否则返回 403。
| 方法 | 板块 | 返回内容 |
|---|---|---|
GET /me | profile | id(每个项目各不相同)、名字、姓氏、班级、学校、登录方式 |
GET /me/schedule?from=…&to=… | schedule | 学生所在班级的课表 |
GET /me/grades | grades | 成绩(SibSUTIS,前提是学生在 Timora 中保存了 EIOS 密码) |
GET /me/deadlines | deadlines | EIOS 课程中未提交的作业和测验 |
GET /me/certificates | certificates | 证明申请及其状态 |
POST /me/disconnect | — | 退出:项目对学生账号的访问终止 |
/me/… 返回 401——学生撤销了访问权限(在 Timora 个人资料中或在机器人中使用 /apps 命令),或项目令牌已被撤销。409——学生缺少所需数据:未选择班级或未连接 EIOS。
限制
- 公开数据每个令牌每分钟 300 次请求,每个学生单独计算;
- 成绩 30 次、截止日期 40 次、证明 20 次,均为每个学生每小时:这些是对学校网站的请求;
connect/start——每个项目每小时 600 次。
请求示例
curl -s https://mytimora.ru/api/v1/schedule \ -H "Authorization: Bearer $TIMORA_TOKEN" \ --get --data-urlencode "institution=nstu" --data-urlencode "group=ПМИ-31" \ --data-urlencode "from=2026-10-05" --data-urlencode "to=2026-10-11"