Три шага до первого расписания:
/institutions и /groups./schedule. Хотите готовый текст для поста, добавьте &format=text.# 1. какие есть заведения curl -H "X-Api-Key: ВАШ_КЛЮЧ" https://raspika.com/api/v1/institutions # 2. найти свою группу (пример: ОмГТУ, группы на «ИСТ-25») curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/groups?inst=omgtu&q=ИСТ-25" # 3. расписание группы готовым текстом curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/schedule?inst=omgtu&group=421&format=text"
Базовый адрес: https://raspika.com/api/v1. Все методы это GET, ответы в JSON, кодировка UTF-8.
Рядом с расписанием должна быть пометка «Расписание взято с raspika.com».
Это единственное жёсткое требование. Оно нужно, чтобы человек понимал, откуда данные, и знал, куда идти за уведомлениями об отменах и переносах.
Достаточно одной строки внизу. Ссылка на raspika.com приветствуется, но обязателен именно текст.
Добавьте format=text, и API вернёт готовый текст, в конце которого пометка уже стоит.
Вам останется только опубликовать его. Подробно в разделе
«Готовый текст».
Вместе с ключом выдаётся личная ссылка вида raspika.com/r/ab12cd.
Она приходит в каждом ответе в поле attribution_link, а в готовом тексте
уже подставлена в пометку. Ведёт она на обычную главную страницу, но по переходам
видно, что пометка действительно опубликована, а вы видите, сколько людей она приводит.
Кроме этого раз в сутки автоматика заходит на площадку, которую вы указали при получении ключа (паблик ВК, телеграм-канал или страницу сайта), и проверяет, есть ли там упоминание Raspika. Это не слежка, а способ держать договорённость в силе без переписки.
Если запросы идут, а пометки нигде нет, мы сначала пишем на ваш контакт. Молчание или отказ означает блокировку ключа.
Нарушение решается просто: ключ блокируется, данные перестают приходить. Перед блокировкой мы пишем на контакт, который вы оставили.
Данные собираются с официальных сайтов заведений. Мы их разбираем, храним и отдаём,
но не являемся их правообладателем и не гарантируем, что вуз не поменяет расписание
через пять минут после вашего запроса. Поле stale честно говорит,
когда сайт заведения недоступен и отдана сохранённая копия.
Напишите в поддержку на raspika.com и укажите:
Ключ выдаётся вручную, обычно в тот же день. Выглядит так: rk_api_XXXXXXXXXXXXXXXXXXXXXX.
Ключ бесплатный и бессрочный. Отзывается только при нарушении условий.
Два способа, оба рабочие:
# заголовком (рекомендуется) curl -H "X-Api-Key: ВАШ_КЛЮЧ" https://raspika.com/api/v1/institutions # параметром в адресе curl "https://raspika.com/api/v1/institutions?key=ВАШ_КЛЮЧ"
Держите ключ на сервере. Не вставляйте его в код страницы, в мобильное приложение и вообще никуда, откуда его может прочитать пользователь: браузер показывает все запросы. Если данные нужны на странице, ходите за ними через свой бэкенд.
Мы со своей стороны маскируем ключи в журнале доступа, поэтому в наших логах
вместо ключа остаётся key=***.
Если ключ утёк, напишите в поддержку: заблокируем старый и выдадим новый.
Справочник учебных заведений. Поле key каждого элемента это то,
что подставляется в параметр inst остальных методов.
curl -H "X-Api-Key: ВАШ_КЛЮЧ" https://raspika.com/api/v1/institutions
{
"data": [
{"key": "omgtu", "name": "ОмГТУ", "short": "ОмГТУ",
"src": "https://rasp.omgtu.ru/", "live": true},
{"key": "omgmu", "name": "ОмГМУ", "short": "ОмГМУ", "live": true}
],
"source": "raspika.com",
"attribution": "Расписание взято с raspika.com",
"attribution_required": true,
"docs": "https://raspika.com/api.html"
}
Группы заведения. Список большой (у ОмГТУ больше тысячи), поэтому есть фильтр.
| Параметр | Обяз. | Описание |
|---|---|---|
inst | да | идентификатор заведения из /institutions |
q | нет | фильтр по названию, подстрока без учёта регистра |
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/groups?inst=omgtu&q=ИСТ-25"
{
"data": [
{"id": "421", "name": "ИСТ-253", "course": null},
{"id": "419", "name": "ИСТ-251", "course": null}
],
"inst": "omgtu",
"count": 2,
"attribution": "Расписание взято с raspika.com"
}
id это то, что подставляется в параметр group. У разных заведений
идентификаторы выглядят по-разному: где-то число, где-то само название группы,
где-то адрес файла. Не пытайтесь их угадывать, берите из этого метода.
Расписание группы. По умолчанию отдаётся окно примерно в месяц: неделя назад и до четырёх недель вперёд, насколько хватает данных у источника.
| Параметр | Обяз. | Описание |
|---|---|---|
inst | да | идентификатор заведения |
group | да | id группы из /groups |
date_from | нет | с какой даты, формат ГГГГ-ММ-ДД |
date_to | нет | по какую дату включительно |
subgroup | нет | 1 или 2: оставить пары своей подгруппы и общие |
format | нет | text: добавить готовый текст с пометкой |
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/schedule?inst=omgtu&group=421&date_from=2026-09-23&date_to=2026-09-23"
{
"data": [
{"date": "2026-09-23", "num": 2, "start": "09:40", "end": "11:10",
"subject": "Физическая культура", "type": "Практика",
"teacher": "Колтошова Т.В.", "room": "ФК-Спортзал",
"subgroup": 0, "parity": null, "changed": false}
],
"inst": "omgtu", "group": "421", "count": 1,
"stale": false, "updated_at": "2026-09-22T13:40:11",
"attribution": "Расписание взято с raspika.com"
}
Журнал изменений: что отменили, перенесли или добавили. Мы сверяем расписание всех отслеживаемых групп каждые 20 минут и записываем отличия. Этот метод отдаёт записи журнала.
| Параметр | Обяз. | Описание |
|---|---|---|
inst | нет | только по этому заведению |
group | нет | только по этой группе |
since | нет | с какого момента: unix-время или ГГГГ-ММ-ДД |
limit | нет | сколько записей, от 1 до 500, по умолчанию 50 |
format | нет | text: готовый текст об изменениях с пометкой |
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/changes?inst=omgtu&group=421&since=2026-09-20&format=text"
{
"data": [
{"ts": 1790077000.5, "inst": "omgtu", "group": "421", "group_name": "ИСТ-253",
"added": [ ... пары ... ],
"removed": [ ... пары ... ],
"changed": [{"lesson": { ... }, "was": { ... }, "fields": ["room"]}]}
],
"count": 1,
"text": "ИСТ-253 · изменения\n...\n\nРасписание взято с raspika.com",
"attribution": "Расписание взято с raspika.com"
}
Журнал ведётся по группам, за которыми следит сервис: это группы наших пользователей и часть групп под наблюдением. Если по вашей группе записей нет, скорее всего, за ней пока никто не следит. Напишите в поддержку, добавим её в наблюдение.
Чтобы не собирать текст руками и не забывать про пометку, добавьте format=text
к /schedule или /changes. В ответе появится поле text:
готовое сообщение, где последняя строка это «Расписание взято с raspika.com».
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \ "https://raspika.com/api/v1/schedule?inst=omgtu&group=421&format=text"
ИСТ-253 · Среда, 23 сентября 2 пара 09:40-11:10 · Физическая культура · ФК-Спортзал, Колтошова Т.В. 3 пара 11:35-13:05 · Стандартизация · 6-429, Андиева Е.Ю. Расписание взято с raspika.com
Этот текст можно без изменений отправить в телеграм, ВК или опубликовать постом: условие использования будет выполнено автоматически.
Если делаете своё оформление, возьмите строку из поля attribution
и добавьте её в конец, тогда текст пометки всегда совпадёт с актуальным.
А чтобы пометка была кликабельной и считала переходы, используйте
attribution_link или готовую строку attribution_html:
{
"attribution": "Расписание взято с raspika.com",
"attribution_link": "https://raspika.com/r/ab12cd",
"attribution_html": "<a href="https://raspika.com/r/ab12cd">Расписание взято с raspika.com</a>"
}
| Поле | Тип | Описание |
|---|---|---|
date | строка | дата пары, ГГГГ-ММ-ДД |
num | число или null | номер пары; у части колледжей нумерации нет |
start, end | строка | время ЧЧ:ММ; бывает пустым, если источник его не даёт |
subject | строка | название предмета как у заведения |
type | строка | лекция, практика, лабораторная; бывает пустым |
teacher | строка | преподаватель; бывает пустым |
room | строка | аудитория; иногда ссылка на онлайн-занятие |
subgroup | число | 0 вся группа, 1 или 2 подгруппа |
parity | число или null | чётность недели, если она есть у источника |
changed | логическое | источник пометил пару как изменённую |
| Поле | Описание |
|---|---|
count | сколько элементов в data |
stale | true: сайт заведения недоступен, отдана последняя сохранённая копия |
updated_at | когда данные последний раз обновлялись |
attribution | строка пометки, которую нужно показать |
source | всегда raspika.com |
Если stale равно true, покажите это и своим пользователям: расписание могло
успеть измениться. У нас на сайте в таком случае выводится строка «сайт вуза недоступен,
показана сохранённая версия».
| Код | Когда | Что делать |
|---|---|---|
| 401 | ключ не передан, не существует или заблокирован | проверьте заголовок; если блокировка, напишите в поддержку |
| 400 | параметр неверного вида, например кривая дата в since | поправьте параметр |
| 404 | нет такого заведения или группы | возьмите идентификаторы из /institutions и /groups |
| 422 | параметр слишком длинный или не того типа | проверьте длину и тип |
| 429 | превышен лимит запросов | подождите минуту, добавьте кэш у себя |
| 503 | сайт заведения недоступен и копии нет | повторите позже, это бывает редко |
Тело ошибки выглядит так: {"detail": "Группа не найдена"}.
Если нужен объём больше, напишите в поддержку, обсудим. Лучше всего кэшировать ответы у себя хотя бы на 10 минут: и вам быстрее, и нам спокойнее.
Раз в сутки дёргаете /schedule с date_from=date_to=сегодня
и format=text, публикуете поле text. Пометка внутри.
Раз в 20-30 минут запрашиваете /changes?inst=...&group=...&since=время_прошлого_запроса&format=text.
Если count больше нуля, публикуете text. Время последнего
успешного запроса храните у себя.
Ходите за данными с сервера, кэшируйте на 10-15 минут, рисуйте своей вёрсткой.
Под таблицей выводите строку из поля attribution.
Один раз в сутки забираете /groups нужных заведений, храните у себя
и ищете по ним локально: списки меняются редко, а запросы экономятся.
import httpx, datetime
KEY = "ВАШ_КЛЮЧ"
BASE = "https://raspika.com/api/v1"
H = {"X-Api-Key": KEY}
d = (datetime.date.today() + datetime.timedelta(days=1)).isoformat()
r = httpx.get(f"{BASE}/schedule",
params={"inst": "omgtu", "group": "421",
"date_from": d, "date_to": d, "format": "text"},
headers=H, timeout=30).json()
if r["count"]:
print(r["text"]) # пометка уже внутри текста
else:
print("Завтра пар нет")
const KEY = process.env.RASPIKA_KEY;
const res = await fetch(
"https://raspika.com/api/v1/schedule?inst=omgtu&group=421&format=text",
{ headers: { "X-Api-Key": KEY } }
);
const data = await res.json();
console.log(data.text); // готовый текст с пометкой
console.log(data.count, "пар,", data.stale ? "копия" : "свежие данные");
<?php
$key = getenv('RASPIKA_KEY');
$url = 'https://raspika.com/api/v1/schedule?inst=omgtu&group=421&format=text';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: $key"],
CURLOPT_TIMEOUT => 30,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data['text']; // пометка внутри
r = httpx.get(f"{BASE}/schedule",
params={"inst": "omgtu", "group": "421"},
headers=H, timeout=30).json()
lines = []
for l in r["data"]:
lines.append(f"{l['num']} пара · {l['subject']} · {l['room']}")
lines.append("")
lines.append(r["attribution"]) # берём строку из ответа, не пишем руками
text = "\n".join(lines)
Да. Единственное условие это пометка об источнике.
С официальных сайтов и систем учебных заведений. Мы их разбираем, приводим к одному формату, храним копию на случай, если сайт заведения ляжет, и обновляем раз в 30 минут.
На момент написания 18: ОмГТУ, ОмГУ, ОмГМУ (и медколледж), ОмГУПС, СибАДИ, ОмГПУ, ОмГАУ,
СибГУФК, ОмГА, СибИТ, СибГУОР, музпед, ОАТК, строительный колледж и другие.
Актуальный список всегда в /institutions.
Напишите в поддержку. Если у заведения есть расписание в открытом виде, обычно подключаем за день-два.
Обновление каждые 30 минут. Поле updated_at показывает время последнего
обновления, stale предупреждает, если отдана сохранённая копия.
Мы напишем на ваш контакт. Если ничего не изменится, ключ будет заблокирован.
Пока нет, вебхуков нет. Опрашивайте /changes раз в 20-30 минут, этого достаточно:
чаще мы и сами не проверяем. Если нужен вебхук, напишите, посмотрим на спрос.
Нет. Чем больше студентов увидят расписание, тем лучше. Главное, чтобы они знали, откуда оно.
Вопросы, ключи, подключение новых заведений: чат поддержки на raspika.com. Отвечаем сами, без роботов.