HTTP API
Every route of Bobine's local API (port 1903 by default), on the local network only. Each route has its bobine command. Every error answers { "detail": { "code", "message" } }.
Error codes
400bad_request401unauthorized403forbidden404not_found405method_not_allowed409conflict413too_large422invalid429too_many_requests500internal_error503unavailable504timeout507insufficient_storage
Domains
/api/audio
GET /api/audio
List Audio Courses
GET /api/audio/programs
Catégories (programmes) réellement présentes parmi les cours audio, triées.
GET /api/audio/tracks
Toutes les pistes de tous les cours audio, à plat, avec leur contexte de cours d'origine.
GET /api/audio/tracks/{track_id}/stream
Stream Audio Track
Path
track_idinteger
POST /api/audio/upload
Import multi-fichiers MP3 d'un cours, traité en arrière-plan — voir `_run_audio_files_import_job` et `GET /api/import-jobs`.
Body (multipart)
filesstring[]titlestringprogramstring?releasestring?
POST /api/audio/upload-zip
Import d'une archive ZIP d'un cours complet, traité en arrière-plan — voir `_run_audio_zip_import_job` et `GET /api/import-jobs`.
Body (multipart)
filestring?upload_idstring?titlestringprogramstring?releasestring?
DELETE /api/audio/{course_id}
Delete Audio Course
Path
course_idinteger
GET /api/audio/{course_id}
Get Audio Course
Path
course_idinteger
PUT /api/audio/{course_id}
Update Audio Course
Path
course_idinteger
Body (json)
titlestring?programstring?releasestring?background_idinteger?clear_backgroundboolean?
PUT /api/audio/{course_id}/tracks/reorder
Réordonnancement des pistes par glisser-déposer.
Path
course_idinteger
Body (json)
track_idsinteger[]
PUT /api/audio/{course_id}/tracks/{track_id}
Update Audio Track
Path
course_idintegertrack_idinteger
Body (json)
titlestring?numberinteger?background_idinteger?clear_backgroundboolean?
/api/audio-playlists
GET /api/audio-playlists
Liste toutes les playlists audio ("éditions mixées") avec le nombre de pistes et la durée totale.
POST /api/audio-playlists
Create Audio Playlist
Body (json)
namestringitemsobject[]?
DELETE /api/audio-playlists/{playlist_id}
Delete Audio Playlist
Path
playlist_idinteger
GET /api/audio-playlists/{playlist_id}
Get Audio Playlist
Path
playlist_idinteger
PUT /api/audio-playlists/{playlist_id}
Update Audio Playlist
Path
playlist_idinteger
Body (json)
namestringitemsobject[]?
POST /api/audio-playlists/{playlist_id}/duplicate
Duplicate Audio Playlist
Path
playlist_idinteger
/api/backgrounds
GET /api/backgrounds
List Backgrounds
POST /api/backgrounds/upload
Upload web d'un fond animé — traité en arrière-plan, voir `_run_background_import_job` et `GET /api/import-jobs`.
Body (multipart)
filestring?upload_idstring?titlestring?
POST /api/backgrounds/upload-zip
Import d'une archive (ZIP ou tar) de fonds animés et d'images : un fond par fichier, en une seule tâche.
Body (multipart)
filestring?upload_idstring?
DELETE /api/backgrounds/{background_id}
Delete Background
Path
background_idinteger
GET /api/backgrounds/{background_id}
Get Background
Path
background_idinteger
PUT /api/backgrounds/{background_id}
Update Background
Path
background_idinteger
Body (json)
titlestring?
GET /api/backgrounds/{background_id}/stream
Stream Background
Path
background_idinteger
/api/config
GET /api/config
Fichiers disponibles et dossier de la copie à jour (lecture seule, jamais relue par Bobine).
POST /api/config/apply
Applique un ou plusieurs fichiers (`{"files": {"settings.json": {...}}}`) en une seule transaction.
Query
dry_runboolean?include_machineboolean?
GET /api/config/export
Tous les fichiers d'un coup : `{"schema": 2, "files": {"settings.json": {...}, "playlists/video.json": {...}, ...}}`.
GET /api/config/export/{name}
Export Config File
Path
namestring
/api/devices
GET /api/devices/audio
Audio List
POST /api/devices/audio/balance
Audio Balance
Body (json)
idstringbalancenumber
POST /api/devices/audio/default
Audio Set Default
Body (json)
idstring
GET /api/devices/audio/details
Audio Details
Query
idstring
PUT /api/devices/audio/meta
Nom personnalisé et masquage d'une sortie : réglages de Bobine, communs à toutes les plateformes.
Body (json)
idstringaliasstring?hiddenboolean?
POST /api/devices/audio/profile
Audio Profile
Body (json)
idstringindexinteger
POST /api/devices/audio/test
Audio Test
Body (json)
idstringchannelstring
POST /api/devices/audio/volume
Audio Set Volume
Body (json)
idstringvolumenumber?mutedboolean?
GET /api/devices/bluetooth
Bluetooth Status
POST /api/devices/bluetooth/connect
Bluetooth Connect
Body (json)
addressstring
POST /api/devices/bluetooth/disconnect
Bluetooth Disconnect
Body (json)
addressstring
POST /api/devices/bluetooth/forget
Bluetooth Forget
Body (json)
addressstring
POST /api/devices/bluetooth/pair
Bluetooth Pair
Body (json)
addressstring
POST /api/devices/bluetooth/pairing/respond
Bluetooth Pairing Respond
Body (json)
addressstringacceptboolean
POST /api/devices/bluetooth/permission
Android : affiche sur l'appareil la demande d'autorisation « Appareils à proximité ».
POST /api/devices/bluetooth/power
Bluetooth Power
Body (json)
onboolean
POST /api/devices/bluetooth/scan
Bluetooth Scan
Body (json)
onboolean
GET /api/devices/mixer
Get Mixer
PUT /api/devices/mixer/{channel}
Modifie le mixage et/ou l'égaliseur de la musique d'une sortie radio.
Path
channelstring
Body (json)
mixobject?soundobject?
GET /api/devices/routing
Get Routing
PUT /api/devices/routing
Choisit (ou efface) la sortie audio d'une sortie radio, ou change son repli quand la sortie est absente.
Body (json)
channelstringsink_idstring?fallbackstring?clearboolean?
GET /api/devices/status
Get Status
POST /api/devices/system-settings
Ouvre l'écran de réglages correspondant SUR la machine (pour l'écran local ou la télécommande).
Body (json)
targetstring
GET /api/devices/topology
Graphe machine → sorties audio, Bluetooth, Wi-Fi, Ethernet, écrans et télécommandes Bobine.
GET /api/devices/wifi
Wifi Status
POST /api/devices/wifi/confirm
Wifi Confirm
POST /api/devices/wifi/connect
Wifi Connect
Body (json)
ssidstringpasswordstring?acknowledge_disconnectboolean?
POST /api/devices/wifi/forget
Wifi Forget
Body (json)
ssidstringacknowledge_disconnectboolean?
POST /api/devices/wifi/power
Wifi Power
Body (json)
onbooleanacknowledge_disconnectboolean?
POST /api/devices/wifi/scan
Wifi Scan
/api/diagnostics
GET /api/diagnostics/import
État de la chaîne d'import : binaires, dossiers, exécuteur et tâches.
GET /api/diagnostics/system
État de santé de Bobine : `status` (`ok`, `warning`, `critical`, ou `unknown` si une sonde n'a pas pu répondre sans qu'aucun problème soit trouvé), `problems` triés par gravité, chacun `{code, severity, message, remedy}` avec un code stable, et `checks` (chaque sonde, même saine).
/api/display
GET /api/display/state
Get Display State
PUT /api/display/state
Put Display State
Body (json)
external_countintegersourcestring?resolutionstring?
/api/health
GET /api/health
Contrôle de santé lisible par machine, consommé par le chien de garde `bobine-watchdog` (redémarrage auto d'un composant mort) et par toute supervision externe.
/api/import-jobs
GET /api/import-jobs
File d'attente des imports en direct : uploads web ET dossiers surveillés confondus, triés par ordre de création.
DELETE /api/import-jobs/{job_id}
Annule immédiatement une tâche d'importation en cours ou en attente, interrompt FFmpeg le cas échéant et supprime les fichiers temporaires.
Path
job_idstring
/api/logs
GET /api/logs
Journaux en JSON stable, du plus récent au plus ancien.
Query
sourcestring?levelstring?sincestring?limitinteger?
DELETE /api/logs/activity
Supprime des logs d'activité : par identifiants précis (sélection dans le tableau), les `limit` plus récents (purge), ou tout si aucun des deux n'est fourni (bouton "vider").
Query
idsinteger[]?limitinteger?
GET /api/logs/activity
Log d'activité filtrable.
Query
event_typestring?limitinteger?
GET /api/logs/activity/event-types
List Activity Event Types
DELETE /api/logs/technical
Vide le log technique.
GET /api/logs/technical
Log technique brut : erreurs backend, échecs de lecture, etc.
Query
linesinteger?
GET /api/logs/technical/download
Téléchargement du log technique complet.
/api/media
GET /api/media
Médias de toutes les bibliothèques avec leur identifiant de lecture, filtrés et paginés.
Query
kindstring?- video | playlist | audio | audio\-playlist | background | radio\-track | radio\-playlist
qstring?limitinteger?offsetinteger?
/api/metrics
GET /api/metrics/dashboard
Tableau de bord unifié des métriques club et télémétrie matérielle.
Query
periodstring?- 7d | 30d | this_month | all
channelstring?- all | cable | network
GET /api/metrics/hardware/history
Historique temporel d'une métrique matérielle (1h, 6h, 24h, 7j, 30j, mois en cours, tout l'historique conservé) avec statistiques et points échantillonnés.
Query
metricstring?periodstring?- 1h | 6h | 24h | 7d | 30d | this_month | all
GET /api/metrics/ratings
Liste les évaluations récentes.
Query
video_idinteger?channelstring?limitinteger?
POST /api/metrics/ratings
Enregistre l'évaluation 5 étoiles d'un cours vidéo.
Body (json)
video_idintegerratingintegerchannelstring?sourcestring?
POST /api/metrics/sessions/end
Clôture manuellement une session de lecture.
Body (json)
session_idintegerposition_secondsnumber?completedboolean?
POST /api/metrics/sessions/start
Démarre manuellement une session de lecture.
Body (json)
video_idintegerchannelstring?launch_typestring?total_duration_secondsnumber?
/api/playback
DELETE /api/playback/interrupted
Abandonne la lecture interrompue du canal sans la relancer.
Query
channelstring?
GET /api/playback/interrupted
Dernière action différée en attente de reprise/relance explicite depuis l'interface, POUR UN CANAL DONNÉ.
Query
channelstring?
POST /api/playback/interrupted/resume
Relance l'action différée du canal : reprise à la position exacte pour une interruption par programmation, relance depuis zéro de la cible reportée par le mode coach.
Query
channelstring?
GET /api/playback/state
Snapshot ponctuel de l'état de lecture d'UN canal (utile au premier rendu, avant connexion WebSocket).
Query
channelstring?
POST /api/playback/{channel}/{action}
Commande de lecture d'un canal (`cable`, `network`) ; corps JSON : les paramètres de la commande WebSocket.
Path
channelstringactionstring
/api/playlists
GET /api/playlists
Liste toutes les playlists avec le nombre d'éléments, la durée totale et une miniature de repli (1er élément en ayant une).
POST /api/playlists
Crée une nouvelle playlist avec ses éléments.
Body (json)
namestringitemsobject[]?
DELETE /api/playlists/{playlist_id}
Supprime la playlist (les éléments associés sont supprimés en cascade).
Path
playlist_idinteger
GET /api/playlists/{playlist_id}
Détails d'une playlist avec ses éléments ordonnés et les métadonnées des vidéos associées.
Path
playlist_idinteger
PUT /api/playlists/{playlist_id}
Met à jour le nom et/ou les éléments d'une playlist (remplace proprement la liste ordonnée des éléments).
Path
playlist_idinteger
Body (json)
namestringitemsobject[]?
POST /api/playlists/{playlist_id}/duplicate
Duplique une playlist existante (copie le nom en y ajoutant " (copie)" et clone ses éléments).
Path
playlist_idinteger
/api/radio
GET /api/radio/albums
Albums dérivés par regroupement (album_artist, album).
GET /api/radio/announcement-rules
List Rules
POST /api/radio/announcement-rules
Create Rule
Body (json)
rule_typestring- every_n_tracks | every_x_minutes | fixed_times
n_tracksinteger?interval_minutesinteger?times_of_daystring[]?enabledboolean?targetstring?
DELETE /api/radio/announcement-rules/{rule_id}
Delete Rule
Path
rule_idinteger
PUT /api/radio/announcement-rules/{rule_id}
Update Rule
Path
rule_idinteger
Body (json)
rule_typestring- every_n_tracks | every_x_minutes | fixed_times
n_tracksinteger?interval_minutesinteger?times_of_daystring[]?enabledboolean?targetstring?
GET /api/radio/announcements
List Announcements
POST /api/radio/announcements/play-now
Déclenchement manuel — toujours en mode « duck » (fondu immédiat, la musique continue).
Body (json)
announcement_idinteger?targetstring?
POST /api/radio/announcements/upload
Import synchrone (un seul fichier + description obligatoire) : pas de job d'arrière-plan, contrairement aux morceaux — le traitement ffprobe/ffmpeg d'un unique fichier reste rapide.
Body (multipart)
filestringdescriptionstring
POST /api/radio/announcements/upload-batch
Import groupé (plusieurs fichiers ou dossier entier) : traité en arrière-plan comme les morceaux — voir GET /api/import-jobs.
Body (multipart)
filesstring[]
DELETE /api/radio/announcements/{announcement_id}
Delete Announcement
Path
announcement_idinteger
PUT /api/radio/announcements/{announcement_id}
Update Announcement
Path
announcement_idinteger
Body (json)
descriptionstring?enabledboolean?
GET /api/radio/announcements/{announcement_id}/stream
Flux audio d'un rappel.
Path
announcement_idinteger
GET /api/radio/artists
Artistes dérivés par regroupement (album_artist sinon artist).
GET /api/radio/default-playlist
Ambiance par défaut de chaque sortie radio.
PUT /api/radio/default-playlist
Choisit l'ambiance par défaut d'UNE sortie radio (démarrage automatique, fin de fenêtre de planning, bascule de la sortie câblée sur Radio).
Body (json)
channelstringplaylist_idinteger?
GET /api/radio/playlists
List Playlists
POST /api/radio/playlists
Create Playlist
Body (json)
namestringtrack_idsinteger[]?
DELETE /api/radio/playlists/{playlist_id}
Delete Playlist
Path
playlist_idinteger
GET /api/radio/playlists/{playlist_id}
Get Playlist
Path
playlist_idinteger
PUT /api/radio/playlists/{playlist_id}
Update Playlist
Path
playlist_idinteger
Body (json)
namestringtrack_idsinteger[]?
DELETE /api/radio/playlists/{playlist_id}/default
Retire le statut « par défaut » (plus aucune playlist d'ambiance).
Path
playlist_idinteger
PUT /api/radio/playlists/{playlist_id}/default
Désigne la playlist d'ambiance par défaut : une seule à la fois, garantie applicativement.
Path
playlist_idinteger
POST /api/radio/playlists/{playlist_id}/tracks
Ajoute un morceau à la fin de la playlist (bouton « ajouter à la playlist » depuis la vue Morceaux).
Path
playlist_idinteger
Body (json)
track_idinteger
GET /api/radio/sound
Réglages de son courants d'UNE sortie radio (réseau par défaut) : même valeur que le champ `sound` de l'état diffusé, pour les clients sans WebSocket.
Query
channelstring?
PUT /api/radio/sound
Modifie les réglages de son d'UNE sortie radio.
Query
channelstring?
GET /api/radio/state
Snapshot ponctuel de l'état d'UNE sortie radio.
Query
channelstring?
GET /api/radio/tracks
Liste filtrable des morceaux (vue « Morceaux » + filtres artiste/album/ genre/tag des autres vues).
Query
qstring?artiststring?albumstring?genrestring?tagstring?
POST /api/radio/tracks/upload
Import multi-fichiers de morceaux (tous formats audio), traité en arrière-plan — voir GET /api/import-jobs.
Body (multipart)
filesstring[]
POST /api/radio/tracks/upload-zip
Import d'une archive ZIP de morceaux, traité en arrière-plan.
Body (multipart)
filestring?upload_idstring?
DELETE /api/radio/tracks/{track_id}
Delete Track
Path
track_idinteger
GET /api/radio/tracks/{track_id}
Get Track
Path
track_idinteger
PUT /api/radio/tracks/{track_id}
Édition manuelle des métadonnées et des tags.
Path
track_idinteger
Body (json)
titlestring?artiststring?albumstring?album_artiststring?track_numberinteger?disc_numberinteger?yearinteger?genrestring?tagsstring[]?
GET /api/radio/tracks/{track_id}/cover
Pochette d'un morceau radio (JPEG normalisé, extrait ID3 ou uploadé).
Path
track_idinteger
POST /api/radio/tracks/{track_id}/cover
Pochette fournie manuellement : remplace la pochette existante.
Path
track_idinteger
Body (multipart)
filestring
GET /api/radio/tracks/{track_id}/stream
Flux audio d'un morceau radio.
Path
track_idinteger
POST /api/radio/{output}/{action}
Commande d'une sortie radio (`cable`, `network`) ; même contrat que `/api/playback/{channel}/{action}`.
Path
outputstringactionstring
/api/schedule
GET /api/schedule
Liste des programmations, filtrable par canal de diffusion.
Query
channelstring?
POST /api/schedule
Create Schedule
Body (json)
target_typestring- video | playlist | radio_playlist
target_idintegerchannelstring?schedule_typestring- once | recurring
run_atstring?days_of_weekinteger[]?time_of_daystring?activeboolean?end_timestring?is_24_7boolean?
GET /api/schedule/next
Prochaine occurrence active à venir, récurrence et overrides résolus, pour le bloc « prochain cours » de l'écran d'attente.
Query
channelstring?
GET /api/schedule/occurrences
Occurrences résolues (récurrence + overrides) dans [start, end], pour les vues planning calendrier/liste.
Query
startstringendstringchannelstring?
DELETE /api/schedule/{schedule_id}
Delete Schedule
Path
schedule_idinteger
GET /api/schedule/{schedule_id}
Get Schedule
Path
schedule_idinteger
PUT /api/schedule/{schedule_id}
Update Schedule
Path
schedule_idinteger
Body (json)
target_typestring- video | playlist | radio_playlist
target_idintegerchannelstring?schedule_typestring- once | recurring
run_atstring?days_of_weekinteger[]?time_of_daystring?activeboolean?end_timestring?is_24_7boolean?
POST /api/schedule/{schedule_id}/overrides
Create Override
Path
schedule_idinteger
Body (json)
occurrence_datestringactionstring- cancelled | replaced
replacement_target_typestring?- video | playlist | radio_playlist
replacement_target_idinteger?
DELETE /api/schedule/{schedule_id}/overrides/{override_id}
Delete Override
Path
schedule_idintegeroverride_idinteger
/api/settings
GET /api/settings
Get Settings
PUT /api/settings
Update Settings
Body (json)
wait_time_between_coursesinteger?volume_defaultinteger?audio_chain_timer_secondsinteger?radio_announcement_fade_msinteger?logs_retention_daysinteger?default_coach_background_idinteger?themestring?theme_modestring?languagestring?active_logostring?update_channelstring?wired_display_modestring?display_mode_settingstring?auto_update_enabledstring?auto_update_timestring?auto_web_renditionstring?media_nativestring?update_torstring?update_tor_proxystring?simplified_uistring?
GET /api/settings/backup/export
Exporte une archive ZIP de sauvegarde contenant.
POST /api/settings/backup/restore
Restaure une sauvegarde depuis une archive ZIP uploadée.
Body (multipart)
filestring
GET /api/settings/display-output
Sortie active des deux canaux : câblé (écran du Wyse) et réseau (tout autre appareil du LAN).
PUT /api/settings/display-output
Bascule un canal (câblé ou réseau) entre kiosk et cinéma, indépendamment de l'autre.
Body (json)
channelstringoutputstring
GET /api/settings/laptop-lid
Vérifie si la machine a un capot et renvoie le réglage actuel.
POST /api/settings/laptop-lid
Active ou désactive la mise en veille à la fermeture du capot.
Body (json)
prevent_sleepboolean
DELETE /api/settings/logo
Retire le logo personnalisé et repasse le réglage actif sur le logo par défaut.
POST /api/settings/logo
Upload d'un logo personnalisé : normalisé en PNG sous un nom fixe (`_LOGO_FILENAME`) pour une URL stable (/api/branding/logo.png), remplace tout logo custom précédent.
Body (multipart)
filestring
POST /api/settings/logs/purge
Purge manuelle des journaux d'activité et historiques de métriques.
Query
retention_daysinteger?
GET /api/settings/media-native
État réel du composant audio natif : désactivé, actif, en repli ou absent.
POST /api/settings/open-path
Ouvre un dossier de données Bobine dans le gestionnaire de fichiers natif de l'OS (xdg-open, explorer, open).
Body (json)
pathstring
GET /api/settings/storage
Indicateur de capacité de stockage : espace disque du volume qui héberge les médias (total / utilisé / libre) et empreinte propre de l'application (somme des dossiers de médias).
GET /api/settings/system
Charge CPU, GPU, RAM, Températures, Puissance (W), Modèles des composants et Runtime.
POST /api/settings/system/reset
Réinitialisation complète : force le rechargement de tous les écrans connectés puis redémarre le kiosk et le backend.
POST /api/settings/system/reset-data
Remise à zéro d'usine : médias, journaux et base de données.
Body (json)
confirmstring
POST /api/settings/system/restart
Redémarrage simple (sans effacer de données), par exemple pour appliquer un changement de langue.
POST /api/settings/system/uninstall
Remise à zéro complète de la machine.
Body (json)
confirmstring
/api/storage
GET /api/storage/advisor/format
Système de fichiers conseillé selon l'OS hôte et les OS qui brancheront le support.
Query
hoststring?othersstring?mediastring?legacyboolean?
GET /api/storage/format/active
Format Active
POST /api/storage/format/execute
Format Execute
Body (json)
keystringtokenstring?fsstringlabelstringconfirmstring?acknowledgedboolean?
DELETE /api/storage/format/jobs/{job_id}
Annule AVANT le point de non-retour (aucun effacement n'a eu lieu) ; refusé ensuite.
Path
job_idstring
GET /api/storage/format/jobs/{job_id}
Format Job
Path
job_idstring
POST /api/storage/format/plan
Plan de formatage : n'écrit RIEN.
Body (json)
keystringtravelsstring[]?
GET /api/storage/portable
Portable
POST /api/storage/portable/{device_id}/mount
Portable Mount
Path
device_idstring
POST /api/storage/portable/{device_id}/unmount
Portable Unmount
Path
device_idstring
PUT /api/storage/settings
Valeurs par défaut des réglages de longévité (supports non enregistrés et nouveaux supports).
Body (json)
read_onlyboolean?noatimeboolean?noexecboolean?standby_minutesinteger?smart_monitorboolean?auto_mount_libraryboolean?
GET /api/storage/status
Status
GET /api/storage/volumes
Volumes
GET /api/storage/volumes/{key}/browse
Browse
Path
keystring
Query
pathstring?offsetinteger?limitinteger?show_hiddenboolean?media_onlyboolean?
POST /api/storage/volumes/{key}/eject
Eject
Path
keystring
POST /api/storage/volumes/{key}/export
Copie de médias locaux vers le support : remontage en écriture temporaire et explicite, puis retour en lecture seule.
Path
keystring
Body (json)
kindstringidsinteger[]deststring?
GET /api/storage/volumes/{key}/health
Health
Path
keystring
Query
refreshboolean?
POST /api/storage/volumes/{key}/import
Copie vérifiée vers le stockage local puis importeur existant ; suivi par `GET /api/import-jobs`.
Path
keystring
Body (json)
entriesobject[]kindstringforceboolean?
POST /api/storage/volumes/{key}/index
« Utiliser comme extension » : indexe les médias sélectionnés sans les copier (lecture directe, lecture seule).
Path
keystring
Body (json)
entriesobject[]kindstringforceboolean?
DELETE /api/storage/volumes/{key}/library
Unregister Library
Path
keystring
Query
purgeboolean?
POST /api/storage/volumes/{key}/library
Register Library
Path
keystring
Body (json)
nicknamestring?
POST /api/storage/volumes/{key}/mount
Mount
Path
keystring
Body (json)
modestring?
PUT /api/storage/volumes/{key}/settings
Update Volume Settings
Path
keystring
Body (json)
read_onlyboolean?noatimeboolean?noexecboolean?standby_minutesinteger?smart_monitorboolean?auto_mount_libraryboolean?
POST /api/storage/volumes/{key}/trim
Trim
Path
keystring
POST /api/storage/volumes/{key}/unmount
Unmount
Path
keystring
/api/time
GET /api/time
Retourne l'heure serveur en millisecondes Unix.
/api/updates
POST /api/updates/_android-callback
Rappel interne (boucle locale uniquement, jamais exposé au delà de 127.0.0.1 par la configuration réseau du profil Android) : `UpdateManager.
Body (json)
statusstringmessagestring?percentinteger?
POST /api/updates/acknowledge
Acquitte le cycle de mise à jour courant.
POST /api/updates/apply
Déclenche la mise à jour du système en tâche de fond.
GET /api/updates/check
Vérifie la disponibilité d'une nouvelle release officielle sur GitHub, en respectant le canal choisi dans Réglages → Mises à jour (Stable, Bêta ou Canary).
Query
refreshboolean?
GET /api/updates/status
État courant (ou dernier connu) du pipeline de mise à jour.
POST /api/updates/store/complete
Build Google Play : installe la mise à jour téléchargée (l'application redémarre).
POST /api/updates/store/open
Build Google Play : ouvre la fiche de l'application dans Google Play.
POST /api/updates/store/start
Build Google Play : lance la mise à jour par Google Play (téléchargement en arrière-plan).
POST /api/updates/tor-check
Vérifie par le service de contrôle de Tor que les mises à jour sortiraient bien par Tor.
Body (json)
proxystring?
/api/uploads
POST /api/uploads
Create Upload
Body (json)
filenamestringsizeintegerfingerprintstring?
DELETE /api/uploads/{upload_id}
Cancel Upload
Path
upload_idstring
GET /api/uploads/{upload_id}
Get Upload
Path
upload_idstring
PATCH /api/uploads/{upload_id}
Append Chunk
Path
upload_idstring
/api/videos
GET /api/videos
Récupère la liste des vidéos de la bibliothèque avec filtres et tris.
Query
searchstring?programstring?releasestring?sort_bystring?- imported_at | title | duration
orderstring?- asc | desc
GET /api/videos/programs
Catégories (programmes) réellement présentes dans la bibliothèque, triées.
POST /api/videos/upload
Upload une vidéo en HTTP et enregistre une tâche d'import suivie en arrière-plan (normalisation automatique si requise) — voir `_run_video_import_job` et `GET /api/import-jobs`.
Body (multipart)
filestring?upload_idstring?titlestring?programstring?releasestring?descriptionstring?subtitlesstring[]?
POST /api/videos/upload-zip
Import d'une archive (ZIP ou tar) de vidéos : un cours par fichier, en une seule tâche.
Body (multipart)
filestring?upload_idstring?
DELETE /api/videos/{video_id}
Supprime physiquement les fichiers de la vidéo et de sa miniature, puis supprime son entrée en BDD.
Path
video_idinteger
GET /api/videos/{video_id}
Récupère les détails d'une vidéo spécifique.
Path
video_idinteger
PUT /api/videos/{video_id}
Met à jour les métadonnées modifiables d'une vidéo (titre, programme, release).
Path
video_idinteger
Body (json)
titlestring?programstring?releasestring?descriptionstring?
GET /api/videos/{video_id}/chapters
List Chapters
Path
video_idinteger
PUT /api/videos/{video_id}/chapters
Remplace tous les chapitres du cours (liste vide = les supprimer).
Path
video_idinteger
Body (json)
chaptersobject[]
GET /api/videos/{video_id}/chapters/export
Chapitres au format d'import JSON (téléchargeable).
Path
video_idinteger
POST /api/videos/{video_id}/chapters/from-file
Lit les chapitres incorporés à la vidéo (MKV, MP4) et remplace ceux du cours.
Path
video_idinteger
POST /api/videos/{video_id}/chapters/import
Importe un fichier de chapitres (.json, .vtt ou texte « 05:00 Titre ») et remplace ceux du cours.
Path
video_idinteger
Body (multipart)
filestring
POST /api/videos/{video_id}/normalize
Déclenche manuellement la normalisation d'une vidéo si elle n'est pas Direct Play.
Path
video_idinteger
GET /api/videos/{video_id}/stream
Flux d'une vidéo, avec négociation de la version lisible.
Path
video_idinteger
Query
profilestring?acceptstring?
GET /api/videos/{video_id}/subtitles
Liste les pistes de sous-titres associées à une vidéo.
Path
video_idinteger
POST /api/videos/{video_id}/subtitles
Importe un fichier .srt ou .vtt pour une vidéo, le convertit en WebVTT si nécessaire et l'enregistre.
Path
video_idinteger
Body (multipart)
filestringlanguage_codestring?language_labelstring?
DELETE /api/videos/{video_id}/subtitles/{subtitle_id}
Supprime une piste de sous-titres sur disque et en base.
Path
video_idintegersubtitle_idinteger
GET /api/videos/{video_id}/subtitles/{subtitle_id}/vtt
Sert le fichier WebVTT pour les balises HTML5 <track> avec les bons en-têtes CORS et Content-Type.
Path
video_idintegersubtitle_idinteger
PUT /api/videos/{video_id}/thumbnail
Miniature manuelle.
Path
video_idinteger
Body (multipart)
filestring
DELETE /api/videos/{video_id}/web-rendition
Delete Web Rendition
Path
video_idinteger
POST /api/videos/{video_id}/web-rendition
Lance la production de la version « lisible partout » (H.264 8 bits, ≤ 1080p, AAC) — suivie via `GET /api/import-jobs`, état dans `web_status`.
Path
video_idinteger
