Адрес и авторизация
Используй базовый 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/folders | parent — папка; filter — all, mine, public, shared, hidden (возможны сочетания через запятую); sort и dir — сортировка. Все результаты ограничены правами пользователя. |
| GET /api/tracks | folder — путь папки; ответ содержит 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/cover | folder — путь; 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