Référence

API HTTP

Toutes les routes de l'API locale de Bobine (port 1903 par défaut), sur le réseau local seulement. Chaque route a sa commande bobine. Toute erreur répond { "detail": { "code", "message" } }.

Codes d'erreur

400
bad_request
401
unauthorized
403
forbidden
404
not_found
405
method_not_allowed
409
conflict
413
too_large
422
invalid
429
too_many_requests
500
internal_error
503
unavailable
504
timeout
507
insufficient_storage

Domaines

/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

Chemin

track_id integer

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`.

Corps (multipart)

files string[]
title string
program string?
release string?

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`.

Corps (multipart)

file string?
upload_id string?
title string
program string?
release string?

DELETE /api/audio/{course_id}

Delete Audio Course

Chemin

course_id integer

GET /api/audio/{course_id}

Get Audio Course

Chemin

course_id integer

PUT /api/audio/{course_id}

Update Audio Course

Chemin

course_id integer

Corps (json)

title string?
program string?
release string?
background_id integer?
clear_background boolean?

PUT /api/audio/{course_id}/tracks/reorder

Réordonnancement des pistes par glisser-déposer.

Chemin

course_id integer

Corps (json)

track_ids integer[]

PUT /api/audio/{course_id}/tracks/{track_id}

Update Audio Track

Chemin

course_id integer
track_id integer

Corps (json)

title string?
number integer?
background_id integer?
clear_background boolean?

/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

Corps (json)

name string
items object[]?

DELETE /api/audio-playlists/{playlist_id}

Delete Audio Playlist

Chemin

playlist_id integer

GET /api/audio-playlists/{playlist_id}

Get Audio Playlist

Chemin

playlist_id integer

PUT /api/audio-playlists/{playlist_id}

Update Audio Playlist

Chemin

playlist_id integer

Corps (json)

name string
items object[]?

POST /api/audio-playlists/{playlist_id}/duplicate

Duplicate Audio Playlist

Chemin

playlist_id integer

