List applications. An application is a namespace for streams, VOD, ads, and keys.
POST
/api/v1/apps
Session or token
Create an application. Requires the global token; an app-scoped token cannot create applications.
DELETE
/api/v1/apps/{app}
Session or token
Delete an application and everything namespaced under it.
PUT
/api/v1/apps/{app}
Session or token
Update an application’s settings. Send only the sections you mean to change: recording, abr, scte35 (ad breaks from SCTE-35 markers), vast (ads per viewer from an ad server), overrides, and the rest. A section that is sent replaces that section as a whole.
Create a stream entry ahead of a publisher connecting.
POST
/api/v1/apps/{app}/streams/from-url
Session or token
Pull a remote URL and republish it as a local stream.
POST
/api/v1/apps/{app}/streams/from-vod
Session or token
Start a stream whose source is a VOD asset rather than a live publisher.
DELETE
/api/v1/apps/{app}/streams/{id}
Session or token
Remove a stream. A publisher still connected will be disconnected.
POST
/api/v1/apps/{app}/streams/{id}/ad-break
Session or token
Splice an ad break into a live stream. The break is inserted into the media timeline and signalled with a discontinuity, so it cannot be blocked client-side.
GET
/api/v1/apps/{app}/streams/{id}/now-playing
Session or token
What a playout channel is playing right now, its position, what comes next, and whether an ad is on air.
POST
/api/v1/apps/{app}/streams/{id}/overlay
Session or token
Show or hide an overlay on a live stream. Every rendition is switched together, and a rendition that refuses is reported: an advertisement shown to part of the audience is worse than one shown to none. The overlay must already be attached to the stream.
DELETE
/api/v1/apps/{app}/streams/{id}/record
Session or token
Stop recording.
POST
/api/v1/apps/{app}/streams/{id}/record
Session or token
Start recording a live stream to disk.
POST
/api/v1/apps/{app}/streams/{id}/skip
Session or token
Skip to the next item in the running playlist.
GET
/api/v1/apps/{app}/streams/{id}/stats
None
Per-stream statistics: codecs, bitrate, viewer counts, and how long since the last frame arrived.
POST
/api/v1/apps/{app}/streams/{id}/whep
None
WHEP playback. POST an SDP offer to receive the live stream over WebRTC, typically with sub-second latency.
Where publishers connect: the RTMP port, and the SRT port, latency and whether a passphrase is required (never the passphrase itself). srt is null when SRT ingest is switched off. Public, like the ports; the dashboard builds its RTMP and SRT addresses from it.
DELETE
/api/v1/whip/{app}/{name}
Publish key
End a WHIP publish session.
POST
/api/v1/whip/{app}/{name}
Publish key
WHIP ingest. Publish from a browser or any WHIP client by POSTing an SDP offer. Authenticated by a stream publish key, not by an API token.
Upload a VOD asset. Large bodies are accepted; the server conditions the file afterwards so it can be played out cleanly.
GET
/live/{app}/{stream}/s/{session}/{file}
None
A viewer’s own copy of the stream’s playlist, reached by the redirect from playlist.m3u8. Each request keeps the viewer counted. Its segments point back at the shared files, so a CDN caches them once for everyone.
One rendition of a viewer’s own playlist, reached through their multivariant playlist.
GET
/live/{app}/{stream}/{file}
None
HLS playlist and segments. Request playlist.m3u8 to start playback: with [hls] sessions on, the player is redirected once to a playlist address of its own, which is how HLS viewers are counted. Segments are always the shared files.
GET
/live/{app}/{stream}/{rendition}/{file}
None
One rendition’s HLS playlist and segments. Players reach these through the multivariant playlist rather than directly.
GET
/vod/{app}/{*path}
None
Serve a VOD asset’s files directly.
GET
/watch/{app}/{stream}
None
Built-in player page for a stream. Public and unauthenticated, intended to be shared with viewers.
List overlay graphics and whether each one’s asset is still on disk. An overlay whose file has gone is listed rather than hidden, because streams may still reference it and an operator needs to see why their banner stopped appearing.
DELETE
/api/v1/apps/{app}/overlays/{name}
Session or token
Delete an overlay and its asset. Streams still naming it log a warning when they next go live rather than failing to start.
POST
/api/v1/apps/{app}/overlays/{name}
Session or token
Upload an overlay’s asset and define it. Send a PNG as image/png or a WebM with alpha as video/webm; without an alpha channel an overlay is an opaque rectangle over the picture. Position and size are query parameters, as percentages of the frame, so one definition is correct on every rendition.
Current licence: tier, expiry, days remaining, and whether it is in its grace period.
POST
/api/v1/license
Session or token
Install a signed licence file. Verified offline against the public key built into the binary.
POST
/api/v1/license/activate
Session or token
Install a licence by its ID, the lic_… line in the licence email: the server fetches it from the licence service ([license].renew_url) and verifies its signature before writing it, then applies it at once. Body {"license_id": "lic_…"}. 404 for an unknown ID, 409 when this server is set not to contact the service, 502 when the service cannot be reached.
Read one crash report, including its panic message and backtrace.
GET
/api/v1/diagnostics
Session or token
Download a diagnostics bundle describing the installation. Attach this to a support request.
GET
/api/v1/logs
Session or token
Recent log events from the in-memory ring buffer.
GET
/health
None
Liveness and a summary: version, commit, uptime, live stream count, and error and warning counts. Unauthenticated, so it can back a load balancer or container healthcheck.
A segment of an ad from an ad server, in one rendition. Listed in viewers’ own playlists during a break; the same file for every viewer who gets that ad, so a CDN may cache it.
GET
/api/v1/apps/{app}/stream-settings
Session or token
Every stream in an application that has settings of its own: an adaptive bitrate ladder, the overlays it carries, or both. Streams that follow their application entirely are not listed.
PUT
/api/v1/apps/{app}/stream-settings/{name}
Session or token
Give one stream its own adaptive bitrate ladder, or the set of overlays it carries. Send only the field you mean to change: an omitted field is left as it is, while an explicit null for abr hands the stream back to its application’s ladder. Both take effect the next time the stream goes live. Administrators only, because both spend server CPU.
GET
/api/v1/system
Session or token
How the machine is doing: CPU (overall and Jadarit’s own share), memory, free space on the data disk, network in and out, load, temperature and clock speed where the hardware reports them, with the last three minutes of samples. Updated every 2 seconds.