SoundVault · API

HTTP API SoundVault.

Сессии, библиотека, воспроизведение и интеграции. Справочник по коду текущего проекта.

Адрес и авторизация

Используй базовый HTTPS-адрес своей установки. API в основном расположен под /api/; вход выполняется через POST /login. Авторизация — сессионная cookie, которую нужно сохранять и передавать в последующих запросах.

curl --cookie-jar cookies.txt --request POST https://music.example.com/login   --header 'Content-Type: application/json'   --data '{"username":"user","password":"YOUR_PASSWORD"}'

curl --cookie cookies.txt https://music.example.com/api/me

Защити файл cookies от посторонних. Успешный JSON-вход возвращает {"ok":true,"is_admin":false}. Неверные данные — HTTP 401; частые попытки входа ограничиваются.

Для изменяющих запросов к API передавай X-Requested-With: XMLHttpRequest. Исключения: вход и межсерверный протокол федерации. Выход в текущем коде — GET /logout, после него сервер перенаправляет на вход.

Состояние и версии

GET /api/health проверяет приложение и базу: статус 200 при нормальной работе, 503 при деградации базы. GET /api/capabilities возвращает публичные сведения о возможностях.

Поле capabilitiesЗначение
server_versionВерсия сервера.
web_ui_versionВерсия веб-интерфейса.
update.latest_apk_versionВерсия опубликованного APK; null, если нет сведений.
update.min_android_versionМинимальная совместимая версия Android, не актуальный релиз.
update.apk_download_urlПуть скачивания APK относительно адреса сервера.
authorКонтактный e-mail установки; может быть пустым.
cloud.yandex.supportedНаличие интеграции в этой версии сервера; не подтверждает настройку ключа или подключение пользователя.

Поля могут отличаться между версиями. Клиент должен обрабатывать отсутствующие поля и null. Текущий лендинг запрашивает capabilities при открытии страницы.

Библиотека и аудиопоток

ЗапросПараметры и результат
GET /api/foldersparent — папка; filter — all, mine, public, shared, hidden (возможны сочетания через запятую); sort и dir — сортировка. Все результаты ограничены правами пользователя.
GET /api/tracksfolder — путь папки; ответ содержит tracks, playlist_source, playlist_meta.
GET /api/folder/<path>Папка и треки одним запросом.
GET /api/searchПоиск; q — строка запроса.
GET /api/stream/<track_id>Поток с проверкой прав. Поддерживается HTTP Range для перемотки.
GET /api/track_cover/<track_id>Обложка трека.
GET /api/coverfolder — путь; size — запрашиваемый размер обложки.
curl --cookie cookies.txt --get   --data-urlencode 'folder=public/Artist/Album'   https://music.example.com/api/tracks

curl --cookie cookies.txt --header 'Range: bytes=0-1023'   --output fragment.bin https://music.example.com/api/stream/123

Пути кодируй как URL-компоненты. Идентификатор трека может быть строкой peer://…; не считай все идентификаторы числами. Скрытые папки исключаются из обычного фильтра all.

Примеры изменения данных

Создание собственного плейлиста:

curl --cookie cookies.txt --request POST https://music.example.com/api/playlists   --header 'Content-Type: application/json'   --header 'X-Requested-With: XMLHttpRequest'   --data '{"name":"Вечерняя коллекция"}'

Ответ содержит ok и объект playlist. Запуск сканирования своей области:

curl --cookie cookies.txt --request POST https://music.example.com/api/scan_jobs   --header 'Content-Type: application/json'   --header 'X-Requested-With: XMLHttpRequest'   --data '{"scope":"user","folder":""}'

Для полной библиотеки требуется scope admin и роль администратора. Состояние задания доступно через GET /api/scan_jobs/<id>. Файлы загружаются multipart-запросом на POST /api/files/upload; лимиты и режимы конфликтов доступны в capabilities.

Доступ и ошибки

Большинство пользовательских маршрутов требуют сессию. Административные операции дополнительно проверяют роль. Для файлов и музыки проверяются права на соответствующий объект. Межсерверные маршруты /api/peer/ используют подписи Ed25519; получение приглашения не заменяет подтверждение связи.

{"ok":false,"error":"Папка не найдена","code":"not_found"}
HTTPЧто обрабатывать
400Некорректные параметры или невозможная операция; смотри code.
401Необходима сессия SoundVault.
403Недостаточно прав или csrf_missing при отсутствии заголовка.
404Объект не найден или недоступен.
413Превышен лимит загрузки; ответ nginx может быть HTML.
429Ограничение частоты запросов.
502 / 503Внешний источник недоступен или функция не настроена.

Ответы об успешном чтении не всегда имеют поле ok. Ошибки облака, требующие повторного подключения, могут возвращать 400 вместо 401; проверяй поле code, чтобы не сбрасывать сессию SoundVault.

Справочник маршрутов

Список сформирован из декораторов маршрутов исходного кода 7 октября 2026 года. Разверни нужный раздел. Параметры в угловых скобках заменяются значениями и кодируются в URL. Это перечень путей и методов; примеры основных контрактов приведены выше.