/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`.

Corps (multipart)

file string?
upload_id string?
title string?

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.

Corps (multipart)

file string?
upload_id string?

DELETE /api/backgrounds/{background_id}

Delete Background

Chemin

background_id integer

GET /api/backgrounds/{background_id}

Get Background

Chemin

background_id integer

PUT /api/backgrounds/{background_id}

Update Background

Chemin

background_id integer

Corps (json)

title string?

GET /api/backgrounds/{background_id}/stream

Stream Background

Chemin

background_id integer

/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.

Requête

dry_run boolean?
include_machine boolean?

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

Chemin

name string

/api/devices

GET /api/devices/audio

Audio List

POST /api/devices/audio/balance

Audio Balance

Corps (json)

id string
balance number

POST /api/devices/audio/default

Audio Set Default

Corps (json)

id string

GET /api/devices/audio/details

Audio Details

Requête

id string

PUT /api/devices/audio/meta

Nom personnalisé et masquage d'une sortie : réglages de Bobine, communs à toutes les plateformes.

Corps (json)

id string
alias string?
hidden boolean?

POST /api/devices/audio/profile

Audio Profile

Corps (json)

id string
index integer

POST /api/devices/audio/test

Audio Test

Corps (json)

id string
channel string

POST /api/devices/audio/volume

Audio Set Volume

Corps (json)

id string
volume number?
muted boolean?

GET /api/devices/bluetooth

Bluetooth Status

POST /api/devices/bluetooth/connect

Bluetooth Connect

Corps (json)

address string

POST /api/devices/bluetooth/disconnect

Bluetooth Disconnect

Corps (json)

address string

POST /api/devices/bluetooth/forget

Bluetooth Forget

Corps (json)

address string

POST /api/devices/bluetooth/pair

Bluetooth Pair

Corps (json)

address string

POST /api/devices/bluetooth/pairing/respond

Bluetooth Pairing Respond

Corps (json)

address string
accept boolean

POST /api/devices/bluetooth/permission

Android : affiche sur l'appareil la demande d'autorisation « Appareils à proximité ».

POST /api/devices/bluetooth/power

Bluetooth Power

Corps (json)

on boolean

POST /api/devices/bluetooth/scan

Bluetooth Scan

Corps (json)

on boolean

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.

Chemin

channel string

Corps (json)

mix object?
sound object?

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.

Corps (json)

channel string
sink_id string?
fallback string?
clear boolean?

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).

Corps (json)

target string

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

Corps (json)

ssid string
password string?
acknowledge_disconnect boolean?

POST /api/devices/wifi/forget

Wifi Forget

Corps (json)

ssid string
acknowledge_disconnect boolean?

POST /api/devices/wifi/power

Wifi Power

Corps (json)

on boolean
acknowledge_disconnect boolean?

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

Corps (json)

external_count integer
source string?
resolution string?

/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.

Chemin

job_id string

/api/logs

GET /api/logs

Journaux en JSON stable, du plus récent au plus ancien.

Requête

source string?
level string?
since string?
limit integer?

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").

Requête

ids integer[]?
limit integer?

GET /api/logs/activity

Log d'activité filtrable.

Requête

event_type string?
limit integer?

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.

Requête

lines integer?

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.

Requête

kind string?
video | playlist | audio | audio\-playlist | background | radio\-track | radio\-playlist
q string?
limit integer?
offset integer?

/api/metrics

GET /api/metrics/dashboard

Tableau de bord unifié des métriques club et télémétrie matérielle.

Requête

period string?
7d | 30d | this_month | all
channel string?
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.

Requête

metric string?
period string?
1h | 6h | 24h | 7d | 30d | this_month | all

GET /api/metrics/ratings

Liste les évaluations récentes.

Requête

video_id integer?
channel string?
limit integer?

POST /api/metrics/ratings

Enregistre l'évaluation 5 étoiles d'un cours vidéo.

Corps (json)

video_id integer
rating integer
channel string?
source string?

POST /api/metrics/sessions/end

Clôture manuellement une session de lecture.

Corps (json)

session_id integer
position_seconds number?
completed boolean?

POST /api/metrics/sessions/start

Démarre manuellement une session de lecture.

Corps (json)

video_id integer
channel string?
launch_type string?
total_duration_seconds number?

/api/playback

DELETE /api/playback/interrupted

Abandonne la lecture interrompue du canal sans la relancer.

Requête

channel string?

GET /api/playback/interrupted

Dernière action différée en attente de reprise/relance explicite depuis l'interface, POUR UN CANAL DONNÉ.

Requête

channel string?

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.

Requête

channel string?

GET /api/playback/state

Snapshot ponctuel de l'état de lecture d'UN canal (utile au premier rendu, avant connexion WebSocket).

Requête

channel string?

POST /api/playback/{channel}/{action}

Commande de lecture d'un canal (`cable`, `network`) ; corps JSON : les paramètres de la commande WebSocket.

Chemin

channel string
action string

/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.

Corps (json)

name string
items object[]?

DELETE /api/playlists/{playlist_id}

Supprime la playlist (les éléments associés sont supprimés en cascade).

Chemin

playlist_id integer

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.

Chemin

playlist_id integer

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).

Chemin

playlist_id integer

Corps (json)

name string
items object[]?

POST /api/playlists/{playlist_id}/duplicate

Duplique une playlist existante (copie le nom en y ajoutant " (copie)" et clone ses éléments).

Chemin

playlist_id integer

/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

Corps (json)

rule_type string
every_n_tracks | every_x_minutes | fixed_times
n_tracks integer?
interval_minutes integer?
times_of_day string[]?
enabled boolean?
target string?

DELETE /api/radio/announcement-rules/{rule_id}

Delete Rule

Chemin

rule_id integer

PUT /api/radio/announcement-rules/{rule_id}

Update Rule

Chemin

rule_id integer

Corps (json)

rule_type string
every_n_tracks | every_x_minutes | fixed_times
n_tracks integer?
interval_minutes integer?
times_of_day string[]?
enabled boolean?
target string?

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).

Corps (json)

announcement_id integer?
target string?

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.

Corps (multipart)

file string
description string

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.

Corps (multipart)

files string[]

DELETE /api/radio/announcements/{announcement_id}

Delete Announcement

Chemin

announcement_id integer

PUT /api/radio/announcements/{announcement_id}

Update Announcement

Chemin

announcement_id integer

Corps (json)

description string?
enabled boolean?

GET /api/radio/announcements/{announcement_id}/stream

Flux audio d'un rappel.

Chemin

announcement_id integer

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).

Corps (json)

channel string
playlist_id integer?

GET /api/radio/playlists

List Playlists

POST /api/radio/playlists

Create Playlist

Corps (json)

name string
track_ids integer[]?

DELETE /api/radio/playlists/{playlist_id}

Delete Playlist

Chemin

playlist_id integer

GET /api/radio/playlists/{playlist_id}

Get Playlist

Chemin

playlist_id integer

PUT /api/radio/playlists/{playlist_id}

Update Playlist

Chemin

playlist_id integer

Corps (json)

name string
track_ids integer[]?

DELETE /api/radio/playlists/{playlist_id}/default

Retire le statut « par défaut » (plus aucune playlist d'ambiance).

Chemin

playlist_id integer

PUT /api/radio/playlists/{playlist_id}/default

Désigne la playlist d'ambiance par défaut : une seule à la fois, garantie applicativement.

Chemin

playlist_id integer

POST /api/radio/playlists/{playlist_id}/tracks

Ajoute un morceau à la fin de la playlist (bouton « ajouter à la playlist » depuis la vue Morceaux).

Chemin

playlist_id integer

Corps (json)

track_id integer

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.

Requête

channel string?

PUT /api/radio/sound

Modifie les réglages de son d'UNE sortie radio.

Requête

channel string?

GET /api/radio/state

Snapshot ponctuel de l'état d'UNE sortie radio.

Requête

channel string?

GET /api/radio/tags

List Tags

POST /api/radio/tags

Create Tag

Corps (json)

name string

DELETE /api/radio/tags/{tag_id}

Delete Tag

Chemin

tag_id integer

PUT /api/radio/tags/{tag_id}

Rename Tag

Chemin

tag_id integer

Corps (json)

name string

GET /api/radio/tracks

Liste filtrable des morceaux (vue « Morceaux » + filtres artiste/album/ genre/tag des autres vues).

Requête

q string?
artist string?
album string?
genre string?
tag string?

POST /api/radio/tracks/upload

Import multi-fichiers de morceaux (tous formats audio), traité en arrière-plan — voir GET /api/import-jobs.

Corps (multipart)

files string[]

POST /api/radio/tracks/upload-zip

Import d'une archive ZIP de morceaux, traité en arrière-plan.

Corps (multipart)

file string?
upload_id string?

DELETE /api/radio/tracks/{track_id}

Delete Track

Chemin

track_id integer

GET /api/radio/tracks/{track_id}

Get Track

Chemin

track_id integer

PUT /api/radio/tracks/{track_id}

Édition manuelle des métadonnées et des tags.

Chemin

track_id integer

Corps (json)

title string?
artist string?
album string?
album_artist string?
track_number integer?
disc_number integer?
year integer?
genre string?
tags string[]?

GET /api/radio/tracks/{track_id}/cover

Pochette d'un morceau radio (JPEG normalisé, extrait ID3 ou uploadé).

Chemin

track_id integer

POST /api/radio/tracks/{track_id}/cover

Pochette fournie manuellement : remplace la pochette existante.

Chemin

track_id integer

Corps (multipart)

file string

GET /api/radio/tracks/{track_id}/stream

Flux audio d'un morceau radio.

Chemin

track_id integer

POST /api/radio/{output}/{action}

Commande d'une sortie radio (`cable`, `network`) ; même contrat que `/api/playback/{channel}/{action}`.

Chemin

output string
action string

/api/schedule

GET /api/schedule

Liste des programmations, filtrable par canal de diffusion.

Requête

channel string?

POST /api/schedule

Create Schedule

Corps (json)

target_type string
video | playlist | radio_playlist
target_id integer
channel string?
schedule_type string
once | recurring
run_at string?
days_of_week integer[]?
time_of_day string?
active boolean?
end_time string?
is_24_7 boolean?

GET /api/schedule/next

Prochaine occurrence active à venir, récurrence et overrides résolus, pour le bloc « prochain cours » de l'écran d'attente.

Requête

channel string?

GET /api/schedule/occurrences

Occurrences résolues (récurrence + overrides) dans [start, end], pour les vues planning calendrier/liste.

Requête

start string
end string
channel string?

DELETE /api/schedule/{schedule_id}

Delete Schedule

Chemin

schedule_id integer

GET /api/schedule/{schedule_id}

Get Schedule

Chemin

schedule_id integer

PUT /api/schedule/{schedule_id}

Update Schedule

Chemin

schedule_id integer

Corps (json)

target_type string
video | playlist | radio_playlist
target_id integer
channel string?
schedule_type string
once | recurring
run_at string?
days_of_week integer[]?
time_of_day string?
active boolean?
end_time string?
is_24_7 boolean?

POST /api/schedule/{schedule_id}/overrides

Create Override

Chemin

schedule_id integer

Corps (json)

occurrence_date string
action string
cancelled | replaced
replacement_target_type string?
video | playlist | radio_playlist
replacement_target_id integer?

DELETE /api/schedule/{schedule_id}/overrides/{override_id}

Delete Override

Chemin

schedule_id integer
override_id integer

/api/settings

GET /api/settings

Get Settings

PUT /api/settings

Update Settings

Corps (json)

wait_time_between_courses integer?
volume_default integer?
audio_chain_timer_seconds integer?
radio_announcement_fade_ms integer?
logs_retention_days integer?
default_coach_background_id integer?
theme string?
theme_mode string?
language string?
active_logo string?
update_channel string?
wired_display_mode string?
display_mode_setting string?
auto_update_enabled string?
auto_update_time string?
auto_web_rendition string?
media_native string?
update_tor string?
update_tor_proxy string?
simplified_ui string?

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.

Corps (multipart)

file string

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.

Corps (json)

channel string
output string

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.

Corps (json)

prevent_sleep boolean

POST /api/settings/logs/purge

Purge manuelle des journaux d'activité et historiques de métriques.

Requête

retention_days integer?

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).

Corps (json)

path string

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.

Corps (json)

confirm string

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.

Corps (json)

confirm string

/api/storage

GET /api/storage/advisor/format

Système de fichiers conseillé selon l'OS hôte et les OS qui brancheront le support.

Requête

host string?
others string?
media string?
legacy boolean?

GET /api/storage/format/active

Format Active

POST /api/storage/format/execute

Format Execute

Corps (json)

key string
token string?
fs string
label string
confirm string?
acknowledged boolean?

DELETE /api/storage/format/jobs/{job_id}

Annule AVANT le point de non-retour (aucun effacement n'a eu lieu) ; refusé ensuite.

Chemin

job_id string

GET /api/storage/format/jobs/{job_id}

Format Job

Chemin

job_id string

POST /api/storage/format/plan

Plan de formatage : n'écrit RIEN.

Corps (json)

key string
travels string[]?

GET /api/storage/portable

Portable

POST /api/storage/portable/{device_id}/mount

Portable Mount

Chemin

device_id string

POST /api/storage/portable/{device_id}/unmount

Portable Unmount

Chemin

device_id string

PUT /api/storage/settings

Valeurs par défaut des réglages de longévité (supports non enregistrés et nouveaux supports).

Corps (json)

read_only boolean?
noatime boolean?
noexec boolean?
standby_minutes integer?
smart_monitor boolean?
auto_mount_library boolean?

GET /api/storage/status

Status

GET /api/storage/volumes

Volumes

GET /api/storage/volumes/{key}/browse

Browse

Chemin

key string

Requête

path string?
offset integer?
limit integer?
show_hidden boolean?
media_only boolean?

POST /api/storage/volumes/{key}/eject

Eject

Chemin

key string

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.

Chemin

key string

Corps (json)

kind string
ids integer[]
dest string?

GET /api/storage/volumes/{key}/health

Health

Chemin

key string

Requête

refresh boolean?

POST /api/storage/volumes/{key}/import

Copie vérifiée vers le stockage local puis importeur existant ; suivi par `GET /api/import-jobs`.

Chemin

key string

Corps (json)

entries object[]
kind string
force boolean?

POST /api/storage/volumes/{key}/index

« Utiliser comme extension » : indexe les médias sélectionnés sans les copier (lecture directe, lecture seule).

Chemin

key string

Corps (json)

entries object[]
kind string
force boolean?

DELETE /api/storage/volumes/{key}/library

Unregister Library

Chemin

key string

Requête

purge boolean?

POST /api/storage/volumes/{key}/library

Register Library

Chemin

key string

Corps (json)

nickname string?

POST /api/storage/volumes/{key}/mount

Mount

Chemin

key string

Corps (json)

mode string?

PUT /api/storage/volumes/{key}/settings

Update Volume Settings

Chemin

key string

Corps (json)

read_only boolean?
noatime boolean?
noexec boolean?
standby_minutes integer?
smart_monitor boolean?
auto_mount_library boolean?

POST /api/storage/volumes/{key}/trim

Trim

Chemin

key string

POST /api/storage/volumes/{key}/unmount

Unmount

Chemin

key string

/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.

Corps (json)

status string
message string?
percent integer?

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).

Requête

refresh boolean?

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.

Corps (json)

proxy string?

/api/uploads

POST /api/uploads

Create Upload

Corps (json)

filename string
size integer
fingerprint string?

DELETE /api/uploads/{upload_id}

Cancel Upload

Chemin

upload_id string

GET /api/uploads/{upload_id}

Get Upload

Chemin

upload_id string

PATCH /api/uploads/{upload_id}

Append Chunk

Chemin

upload_id string

/api/videos

GET /api/videos

Récupère la liste des vidéos de la bibliothèque avec filtres et tris.

Requête

search string?
program string?
release string?
sort_by string?
imported_at | title | duration
order string?
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`.

