Directory API: groups, teachers, rooms
Updated 27.10.2026
Reference books are institutes, groups, teachers, and RUT (MIIT) classrooms that make up the schedule. All of them are open for reading without a key. Checked with booth d1 on October 23, 2026; the methods of this page are also available on production.
Methods
Institutes: GET /institutes
All university institutes are: id, code (for example, АГА), name, groupsCount, university. Institutes that have left the schedule are not shown; includeRetired=1 will add them with retired: true and successorCode — the code of the successor institute.
Groups: GET /groups
searchis the case—insensitive part of the code (шад),courseis the course,instituteIdsis separated by commas,facultyCode.- The group has:
id,name(code,GET /schedule?group=…works on it),displayNamein three languages,course,institute,specialty. GET /groups/{id}— one group;GET /groups/filters— values for filters.
Teachers: GET /teachers
search— by full or short name,department— department,instituteIds— who has classes at these institutes.- The teacher has:
id,fullNameandshortNamein three languages,department,photoUrl,profileUrl(page on miit.ru , if any),source. GET /teachers/{id}is the teacher's card;GET /teachers/filtersis the department for the filter.
Audiences: GET /audiences
search,building, andfloorcan be separated by commas (?building=8,12),instituteIds,order(descby default).- For the audience:
name(as in the schedule, for example8412),fullName(“Building 8, floor 4, auditorium 12”),building,floor,room,address,buildingInfowith the coordinates of the building. GET /auditories/room?name=8412— one auditorium by designation;GET /auditories/filters— buildings and floors.
Groups, teachers, and classrooms are assigned on a page-by-page basis: page, perPage (20 by default, no more than 200), or all=1 (up to 2000 entries). Institutions come all at once, without page-by-page output. Texts in three languages come as object { ru, en, zh }.
Example: go through the directories
// 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}`)To try
Try the request
Only methods with a lock need a key. It lives on this page only: it is never stored, goes out only as a header of this request and is forgotten when you leave. Where to get a key
Useful to know
- The booth IDs are different.
idgroups on d1 and on production do not match. The group codes (ШАД-111), teacher names, and classroom designations are the same; keep them if integration works with both booths. - Groups, teachers, and classrooms come from the university's schedule to miit.ru and they are updated with it.
- Only employees with rights (
reference:groups:manage,teachers:manage) can change the directories — the manually added teacher is markedsource: "manual".
Verified: 2026-10, PWA aa337c45, platform bff65fce._