RI-Playout API telemetrie← zpět na dashboard

API manuál

Rozhraní centrální telemetrie RI-Playout. Všechny odpovědi jsou JSON a vždy obsahují ok.

Základ

Základ adresy je tenhle server, tedy http://<adresa>:<port> — stejná adresa, na které čtete tuhle stránku. Token se posílá v hlavičce:

curl -H "Authorization: Bearer <token>" http://ADRESA:PORT/api/ping

Odpověď:

{ "ok": true, "app": "ri-playout-telemetry", "ts": "2026-09-17T12:00:00.000Z" }

Token jde poslat i jako ?token=… v adrese — hodí se pro rychlé vyzkoušení v prohlížeči, ale zůstává v historii a v logu proxy, takže v aplikaci patří do hlavičky.

Tokeny a oprávnění

Server rozeznává šest druhů přístupu. Tokeny pro cizí aplikace se vydávají v dashboardu pod Přístupy k API.

PřístupOdkudCo smí
adminproměnná prostředí TELEMETRY_ADMIN_TOKENvšechno, včetně správy tokenů
writevydaný token se zápisemčtení i zápis, kromě správy tokenů
readvydaný token pro čteníjen GET a HEAD
ingestTELEMETRY_INGEST_TOKEN, zabalený v aplikacijen hlášení stanice a spárování; nic nepřečte
stationvlastní token stanice po spárováníjen hlášení za sebe sama
sezenípřihlášení jménem a heslem v dashboardu (cookie)podle role účtu: dohled jako read, spravce jako admin
Ingest token je uvnitř každé instalace aplikace, proto s ním nejde číst nic o flotile. Kdyby unikl, nejhorší, co s ním jde udělat, je poslat vymyšlené hlášení.
Sezení je pro lidi u prohlížeče, ne pro aplikace: chodí v HttpOnly cookie, platí 30 dní a jde ho zrušit. Aplikace se prokazuje tokenem — ten se dá odvolat jmenovitě a nezmizí s odhlášením. Ověřuje se nejdřív token, teprve pak sezení, takže přidání účtů nezměnilo chování cizích aplikací.

Stanice a stav

GET/api/stationsread

Seznam stanic i se stavem (online, verze, poslední kontakt, stav playlistů, disky, watchdog) a seznam skupin.

GET/api/eventsread

Události z denního logu. Parametry: station, type, exclude, day (YYYY-MM-DD), limit (výchozí 500). Nejnovější první.

GET/api/uptimeread

Dostupnost jedné stanice. Povinně station, volitelně hours (1–168, výchozí 24). Vrací procento, počet a délku výpadků a koše pro pruh.

GET/api/trendread

Průběh CPU, RAM, GPU a sítě jedné stanice. Povinně station, volitelně minutes.

GET/api/caspar-configread

Poslední hlášená konfigurace CasparCG stanice. Povinně station.

GET/api/playlist-contentread

Obsah playlistů stanice (klipy, délky, chybějící soubory). Povinně station.

GET/api/server-healthadmin

Zátěž samotného serveru telemetrie: zátěž CPU proti počtu jader, paměť stroje i procesu, volné místo, velikost dat a příjem událostí za poslední hodinu včetně pořadí stanic.

DELETE/api/station/<id>write

Odebere stanici z přehledu a založí náhrobek, aby se nevracela kvůli starým řádkům v logu.

Hlášení ze stanice

POST/api/heartbeatingest / station

Pravidelné hlášení stanice. Tělo je JSON s station a volitelným state. Když chybí type, doplní se heartbeat.

curl -X POST http://ADRESA:PORT/api/heartbeat -H "Authorization: Bearer <ingest token>" -H "Content-Type: application/json" -d '{"station":"SP2026-0001","type":"heartbeat","version":"2.4.6"}'
POST/api/eventingest / station

Jednotlivá událost (změna klipu, spuštění playlistu, chyba). Stejné tělo, jen s vlastním type a payload.

POST/api/station-enrollingest

Spárování stanice: výměnou za sdílený ingest token dostane stanice vlastní tajemství, kterým se pak prokazuje jen za sebe.

POST/api/playlist-importwrite

Uložení balíku playlistů ke stanici (do 2 MB). Sourozenec /api/playout-state-import pro celý stav (do 12 MB).

Dávky (playlisty a reklamy pro stanice)

Stanice si o dávku řekne sama, až na ni obsluha klikne v záložce Správa dat. Soubory jí tenhle server podává pod svojí adresou — odkud jsou doopravdy, se stanice nedozví a dozvědět nemá.

GET/api/batch/manifesttoken stanice

Seznam toho, co dávka obsahuje: soubory (cesta, velikost, sha256, kanál) a balíčky playlistů. Adresy souborů jsou přepsané na /api/batch/file/<id> — náhodné id, ze kterého nejde odvodit původ. Když zdroj není nastavený, vrací 503 s no-source; nedostupný dodavatel je 502 s source-unavailable, nesmyslná odpověď source-manifest-invalid.

GET/api/batch/file/<id>token stanice

Samotný soubor. Podá se jen id, které je v některém uloženém manifestu — jinak 404. Tím se z toho nedá udělat otevřená proxy. Hlavičky dodavatele se nepřeposílají.

GET/api/batch/sourceadmin

Nastavení zdroje (adresa manifestu u dodavatele a případná přihlašovací hlavička) a přehled posledních dávek. POST ho mění. Hodnota přihlašovací hlavičky se nevrací nikdy, ani adminovi — jen příznak, jestli je nastavená. Prázdná hodnota při zápisu nechá stávající beze změny; smaže ji až clearHeaderValue.