Corps (multipart)

file string?
upload_id string?
title string?
program string?
release string?
description string?
subtitles string[]?

POST /api/videos/upload-zip

Import d'une archive (ZIP ou tar) de vidéos : un cours par fichier, en une seule tâche.

Corps (multipart)

file string?
upload_id string?

DELETE /api/videos/{video_id}

Supprime physiquement les fichiers de la vidéo et de sa miniature, puis supprime son entrée en BDD.

Chemin

video_id integer

GET /api/videos/{video_id}

Récupère les détails d'une vidéo spécifique.

Chemin

video_id integer

PUT /api/videos/{video_id}

Met à jour les métadonnées modifiables d'une vidéo (titre, programme, release).

Chemin

video_id integer

Corps (json)

title string?
program string?
release string?
description string?

GET /api/videos/{video_id}/chapters

List Chapters

Chemin

video_id integer

PUT /api/videos/{video_id}/chapters

Remplace tous les chapitres du cours (liste vide = les supprimer).

Chemin

video_id integer

Corps (json)

chapters object[]

GET /api/videos/{video_id}/chapters/export

Chapitres au format d'import JSON (téléchargeable).

Chemin

video_id integer

POST /api/videos/{video_id}/chapters/from-file

Lit les chapitres incorporés à la vidéo (MKV, MP4) et remplace ceux du cours.

