Приложение ВИШ — расписание РУТ (МИИТ)

Расписание Российского университета транспорта для студентов и сотрудников всех институтов. Расписание своей группы и любого преподавателя на день и на неделю, свободные аудитории МИИТ прямо сейчас, загруженность аудиторий, групп и преподавателей, уведомления об изменениях в расписании и ИИ-помощник по расписанию.

Институты

Приложение РУТ (МИИТ) охватывает пять институтов: ВИШ — Высшая инженерная школа, АГА — Академия гражданской авиации, АДХ — Академия дорожного хозяйства, ПИШ — Передовая инженерная школа «Академия ВСМ» и ИМТК — Институт международных транспортных коммуникаций. Расписание группы и расписание преподавателя ищутся одинаково в любом из них.

Что умеет приложение ВИШ
Разделы
Руководство

Вопросы разработчиков

Обновлено 27.10.2026

Короткие ответы на вопросы, которые чаще всего возникают у тех, кто пишет программы для ВИШ. Сверено со стендами d1 и production 23 октября 2026 года.

Доступ

Нужен ли ключ, чтобы читать расписание? Нет. Расписание, группы, преподаватели, аудитории, заметки к занятиям и календарные ленты открыты всем. Ключ нужен, чтобы действовать от своего имени, — см. Аутентификация: ключи API и OAuth.

Где взять ключ? В приложении, на странице «Для разработчиков» — подробно на странице API и ключи доступа.

Ключ засветился — что делать? Сразу «Перевыпустить» на странице «Для разработчиков»: старая строка перестаёт работать в ту же секунду, права и срок остаются прежними.

Почему ключ получает 403 FORBIDDEN, хотя у меня это право есть? Ключу разрешено только то, что отметили при выпуске. Выпустите ключ с нужным правом — см. Права доступа (RBAC).

Можно ли читать личные заметки студентов или свои? Нет. Личные заметки открыты только самому человеку в приложении; ни ключ, ни токен OAuth их не получают.

Запросы из браузера

Можно ли звать API со страницы своего сайта? Браузер на чужом сайте разрешает читать ответы ВИШ (CORS) только в двух случаях: запрос несёт ключ (X-Api-Key) или это протокольный адрес «Входа через ВИШ» (/oauth/token, /oauth/userinfo, /oauth/revoke, /oauth/introspect, документ настройки и ключи подписи). Открытые методы без ключа и методы с токеном OAuth (/schedule и другие) со страницы другого сайта не прочитать — зовите их со своего сервера. Ключ в коде страницы держать нельзя: его увидит любой посетитель.

А из мобильного или настольного приложения? Там CORS нет, но ключ в приложении всё равно виден тому, кто его разберёт. Для приложений, куда входят люди, — «Вход через ВИШ»: в мобильном адрес возврата https (App Links, Universal Links), в настольном — http://127.0.0.1:<порт>/….

Данные

Почему у пары в 8:30 время 08:30:00.000Z? Время занятий — московское, записанное в полях с суффиксом Z. Берите часы и минуты как есть. В календарной ленте время уже с часовым поясом.

Как узнать текущую неделю и её чётность? GET /app-config → currentWeek.number и currentWeek.parity (1 или 2). Там же сетка звонков и даты семестра — пример ниже.

Как найти группу? GET /groups?search=шад — по части кода. Код (ШАД-111) годится и для GET /schedule?group=….

Одинаковы ли id на d1 и production? Нет. Совпадают коды групп, имена преподавателей и обозначения аудиторий — храните их, если работаете с обоими стендами.

Откуда данные и насколько они свежие? Из расписания РУТ (МИИТ) на miit.ru; правки института видны сразу, поле isOverridden отмечает занятия, изменённые в институте.

Уведомления

Есть ли вебхуки? Пока нет. Подпишитесь на календарную ленту или опрашивайте ленту изменений — см. Уведомления и календари.

Получил 429 — что делать? Подождать столько, сколько сказано в сообщении, и повторить; при повторных отказах удваивать паузу. Лимиты — на странице Разработчикам: начало работы.

«Вход через ВИШ»

Работает ли он на production? На 23 октября 2026 года — нет, только на d1. Появится с одним из ближайших релизов; следите за страницей Изменения API.

Можно ли запросить часть разрешений? Приложение запрашивает нужные scope, а человек разрешает весь запрос или отказывает целиком.

Почему sub у одного человека в двух моих приложениях разный? Так задумано: sub постоянен для пары «человек — приложение», и разные приложения не могут сопоставить своих пользователей.

Прочее

Есть ли SDK? Нет. Клиент можно сгенерировать из OpenAPI стенда (/documentation/json) любым генератором OpenAPI 3 — или писать запросы руками, как в примерах этого раздела.

Как сообщить об ошибке API? Через «Обращения» в приложении — см. Обращения. Назовите метод, адрес и requestId из ответа (он же в заголовке X-Request-Id). Об уязвимости — по контакту из /.well-known/security.txt.

Пример: какая сейчас неделя и пара

// The current week and parity, and which pair is on now, from /app-config.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'

const response = await fetch(`${API}/app-config`)
if (!response.ok) throw new Error(`HTTP ${response.status}`)
const { semester, currentWeek, schedule } = await response.json()
if (![1, 2].includes(currentWeek?.parity) || !schedule?.lessonSlots?.length) throw new Error('unexpected /app-config')

// Wall-clock Moscow time, the same convention as the timetable.
const now = new Date(Date.now() + 3 * 60 * 60 * 1000).toISOString().slice(11, 16)
const pair = schedule.lessonSlots.find((slot) => slot.startTime <= now && now < slot.endTime)

console.log(`${semester.name}: week ${currentWeek.number}, ${currentWeek.parity === 1 ? 'odd' : 'even'}`)
console.log(pair ? `now (${now} MSK): pair ${pair.number}, ${pair.startTime}–${pair.endTime}` : `now (${now} MSK): no pair`)

Попробовать запрос

Ключ нужен только методам с замком. Он живёт только на этой странице: не сохраняется, уходит лишь заголовком этого запроса и забывается, когда вы её покинете. Где взять ключ

Проверено: 2026-10, PWA aa337c45, platform bff65fce.