Pozor na přenosy: každý soubor projde tímhle serverem jednou za každou stanici, která si o dávku řekne.
Stanice se pojmenovává hlavičkou X-RI-Station. Když jméno není čistě ASCII, posílá se procentově zakódované a přidá se X-RI-Station-Encoding: url — jinak by hlavička odešla vůbec.

Přehledy a grafy

GET/api/fleet-overviewadmin

Jedním průchodem logem podklady pro celý úvodní přehled: dostupnost a vysílání po stanicích, odvysílané klipy v čase a žebříček klipů.

ParametrVýznam
hoursdélka okna v hodinách (strop 90 dní)
daysalternativa k hours, 1–90 (výchozí 7)
bucketspočet košů pruhu, 24–240 (výchozí 96)
topdélka žebříčku klipů, 1–50 (výchozí 15)
stationčárkou oddělený výběr stanic
groupomezení na skupinu

Odpověď nese cached a cachedAgeMs: počítá se nejvýš jednou za 20 s a souběžné dotazy sdílí jeden výpočet.

Dálkové ovládání

Zásah do vysílání se prokazuje zvlášť — jmenným tokenem ze seznamu TELEMETRY_CONTROL_TOKENS. Bez něj vrátí server control-token-required, aby v auditu nestálo navždy jen „admin".

GET/api/controladmin

Které stanice jsou spárované a připojené, a seznam povolených akcí.

POST/api/commandadmin + control token

Pošle stanici příkaz (například spuštění playlistu). Tělo: station, action, případně další pole podle akce.

GET/api/commandsadmin

Historie zásahů z auditu na disku. Parametry station a limit (1–100, výchozí 25).

Stanice si příkazy vyzvedává sama přes /api/control/enroll, /api/control/pull a /api/control/ack; tyhle tři se prokazují tajemstvím stanice, ne admin tokenem.

Správa

GET/api/tokensadmin

Vydané tokeny (bez tajemství). POST vydá nový (name, scope: read nebo write), DELETE /api/tokens/<id> ho zruší.

GET/api/settingsadmin

Nastavení serveru měnitelné bez restartu (retence, komprese, držení deníku). U každé položky se vrací i to, odkud hodnota je — uložená přebíjí proměnnou prostředí. POST uloží jen změněné klíče a odmítnuté vrátí v odmitnuto; DELETE /api/settings/<klic> položku vrátí na výchozí.

GET/api/tokens/logadmin

Deník volání API: co přišlo s vydaným tokenem a každé odmítnutí. Parametry day, limit, only=errors, token. Hlášení stanic ani dotazy dashboardu se nezapisují. Token z adresy (_t) se do deníku nikdy neopíše.

GET/api/groupsread

Skupiny stanic. POST /api/groups zakládá, POST /api/groups/reorder mění pořadí.

GET/api/layoutsread

Rozvržení dlaždic na detailu stanice; šablony se ukládají přes /api/layouts/template, výchozí přes /api/layouts/default a hromadně nasazují přes /api/layouts/apply.

GET/api/station-keyread

Vyrobí klíč pro stanice z adresy serveru (url). Jeden klíč platí pro libovolný počet stanic — nekóduje identitu, jen adresu a ingest token.

GET/api/pingjakýkoli platný token

Kontrola dostupnosti a tokenu.

POST/api/loginbez přihlášení

Přihlášení účtem: {"jmeno":"…","heslo":"…"}. Při úspěchu vrátí ucet a nastaví cookie se sezením. Neznámý účet i špatné heslo vrací stejnou chybu spatne-prihlaseni (401) — rozdíl by prozradil, která jména existují. Po osmi neúspěšných pokusech za 15 minut se zavře účet a po třiceti se zavře adresa — strop jen na jméno by stačilo obejít tím, že se jméno pokaždé změní, a každý pokus přitom stojí jeden scrypt (49 ms). Souběžně se počítají nejvýš čtyři otisky, nad tím se odpovídá 429 hned. Otisk se počítá mimo hlavní smyčku, takže hlášení stanic ani ovládací kanál nečekají. Vše platí 429. Spolu s POST /api/logout a GET /api/me jsou to jediné cesty přístupné bez přihlášení; /api/me hlásí jen maUcty, ne počet účtů.

GET/api/usersadmin

Účty (bez otisků hesel). POST zakládá (jmeno, heslo, role: dohled nebo spravce), POST /api/users/<jmeno>/password mění heslo (a odhlásí všechna sezení toho účtu), POST /api/users/<jmeno>/role mění roli (platí okamžitě), DELETE /api/users/<jmeno> maže. Posledního správce smazat nelze. Stejná hranice jako u /api/tokens: zápisový token sem nesmí, jinak by si založil správce a povýšil se.

Živý stream

GET/api/streamadmin

Server-Sent Events: server posílá každou přijatou událost, jak přijde. Dashboard z toho žije, takže nemusí dotazovat dokola.

curl -N -H "Authorization: Bearer <admin token>" http://ADRESA:PORT/api/stream

Limity a chyby

LimitHodnota
Tělo požadavku256 kB
Import playlistů2 MB
Import celého stavu12 MB
Hlášení z jedné stanice120 za minutu (dál 429)
Okno přehledu flotilynejvýš 90 dní
Držení denních logůpodle TELEMETRY_RETENTION_DAYS
Držení deníku APIpodle nastavení „Držet deník volání API" (okno Nastavení), jinak TELEMETRY_API_LOG_RETENTION_DAYS, jinak 90 dní
KódKdy
400chybí nebo je vadný parametr (missing-station, bad-body)
401chybí nebo neplatný token
403token na tuhle cestu nestačí (forbidden, control-token-required)
404stanice neexistuje
413tělo je nad limit
429překročený strop hlášení za minutu
503dálkové ovládání není k dispozici

Podrobnosti k datovému modelu jsou v telemetry-server/TELEMETRY-SPEC.md v repozitáři.