Chemin

video_id integer

POST /api/videos/{video_id}/chapters/import

Importe un fichier de chapitres (.json, .vtt ou texte « 05:00 Titre ») et remplace ceux du cours.

Chemin

video_id integer

Corps (multipart)

file string

POST /api/videos/{video_id}/normalize

Déclenche manuellement la normalisation d'une vidéo si elle n'est pas Direct Play.

Chemin

video_id integer

GET /api/videos/{video_id}/stream

Flux d'une vidéo, avec négociation de la version lisible.

Chemin

video_id integer

Requête

profile string?
accept string?

GET /api/videos/{video_id}/subtitles

Liste les pistes de sous-titres associées à une vidéo.

Chemin

video_id integer

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.

Chemin

video_id integer

Corps (multipart)

file string
language_code string?
language_label string?

DELETE /api/videos/{video_id}/subtitles/{subtitle_id}

Supprime une piste de sous-titres sur disque et en base.

Chemin

video_id integer
subtitle_id integer

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.

Chemin

video_id integer
subtitle_id integer

PUT /api/videos/{video_id}/thumbnail

Miniature manuelle.

Chemin

video_id integer

Corps (multipart)

file string

DELETE /api/videos/{video_id}/web-rendition

Delete Web Rendition

Chemin

video_id integer

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`.

Chemin

video_id integer