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

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

Институты

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

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

API справочников: группы, преподаватели, аудитории

Обновлено 27.10.2026

Справочники — это институты, группы, преподаватели и аудитории РУТ (МИИТ), из которых складывается расписание. Все они открыты для чтения без ключа. Сверено со стендом d1 23 октября 2026 года; методы этой страницы есть и на production.

Методы

Не удалось загрузить список методов APIОткрыть справочник API (откроется в новой вкладке)

Институты: GET /institutes

Все институты университета: id, code (например АГА), name, groupsCount, university. Ушедшие из расписания институты не показываются; includeRetired=1 добавит их с retired: true и successorCode — кодом института-преемника.

Группы: GET /groups

  • search — часть кода без учёта регистра (шад), course — курс, instituteIds — через запятую, facultyCode.
  • У группы: id, name (код, по нему же работает GET /schedule?group=…), displayName на трёх языках, course, institute, specialty.
  • GET /groups/{id} — одна группа; GET /groups/filters — значения для фильтров.

Преподаватели: GET /teachers

  • search — по полному или короткому имени, department — кафедра, instituteIds — у кого есть занятия в этих институтах.
  • У преподавателя: id, fullName и shortName на трёх языках, department, photoUrl, profileUrl (страница на miit.ru, если есть), source.
  • GET /teachers/{id} — карточка преподавателя; GET /teachers/filters — кафедры для фильтра.

Аудитории: GET /auditories

  • search, building и floor — можно несколько через запятую (?building=8,12), instituteIds, order (desc по умолчанию).
  • У аудитории: name (как в расписании, например 8412), fullName («Корпус 8, этаж 4, аудитория 12»), building, floor, room, address, buildingInfo с координатами корпуса.
  • GET /auditories/room?name=8412 — одна аудитория по обозначению; GET /auditories/filters — корпуса и этажи.

Группы, преподаватели и аудитории отдаются постранично: page, perPage (по умолчанию 20, не больше 200) или all=1 (до 2000 записей). Институты приходят все сразу, без постраничного вывода. Тексты на трёх языках приходят объектом { ru, en, zh }.

Пример: пройти по справочникам

// Institutes, a group of the first institute, one teacher by id and one room by its name.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'

const get = async (path, params = {}) => {
	const url = new URL(`${API}${path}`)
	for (const [name, value] of Object.entries(params)) url.searchParams.set(name, String(value))
	const response = await fetch(url)
	if (!response.ok) throw new Error(`${url}: HTTP ${response.status}`)
	return response.json()
}

const institutes = await get('/institutes')
const institute = institutes.list.find((item) => item.groupsCount > 0)
if (!institute) throw new Error('no institute with groups')

const groups = await get('/groups', { instituteIds: institute.id, perPage: 3 })
if (!groups.list.every((group) => group.institute?.id === institute.id)) throw new Error('instituteIds filter ignored')

const [firstTeacher] = (await get('/teachers', { perPage: 1 })).list
const teacher = await get(`/teachers/${firstTeacher.id}`)
if (teacher.id !== firstTeacher.id) throw new Error('teacher lookup failed')

const [firstRoom] = (await get('/auditories', { perPage: 1 })).list
const room = await get('/auditories/room', { name: firstRoom.name })
if (room.name !== firstRoom.name) throw new Error('room lookup failed')

console.log(`${institute.code}: ${institute.name.ru}, ${institute.groupsCount} groups, e.g. ${groups.list.map((g) => g.name).join(', ')}`)
console.log(`teacher: ${teacher.fullName.ru} (${teacher.department?.ru ?? 'no department'})`)
console.log(`room ${room.name}: ${room.fullName.ru}`)

Попробовать

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

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

Полезно знать

  • Идентификаторы стендов разные. id группы на d1 и на production не совпадают. Коды групп (ШАД-111), имена преподавателей и обозначения аудиторий — совпадают; храните их, если интеграция работает с обоими стендами.
  • Группы, преподаватели и аудитории приходят из расписания университета на miit.ru и обновляются вместе с ним.
  • Изменять справочники могут только сотрудники с правами (reference:groups:manage, teachers:manage) — добавленный вручную преподаватель отмечен source: "manual".

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