From cb315b3903aa1f1c24720bffab0faec01af05523 Mon Sep 17 00:00:00 2001 From: zeljko-at-bunny Date: Fri, 31 Jul 2026 18:20:02 +0200 Subject: [PATCH] NOJIRA doc: update stream openapi --- openapi/stream-api.json | 4889 +++++++++++++-------------------------- 1 file changed, 1589 insertions(+), 3300 deletions(-) diff --git a/openapi/stream-api.json b/openapi/stream-api.json index 88a20f06..90f9bf54 100644 --- a/openapi/stream-api.json +++ b/openapi/stream-api.json @@ -9,7 +9,7 @@ "url": "https://docs.bunny.net", "email": "support@bunny.net" }, - "version": "1.0.0" + "version": "1.5.13" }, "servers": [ { @@ -358,14 +358,13 @@ ] } }, - "/library/{libraryId}/live/{streamId}": { + "/library/{libraryId}/videos/{videoId}": { "get": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Get live stream by ID", - "description": "Gets details of a live stream contained in library by its ID.", - "operationId": "LiveStream_GetByStreamId", + "summary": "Get Video", + "operationId": "Video_GetVideo", "parameters": [ { "name": "libraryId", @@ -378,7 +377,7 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { @@ -389,17 +388,17 @@ ], "responses": { "200": { - "description": "The details of the requested live stream", + "description": "The details of the requested video", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/VideoModel" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -414,13 +413,12 @@ } ] }, - "put": { + "post": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Update live stream", - "description": "Updates the live stream object with the specified parameters and returns it", - "operationId": "LiveStream_UpdateLiveStream", + "summary": "Update Video", + "operationId": "Video_UpdateVideo", "parameters": [ { "name": "libraryId", @@ -433,7 +431,7 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { @@ -447,7 +445,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateLiveStreamModel" + "$ref": "#/components/schemas/UpdateVideoModel" } } }, @@ -456,27 +454,17 @@ }, "responses": { "200": { - "description": "The live stream was successfully updated", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LiveStreamModel" - } - } - } - }, - "400": { - "description": "Request was invalid", + "description": "The thumbnail was successfully set", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -496,11 +484,10 @@ }, "delete": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Delete live stream", - "description": "Deletes the live stream object and all resources associated with it. This operation cannot be undone.", - "operationId": "LiveStream_DeleteStream", + "summary": "Delete Video", + "operationId": "Video_DeleteVideo", "parameters": [ { "name": "libraryId", @@ -513,7 +500,7 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { @@ -524,27 +511,17 @@ ], "responses": { "200": { - "description": "The details of the requested live stream", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LiveStreamModel" - } - } - } - }, - "400": { - "description": "Request was invalid", + "description": "The video was successfully deleted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -561,15 +538,13 @@ "AccessKey": [] } ] - } - }, - "/library/{libraryId}/live/{streamId}/play": { - "get": { + }, + "put": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Get live stream play data", - "operationId": "LiveStream_GetStreamPlayData", + "summary": "Upload Video", + "operationId": "Video_UploadVideo", "parameters": [ { "name": "libraryId", @@ -582,7 +557,7 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { @@ -591,39 +566,136 @@ "x-position": 2 }, { - "name": "token", + "name": "jitEnabled", + "in": "query", + "description": "Marks whether JIT encoding should be enabled for this video (works only when Premium Encoding is enabled), overrides library settings", + "schema": { + "type": "boolean" + }, + "x-position": 3 + }, + { + "name": "enabledResolutions", + "in": "query", + "description": "Comma separated list of resolutions enabled for encoding, available options: 240p, 360p, 480p, 720p, 1080p, 1440p, 2160p", + "schema": { + "type": "string", + "default": "", + "nullable": true + }, + "x-position": 4 + }, + { + "name": "enabledOutputCodecs", "in": "query", + "description": "List of codecs that will be used to encode the file (overrides library settings). Available values: x264, vp9", "schema": { "type": "string", "default": "", "nullable": true }, - "x-position": 3 + "x-position": 6 }, { - "name": "expires", + "name": "transcribeEnabled", + "in": "query", + "description": "Setting this to true will enable transcription on this video. Enabling this will incur transcription charges", + "schema": { + "type": "boolean", + "nullable": true + }, + "x-position": 7 + }, + { + "name": "transcribeLanguages", "in": "query", + "description": "Comma separated list of languages that will be used as target languages, use ISO 639-1 language codes.", "schema": { - "type": "integer", - "format": "int64", - "default": 0 + "type": "string", + "nullable": true }, - "x-position": 4 + "x-position": 8 + }, + { + "name": "sourceLanguage", + "in": "query", + "description": "Language spoken in the video, use ISO 639-1 language codes.", + "schema": { + "type": "string", + "nullable": true + }, + "x-position": 9 + }, + { + "name": "generateTitle", + "in": "query", + "description": "Whether video title should be generated from transcription.", + "schema": { + "type": "boolean", + "nullable": true + }, + "x-position": 10 + }, + { + "name": "generateDescription", + "in": "query", + "description": "Whether video description should be generated from transcription.", + "schema": { + "type": "boolean", + "nullable": true + }, + "x-position": 11 + }, + { + "name": "generateChapters", + "in": "query", + "description": "Whether video chapters should be generated from transcription.", + "schema": { + "type": "boolean", + "nullable": true + }, + "x-position": 12 + }, + { + "name": "generateMoments", + "in": "query", + "description": "Whether video moments should be generated from transcription.", + "schema": { + "type": "boolean", + "nullable": true + }, + "x-position": 13 } ], + "requestBody": { + "description": "Video file to upload", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary", + "nullable": false + } + } + }, + "required": true + }, "responses": { "200": { - "description": "The play data of the requested live stream", + "description": "The video was successfully uploaded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamPlayDataModel" + "$ref": "#/components/schemas/StatusModel" } } } }, + "400": { + "description": "The requested video was already uploaded" + }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -634,68 +706,62 @@ "500": { "description": "Internal Server Error" } - } + }, + "security": [ + { + "AccessKey": [] + } + ] } }, - "/library/{libraryId}/live": { - "post": { + "/library/{libraryId}/videos/{videoId}/heatmap": { + "get": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Create new live stream", - "description": "Creates a new live stream object with the specified parameters and returns it", - "operationId": "LiveStream_Create", + "summary": "Get Video Heatmap", + "description": "Returns the attention heatmap for a specific video, showing relative viewer interest across the timeline. May be unavailable if the feature is disabled or there isn't enough viewing data.", + "operationId": "Video_GetVideoHeatmap", "parameters": [ { "name": "libraryId", "in": "path", "required": true, + "description": "The ID of the video library.", "schema": { "type": "integer", "format": "int64" }, "x-position": 1 + }, + { + "name": "videoId", + "in": "path", + "required": true, + "description": "The GUID of the video.", + "schema": { + "type": "string" + }, + "x-position": 2 } ], - "requestBody": { - "x-name": "model", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateLiveStreamModel" - } - } - }, - "required": true, - "x-position": 2 - }, "responses": { "200": { - "description": "The live stream was successfully created and returned as the response.", + "description": "The heatmap of the requested video.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/VideoHeatmapModel" } } } }, + "404": { + "description": "Video not found" + }, "401": { "description": "The request authentication failed" }, - "403": { - "description": "The request authorization failed" - }, - "400": { - "description": "Request was invalid", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" - } - } - } - }, "500": { "description": "Internal Server Error" } @@ -705,14 +771,15 @@ "AccessKey": [] } ] - }, + } + }, + "/library/{libraryId}/videos/{videoId}/play": { "get": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "List streams", - "description": "Returns a list of streams associated with this library and collection, if passed", - "operationId": "LiveStream_List", + "summary": "Get Video play data", + "operationId": "Video_GetVideoPlayData", "parameters": [ { "name": "libraryId", @@ -725,79 +792,48 @@ "x-position": 1 }, { - "name": "page", - "in": "query", + "name": "videoId", + "in": "path", + "required": true, "schema": { - "type": "integer", - "format": "int32", - "default": 1 + "type": "string" }, "x-position": 2 }, { - "name": "itemsPerPage", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "default": 100 - }, - "x-position": 3 - }, - { - "name": "search", + "name": "token", "in": "query", "schema": { "type": "string", "default": "", "nullable": true }, - "x-position": 4 + "x-position": 3 }, { - "name": "orderBy", + "name": "expires", "in": "query", - "description": "The field to order by. Possible values: date, title, status, started, ended, planned", "schema": { - "type": "string", - "default": "date", - "nullable": true - }, - "x-position": 5 - }, - { - "name": "collectionId", - "in": "query", - "schema": { - "type": "string", - "nullable": true + "type": "integer", + "format": "int64", + "default": 0 }, - "x-position": 6 + "x-position": 4 } ], "responses": { "200": { - "description": "The list of live streams associated with this library", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaginationListOfLiveStreamModel" - } - } - } - }, - "400": { - "description": "Request was invalid", + "description": "The play data of the requested video", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/VideoPlayDataModel" } } } }, "404": { - "description": "The requested library was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -805,22 +841,16 @@ "500": { "description": "Internal Server Error" } - }, - "security": [ - { - "AccessKey": [] - } - ] + } } }, - "/library/{libraryId}/live/{streamId}/start": { - "put": { + "/library/{libraryId}/videos/{videoId}/play/heatmap": { + "get": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Start live stream", - "description": "Marks the stream as started, allowing viewers to view the stream.", - "operationId": "LiveStream_StartStream", + "summary": "Get Video heatmap data", + "operationId": "Video_GetVideoHeatmapData", "parameters": [ { "name": "libraryId", @@ -833,45 +863,137 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { "type": "string" }, "x-position": 2 + }, + { + "name": "token", + "in": "query", + "schema": { + "type": "string", + "default": "", + "nullable": true + }, + "x-position": 3 + }, + { + "name": "expires", + "in": "query", + "schema": { + "type": "integer", + "format": "int64", + "default": 0 + }, + "x-position": 4 } ], "responses": { "200": { - "description": "The details of the started live stream", + "description": "The heatmap data of the requested video", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/VideoPlayDataModel" } } } }, - "400": { - "description": "Request was invalid", + "404": { + "description": "The requested video was not found" + }, + "401": { + "description": "The request authentication failed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/library/{libraryId}/statistics": { + "get": { + "tags": [ + "Manage Videos" + ], + "summary": "Get Video Statistics", + "description": "Returns time-series views and watch time, plus country-level aggregates, at the library level or for a specific video. Control the time window with dateFrom/dateTo and the granularity with hourly. Basic safeguards prevent spam and bot inflation by de-duplicating sessions and ignoring obviously invalid events.", + "operationId": "Video_GetVideoStatistics", + "parameters": [ + { + "name": "libraryId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + }, + "x-position": 1 + }, + { + "name": "dateFrom", + "in": "query", + "description": "Optional start of the time range (UTC). If omitted or invalid, the last 30 days are returned.", + "schema": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "x-position": 2 + }, + { + "name": "dateTo", + "in": "query", + "description": "Optional end of the time range (UTC). If omitted with a valid start, defaults to now; otherwise the last 30 days are returned.", + "schema": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "x-position": 3 + }, + { + "name": "hourly", + "in": "query", + "description": "Optional. If true, returns hourly data; otherwise daily (UTC). Default is daily.", + "schema": { + "type": "boolean", + "default": false + }, + "x-position": 4 + }, + { + "name": "videoGuid", + "in": "query", + "description": "Optional video GUID to filter results. When omitted, returns library-level aggregates.", + "schema": { + "type": "string", + "nullable": true + }, + "x-position": 5 + } + ], + "responses": { + "200": { + "description": "Statistics including time-series views and watch time, country breakdowns, and engagement score when available.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" + "$ref": "#/components/schemas/VideoStatisticsModel" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "Video not found (when filtering by videoGuid)" }, "401": { "description": "The request authentication failed" }, - "403": { - "description": "The request authorization failed" - }, "500": { "description": "Internal Server Error" } @@ -883,14 +1005,13 @@ ] } }, - "/library/{libraryId}/live/{streamId}/stop": { - "put": { + "/library/{libraryId}/videos/{videoId}/reencode": { + "post": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Stop live stream", - "description": "Stops the stream, if publishing is still ongoing, it will be stopped by the ingest server. If 'DvrEnabled' was set to true, the stream will be converted to a regular video as a VOD.This operation cannot be undone.", - "operationId": "LiveStream_StopStream", + "summary": "Reencode Video", + "operationId": "Video_ReencodeVideo", "parameters": [ { "name": "libraryId", @@ -903,7 +1024,7 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { @@ -914,27 +1035,27 @@ ], "responses": { "200": { - "description": "The details of the requested live stream", + "description": "The details of the requested video", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/VideoModel" } } } }, "400": { - "description": "Request was invalid", + "description": "Original file is missing", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -953,14 +1074,13 @@ ] } }, - "/library/{libraryId}/live/{streamId}/regenerate-key": { + "/library/{libraryId}/videos/{videoId}/outputs/{outputCodecId}": { "put": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Regenerate stream key", - "description": "Regenerates the stream key for the live stream. This operation is not allowed for streams that ended.", - "operationId": "LiveStream_RegenerateStreamKey", + "summary": "Add output codec to video", + "operationId": "Video_ReencodeUsingCodec", "parameters": [ { "name": "libraryId", @@ -973,38 +1093,48 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "guid" }, "x-position": 2 + }, + { + "name": "outputCodecId", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/EncoderOutputCodec" + }, + "x-position": 3 } ], "responses": { "200": { - "description": "The details of the live stream with regenerated stream key", + "description": "The details of the requested video", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/VideoModel" } } } }, "400": { - "description": "Request was invalid", + "description": "Invalid request or validation failed, check response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModelOfListOfString" + "type": "string" } } } }, "404": { - "description": "The requested live stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -1023,12 +1153,13 @@ ] } }, - "/library/{libraryId}/live/{streamId}/bitrate-history": { - "get": { + "/library/{libraryId}/videos/{videoId}/repackage": { + "post": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "operationId": "LiveStream_GetBitrateHistory", + "summary": "Repackage Video", + "operationId": "Video_Repackage", "parameters": [ { "name": "libraryId", @@ -1041,57 +1172,66 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { - "type": "string", - "format": "guid" + "type": "string" }, "x-position": 2 }, { - "name": "startTime", + "name": "keepOriginalFiles", "in": "query", + "description": "Marks whether previous file versions should be kept in storage, allows for faster repackage later on. Default is true.", "schema": { - "type": "string", - "format": "date-time", - "nullable": true + "type": "boolean", + "default": true }, "x-position": 3 - }, - { - "name": "endTime", - "in": "query", - "schema": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "x-position": 4 } ], "responses": { "200": { - "description": "", + "description": "The details of the requested video", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/VideoModel" } } } + }, + "400": { + "description": "Enterprise DRM is disabled for the library, repackaging not available" + }, + "404": { + "description": "The requested video was not found" + }, + "401": { + "description": "The request authentication failed" + }, + "403": { + "description": "The request authorization failed" + }, + "500": { + "description": "Internal Server Error" } - } + }, + "security": [ + { + "AccessKey": [] + } + ] } }, - "/library/{libraryId}/live/{streamId}/current-bitrate": { + "/library/{libraryId}/videos": { "get": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "operationId": "LiveStream_GetLatestBitrate", + "summary": "List Videos", + "operationId": "Video_List", "parameters": [ { "name": "libraryId", @@ -1104,38 +1244,155 @@ "x-position": 1 }, { - "name": "streamId", - "in": "path", - "required": true, + "name": "page", + "in": "query", "schema": { - "type": "string", - "format": "guid" + "type": "integer", + "format": "int32", + "default": 1 }, "x-position": 2 + }, + { + "name": "itemsPerPage", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + }, + "x-position": 3 + }, + { + "name": "search", + "in": "query", + "schema": { + "type": "string", + "default": "", + "nullable": true + }, + "x-position": 4 + }, + { + "name": "collection", + "in": "query", + "schema": { + "type": "string", + "default": "", + "nullable": true + }, + "x-position": 5 + }, + { + "name": "orderBy", + "in": "query", + "schema": { + "type": "string", + "default": "date", + "nullable": true + }, + "x-position": 6 } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - } + ], + "responses": { + "200": { + "description": "The list of videos for the current parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginationListOfVideoModel" + } + } + } + }, + "401": { + "description": "The request authentication failed" + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "AccessKey": [] + } + ] + }, + "post": { + "tags": [ + "Manage Videos" + ], + "summary": "Create Video", + "operationId": "Video_CreateVideo", + "parameters": [ + { + "name": "libraryId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + }, + "x-position": 1 + } + ], + "requestBody": { + "x-name": "model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateVideoModel" + } + } + }, + "required": true, + "x-position": 2 + }, + "responses": { + "200": { + "description": "The video was successfully created and returned as the response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VideoModel" + } + } + } + }, + "401": { + "description": "The request authentication failed" + }, + "403": { + "description": "The request authorization failed" + }, + "400": { + "description": "Request was invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "500": { + "description": "Internal Server Error" + } + }, + "security": [ + { + "AccessKey": [] + } + ] } }, - "/library/{libraryId}/live/{streamId}/thumbnail": { + "/library/{libraryId}/videos/{videoId}/thumbnail": { "post": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], "summary": "Set Thumbnail", - "operationId": "LiveStream_SetThumbnail", + "operationId": "Video_SetThumbnail", "parameters": [ { "name": "libraryId", @@ -1148,12 +1405,11 @@ "x-position": 1 }, { - "name": "streamId", + "name": "videoId", "in": "path", "required": true, "schema": { - "type": "string", - "format": "guid" + "type": "string" }, "x-position": 2 }, @@ -1191,17 +1447,17 @@ } }, "400": { - "description": "The request was invalid", + "description": "The request or URL was invalid", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "The requested stream was not found" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" @@ -1214,7 +1470,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/StatusModel" } } } @@ -1230,14 +1486,13 @@ ] } }, - "/library/{libraryId}/live/{streamId}/thumbnails": { - "get": { + "/library/{libraryId}/videos/fetch": { + "post": { "tags": [ - "Manage Live Streams" + "Manage Videos" ], - "summary": "Get live stream thumbnails", - "description": "Returns recent generated thumbnail object paths for the specified live stream. You can limit the number of results and optionally constrain by a time range using 'from' and 'to' in UTC.", - "operationId": "LiveStream_GetThumbnails", + "summary": "Fetch Video", + "operationId": "Video_FetchNewVideo", "parameters": [ { "name": "libraryId", @@ -1250,79 +1505,88 @@ "x-position": 1 }, { - "name": "streamId", - "in": "path", - "required": true, + "name": "collectionId", + "in": "query", "schema": { "type": "string", - "format": "guid" + "nullable": true }, - "x-position": 2 + "x-position": 3 }, { - "name": "limit", + "name": "thumbnailTime", "in": "query", - "description": "The maximum number of thumbnails to return. Default: 5", + "description": "(Optional) Video time in ms to extract the main video thumbnail.", "schema": { "type": "integer", "format": "int32", - "default": 5 - }, - "x-position": 3 - }, - { - "name": "from", - "in": "query", - "description": "Filter thumbnails created at or after this UTC timestamp", - "schema": { - "type": "string", - "format": "date-time", "nullable": true }, "x-position": 4 - }, - { - "name": "to", - "in": "query", - "description": "Filter thumbnails created at or before this UTC timestamp", - "schema": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "x-position": 5 } ], + "requestBody": { + "x-name": "request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FetchVideoRequest" + } + } + }, + "required": true, + "x-position": 2 + }, "responses": { "200": { - "description": "A list of thumbnail object paths (most recent first)", + "description": "The video was successfully fetched", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ThumbnailListResponseModel" - } + "$ref": "#/components/schemas/StatusModel" } } } }, + "404": { + "description": "The requested video was not found" + }, "400": { - "description": "The request was invalid", + "description": "URL validation failed or request was invalid", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/StatusModel" } } } }, - "404": { - "description": "The requested live stream was not found" + "422": { + "description": "Unable to fetch video from origin", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "429": { + "description": "Too many fetch jobs queued. Please try again later.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "401": { "description": "The request authentication failed" }, + "403": { + "description": "The request authorization failed" + }, "500": { "description": "Internal Server Error" } @@ -1334,13 +1598,13 @@ ] } }, - "/library/{libraryId}/videos/{videoId}": { - "get": { + "/library/{libraryId}/videos/{videoId}/captions/{srclang}": { + "post": { "tags": [ "Manage Videos" ], - "summary": "Get Video", - "operationId": "Video_GetVideo", + "summary": "Add Caption", + "operationId": "Video_AddCaption", "parameters": [ { "name": "libraryId", @@ -1360,15 +1624,36 @@ "type": "string" }, "x-position": 2 + }, + { + "name": "srclang", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "x-position": 3 } ], + "requestBody": { + "x-name": "captionModel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CaptionModelAdd" + } + } + }, + "required": true, + "x-position": 4 + }, "responses": { "200": { - "description": "The details of the requested video", + "description": "The caption was successfully uploaded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VideoModel" + "$ref": "#/components/schemas/StatusModelOfCaptionValidationModel" } } } @@ -1376,72 +1661,16 @@ "404": { "description": "The requested video was not found" }, - "401": { - "description": "The request authentication failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - }, - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Update Video", - "operationId": "Video_UpdateVideo", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - } - ], - "requestBody": { - "x-name": "model", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateVideoModel" - } - } - }, - "required": true, - "x-position": 3 - }, - "responses": { - "200": { - "description": "The thumbnail was successfully set", + "400": { + "description": "Failed uploading the captions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StatusModel" + "$ref": "#/components/schemas/StatusModelOfCaptionValidationModel" } } } }, - "404": { - "description": "The requested video was not found" - }, "401": { "description": "The request authentication failed" }, @@ -1462,8 +1691,8 @@ "tags": [ "Manage Videos" ], - "summary": "Delete Video", - "operationId": "Video_DeleteVideo", + "summary": "Delete Caption", + "operationId": "Video_DeleteCaption", "parameters": [ { "name": "libraryId", @@ -1483,11 +1712,20 @@ "type": "string" }, "x-position": 2 + }, + { + "name": "srclang", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "x-position": 3 } ], "responses": { "200": { - "description": "The video was successfully deleted", + "description": "The caption was successfully deleted", "content": { "application/json": { "schema": { @@ -1499,6 +1737,9 @@ "404": { "description": "The requested video was not found" }, + "400": { + "description": "Failed deleting the captions" + }, "401": { "description": "The request authentication failed" }, @@ -1514,13 +1755,15 @@ "AccessKey": [] } ] - }, - "put": { + } + }, + "/library/{libraryId}/videos/{videoId}/transcribe": { + "post": { "tags": [ "Manage Videos" ], - "summary": "Upload Video", - "operationId": "Video_UploadVideo", + "summary": "Transcribe video", + "operationId": "Video_TranscribeVideo", "parameters": [ { "name": "libraryId", @@ -1542,123 +1785,30 @@ "x-position": 2 }, { - "name": "jitEnabled", - "in": "query", - "description": "Marks whether JIT encoding should be enabled for this video (works only when Premium Encoding is enabled), overrides library settings", - "schema": { - "type": "boolean" - }, - "x-position": 3 - }, - { - "name": "enabledResolutions", - "in": "query", - "description": "Comma separated list of resolutions enabled for encoding, available options: 240p, 360p, 480p, 720p, 1080p, 1440p, 2160p", - "schema": { - "type": "string", - "default": "", - "nullable": true - }, - "x-position": 4 - }, - { - "name": "enabledOutputCodecs", - "in": "query", - "description": "List of codecs that will be used to encode the file (overrides library settings). Available values: x264, vp9", - "schema": { - "type": "string", - "default": "", - "nullable": true - }, - "x-position": 6 - }, - { - "name": "transcribeEnabled", - "in": "query", - "description": "Setting this to true will enable transcription on this video. Enabling this will incur transcription charges", - "schema": { - "type": "boolean", - "nullable": true - }, - "x-position": 7 - }, - { - "name": "transcribeLanguages", - "in": "query", - "description": "Comma separated list of languages that will be used as target languages, use ISO 639-1 language codes.", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 8 - }, - { - "name": "sourceLanguage", - "in": "query", - "description": "Language spoken in the video, use ISO 639-1 language codes.", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 9 - }, - { - "name": "generateTitle", - "in": "query", - "description": "Whether video title should be generated from transcription.", - "schema": { - "type": "boolean", - "nullable": true - }, - "x-position": 10 - }, - { - "name": "generateDescription", - "in": "query", - "description": "Whether video description should be generated from transcription.", - "schema": { - "type": "boolean", - "nullable": true - }, - "x-position": 11 - }, - { - "name": "generateChapters", - "in": "query", - "description": "Whether video chapters should be generated from transcription.", - "schema": { - "type": "boolean", - "nullable": true - }, - "x-position": 12 - }, - { - "name": "generateMoments", + "name": "force", "in": "query", - "description": "Whether video moments should be generated from transcription.", "schema": { "type": "boolean", - "nullable": true + "default": false }, - "x-position": 13 + "x-position": 4 } ], "requestBody": { - "description": "Video file to upload", + "x-name": "transcribeSettings", + "description": "Used to override video library transcription settings, null by default", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary", - "nullable": false + "$ref": "#/components/schemas/TranscribeSettings" } } }, - "required": true + "x-position": 5 }, "responses": { "200": { - "description": "The video was successfully uploaded", + "description": "The transcription was queued", "content": { "application/json": { "schema": { @@ -1667,20 +1817,55 @@ } } }, - "400": { - "description": "The requested video was already uploaded" - }, "404": { - "description": "The requested video was not found" + "description": "The requested video was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "400": { + "description": "Invalid request for transcription queue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "401": { - "description": "The request authentication failed" + "description": "The request authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "403": { - "description": "The request authorization failed" + "description": "The request authorization failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "500": { - "description": "Internal Server Error" + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } } }, "security": [ @@ -1690,20 +1875,18 @@ ] } }, - "/library/{libraryId}/videos/{videoId}/heatmap": { - "get": { + "/library/{libraryId}/videos/{videoId}/smart": { + "post": { "tags": [ "Manage Videos" ], - "summary": "Get Video Heatmap", - "description": "Returns the attention heatmap for a specific video, showing relative viewer interest across the timeline. May be unavailable if the feature is disabled or there isn't enough viewing data.", - "operationId": "Video_GetVideoHeatmap", + "summary": "Trigger Smart actions", + "operationId": "Video_SmartGenerate", "parameters": [ { "name": "libraryId", "in": "path", "required": true, - "description": "The ID of the video library.", "schema": { "type": "integer", "format": "int64" @@ -1714,32 +1897,94 @@ "name": "videoId", "in": "path", "required": true, - "description": "The GUID of the video.", "schema": { "type": "string" }, "x-position": 2 } ], - "responses": { - "200": { - "description": "The heatmap of the requested video.", + "requestBody": { + "x-name": "model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SmartGenerateModel" + } + } + }, + "required": true, + "x-position": 3 + }, + "responses": { + "202": { + "description": "The smart action was queued", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VideoHeatmapModel" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "Video not found" + "description": "The requested video was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "429": { + "description": "Limit exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "400": { + "description": "Invalid request for smart feature", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "401": { - "description": "The request authentication failed" + "description": "The request authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } + }, + "403": { + "description": "The request authorization failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } }, "500": { - "description": "Internal Server Error" + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusModel" + } + } + } } }, "security": [ @@ -1749,13 +1994,13 @@ ] } }, - "/library/{libraryId}/videos/{videoId}/play": { + "/library/{libraryId}/videos/{videoId}/resolutions": { "get": { "tags": [ "Manage Videos" ], - "summary": "Get Video play data", - "operationId": "Video_GetVideoPlayData", + "summary": "Video resolutions info", + "operationId": "Video_GetVideoResolutions", "parameters": [ { "name": "libraryId", @@ -1775,35 +2020,15 @@ "type": "string" }, "x-position": 2 - }, - { - "name": "token", - "in": "query", - "schema": { - "type": "string", - "default": "", - "nullable": true - }, - "x-position": 3 - }, - { - "name": "expires", - "in": "query", - "schema": { - "type": "integer", - "format": "int64", - "default": 0 - }, - "x-position": 4 } ], "responses": { "200": { - "description": "The play data of the requested video", + "description": "The resolutions info.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VideoPlayDataModel" + "$ref": "#/components/schemas/StatusModelOfVideoResolutionsInfoModel" } } } @@ -1817,16 +2042,21 @@ "500": { "description": "Internal Server Error" } - } + }, + "security": [ + { + "AccessKey": [] + } + ] } }, - "/library/{libraryId}/videos/{videoId}/play/heatmap": { + "/library/{libraryId}/videos/{videoId}/storage": { "get": { "tags": [ "Manage Videos" ], - "summary": "Get Video heatmap data", - "operationId": "Video_GetVideoHeatmapData", + "summary": "Get video storage size info", + "operationId": "Video_GetVideoStorageSize", "parameters": [ { "name": "libraryId", @@ -1846,35 +2076,15 @@ "type": "string" }, "x-position": 2 - }, - { - "name": "token", - "in": "query", - "schema": { - "type": "string", - "default": "", - "nullable": true - }, - "x-position": 3 - }, - { - "name": "expires", - "in": "query", - "schema": { - "type": "integer", - "format": "int64", - "default": 0 - }, - "x-position": 4 } ], "responses": { "200": { - "description": "The heatmap data of the requested video", + "description": "The storage size information for the video.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VideoPlayDataModel" + "$ref": "#/components/schemas/StatusModelOfVideoStorageSizeModel" } } } @@ -1883,22 +2093,32 @@ "description": "The requested video was not found" }, "401": { - "description": "The request authentication failed" + "description": "The request authorization failed" + }, + "429": { + "description": "Rate limit exceeded" + }, + "408": { + "description": "Request timeout" }, "500": { "description": "Internal Server Error" } - } + }, + "security": [ + { + "AccessKey": [] + } + ] } }, - "/library/{libraryId}/statistics": { - "get": { + "/library/{libraryId}/videos/{videoId}/resolutions/cleanup": { + "post": { "tags": [ "Manage Videos" ], - "summary": "Get Video Statistics", - "description": "Returns time-series views and watch time, plus country-level aggregates, at the library level or for a specific video. Control the time window with dateFrom/dateTo and the granularity with hourly. Basic safeguards prevent spam and bot inflation by de-duplicating sessions and ignoring obviously invalid events.", - "operationId": "Video_GetVideoStatistics", + "summary": "Cleanup unconfigured resolutions", + "operationId": "Video_DeleteResolutions", "parameters": [ { "name": "libraryId", @@ -1911,31 +2131,26 @@ "x-position": 1 }, { - "name": "dateFrom", - "in": "query", - "description": "Optional start of the time range (UTC). If omitted or invalid, the last 30 days are returned.", + "name": "videoId", + "in": "path", + "required": true, "schema": { - "type": "string", - "format": "date-time", - "nullable": true + "type": "string" }, "x-position": 2 }, { - "name": "dateTo", + "name": "resolutionsToDelete", "in": "query", - "description": "Optional end of the time range (UTC). If omitted with a valid start, defaults to now; otherwise the last 30 days are returned.", "schema": { "type": "string", - "format": "date-time", "nullable": true }, "x-position": 3 }, { - "name": "hourly", + "name": "deleteNonConfiguredResolutions", "in": "query", - "description": "Optional. If true, returns hourly data; otherwise daily (UTC). Default is daily.", "schema": { "type": "boolean", "default": false @@ -1943,33 +2158,73 @@ "x-position": 4 }, { - "name": "videoGuid", + "name": "allResolutions", "in": "query", - "description": "Optional video GUID to filter results. When omitted, returns library-level aggregates.", + "schema": { + "type": "boolean", + "default": false + }, + "x-position": 5 + }, + { + "name": "deleteOriginal", + "in": "query", + "schema": { + "type": "boolean", + "default": false + }, + "x-position": 6 + }, + { + "name": "outputs", + "in": "query", + "description": "Outputs to clean. Supported values: hls, mp4, all", "schema": { "type": "string", "nullable": true }, - "x-position": 5 + "x-position": 7 + }, + { + "name": "deleteMp4Files", + "in": "query", + "schema": { + "type": "boolean", + "default": false + }, + "x-position": 8 + }, + { + "name": "dryRun", + "in": "query", + "description": "If set to true, no actual file manipulation will happen, only informational data will be returned", + "schema": { + "type": "boolean", + "default": false + }, + "x-position": 9 } ], "responses": { "200": { - "description": "Statistics including time-series views and watch time, country breakdowns, and engagement score when available.", + "description": "The resolutions were successfully deleted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VideoStatisticsModel" + "$ref": "#/components/schemas/StatusModel" } } } }, "404": { - "description": "Video not found (when filtering by videoGuid)" + "description": "The requested video was not found" }, "401": { "description": "The request authentication failed" }, + "403": { + "description": "The request authorization failed" + }, "500": { "description": "Internal Server Error" } @@ -1981,266 +2236,44 @@ ] } }, - "/library/{libraryId}/videos/{videoId}/reencode": { - "post": { + "/OEmbed": { + "get": { "tags": [ - "Manage Videos" + "OEmbed" ], - "summary": "Reencode Video", - "operationId": "Video_ReencodeVideo", + "operationId": "OEmbed_GetOEmbed", "parameters": [ { - "name": "libraryId", - "in": "path", - "required": true, + "name": "url", + "in": "query", "schema": { - "type": "integer", - "format": "int64" + "type": "string", + "nullable": true }, "x-position": 1 }, { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - } - ], - "responses": { - "200": { - "description": "The details of the requested video", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VideoModel" - } - } - } - }, - "400": { - "description": "Original file is missing", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/outputs/{outputCodecId}": { - "put": { - "tags": [ - "Manage Videos" - ], - "summary": "Add output codec to video", - "operationId": "Video_ReencodeUsingCodec", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "guid" - }, - "x-position": 2 - }, - { - "name": "outputCodecId", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/EncoderOutputCodec" - }, - "x-position": 3 - } - ], - "responses": { - "200": { - "description": "The details of the requested video", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VideoModel" - } - } - } - }, - "400": { - "description": "Invalid request or validation failed, check response", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/repackage": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Repackage Video", - "operationId": "Video_Repackage", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "keepOriginalFiles", - "in": "query", - "description": "Marks whether previous file versions should be kept in storage, allows for faster repackage later on. Default is true.", - "schema": { - "type": "boolean", - "default": true - }, - "x-position": 3 - } - ], - "responses": { - "200": { - "description": "The details of the requested video", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VideoModel" - } - } - } - }, - "400": { - "description": "Enterprise DRM is disabled for the library, repackaging not available" - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos": { - "get": { - "tags": [ - "Manage Videos" - ], - "summary": "List Videos", - "operationId": "Video_List", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "page", - "in": "query", + "name": "maxWidth", + "in": "query", "schema": { "type": "integer", "format": "int32", - "default": 1 + "nullable": true }, "x-position": 2 }, { - "name": "itemsPerPage", + "name": "maxHeight", "in": "query", "schema": { "type": "integer", "format": "int32", - "default": 100 + "nullable": true }, "x-position": 3 }, { - "name": "search", + "name": "token", "in": "query", "schema": { "type": "string", @@ -2250,1571 +2283,70 @@ "x-position": 4 }, { - "name": "collection", + "name": "expires", "in": "query", "schema": { - "type": "string", - "default": "", - "nullable": true + "type": "integer", + "format": "int64", + "default": 0 }, "x-position": 5 - }, - { - "name": "orderBy", - "in": "query", - "schema": { - "type": "string", - "default": "date", - "nullable": true - }, - "x-position": 6 } ], "responses": { "200": { - "description": "The list of videos for the current parameters", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PaginationListOfVideoModel" + "$ref": "#/components/schemas/VideoOEmbedModel" } } } - }, - "401": { - "description": "The request authentication failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - }, - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Create Video", - "operationId": "Video_CreateVideo", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - } - ], - "requestBody": { - "x-name": "model", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateVideoModel" - } - } - }, - "required": true, - "x-position": 2 - }, - "responses": { - "200": { - "description": "The video was successfully created and returned as the response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VideoModel" - } - } - } - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "400": { - "description": "Request was invalid", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/thumbnail": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Set Thumbnail", - "operationId": "Video_SetThumbnail", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "thumbnailUrl", - "in": "query", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 3 - } - ], - "requestBody": { - "description": "Optional thumbnail file to upload", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary", - "nullable": true - } - } - } - }, - "responses": { - "200": { - "description": "The thumbnail was successfully set", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/fetch": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Fetch Video", - "operationId": "Video_FetchNewVideo", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "collectionId", - "in": "query", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 3 - }, - { - "name": "thumbnailTime", - "in": "query", - "description": "(Optional) Video time in ms to extract the main video thumbnail.", - "schema": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "x-position": 4 - } - ], - "requestBody": { - "x-name": "request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FetchVideoRequest" - } - } - }, - "required": true, - "x-position": 2 - }, - "responses": { - "200": { - "description": "The video was successfully fetched", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "400": { - "description": "Failed fetching the video" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/captions/{srclang}": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Add Caption", - "operationId": "Video_AddCaption", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "srclang", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 3 - } - ], - "requestBody": { - "x-name": "captionModel", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CaptionModelAdd" - } - } - }, - "required": true, - "x-position": 4 - }, - "responses": { - "200": { - "description": "The caption was successfully uploaded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "400": { - "description": "Failed uploading the captions", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CaptionValidationModel" - } - } - } - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - }, - "delete": { - "tags": [ - "Manage Videos" - ], - "summary": "Delete Caption", - "operationId": "Video_DeleteCaption", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "srclang", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 3 - } - ], - "responses": { - "200": { - "description": "The caption was successfully deleted", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "400": { - "description": "Failed deleting the captions" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/transcribe": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Transcribe video", - "operationId": "Video_TranscribeVideo", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "force", - "in": "query", - "schema": { - "type": "boolean", - "default": false - }, - "x-position": 4 - } - ], - "requestBody": { - "x-name": "transcribeSettings", - "description": "Used to override video library transcription settings, null by default", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TranscribeSettings" - } - } - }, - "x-position": 5 - }, - "responses": { - "200": { - "description": "The transcription was queued", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "400": { - "description": "Invalid request for transcription queue", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "401": { - "description": "The request authentication failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "403": { - "description": "The request authorization failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/smart": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Trigger Smart actions", - "operationId": "Video_SmartGenerate", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - } - ], - "requestBody": { - "x-name": "model", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SmartGenerateModel" - } - } - }, - "required": true, - "x-position": 3 - }, - "responses": { - "202": { - "description": "The smart action was queued", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "429": { - "description": "Limit exceeded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "400": { - "description": "Invalid request for smart feature", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "401": { - "description": "The request authentication failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "403": { - "description": "The request authorization failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/resolutions": { - "get": { - "tags": [ - "Manage Videos" - ], - "summary": "Video resolutions info", - "operationId": "Video_GetVideoResolutions", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - } - ], - "responses": { - "200": { - "description": "The resolutions info.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModelOfVideoResolutionsInfoModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/storage": { - "get": { - "tags": [ - "Manage Videos" - ], - "summary": "Get video storage size info", - "operationId": "Video_GetVideoStorageSize", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - } - ], - "responses": { - "200": { - "description": "The storage size information for the video.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModelOfVideoStorageSizeModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authorization failed" - }, - "429": { - "description": "Rate limit exceeded" - }, - "408": { - "description": "Request timeout" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/library/{libraryId}/videos/{videoId}/resolutions/cleanup": { - "post": { - "tags": [ - "Manage Videos" - ], - "summary": "Cleanup unconfigured resolutions", - "operationId": "Video_DeleteResolutions", - "parameters": [ - { - "name": "libraryId", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - }, - "x-position": 1 - }, - { - "name": "videoId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "x-position": 2 - }, - { - "name": "resolutionsToDelete", - "in": "query", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 3 - }, - { - "name": "deleteNonConfiguredResolutions", - "in": "query", - "schema": { - "type": "boolean", - "default": false - }, - "x-position": 4 - }, - { - "name": "deleteOriginal", - "in": "query", - "schema": { - "type": "boolean", - "default": false - }, - "x-position": 5 - }, - { - "name": "deleteMp4Files", - "in": "query", - "schema": { - "type": "boolean", - "default": false - }, - "x-position": 6 - }, - { - "name": "dryRun", - "in": "query", - "description": "If set to true, no actual file manipulation will happen, only informational data will be returned", - "schema": { - "type": "boolean", - "default": false - }, - "x-position": 7 - } - ], - "responses": { - "200": { - "description": "The resolutions were successfully deleted", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusModel" - } - } - } - }, - "404": { - "description": "The requested video was not found" - }, - "401": { - "description": "The request authentication failed" - }, - "403": { - "description": "The request authorization failed" - }, - "500": { - "description": "Internal Server Error" - } - }, - "security": [ - { - "AccessKey": [] - } - ] - } - }, - "/OEmbed": { - "get": { - "tags": [ - "OEmbed" - ], - "operationId": "OEmbed_GetOEmbed", - "parameters": [ - { - "name": "url", - "in": "query", - "schema": { - "type": "string", - "nullable": true - }, - "x-position": 1 - }, - { - "name": "maxWidth", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "x-position": 2 - }, - { - "name": "maxHeight", - "in": "query", - "schema": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "x-position": 3 - }, - { - "name": "token", - "in": "query", - "schema": { - "type": "string", - "default": "", - "nullable": true - }, - "x-position": 4 - }, - { - "name": "expires", - "in": "query", - "schema": { - "type": "integer", - "format": "int64", - "default": 0 - }, - "x-position": 5 - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VideoOEmbedModel" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "CollectionModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "videoLibraryId": { - "type": "integer", - "description": "The video library ID that contains the collection", - "format": "int64" - }, - "guid": { - "type": "string", - "description": "The unique ID of the collection", - "nullable": true - }, - "name": { - "type": "string", - "description": "The name of the collection", - "nullable": true - }, - "videoCount": { - "type": "integer", - "description": "The number of videos that the collection contains", - "format": "int64" - }, - "totalSize": { - "type": "integer", - "description": "The total storage size of the collection", - "format": "int64" - }, - "previewVideoIds": { - "type": "string", - "description": "The IDs of videos to be used as preview icons", - "nullable": true - }, - "previewImageUrls": { - "type": "array", - "description": "The URLs of preview images of videos in the collection", - "nullable": true, - "items": { - "type": "string" - } - } - } - }, - "PaginationListOfCollectionModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "totalItems": { - "type": "integer", - "description": "The total number of items that can be returned", - "format": "int64" - }, - "currentPage": { - "type": "integer", - "description": "The current page of the response", - "format": "int64" - }, - "itemsPerPage": { - "type": "integer", - "description": "The number of items returned per page", - "format": "int32" - }, - "items": { - "type": "array", - "description": "The result items on the current result", - "nullable": true, - "items": { - "$ref": "#/components/schemas/CollectionModel" - } - } - } - }, - "UpdateCollectionModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "The name of the collection", - "nullable": true - } - } - }, - "StatusModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "success": { - "type": "boolean", - "description": "Determines if the request was successful" - }, - "message": { - "type": "string", - "description": "Response message description", - "nullable": true - }, - "statusCode": { - "type": "integer", - "description": "The response status code", - "format": "int32" - } - } - }, - "VideoLibraryStatus": { - "type": "object", - "additionalProperties": false, - "properties": { - "videoCount": { - "type": "integer", - "description": "The total number of videos contained by the video library", - "format": "int64" - }, - "liveStreamCount": { - "type": "integer", - "description": "The total number of live streams contained by the video library", - "format": "int64" - } - } - }, - "LiveStreamModel": { - "type": "object", - "additionalProperties": false, - "required": [ - "videoLibraryId", - "guid", - "title", - "public", - "status", - "dateCreated", - "streamKey", - "playbackUrlHls", - "dvrEnabled", - "recordVod", - "availableResolutions", - "ingestRegion" - ], - "properties": { - "videoLibraryId": { - "type": "integer", - "description": "The ID of the video library that the live stream belongs to", - "format": "int64" - }, - "guid": { - "type": "string", - "description": "The unique ID of the live stream", - "format": "guid", - "minLength": 1 - }, - "title": { - "type": "string", - "description": "The title of the live stream", - "minLength": 1 - }, - "description": { - "type": "string", - "description": "The description of the live stream", - "nullable": true - }, - "category": { - "type": "string", - "description": "The category of the live stream", - "nullable": true - }, - "collectionId": { - "type": "string", - "description": "The ID of the collection where the live stream belongs", - "nullable": true - }, - "public": { - "type": "boolean", - "description": "Determines if the live stream is publicly accessible" - }, - "status": { - "description": "The status of the live stream. See LiveStreamStatus.", - "oneOf": [ - { - "$ref": "#/components/schemas/LiveStreamStatus" - } - ] - }, - "dateCreated": { - "type": "string", - "description": "The date when the live stream was created", - "format": "date-time", - "minLength": 1 - }, - "scheduledStartTime": { - "type": "string", - "description": "The scheduled start time of the live stream (optional)", - "format": "date-time", - "nullable": true - }, - "scheduledEndTime": { - "type": "string", - "description": "The scheduled end time of the live stream (optional)", - "format": "date-time", - "nullable": true - }, - "startedAt": { - "type": "string", - "description": "The date and time when the live stream publishing started", - "format": "date-time", - "nullable": true - }, - "endedAt": { - "type": "string", - "description": "The date and time when the live stream publishing ended", - "format": "date-time", - "nullable": true - }, - "durationSeconds": { - "type": "integer", - "description": "The duration of the live stream in seconds", - "format": "int32", - "nullable": true - }, - "streamKey": { - "type": "string", - "description": "The stream key required for publishing the live stream", - "minLength": 1 - }, - "playbackUrlHls": { - "type": "string", - "description": "The HLS playback URL of the live stream", - "minLength": 1 - }, - "dvrEnabled": { - "type": "boolean", - "description": "Determines if DVR is enabled for the live stream" - }, - "dvrWindowSeconds": { - "type": "integer", - "description": "The DVR window size in seconds, required when DvrEnabled is true", - "format": "int32", - "nullable": true - }, - "recordVod": { - "type": "boolean", - "description": "Determines if a VOD recording should be created for the live stream" - }, - "availableResolutions": { - "type": "string", - "description": "The available output resolutions of the live stream", - "minLength": 1 - }, - "width": { - "type": "integer", - "description": "The input video width in pixels", - "format": "int32", - "nullable": true - }, - "height": { - "type": "integer", - "description": "The input video height in pixels", - "format": "int32", - "nullable": true - }, - "framerate": { - "type": "number", - "description": "The framerate of the input stream", - "format": "double", - "nullable": true - }, - "ingestRegion": { - "type": "string", - "description": "The primary ingest region of the live stream", - "minLength": 1 - }, - "peakConcurrentViewers": { - "type": "integer", - "description": "The peak number of concurrent viewers", - "format": "int32", - "nullable": true - }, - "totalViewerSeconds": { - "type": "integer", - "description": "The total viewer watch time in seconds", - "format": "int64", - "nullable": true - }, - "thumbnailFileName": { - "type": "string", - "description": "The file name of the thumbnail inside of the storage", - "nullable": true - }, - "thumbnailUpdatedAt": { - "type": "string", - "description": "The date and time when the thumbnail was last updated", - "format": "date-time", - "nullable": true - }, - "enableCountdown": { - "type": "boolean", - "description": "Determines if countdown should be shown in player before the stream start, if it was scheduled", - "nullable": true - }, - "rtmpOutputs": { - "type": "array", - "description": "A list of up to 5 RTMP outputs that the incoming stream will be forwarded to", - "nullable": true, - "items": { - "type": "string" - } - } - } - }, - "LiveStreamStatus": { - "type": "integer", - "description": "0 = Unknown\n1 = Created\n2 = Scheduled\n3 = Preview\n4 = Running\n5 = Ended\n6 = VodProcessing\n7 = Error", - "x-enumNames": [ - "Unknown", - "Created", - "Scheduled", - "Preview", - "Running", - "Ended", - "VodProcessing", - "Error" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ] - }, - "LiveStreamPlayDataModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "liveStream": { - "description": "Live stream data.", - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/LiveStreamModel" - } - ] - }, - "libraryName": { - "type": "string", - "nullable": true - }, - "captionsPath": { - "type": "string", - "nullable": true - }, - "seekPath": { - "type": "string", - "nullable": true - }, - "thumbnailUrl": { - "type": "string", - "nullable": true - }, - "fallbackUrl": { - "type": "string", - "nullable": true - }, - "videoPlaylistUrl": { - "type": "string", - "nullable": true - }, - "originalUrl": { - "type": "string", - "nullable": true - }, - "previewUrl": { - "type": "string", - "nullable": true - }, - "controls": { - "type": "string", - "nullable": true - }, - "enableDRM": { - "type": "boolean" - }, - "drmVersion": { - "type": "integer", - "format": "int32" - }, - "playerKeyColor": { - "type": "string", - "nullable": true - }, - "vastTagUrl": { - "type": "string", - "nullable": true - }, - "viAiPublisherId": { - "type": "string", - "nullable": true - }, - "captionsFontSize": { - "type": "integer", - "format": "int32" - }, - "captionsFontColor": { - "type": "string", - "nullable": true - }, - "captionsBackground": { - "type": "string", - "nullable": true - }, - "uiLanguage": { - "type": "string", - "nullable": true - }, - "allowEarlyPlay": { - "type": "boolean" - }, - "tokenAuthEnabled": { - "type": "boolean" - }, - "enableMP4Fallback": { - "type": "boolean" - }, - "showHeatmap": { - "type": "boolean" - }, - "fontFamily": { - "type": "string", - "nullable": true - }, - "playbackSpeeds": { - "type": "string", - "nullable": true - }, - "widevineMinClientSecurityLevel": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "zoneTier": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "rememberPlayerPosition": { - "type": "boolean" - } - } - }, - "StatusModelOfListOfString": { - "allOf": [ - { - "$ref": "#/components/schemas/StatusModel" - }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "data": { - "type": "array", - "nullable": true, - "items": { - "type": "string" - } - } - } - } - ] - }, - "CreateLiveStreamModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "title": { - "type": "string", - "description": "The title of the live stream", - "nullable": true - }, - "description": { - "type": "string", - "description": "The description of the live stream", - "nullable": true - }, - "collectionId": { - "type": "string", - "description": "The ID of the collection where the live stream belongs", - "nullable": true - }, - "dvrEnabled": { - "type": "boolean", - "description": "Determines if DVR is enabled for the live stream" - }, - "dvrWindowSeconds": { - "type": "integer", - "description": "The DVR window size in seconds, required when DvrEnabled is true, max is 12 hours", - "format": "int32", - "maximum": 43200.0, - "minimum": 1.0, - "nullable": true - }, - "recordVod": { - "type": "boolean", - "description": "Determines if a VOD recording should be created for the live stream" - }, - "scheduledStartTime": { - "type": "string", - "description": "The scheduled start time of the live stream (optional, UTC)", - "format": "date-time", - "nullable": true - }, - "scheduledEndTime": { - "type": "string", - "description": "The scheduled end time of the live stream (optional, UTC)", - "format": "date-time", - "nullable": true - }, - "public": { - "type": "boolean", - "description": "Determines if the live stream is publicly accessible, defaults to true" - }, - "enableCountdown": { - "type": "boolean", - "description": "Determines if countdown should be shown in player before the stream start, if it was scheduled", - "nullable": true - }, - "rtmpOutputs": { - "type": "array", - "description": "A list of up to 5 RTMP outputs that the incoming stream will be forwarded to", - "nullable": true, - "items": { - "type": "string" - } } } - }, - "UpdateLiveStreamModel": { + } + } + }, + "components": { + "schemas": { + "CollectionModel": { "type": "object", "additionalProperties": false, "properties": { - "title": { - "type": "string", - "description": "The title of the live stream", - "nullable": true - }, - "description": { - "type": "string", - "description": "The description of the live stream", - "nullable": true - }, - "collectionId": { - "type": "string", - "description": "The ID of the collection where the live stream belongs", - "nullable": true - }, - "dvrEnabled": { - "type": "boolean", - "description": "Determines if DVR is enabled for the live stream" - }, - "dvrWindowSeconds": { + "videoLibraryId": { "type": "integer", - "description": "The DVR window size in seconds, required when DvrEnabled is true, max is 12 hours", - "format": "int32", - "maximum": 43200.0, - "minimum": 1.0, - "nullable": true - }, - "recordVod": { - "type": "boolean", - "description": "Determines if a VOD recording should be created for the live stream" + "description": "The video library ID that contains the collection", + "format": "int64" }, - "scheduledStartTime": { + "guid": { "type": "string", - "description": "The scheduled start time of the live stream (optional, UTC)", - "format": "date-time", + "description": "The unique ID of the collection", "nullable": true }, - "scheduledEndTime": { + "name": { "type": "string", - "description": "The scheduled end time of the live stream (optional, UTC)", - "format": "date-time", + "description": "The name of the collection", "nullable": true }, - "public": { - "type": "boolean", - "description": "Determines if the live stream is publicly accessible, defaults to true" + "videoCount": { + "type": "integer", + "description": "The number of videos that the collection contains", + "format": "int64" }, - "enableCountdown": { - "type": "boolean", - "description": "Determines if countdown should be shown in player before the stream start, if it was scheduled (optional)", + "totalSize": { + "type": "integer", + "description": "The total storage size of the collection", + "format": "int64" + }, + "previewVideoIds": { + "type": "string", + "description": "The IDs of videos to be used as preview icons", "nullable": true }, - "rtmpOutputs": { + "previewImageUrls": { "type": "array", - "description": "A list of up to 5 RTMP outputs that the incoming stream will be forwarded to", + "description": "The URLs of preview images of videos in the collection", "nullable": true, "items": { "type": "string" @@ -3822,7 +2354,7 @@ } } }, - "PaginationListOfLiveStreamModel": { + "PaginationListOfCollectionModel": { "type": "object", "additionalProperties": false, "properties": { @@ -3846,22 +2378,39 @@ "description": "The result items on the current result", "nullable": true, "items": { - "$ref": "#/components/schemas/LiveStreamModel" + "$ref": "#/components/schemas/CollectionModel" } } } }, - "ThumbnailListResponseModel": { + "UpdateCollectionModel": { "type": "object", "additionalProperties": false, "properties": { - "url": { + "name": { "type": "string", + "description": "The name of the collection", "nullable": true + } + } + }, + "StatusModel": { + "type": "object", + "additionalProperties": false, + "properties": { + "success": { + "type": "boolean", + "description": "Determines if the request was successful" }, - "timestamp": { + "message": { "type": "string", - "format": "date-time" + "description": "Response message description", + "nullable": true + }, + "statusCode": { + "type": "integer", + "description": "The response status code", + "format": "int32" } } }, @@ -4004,6 +2553,11 @@ "description": "The file name of the thumbnail inside of the storage", "nullable": true }, + "thumbnailUrl": { + "type": "string", + "description": "The CDN URL of the thumbnail", + "nullable": true + }, "thumbnailBlurhash": { "type": "string", "description": "Thumbnail blurhash to show while the actual thumbnail is being loaded", @@ -4061,7 +2615,7 @@ "nullable": true }, "smartGenerateStatus": { - "description": "The status of smart generate action (if triggered)", + "description": "Aggregate smart generate status derived from per-feature statuses when present: InProgress, then Queued, then Failed, then Finished; otherwise the stored legacy value. See SmartGenerateFeaturesStatus.", "nullable": true, "oneOf": [ { @@ -4069,6 +2623,15 @@ } ] }, + "smartGenerateFeaturesStatus": { + "description": "Per-feature smart generate statuses (title, description, chapters, moments). Null for a feature on legacy rows.", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SmartGenerateFeaturesStatusModel" + } + ] + }, "hasOriginal": { "type": "boolean", "description": "Determines if video has the original file available in storage", @@ -4087,28 +2650,71 @@ }, "VideoModelStatus": { "type": "integer", - "description": "0 = Created\n1 = Uploaded\n2 = Processing\n3 = Transcoding\n4 = Finished\n5 = Error\n6 = UploadFailed\n7 = JitSegmenting\n8 = JitPlaylistsCreated", - "x-enumNames": [ - "Created", - "Uploaded", - "Processing", - "Transcoding", - "Finished", - "Error", - "UploadFailed", - "JitSegmenting", - "JitPlaylistsCreated" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 + "description": "", + "oneOf": [ + { + "title": "Created", + "type": "integer", + "enum": [ + 0 + ] + }, + { + "title": "Uploaded", + "type": "integer", + "enum": [ + 1 + ] + }, + { + "title": "Processing", + "type": "integer", + "enum": [ + 2 + ] + }, + { + "title": "Transcoding", + "type": "integer", + "enum": [ + 3 + ] + }, + { + "title": "Finished", + "type": "integer", + "enum": [ + 4 + ] + }, + { + "title": "Error", + "type": "integer", + "enum": [ + 5 + ] + }, + { + "title": "UploadFailed", + "type": "integer", + "enum": [ + 6 + ] + }, + { + "title": "JitSegmenting", + "type": "integer", + "enum": [ + 7 + ] + }, + { + "title": "JitPlaylistsCreated", + "type": "integer", + "enum": [ + 8 + ] + } ] }, "CaptionModel": { @@ -4214,68 +2820,227 @@ }, "Severity": { "type": "integer", - "description": "0 = Undefined\n1 = Information\n2 = Warning\n3 = Error", - "x-enumNames": [ - "Undefined", - "Information", - "Warning", - "Error" - ], - "enum": [ - 0, - 1, - 2, - 3 + "description": "", + "oneOf": [ + { + "title": "Undefined", + "type": "integer", + "description": "Shouldn't be used", + "enum": [ + 0 + ] + }, + { + "title": "Information", + "type": "integer", + "description": "An info message to the user, shouldn't break anythying", + "enum": [ + 1 + ] + }, + { + "title": "Warning", + "type": "integer", + "description": "A warning message, for example that the transcoded video may break when playing", + "enum": [ + 2 + ] + }, + { + "title": "Error", + "type": "integer", + "description": "An error, meaning that the video will most likely not be playable", + "enum": [ + 3 + ] + } ] }, "IssueCodes": { "type": "integer", - "description": "0 = Undefined\n1 = StreamLengthsDifference\n2 = TranscodingWarnings\n3 = IncompatibleResolution\n4 = InvalidFramerate\n5 = VideoExceededMaxDuration\n6 = AudioExceededMaxDuration\n7 = OriginalCorrupted\n8 = TranscriptionFailed\n9 = JitIncompatible\n10 = JitFailed", - "x-enumNames": [ - "Undefined", - "StreamLengthsDifference", - "TranscodingWarnings", - "IncompatibleResolution", - "InvalidFramerate", - "VideoExceededMaxDuration", - "AudioExceededMaxDuration", - "OriginalCorrupted", - "TranscriptionFailed", - "JitIncompatible", - "JitFailed" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 + "description": "", + "oneOf": [ + { + "title": "Undefined", + "type": "integer", + "description": "Shouldn't be used", + "enum": [ + 0 + ] + }, + { + "title": "StreamLengthsDifference", + "type": "integer", + "description": "Marks that there is a mismatch between lengths of audio and video streams in the transcoded file", + "enum": [ + 1 + ] + }, + { + "title": "TranscodingWarnings", + "type": "integer", + "description": "Marks that transcoding completed with warnings", + "enum": [ + 2 + ] + }, + { + "title": "IncompatibleResolution", + "type": "integer", + "description": "Marks that original video file has incompatible resolution or isn't a video stream", + "enum": [ + 3 + ] + }, + { + "title": "InvalidFramerate", + "type": "integer", + "description": "Marks that original video file has invalid framerate", + "enum": [ + 4 + ] + }, + { + "title": "VideoExceededMaxDuration", + "type": "integer", + "description": "Marks that video stream exceeded max duration", + "enum": [ + 5 + ] + }, + { + "title": "AudioExceededMaxDuration", + "type": "integer", + "description": "Marks that audio stream exceeded max duration", + "enum": [ + 6 + ] + }, + { + "title": "OriginalCorrupted", + "type": "integer", + "description": "Marks that video file is corrupted and couldn't be processed properly", + "enum": [ + 7 + ] + }, + { + "title": "TranscriptionFailed", + "type": "integer", + "description": "Marks that video transcription finished with errors and might not be complete", + "enum": [ + 8 + ] + }, + { + "title": "JitIncompatible", + "type": "integer", + "description": "Marks that video file is not compatible with JIT encoding", + "enum": [ + 9 + ] + }, + { + "title": "JitFailed", + "type": "integer", + "description": "Marks that video failed JIT encoding", + "enum": [ + 10 + ] + }, + { + "title": "CaptionGenerationFailed", + "type": "integer", + "description": "Marks that captions generation failed", + "enum": [ + 11 + ] + } ] }, "SmartGenerateStatus": { "type": "integer", - "description": "0 = None\n1 = Queued\n2 = InProgress\n3 = Finished\n4 = Failed", - "x-enumNames": [ - "None", - "Queued", - "InProgress", - "Finished", - "Failed" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4 + "description": "", + "oneOf": [ + { + "title": "None", + "type": "integer", + "enum": [ + 0 + ] + }, + { + "title": "Queued", + "type": "integer", + "enum": [ + 1 + ] + }, + { + "title": "InProgress", + "type": "integer", + "enum": [ + 2 + ] + }, + { + "title": "Finished", + "type": "integer", + "enum": [ + 3 + ] + }, + { + "title": "Failed", + "type": "integer", + "enum": [ + 4 + ] + } ] }, + "SmartGenerateFeaturesStatusModel": { + "type": "object", + "additionalProperties": false, + "properties": { + "title": { + "description": "Smart generate status for the video title, when applicable.", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SmartGenerateStatus" + } + ] + }, + "description": { + "description": "Smart generate status for the video description, when applicable.", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SmartGenerateStatus" + } + ] + }, + "chapters": { + "description": "Smart generate status for chapters, when applicable.", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SmartGenerateStatus" + } + ] + }, + "moments": { + "description": "Smart generate status for moments, when applicable.", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SmartGenerateStatus" + } + ] + } + } + }, "VideoHeatmapModel": { "type": "object", "additionalProperties": false, @@ -4308,6 +3073,10 @@ "type": "string", "nullable": true }, + "pullZoneId": { + "type": "integer", + "format": "int64" + }, "captionsPath": { "type": "string", "nullable": true @@ -4400,19 +3169,80 @@ "format": "int32", "nullable": true }, + "widevineEmeRobustness": { + "type": "string", + "nullable": true + }, + "widevineSdOnlyForL3": { + "type": "boolean" + }, + "maxSoftwareWidevineResolution": { + "type": "integer", + "format": "int32", + "nullable": true + }, "zoneTier": { "type": "integer", "format": "int32", "nullable": true }, + "isPlayable": { + "type": "boolean", + "description": "Determines if the video is currently playable using either playlist or original source." + }, + "isPlaylistPlayable": { + "type": "boolean", + "description": "Determines if the HLS playlist is currently playable." + }, + "preferredPlaybackSource": { + "description": "Preferred playback source for the current video state.", + "oneOf": [ + { + "$ref": "#/components/schemas/VideoPlaybackSource" + } + ] + }, "rememberPlayerPosition": { "type": "boolean" }, - "customCss": { + "customCss": { + "type": "string", + "nullable": true + }, + "exposeVideoMetadata": { + "type": "boolean" + }, + "enableCompactControls": { + "type": "boolean" + } + } + }, + "VideoPlaybackSource": { + "type": "string", + "description": "", + "oneOf": [ + { + "title": "None", + "type": "string", + "enum": [ + "None" + ] + }, + { + "title": "Playlist", "type": "string", - "nullable": true + "enum": [ + "Playlist" + ] + }, + { + "title": "Original", + "type": "string", + "enum": [ + "Original" + ] } - } + ] }, "VideoStatisticsModel": { "type": "object", @@ -4463,424 +3293,160 @@ }, "EncoderOutputCodec": { "type": "integer", - "description": "0 = x264\n1 = vp9\n2 = hevc\n3 = av1", - "x-enumNames": [ - "x264", - "vp9", - "hevc", - "av1" - ], - "enum": [ - 0, - 1, - 2, - 3 - ] - }, - "PaginationListOfVideoModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "totalItems": { - "type": "integer", - "description": "The total number of items that can be returned", - "format": "int64" - }, - "currentPage": { - "type": "integer", - "description": "The current page of the response", - "format": "int64" - }, - "itemsPerPage": { + "description": "", + "oneOf": [ + { + "title": "x264", "type": "integer", - "description": "The number of items returned per page", - "format": "int32" - }, - "items": { - "type": "array", - "description": "The result items on the current result", - "nullable": true, - "items": { - "$ref": "#/components/schemas/VideoModel" - } - } - } - }, - "CreateVideoModel": { - "type": "object", - "additionalProperties": false, - "required": [ - "title" - ], - "properties": { - "title": { - "type": "string", - "description": "The title of the video", - "minLength": 1 - }, - "collectionId": { - "type": "string", - "description": "The ID of the collection where the video will be put", - "nullable": true + "enum": [ + 0 + ] }, - "thumbnailTime": { + { + "title": "vp9", "type": "integer", - "description": "Video time in ms to extract the main video thumbnail.", - "format": "int32", - "nullable": true - } - } - }, - "UpdateVideoModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "title": { - "type": "string", - "description": "The title of the video", - "nullable": true - }, - "collectionId": { - "type": "string", - "description": "The ID of the collection where the video belongs", - "nullable": true - }, - "chapters": { - "type": "array", - "description": "The list of chapters available for the video", - "nullable": true, - "items": { - "$ref": "#/components/schemas/ChapterModel" - } - }, - "moments": { - "type": "array", - "description": "The list of moments available for the video", - "nullable": true, - "items": { - "$ref": "#/components/schemas/MomentModel" - } - }, - "metaTags": { - "type": "array", - "description": "The meta tags added to the video", - "nullable": true, - "items": { - "$ref": "#/components/schemas/MetaTagModel" - } - } - } - }, - "FetchVideoRequest": { - "type": "object", - "additionalProperties": false, - "required": [ - "url" - ], - "properties": { - "url": { - "type": "string", - "description": "The URL from which the video will be fetched from.", - "minLength": 1 - }, - "headers": { - "type": "object", - "description": "The headers that will be sent along with the fetch request.", - "nullable": true, - "additionalProperties": { - "type": "string" - } - }, - "title": { - "type": "string", - "description": "The title that will be set to video.", - "nullable": true - } - } - }, - "CaptionValidationModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "valid": { - "type": "boolean", - "description": "Denotes whether uploaded captions file was valid" - }, - "errorList": { - "type": "array", - "description": "When uploaded file was invalid, will contain errors found", - "nullable": true, - "items": { - "type": "string" - } - }, - "warningList": { - "type": "array", - "description": "When uploaded file was valid but non-breaking issues were found, will contain issues found", - "nullable": true, - "items": { - "type": "string" - } - } - } - }, - "CaptionModelAdd": { - "type": "object", - "additionalProperties": false, - "properties": { - "srclang": { - "type": "string", - "description": "The unique srclang shortcode for the caption", - "nullable": true - }, - "label": { - "type": "string", - "description": "The text description label for the caption", - "nullable": true - }, - "captionsFile": { - "type": "string", - "description": "Base64 encoded captions file", - "nullable": true - } - } - }, - "TranscribeSettings": { - "type": "object", - "additionalProperties": false, - "properties": { - "targetLanguages": { - "type": "array", - "description": "List of languages that will be used as target languages, use ISO 639-1 language codes.", - "nullable": true, - "items": { - "type": "string" - } - }, - "generateTitle": { - "type": "boolean", - "description": "Whether video title should be automatically generated.", - "nullable": true - }, - "generateDescription": { - "type": "boolean", - "description": "Whether video description should be automatically generated.", - "nullable": true - }, - "generateChapters": { - "type": "boolean", - "description": "Whether video chapters should be automatically generated.", - "nullable": true - }, - "generateMoments": { - "type": "boolean", - "description": "Whether video moments should be automatically generated.", - "nullable": true - }, - "sourceLanguage": { - "type": "string", - "description": "Video source language, use ISO 639-1 language code.", - "nullable": true - } - } - }, - "SmartGenerateModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "generateTitle": { - "type": "boolean", - "description": "Whether video title should be generated.", - "nullable": true - }, - "generateDescription": { - "type": "boolean", - "description": "Whether video description should be generated.", - "nullable": true - }, - "generateChapters": { - "type": "boolean", - "description": "Whether video chapters should be generated.", - "nullable": true - }, - "generateMoments": { - "type": "boolean", - "description": "Whether video moments should be generated.", - "nullable": true + "enum": [ + 1 + ] }, - "sourceLanguage": { - "type": "string", - "description": "(Optional) Video source language, use ISO 639-1 language code.", - "nullable": true - } - } - }, - "StatusModelOfVideoResolutionsInfoModel": { - "allOf": [ { - "$ref": "#/components/schemas/StatusModel" + "title": "hevc", + "type": "integer", + "enum": [ + 2 + ] }, { - "type": "object", - "additionalProperties": false, - "properties": { - "data": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/VideoResolutionsInfoModel" - } - ] - } - } + "title": "av1", + "type": "integer", + "enum": [ + 3 + ] } ] }, - "VideoResolutionsInfoModel": { + "PaginationListOfVideoModel": { "type": "object", "additionalProperties": false, "properties": { - "videoId": { - "type": "string", - "nullable": true - }, - "videoLibraryId": { + "totalItems": { "type": "integer", + "description": "The total number of items that can be returned", "format": "int64" }, - "availableResolutions": { - "type": "array", - "nullable": true, - "items": { - "type": "string" - } - }, - "configuredResolutions": { - "type": "array", - "nullable": true, - "items": { - "type": "string" - } - }, - "playlistResolutions": { - "type": "array", - "nullable": true, - "items": { - "$ref": "#/components/schemas/ResolutionReference" - } - }, - "storageResolutions": { - "type": "array", - "nullable": true, - "items": { - "$ref": "#/components/schemas/ResolutionReference" - } - }, - "mp4Resolutions": { - "type": "array", - "nullable": true, - "items": { - "$ref": "#/components/schemas/ResolutionReference" - } + "currentPage": { + "type": "integer", + "description": "The current page of the response", + "format": "int64" }, - "storageObjects": { - "type": "array", - "nullable": true, - "items": { - "$ref": "#/components/schemas/StorageObjectModel" - } + "itemsPerPage": { + "type": "integer", + "description": "The number of items returned per page", + "format": "int32" }, - "oldResolutions": { + "items": { "type": "array", + "description": "The result items on the current result", "nullable": true, "items": { - "$ref": "#/components/schemas/StorageObjectModel" + "$ref": "#/components/schemas/VideoModel" } - }, - "hasBothOldAndNewResolutionFormat": { - "type": "boolean" - }, - "hasOriginal": { - "type": "boolean" } } }, - "ResolutionReference": { + "CreateVideoModel": { "type": "object", "additionalProperties": false, + "required": [ + "title" + ], "properties": { - "resolution": { + "title": { "type": "string", - "nullable": true + "description": "The title of the video", + "minLength": 1 }, - "path": { + "collectionId": { "type": "string", + "description": "The ID of the collection where the video will be put", + "nullable": true + }, + "thumbnailTime": { + "type": "integer", + "description": "Video time in ms to extract the main video thumbnail.", + "format": "int32", "nullable": true } } }, - "StorageObjectModel": { + "UpdateVideoModel": { "type": "object", "additionalProperties": false, "properties": { - "guid": { - "type": "string", - "nullable": true - }, - "storageZoneName": { - "type": "string", - "nullable": true - }, - "path": { + "title": { "type": "string", + "description": "The title of the video", "nullable": true }, - "objectName": { + "collectionId": { "type": "string", + "description": "The ID of the collection where the video belongs", "nullable": true }, - "length": { - "type": "integer", - "format": "int64" - }, - "lastChanged": { - "type": "string", - "format": "date-time" - }, - "serverId": { - "type": "integer", - "format": "int32" - }, - "isDirectory": { - "type": "boolean" - }, - "userId": { - "type": "string", - "nullable": true + "chapters": { + "type": "array", + "description": "The list of chapters available for the video", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ChapterModel" + } }, - "contentType": { - "type": "string", - "nullable": true + "moments": { + "type": "array", + "description": "The list of moments available for the video", + "nullable": true, + "items": { + "$ref": "#/components/schemas/MomentModel" + } }, - "dateCreated": { + "metaTags": { + "type": "array", + "description": "The meta tags added to the video", + "nullable": true, + "items": { + "$ref": "#/components/schemas/MetaTagModel" + } + } + } + }, + "FetchVideoRequest": { + "type": "object", + "additionalProperties": false, + "required": [ + "url" + ], + "properties": { + "url": { "type": "string", - "format": "date-time" - }, - "storageZoneId": { - "type": "integer", - "format": "int64" + "description": "The URL from which the video will be fetched from.", + "minLength": 1 }, - "checksum": { - "type": "string", - "nullable": true + "headers": { + "type": "object", + "description": "The headers that will be sent along with the fetch request.", + "nullable": true, + "additionalProperties": { + "type": "string" + } }, - "replicatedZones": { + "title": { "type": "string", + "description": "The title that will be set to video.", "nullable": true } } }, - "StatusModelOfVideoStorageSizeModel": { + "StatusModelOfCaptionValidationModel": { "allOf": [ { "$ref": "#/components/schemas/StatusModel" @@ -4893,7 +3459,7 @@ "nullable": true, "oneOf": [ { - "$ref": "#/components/schemas/VideoStorageSizeModel" + "$ref": "#/components/schemas/CaptionValidationModel" } ] } @@ -4901,251 +3467,142 @@ } ] }, - "VideoStorageSizeModel": { + "CaptionValidationModel": { "type": "object", "additionalProperties": false, "properties": { - "encoded": { - "type": "object", + "valid": { + "type": "boolean", + "description": "Denotes whether uploaded captions file was valid" + }, + "errorList": { + "type": "array", + "description": "When uploaded file was invalid, will contain errors found", "nullable": true, - "additionalProperties": { - "$ref": "#/components/schemas/CodecRenditionSizeModel" + "items": { + "type": "string" } }, - "thumbnails": { - "type": "integer", - "format": "int64" - }, - "previews": { - "type": "integer", - "format": "int64" - }, - "originals": { - "type": "integer", - "format": "int64" - }, - "mp4Fallback": { - "type": "integer", - "format": "int64" - }, - "miscellaneous": { - "type": "integer", - "format": "int64" - }, - "calculatedAt": { - "type": "string", - "format": "date-time" - } - } - }, - "CodecRenditionSizeModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "codec": { - "type": "string", - "nullable": true - }, - "resolution": { - "type": "string", - "nullable": true - }, - "size": { - "type": "integer", - "format": "int64" + "warningList": { + "type": "array", + "description": "When uploaded file was valid but non-breaking issues were found, will contain issues found", + "nullable": true, + "items": { + "type": "string" + } + }, + "warningMessage": { + "type": "string", + "description": "UI-friendly summary of warnings found in the uploaded captions file", + "nullable": true } } }, - "VideoOEmbedModel": { + "CaptionModelAdd": { "type": "object", "additionalProperties": false, "properties": { - "version": { - "type": "string", - "nullable": true - }, - "title": { - "type": "string", - "nullable": true - }, - "type": { - "type": "string", - "nullable": true - }, - "thumbnail_url": { - "type": "string", - "nullable": true - }, - "width": { - "type": "integer", - "format": "int32" - }, - "height": { - "type": "integer", - "format": "int32" - }, - "html": { + "srclang": { "type": "string", + "description": "The unique srclang shortcode for the caption", "nullable": true }, - "provider_name": { + "label": { "type": "string", + "description": "The text description label for the caption", "nullable": true }, - "provider_url": { + "captionsFile": { "type": "string", + "description": "Base64 encoded captions file", "nullable": true } } }, - "ProblemDetails": { + "TranscribeSettings": { "type": "object", - "additionalProperties": { - "nullable": true - }, + "additionalProperties": false, "properties": { - "type": { - "type": "string", + "targetLanguages": { + "type": "array", + "description": "List of languages that will be used as target languages, use ISO 639-1 language codes.", + "nullable": true, + "items": { + "type": "string" + } + }, + "generateTitle": { + "type": "boolean", + "description": "Whether video title should be automatically generated.", "nullable": true }, - "title": { - "type": "string", + "generateDescription": { + "type": "boolean", + "description": "Whether video description should be automatically generated.", "nullable": true }, - "status": { - "type": "integer", - "format": "int32", + "generateChapters": { + "type": "boolean", + "description": "Whether video chapters should be automatically generated.", "nullable": true }, - "detail": { - "type": "string", + "generateMoments": { + "type": "boolean", + "description": "Whether video moments should be automatically generated.", "nullable": true }, - "instance": { + "sourceLanguage": { "type": "string", + "description": "Video source language, use ISO 639-1 language code.", "nullable": true } } }, - "EncoderCallbackModel": { + "SmartGenerateModel": { "type": "object", "additionalProperties": false, "properties": { - "videoLibraryId": { - "type": "integer", - "format": "int64" - }, - "videoGuid": { - "type": "string", + "generateTitle": { + "type": "boolean", + "description": "Whether video title should be generated.", "nullable": true }, - "success": { - "type": "boolean" - }, - "type": { - "$ref": "#/components/schemas/EncoderCallbackType" - }, - "data": { - "type": "string", + "generateDescription": { + "type": "boolean", + "description": "Whether video description should be generated.", "nullable": true }, - "isPremium": { - "type": "boolean" - }, - "isJit": { - "type": "boolean" - }, - "isRepackage": { - "type": "boolean" - }, - "isReEncode": { - "type": "boolean" - }, - "encodingJobId": { - "type": "integer", - "format": "int32" - } - } - }, - "EncoderCallbackType": { - "type": "integer", - "description": "0 = ThumbnailGenerated\n1 = TaskFinished\n2 = JobFinished\n3 = TranscodingFailed\n4 = VideoInformation\n5 = ThumbnailInformation\n6 = EncodeProgress\n7 = ResolutionFinished\n8 = KeyGenerated\n9 = CaptionsGenerated\n10 = TitleOrDescriptionGenerated\n11 = TranscodingMessageIncoming\n12 = PremiumSegmenting\n13 = PremiumPlaylistsCreated\n14 = CaptionGenerationFailed\n15 = ChaptersGenerated\n16 = MomentsGenerated\n17 = LiveStreamMetadataUpdate", - "x-enumNames": [ - "ThumbnailGenerated", - "TaskFinished", - "JobFinished", - "TranscodingFailed", - "VideoInformation", - "ThumbnailInformation", - "EncodeProgress", - "ResolutionFinished", - "KeyGenerated", - "CaptionsGenerated", - "TitleOrDescriptionGenerated", - "TranscodingMessageIncoming", - "PremiumSegmenting", - "PremiumPlaylistsCreated", - "CaptionGenerationFailed", - "ChaptersGenerated", - "MomentsGenerated", - "LiveStreamMetadataUpdate" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17 - ] - }, - "EncoderProgressModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "videoLibraryId": { - "type": "integer", - "format": "int64" + "generateChapters": { + "type": "boolean", + "description": "Whether video chapters should be generated.", + "nullable": true }, - "videoGuid": { - "type": "string", + "generateMoments": { + "type": "boolean", + "description": "Whether video moments should be generated.", "nullable": true }, - "availableResolutions": { + "sourceLanguage": { "type": "string", + "description": "(Optional) Video source language, use ISO 639-1 language code.", "nullable": true } } }, - "LiveStreamMetadataUpdateCallbackModel": { + "StatusModelOfVideoResolutionsInfoModel": { "allOf": [ { - "$ref": "#/components/schemas/LiveStreamCallbackModel" + "$ref": "#/components/schemas/StatusModel" }, { "type": "object", "additionalProperties": false, "properties": { - "type": { - "$ref": "#/components/schemas/EncoderCallbackType" - }, - "metadata": { + "data": { "nullable": true, "oneOf": [ { - "$ref": "#/components/schemas/LiveStreamMetadata" + "$ref": "#/components/schemas/VideoResolutionsInfoModel" } ] } @@ -5153,440 +3610,275 @@ } ] }, - "LiveStreamMetadata": { + "VideoResolutionsInfoModel": { "type": "object", "additionalProperties": false, "properties": { - "width": { - "type": "integer", - "format": "int32" - }, - "height": { - "type": "integer", - "format": "int32" + "videoId": { + "type": "string", + "nullable": true }, - "framerate": { - "type": "number", - "format": "double" - } - } - }, - "LiveStreamCallbackModel": { - "type": "object", - "x-abstract": true, - "additionalProperties": false, - "properties": { "videoLibraryId": { "type": "integer", "format": "int64" }, - "streamId": { - "type": "string", - "format": "guid" + "availableResolutions": { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } }, - "success": { - "type": "boolean" - } - } - }, - "LiveStreamThumbnailGeneratedCallbackModel": { - "allOf": [ - { - "$ref": "#/components/schemas/LiveStreamCallbackModel" + "configuredResolutions": { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "type": { - "$ref": "#/components/schemas/EncoderCallbackType" - }, - "newThumbnailFileName": { - "type": "string", - "nullable": true - } + "playlistResolutions": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ResolutionReference" } - } - ] - }, - "VideoStatus": { - "type": "integer", - "description": "0 = Created\n1 = Uploaded\n2 = Processing\n3 = Transcoding\n4 = Finished\n5 = Error\n6 = UploadFailed\n7 = JitSegmenting\n8 = JitPlaylistsCreated", - "x-enumNames": [ - "Created", - "Uploaded", - "Processing", - "Transcoding", - "Finished", - "Error", - "UploadFailed", - "JitSegmenting", - "JitPlaylistsCreated" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ] - }, - "AddHeatmapDataModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "currentTime": { - "type": "integer", - "format": "int64" - } - } - }, - "AddVideoViewTimeModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "lid": { - "type": "integer", - "format": "int64" }, - "id": { - "type": "string", - "nullable": true + "storageResolutions": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ResolutionReference" + } }, - "v": { - "type": "integer", - "format": "int32" + "mp4Resolutions": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ResolutionReference" + } }, - "wt": { - "type": "integer", - "format": "int64" - } - } - }, - "AddViewDataModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "views": { - "type": "integer", - "format": "int32" + "storageObjects": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/StorageObjectModel" + } }, - "watchTime": { - "type": "integer", - "format": "int64" + "oldResolutions": { + "type": "array", + "nullable": true, + "items": { + "$ref": "#/components/schemas/StorageObjectModel" + } + }, + "hasBothOldAndNewResolutionFormat": { + "type": "boolean" + }, + "hasOriginal": { + "type": "boolean" } } - }, - "VideoInfoModel": { - "type": "object", - "additionalProperties": false, - "properties": { - "video": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Video" - } - ] + }, + "ResolutionReference": { + "type": "object", + "additionalProperties": false, + "properties": { + "resolution": { + "type": "string", + "nullable": true }, - "heatmapPrebuilt": { + "path": { "type": "string", "nullable": true } } }, - "Video": { + "StorageObjectModel": { "type": "object", "additionalProperties": false, "properties": { - "videoLibraryId": { - "type": "integer", - "format": "int64" - }, "guid": { "type": "string", "nullable": true }, - "title": { + "storageZoneName": { "type": "string", "nullable": true }, - "dateUploaded": { + "path": { "type": "string", - "format": "date-time" - }, - "views": { - "type": "integer", - "format": "int64" - }, - "totalWatchTime": { - "type": "integer", - "format": "int64" - }, - "totalWatchTimeViews": { - "type": "integer", - "format": "int64" - }, - "public": { - "type": "boolean" - }, - "status": { - "$ref": "#/components/schemas/VideoStatus" + "nullable": true }, - "userId": { + "objectName": { "type": "string", "nullable": true }, "length": { "type": "integer", - "format": "int32" - }, - "framerate": { - "type": "number", - "format": "double" - }, - "rotation": { - "type": "integer", - "nullable": true + "format": "int64" }, - "outputCodecs": { + "lastChanged": { "type": "string", - "nullable": true - }, - "jitEncodingEnabled": { - "type": "boolean", - "nullable": true - }, - "encodingTier": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/EncodingTier" - } - ] - }, - "width": { - "type": "integer", - "format": "int32" + "format": "date-time" }, - "height": { + "serverId": { "type": "integer", "format": "int32" }, - "thumbnailCount": { - "type": "integer", - "format": "int32" + "isDirectory": { + "type": "boolean" }, - "availableResolutions": { + "userId": { "type": "string", "nullable": true }, - "encodeProgress": { - "type": "integer", - "format": "int32" - }, - "captions": { + "contentType": { "type": "string", "nullable": true }, - "storageSize": { + "dateCreated": { + "type": "string", + "format": "date-time" + }, + "storageZoneId": { "type": "integer", "format": "int64" }, - "hasMP4Fallback": { - "type": "boolean" - }, - "aesKeyName": { + "checksum": { "type": "string", "nullable": true }, - "collectionId": { + "replicatedZones": { "type": "string", "nullable": true + } + } + }, + "StatusModelOfVideoStorageSizeModel": { + "allOf": [ + { + "$ref": "#/components/schemas/StatusModel" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/VideoStorageSizeModel" + } + ] + } + } + } + ] + }, + "VideoStorageSizeModel": { + "type": "object", + "additionalProperties": false, + "properties": { + "encoded": { + "type": "object", + "nullable": true, + "additionalProperties": { + "$ref": "#/components/schemas/CodecRenditionSizeModel" + } }, - "totalEncodingTime": { + "thumbnails": { "type": "integer", "format": "int64" }, - "thumbnailFileName": { - "type": "string", - "nullable": true + "previews": { + "type": "integer", + "format": "int64" }, - "thumbnailBlurhash": { - "type": "string", - "nullable": true + "originals": { + "type": "integer", + "format": "int64" }, - "thumbnailTime": { + "mp4Fallback": { "type": "integer", - "format": "int32", - "nullable": true + "format": "int64" }, - "deleting": { - "type": "boolean" + "miscellaneous": { + "type": "integer", + "format": "int64" }, - "category": { + "calculatedAt": { "type": "string", - "nullable": true - }, - "chapters": { + "format": "date-time" + } + } + }, + "CodecRenditionSizeModel": { + "type": "object", + "additionalProperties": false, + "properties": { + "codec": { "type": "string", "nullable": true }, - "moments": { + "resolution": { "type": "string", "nullable": true }, - "metaTags": { + "size": { + "type": "integer", + "format": "int64" + } + } + }, + "VideoOEmbedModel": { + "type": "object", + "additionalProperties": false, + "properties": { + "version": { "type": "string", "nullable": true }, - "transcodingMessages": { + "title": { "type": "string", "nullable": true }, - "vrType": { - "$ref": "#/components/schemas/VRTypes" - }, - "description": { + "type": { "type": "string", "nullable": true }, - "transcoderVersion": { + "thumbnail_url": { "type": "string", "nullable": true }, - "hasOriginal": { - "type": "boolean", + "thumbnail_width": { + "type": "integer", + "format": "int32", "nullable": true }, - "encodedDrmType": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/VideoDrmType" - } - ] - }, - "reEncoded": { - "type": "boolean" - }, - "reEncodedTime": { - "type": "string", - "format": "date-time", + "thumbnail_height": { + "type": "integer", + "format": "int32", "nullable": true }, - "reEncodeCount": { + "width": { "type": "integer", "format": "int32" }, - "smartGenerateUsageCount": { + "height": { "type": "integer", - "nullable": true - }, - "smartGenerateStatus": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/SmartGenerateStatus" - } - ] + "format": "int32" }, - "originalHash": { + "html": { "type": "string", "nullable": true }, - "hasHighQualityPreview": { - "type": "boolean", - "nullable": true - } - } - }, - "EncodingTier": { - "type": "integer", - "description": "0 = Free\n1 = Premium", - "x-enumNames": [ - "Free", - "Premium" - ], - "enum": [ - 0, - 1 - ] - }, - "VRTypes": { - "type": "integer", - "description": "0 = None\n1 = VR180\n2 = VR360", - "x-enumNames": [ - "None", - "VR180", - "VR360" - ], - "enum": [ - 0, - 1, - 2 - ] - }, - "VideoDrmType": { - "type": "integer", - "description": "0 = None\n1 = Basic\n2 = EnterpriseEncoded\n3 = RepackageSuccessful\n4 = RepackageProcessing\n5 = RepackageFailed", - "x-enumNames": [ - "None", - "Basic", - "EnterpriseEncoded", - "RepackageSuccessful", - "RepackageProcessing", - "RepackageFailed" - ], - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5 - ] - }, - "SyncSessionResponse": { - "type": "object", - "additionalProperties": false, - "properties": { - "error": { + "provider_name": { "type": "string", "nullable": true }, - "success": { - "type": "boolean" - }, - "sessionKey": { + "provider_url": { "type": "string", "nullable": true - }, - "rocksDbInfo": { - "$ref": "#/components/schemas/RocksDbInfo" - } - } - }, - "RocksDbInfo": { - "type": "object", - "additionalProperties": false, - "properties": { - "version": { - "type": "string" - } - } - }, - "SyncSessionRequest": { - "type": "object", - "additionalProperties": false, - "properties": { - "lastSequenceNumber": { - "type": "integer", - "format": "int64" } } } @@ -5604,9 +3896,6 @@ { "name": "Manage Collections" }, - { - "name": "Manage Live Streams" - }, { "name": "Manage Videos" }