Документация
База API
Live Vue: baseURL = https://demo.riverspeech.ru/api, запросы с cookie (withCredentials). Пути в таблицах — относительно этой базы: POST /login = https://demo.riverspeech.ru/api/login.
В браузере клона — same-origin /api через прокси на demo. Клиент зовёт /api/login, /api/files, … с credentials: include. Cookie rs_auth_token садится на origin клона.
Аутентификация
Как live, не тихий логин с сервера. Форма email / пароль / запомнить. Без сессии кабинет (в том числе /docs/) не показывается: 401 → /login/. Frozen /files_2/ — исключение.
| Метод | Путь | Зачем |
|---|---|---|
| POST | /login | { email, password, remember } → cookie rs_auth_token + { user: {…} } |
| POST | /logout | сброс сессии |
| GET | /user | текущий пользователь |
| GET | /app-config | флаги SSO / bots / … |
GET /user
Ответ: { data: { id, full_name, email, role, theme, … } }.
GET /app-config
Флаги SSO/bots — false (проверено на live).
Примеры
Плейсхолдеры <email> <password> <token>. Пароль в эту страницу не подставляется. Login без Accept: application/json: Laravel отвечает 302 HTML /login/ — fetch может дать ложный успех. Клиент: Accept: application/json; для login redirect: manual; успех только JSON 200.
curl — вход (live)curl -X POST 'https://demo.riverspeech.ru/api/login' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-c cookies.txt \
-d '{"email":"<email>","password":"<password>","remember":true}' fetch — вход (клон, same-origin /api) fetch('/api/login', {
method: 'POST',
credentials: 'include',
redirect: 'manual',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: '<email>',
password: '<password>',
remember: true,
}),
}) curl — список файлов (cookie) curl -X GET 'https://demo.riverspeech.ru/api/files?page=1' \
-H 'Accept: application/json' \
-H 'Cookie: rs_auth_token=<token>' fetch — список файлов (клон) fetch('/api/files?page=1', {
credentials: 'include',
headers: { Accept: 'application/json' },
}) fetch — выход fetch('/api/logout', {
method: 'POST',
credentials: 'include',
headers: { Accept: 'application/json' },
}) GET кабинета — файлы
GET /files?page= → { data, links, meta } (Laravel-пагинация). Снимок 2026-09-14: meta.total = 163, per_page = 20, last_page = 9.
| Метод | Путь | Экран |
|---|---|---|
| GET | /files | список транскрипций |
| GET | /files/:id | карточка файла / сегменты |
| GET | /files/trashed | корзина |
Маппинг строки списка
FileRow клона ← поля ответа GET /files (пилот).
| FileRow | API |
|---|---|
| id | String(item.id) |
| name | custom_title || name || original_filename |
| size | байты file_size → МБ как на live |
| project | первый project.name или — |
| date | upload_date → DD.MM.YYYY HH:mm |
| owner / initials | user.name |
| status | item.status |
Write-URL оригинала
Справочник: что есть у live Vue. Клон эти URL не вызывает, чтобы не трогать прод. Нет кнопки «попробуй удалить». С клона на demo: только POST /login, POST /logout, остальное GET.
Клон не вызывает write-URL оригинала (upload, chunks, delete, create user, смена настроек, chunked upload), чтобы не менять demo.riverspeech.ru.
| Метод | Путь | Клон |
|---|---|---|
| POST | /files | не вызывает |
| — | chunks | не вызывает |
| — | delete | не вызывает |
GET кабинета — проекты
Экраны проектов live Vue.
| Метод | Путь | Экран |
|---|---|---|
| GET | /projects | проекты |
| GET | /projects/:id | проекты |
| GET | /projects/:id/files | проекты |
Остальные GET кабинета
То, чем живёт UI на соответствующих экранах. Поля ответа здесь не выдуманы — только пути из плана.
| Метод | Путь | Экран |
|---|---|---|
| GET | /statistics | статистика |
| GET | /statistics/activity | статистика |
| GET | /formats | статистика |
| GET | /users | статистика |
| GET | /speakers | спикеры |
| GET | /ai-prompts | промпты |
| GET | /dictionary/personal | словарь |
| GET | /dictionary/corporate | словарь |
| GET | /profile | профиль |
| GET | /settings/transcription | настройки |
| GET | /integrations/overview | интеграции |
GET кабинета — пользователи
Экраны пользователей live Vue.
| Метод | Путь | Экран |
|---|---|---|
| GET | /users | пользователи |
| GET | /users/:id | пользователи |
| GET | /users/:id/login-history | пользователи |
| GET | /users/:id/transcriptions | пользователи |
RiverSpeech и Nexara
Это не «разные адреса одних и тех же запросов». Оба сервиса распознают речь, но устроены по-разному. Кабинет RiverSpeech нельзя просто переключить на API Nexara.
Это одно и то же?
Нет. Похожи как «оба расшифровывают аудио», не как два одинаковых бэкенда одной админки.
| Что сравниваем | RiverSpeech | Nexara |
|---|---|---|
| Что это | Кабинет для команды: записи, проекты, люди, корзина, настройки | Сервис распознавания речи для разработчиков: отправили файл — получили текст |
| Как входят | Email и пароль, как на обычном сайте | Секретный ключ, не логин с сайта |
| Где живут записи | В библиотеке, пока их не удалят | Задача живёт около 12 часов, потом результат пропадает |
| Список файлов | Есть | Нет |
| Пользователи, проекты, корзина, статистика | Есть | Нет |
| Распознать аудио в текст | Да, внутри кабинета | Да, это главное, что умеет API |
Одинаковые слова — разный смысл
Пересечение одно: аудио → текст, при желании с разбивкой по говорящим. Всё остальное меню кабинета у публичного API Nexara нет.
| Слово | RiverSpeech | Nexara |
|---|---|---|
| Словарь | Справочник замен для всей организации | Настройка одного запроса «как распознавать» |
| Спикеры | Список спикеров в кабинете | Подписи «кто говорил» внутри одной расшифровки |
| Промпт | Сохранённые шаблоны для чата | Инструкция вроде «сделай резюме» на один файл |
| Файлы | Библиотека записей | Отдельной библиотеки нет, есть разовая задача |
Разделы кабинета на Nexara
Что будет, если оставить только API Nexara, без своего хранилища файлов.
| Экран | На API Nexara |
|---|---|
| Вход | Не подойдёт: у Nexara нет входа по email и паролю |
| Список транскрипций | Нечем заполнить: нет библиотеки файлов |
| Карточка записи и редактор | Можно показать текст, если результат сохранить у себя |
| Корзина | Нет |
| Проекты | Нет |
| Пользователи | Нет |
| Статистика | Нет такого отчёта |
| Спикеры, словарь, промпты, профиль, настройки | Нет: это данные кабинета, не распознавания |
Если всё же нужно использовать API Nexara
Кабинет как сейчас сам по себе на Nexara не встанет. Ниже — что нужно, если распознавание должно идти через Nexara.
| Шаг | Что сделать |
|---|---|
| 1 | Промежуточный сервер: он хранит файлы, людей и вход, а в Nexara только отправляет аудио и забирает расшифровку. |
| 2 | Ключ Nexara держать только на сервере, не в браузере. |
| 3 | Пользователей, проекты, корзину, словарь либо делать своими, либо не показывать — Nexara их не заменит. |
| 4 | Если нужна именно нынешняя админка demo.riverspeech.ru — оставлять API RiverSpeech. Nexara — если цель распознавание от Nexara внутри похожего кабинета, а не «подменить адрес API». |