Библиотека, профиль, плейлисты и история · 47 маршрутов
МетодПуть
GET/api/me
POST/api/me/change_password
GET/api/me/preferences
PATCH/api/me/preferences
GET/api/me/profile
PATCH/api/me/profile
POST/api/me/avatar
DELETE/api/me/avatar
GET/api/users/<username>/avatar
GET/api/peer_users/<int:peer_id>/<int:remote_user_id>/avatar
GET/api/users/by-nickname/<nickname>/avatar
GET/api/folders
POST/api/hidden
DELETE/api/hidden
GET/api/hidden
GET/api/tracks
GET/api/folder/<path:folder_path>
GET/api/search
GET/api/cover
GET/api/track_cover/<path:track_id>
GET/api/stream/<path:track_id>
GET, POST/api/folder_sort
GET/api/favorites
POST/api/favorites/track
POST/api/favorites/folder
POST/api/favorites/cue_track
GET/api/favorites/tracks/list
GET/api/favorites/folders/list
GET/api/playlists
POST/api/playlists
GET/api/playlists/<int:playlist_id>
PATCH/api/playlists/<int:playlist_id>
DELETE/api/playlists/<int:playlist_id>
POST/api/playlists/<int:playlist_id>/tracks
DELETE/api/playlists/<int:playlist_id>/tracks
PUT/api/playlists/<int:playlist_id>/order
POST/api/playlists/<int:playlist_id>/cover
DELETE/api/playlists/<int:playlist_id>/cover
POST/api/play_history
GET/api/recent_tracks
GET/api/top_tracks
GET/api/listening_stats
GET/api/history
DELETE/api/play_history/<int:hid>
POST/api/share
GET/api/share
DELETE/api/share/<token>
Вход и выход · 2 маршрутов
МетодПуть
GET, POST/login
GET/logout
Администрирование · 12 маршрутов
МетодПуть
POST/api/admin/scan
GET/api/admin/users
POST/api/admin/users
PUT/api/admin/users/<int:user_id>
DELETE/api/admin/users/<int:user_id>
POST/api/admin/access
GET/api/admin/access/<int:user_id>
GET/api/admin/folders_all
GET/api/admin/users/<int:user_id>/usage
GET/api/admin/garbage
DELETE/api/admin/garbage/<path:folder_name>
DELETE/api/admin/garbage
Файлы пользователя · 10 маршрутов
МетодПуть
GET/api/files/usage
GET/api/files/tree
GET/api/files/list
POST/api/files/mkdir
POST/api/files/rename
GET/api/files/download
POST/api/files/delete
POST/api/files/upload
POST/api/files/move
POST/api/files/scan_user
Сканирование · 4 маршрутов
МетодПуть
POST/api/scan_jobs
GET/api/scan_jobs/<int:job_id>
GET/api/scan_jobs
POST/api/scan_jobs/<int:job_id>/cancel
Поиск обложек · 2 маршрутов
МетодПуть
POST/api/covers/search
POST/api/covers/apply
Федерация · 17 маршрутов
МетодПуть
POST/api/peer/redeem
POST/api/peer/ping
POST/api/peer/metadata
POST/api/peer/stream
POST/api/peer/avatar
POST/api/peer/cover
POST/api/peer/share
GET/api/admin/peers
POST/api/admin/peers/invite
POST/api/admin/peers/accept
POST/api/admin/peers/<int:peer_id>/confirm
DELETE/api/admin/peers/<int:peer_id>
DELETE/api/admin/peers/<int:peer_id>/forget
POST/api/admin/peers/<int:peer_id>/check
POST/api/admin/peers/<int:peer_id>/sync
PATCH/api/admin/peers/<int:peer_id>/visibility
GET, PATCH/api/admin/peers/settings
Именной доступ к альбомам · 5 маршрутов
МетодПуть
GET/api/shares
GET/api/shares/incoming
POST/api/shares
DELETE/api/shares/<int:share_id>
GET/api/shares/users
Публичные ссылки · 3 маршрутов
МетодПуть
GET/s/<token>
GET/s/<token>/stream
GET/s/<token>/cover
Состояние и обновления · 3 маршрутов
МетодПуть
GET/api/health
GET/api/capabilities
GET/api/update/apk
Яндекс.Музыка · 43 маршрутов
МетодПуть
POST/api/yandex/account
GET/api/yandex/account
DELETE/api/yandex/account
POST/api/yandex/device/start
POST/api/yandex/device/poll
GET/api/yandex/categories
GET/api/yandex/items
GET/api/yandex/cover
GET/api/yandex/album/<album_id>
GET/api/yandex/playlist/<owner_uid>/<kind>
GET/api/yandex/track/<track_id>/streaminfo
GET/api/yandex/stream/<track_id>
POST/api/yandex/track/<track_id>/played
GET/api/yandex/liked
POST/api/yandex/like
GET/api/yandex/radio/protocol
POST/api/yandex/radio/session
POST/api/yandex/radio/batch
POST/api/yandex/radio/event
POST/api/yandex/radio/session/stop
GET/api/yandex/radio/stations
GET/api/yandex/radio/favorites
POST/api/yandex/radio/favorites
GET/api/yandex/radio/top
GET/api/yandex/radio/search
POST/api/yandex/radio/settings
POST/api/yandex/radio/start
POST/api/yandex/radio/next
POST/api/yandex/radio/stop
POST/api/yandex/export
GET/api/yandex/export/current
GET/api/yandex/export/<int:job_id>
POST/api/yandex/export/<int:job_id>/cancel
GET/api/yandex/search
GET/api/yandex/artist/<artist_id>
POST/api/yandex/playlists
PATCH/api/yandex/playlist/<owner_uid>/<kind>
DELETE/api/yandex/playlist/<owner_uid>/<kind>
POST/api/yandex/playlist/<owner_uid>/<kind>/tracks
DELETE/api/yandex/playlist/<owner_uid>/<kind>/tracks/<track_id>
GET/api/yandex/playlist/<owner_uid>/<kind>/cover
POST/api/yandex/playlist/<owner_uid>/<kind>/cover
DELETE/api/yandex/playlist/<owner_uid>/<kind>/cover

Подготовлено по исходному коду проекта · 7 октября 2026