OptiView Live REST API
OptiView Live provides a REST API to manage channels, receive events, create reports, and set up webhooks.
Alternatively, you can perform the most common actions directly from the OptiView Live dashboard. See our getting started guide for more information.
To get started with the API, see the Authentication guide.
The full API specification is also available as a Swagger document.
Channels
Get all channels
Get all channels
Create a new channel
Create a new channel
Get a channel by ID
Get a channel by ID
Update a channel by ID
Update a channel by ID
Delete a channel by ID
Delete a channel by ID
Get the DRM content protection configurations of a channel
Get the DRM content protection configurations of a channel
Start a channel (will start all connected engines and rtsp-pull ingests)
Starts all connected engines and all connected rtsp-pull ingests of the channel.
Stop a channel (will stop all connected engines and rtsp-pull ingests)
Stops all connected engines and all connected rtsp-pull ingests of the channel. Running engines are stopped gracefully (playlists are closed so that viewers see the stream end, then the engine is torn down; `stopping` for typically 10–20 seconds). To skip the graceful shutdown use `POST /channels/{id}/force-stop`; engines that are already `stopping` are force stopped by this endpoint as well, so calling it twice also force stops the channel. Engines in `error` are always force stopped.
Force stop a channel (will force stop all connected engines and rtsp-pull ingests)
Stops all connected engines and all connected rtsp-pull ingests of the channel immediately, skipping the graceful shutdown: the engines are torn down right away without closing their playlists first, so viewers may see playback fail instead of the stream ending cleanly. Works from any non-stopped state, including while engines are `stopping` after a regular stop. Engines report `stopping` until the teardown has completed (usually a few seconds), then `stopped`. Prefer `POST /channels/{id}/stop` unless the engines have to be gone immediately.
Get ingests of a channel
Ingests are ordered alphabetically by name.
Create an ingest for a channel
Create an ingest for a channel
Get engines of a channel
Engines are ordered alphabetically by name.
Create an engine for a channel
Create an engine for a channel
Get distributions of a channel
Distributions are ordered alphabetically by name.
Create a distribution for a channel
Create a distribution for a channel
Send instream metadata for a channel
Send instream metadata for a channel
Get engine runs of a channel
Get engine runs of a channel
Get transcoding minutes analytics for a channel
Get transcoding minutes analytics for a channel
Get viewing minutes analytics for a channel
Get viewing minutes analytics for a channel
Get bytes transferred analytics for a channel
Get bytes transferred analytics for a channel
Get translated minutes analytics for a channel
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Get captioned minutes analytics for a channel
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Get viewing minutes grouped by browser for a channel
Get viewing minutes grouped by browser for a channel
Get viewing minutes grouped by country for a channel
Get viewing minutes grouped by country for a channel
Get bytes transferred grouped by browser for a channel
Get bytes transferred grouped by browser for a channel
Get bytes transferred grouped by country for a channel
Get bytes transferred grouped by country for a channel
Get country insights for a channel
Data is only available for the last 30 days.
Get browser and OS insights for a channel
Data is only available for the last 30 days.
Get viewer count insights for a channel
Data is only available for the last 30 days.
Create a custom endpoint on a channel
Create a custom endpoint on a channel
List all custom endpoints of a channel
List all custom endpoints of a channel
Ingests
Get ingests of a channel
Ingests are ordered alphabetically by name.
Create an ingest for a channel
Create an ingest for a channel
Get an ingest by ID
Get an ingest by ID
Update an ingest by ID
Update an ingest by ID
Delete an ingest by ID
Delete an ingest by ID
Get engines of an ingest
Engines are ordered alphabetically by name.
Create an engine for an ingest
Create an engine for an ingest
Start an ingest
Currently only available for rtsp-pull ingests. Starts ingesting from the source; the ingest status becomes `active` and a new ingest run is recorded. Returns 400 `not_supported` for other ingest types and 409 `already_active` when the ingest is already active.
Stop an ingest
Currently only available for rtsp-pull ingests. Stops ingesting; the ingest status becomes `stopped` and the open ingest run is ended. Returns 400 `not_supported` for other ingest types and 409 `already_stopped` when the ingest is already stopped.
Get runs of an ingest
Currently only available for rtsp-pull ingests: a run is recorded every time the ingest is started. Runs are ordered by start time (most recent first).
Get the last run of an ingest
Currently only available for rtsp-pull ingests: a run is recorded every time the ingest is started.
Get translated minutes analytics for an ingest
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Get captioned minutes analytics for an ingest
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Engines
Get engines of a channel
Engines are ordered alphabetically by name.
Create an engine for a channel
Create an engine for a channel
Get an engine by ID
Get an engine by ID
Update an engine by ID
Only `name` and `priority` can be updated while the engine is not stopped; updates to any other field are rejected with a 409 `engine_playing` error.
Delete an engine by ID
Delete an engine by ID
Start an engine
Start an engine
Stop an engine
Stops the engine gracefully: its playlists are closed so that viewers see the stream end, after which the engine is torn down. The engine reports `stopping` until the teardown has completed (typically 10–20 seconds), then `stopped`. To skip the graceful shutdown use `POST /engines/{id}/force-stop`; calling this endpoint again while the engine is `stopping` also force stops it. An engine in `error` is always force stopped. The engine can only be started again once it is `stopped`.
Force stop an engine
Stops the engine immediately, skipping the graceful shutdown: the engine is torn down right away without closing its playlists first, so viewers may see playback fail instead of the stream ending cleanly. Works from any non-stopped state, including while the engine is `stopping` after a regular stop. The engine reports `stopping` until the teardown has completed (usually a few seconds), then `stopped`, and can only be started again once it is `stopped`. Prefer `POST /engines/{id}/stop` unless the engine has to be gone immediately. Returns 409 `already_stopped` for a stopped engine.
Get the last run of an engine
Get the last run of an engine
Get runs of an engine
Get runs of an engine
Distributions
Get distributions of a channel
Distributions are ordered alphabetically by name.
Create a distribution for a channel
Create a distribution for a channel
Get a distribution by ID
Get a distribution by ID
Update a distribution by ID
Update a distribution by ID
Delete a distribution by ID
Delete a distribution by ID
Get security keys of a distribution
Get security keys of a distribution
Add a security key to a distribution
Add a security key to a distribution
Delete all security keys of a distribution
Delete all security keys of a distribution
Get a specific security key
Get a specific security key
Delete a specific security key
Delete a specific security key
Get viewing minutes analytics for a distribution
Get viewing minutes analytics for a distribution
Get bytes transferred analytics for a distribution
Get bytes transferred analytics for a distribution
Get viewing minutes grouped by browser for a distribution
Get viewing minutes grouped by browser for a distribution
Get viewing minutes grouped by country for a distribution
Get viewing minutes grouped by country for a distribution
Get bytes transferred grouped by browser for a distribution
Get bytes transferred grouped by browser for a distribution
Get bytes transferred grouped by country for a distribution
Get bytes transferred grouped by country for a distribution
Get country insights for a distribution
Data is only available for the last 30 days.
Get browser and OS insights for a distribution
Data is only available for the last 30 days.
Get viewer count insights for a distribution
Data is only available for the last 30 days.
Regions
Get all regions available for your organization
Get all regions available for your organization
Get a region by ID
Get a region by ID
Get the SDI devices of an on-prem region
Get the SDI devices of an on-prem region
Get the NDI sources of an on-prem region
Get the NDI sources of an on-prem region
ABR Ladders
Get all ABR ladders for your organization
Get all ABR ladders for your organization
Get the number of engines using each ABR ladder of your organization
Get the number of engines using each ABR ladder of your organization
Get the engines using an ABR ladder
Get the engines using an ABR ladder
Webhooks
Get all webhooks
Get all webhooks
Create a new webhook
Create a new webhook
Get a webhook by ID
Get a webhook by ID
Update a webhook by ID
Update a webhook by ID
Delete a webhook by ID
Delete a webhook by ID
Get a webhook secret
Get a webhook secret
Get webhook logs
Get webhook logs
Schedulers
List all schedulers
List all schedulers
Create a scheduler
Create a scheduler
Get a scheduler by ID
Get a scheduler by ID
Update a scheduler by ID
Update a scheduler by ID
Delete a scheduler by ID
Delete a scheduler by ID
Custom Endpoints
Create a custom endpoint on a channel
Create a custom endpoint on a channel
List all custom endpoints of a channel
List all custom endpoints of a channel
Get a custom endpoint by ID
Get a custom endpoint by ID
Update a custom endpoint
Update a custom endpoint
Delete a custom endpoint
Delete a custom endpoint
Monitoring
Get monitoring data for a channel
Returns monitoring data for a specific channel including status of ingests, engines, and distributions.
Get detailed monitoring data for an ingest
Returns monitoring data for a specific ingest including time-series metrics like packet loss, RTT, and bitrate.
Get detailed monitoring data for an engine
Returns monitoring data for a specific engine including rendition metrics.
Get detailed ingest monitoring data for a channel
Returns channel metadata along with detailed monitoring data for all ingests belonging to the channel.
Get detailed engine monitoring data for a channel
Returns channel metadata along with detailed monitoring data for all engines belonging to the channel.
Enhancements
Get all speech dictionaries
A speech dictionary is a flat list of terms (names, proper nouns, acronyms, specialized terminology) that helps the speech recognition correctly caption the source audio of a speech enhancement. It does not translate terms: the source audio is first captioned in the source language (aided by the dictionary) and then translated into the target languages. Connect a dictionary to an ingest via the `dictionary` field of the speech enhancement entry; the dictionary `language` must match that enhancement's `sourceLanguage`.
Create a new speech dictionary
A speech dictionary is a flat list of terms (names, proper nouns, acronyms, specialized terminology) that helps the speech recognition correctly caption the source audio of a speech enhancement. It does not translate terms: the source audio is first captioned in the source language (aided by the dictionary) and then translated into the target languages. Connect a dictionary to an ingest via the `dictionary` field of the speech enhancement entry; the dictionary `language` must match that enhancement's `sourceLanguage`. Terms are cleaned up automatically (whitespace normalized, empty and duplicate entries dropped); terms that cannot be fixed automatically (forbidden characters ';' or '/', more than 6 words) are rejected with `invalid_value`.
Get a speech dictionary by ID
Get a speech dictionary by ID
Update a speech dictionary by ID
The `terms` list is replaced as a whole. Terms are cleaned up automatically (whitespace normalized, empty and duplicate entries dropped); terms that cannot be fixed automatically (forbidden characters ';' or '/', more than 6 words) are rejected with `invalid_value`.
Delete a speech dictionary by ID
A dictionary cannot be deleted while it is connected to an ingest that has an engine which is not stopped (409 `speech_dictionary_in_use`). Once deleted, the dictionary is automatically disconnected from all ingests that referenced it.
Get all postprocessing dictionaries
A postprocessing dictionary is a list of find/replace rules applied to the source-language transcript of a speech enhancement after speech recognition and before translation: it reliably corrects spellings, standardizes formatting, removes filler words or censors terms, and the corrected text carries over into every translated text track. Unlike a speech dictionary (a hint to the speech recognition) the rules are always applied. Connect a postprocessing dictionary to an ingest via the `postprocessingDictionary` field of the speech enhancement entry; the dictionary `language` must match that enhancement's `sourceLanguage`.
Create a new postprocessing dictionary
A postprocessing dictionary is a list of find/replace rules applied to the source-language transcript of a speech enhancement after speech recognition and before translation: it reliably corrects spellings, standardizes formatting, removes filler words or censors terms, and the corrected text carries over into every translated text track. Unlike a speech dictionary (a hint to the speech recognition) the rules are always applied. Connect a postprocessing dictionary to an ingest via the `postprocessingDictionary` field of the speech enhancement entry; the dictionary `language` must match that enhancement's `sourceLanguage`. Each entry has the format 'replacement|pattern,pattern' (an empty replacement removes the matched word). Entries are cleaned up automatically (whitespace normalized, empty and duplicate entries dropped); entries without a pattern, with spaces in a pattern, or rejected by the captioning provider (e.g. an invalid regular expression) fail with `invalid_value`.
Get a postprocessing dictionary by ID
Get a postprocessing dictionary by ID
Update a postprocessing dictionary by ID
The `terms` list is replaced as a whole. Each entry has the format 'replacement|pattern,pattern' (an empty replacement removes the matched word). Entries are cleaned up automatically (whitespace normalized, empty and duplicate entries dropped); entries without a pattern, with spaces in a pattern, or rejected by the captioning provider (e.g. an invalid regular expression) fail with `invalid_value`.
Delete a postprocessing dictionary by ID
A postprocessing dictionary cannot be deleted while it is connected to an ingest that has an engine which is not stopped (409 `speech_postprocessing_dictionary_in_use`). Once deleted, the dictionary is automatically disconnected from all ingests that referenced it.
Get supported source languages
Languages the speech recognition can transcribe, i.e. the valid values for the `sourceLanguage` field of a speech enhancement entry (the language spoken in the stream).
Get supported target languages
Languages the source captions can be translated into, i.e. the valid values for the `targetTextTracks` field of a speech enhancement entry.
Get translated minutes analytics
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Get captioned minutes analytics
Only available when the Captions & Translations feature is enabled on organization level. The 'start' and 'end' dates are always interpreted as UTC; timezone and UTC offset options are not supported.
Maintenance windows
Get the maintenance windows of the organization
Maintenance windows are recurring time slots (in UTC) during which the organization allows THEO to perform maintenance on its long-running engines. Maintenance means moving an engine to fresh infrastructure: the engine is restarted with the same configuration, the stream is briefly interrupted (viewers see a clean end of stream) and the contributing encoder reconnects. The same applies to push and pull ingests on the shared ingest infrastructure: when the infrastructure carrying such an ingest is retired, the ingest is moved inside a window (the encoder reconnects to the same ingest URL, or the source is pulled again). Maintenance is only performed on engines and ingests that need it, one per channel at a time, and always inside a window. A window recurs every week, or only in selected weeks of the month (e.g. the second tuesday of the month); together the windows must offer a maintenance opportunity at least once a month. There is no default: when no windows are configured, THEO has no maintenance opportunity for the organization and maintenance that is needed stays pending. Engines and ingests report their pending or ongoing maintenance in their `maintenance` field, and the `engine.maintenance.*` / `ingest.maintenance.*` webhook events announce every step. Configuring windows does not schedule any restarts by itself.
Set the maintenance windows of the organization
Maintenance windows are recurring time slots (in UTC) during which the organization allows THEO to perform maintenance on its long-running engines. Maintenance means moving an engine to fresh infrastructure: the engine is restarted with the same configuration, the stream is briefly interrupted (viewers see a clean end of stream) and the contributing encoder reconnects. The same applies to push and pull ingests on the shared ingest infrastructure: when the infrastructure carrying such an ingest is retired, the ingest is moved inside a window (the encoder reconnects to the same ingest URL, or the source is pulled again). Maintenance is only performed on engines and ingests that need it, one per channel at a time, and always inside a window. A window recurs every week, or only in selected weeks of the month (e.g. the second tuesday of the month); together the windows must offer a maintenance opportunity at least once a month. There is no default: when no windows are configured, THEO has no maintenance opportunity for the organization and maintenance that is needed stays pending. Engines and ingests report their pending or ongoing maintenance in their `maintenance` field, and the `engine.maintenance.*` / `ingest.maintenance.*` webhook events announce every step. Configuring windows does not schedule any restarts by itself. The list of windows is replaced as a whole; set an empty list to remove all windows. Windows may not overlap.