Files
ersatztv/ErsatzTV/wwwroot/openapi/v1.json
T
timothyandOpenAI Codex 63f72c7c50 fix(jellyfin): harden player-owned playback probe
Pin discovery/open to a short schedule-identity snapshot without sharing mutable Jellyfin media sources, gate the authorization-incomplete lab probe behind an explicit opt-in, and add focused plugin tests to the main solution. Redact remote URLs and serialize OpenAPI ApiKey requirements correctly.

Refs #357

Co-Authored-By: OpenAI Codex <codex@openai.com>
2026-07-15 19:07:55 +02:00

32500 lines
860 KiB
JSON

{
"openapi": "3.1.1",
"info": {
"title": "ErsatzTV | v1",
"version": "1.0.0"
},
"paths": {
"/api/v1/artists/{id}": {
"get": {
"tags": [
"Artists"
],
"summary": "Get an artist by id",
"operationId": "GetArtistById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ArtistDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArtistDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ArtistDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/artwork/uploads": {
"post": {
"tags": [
"Artwork"
],
"summary": "Upload channel logo or watermark artwork",
"operationId": "UploadArtwork",
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"allOf": [
{
"type": "object",
"properties": {
"file": {
"$ref": "#/components/schemas/IFormFile"
}
}
},
{
"type": "object",
"properties": {
"target": {
"type": "string"
}
}
}
]
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ArtworkUploadResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArtworkUploadResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ArtworkUploadResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/groups": {
"get": {
"tags": [
"Blocks"
],
"summary": "Get all block groups",
"operationId": "GetBlockGroups",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Blocks"
],
"summary": "Create a block group",
"operationId": "BlockCreateGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockGroupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlockGroupResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/groups/{id}": {
"delete": {
"tags": [
"Blocks"
],
"summary": "Delete a block group",
"description": "Deletes the block group. The database cascade removes every block (and its items) in the group.",
"operationId": "BlockDeleteGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks": {
"get": {
"tags": [
"Blocks"
],
"summary": "Get all blocks",
"operationId": "BlockGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Blocks"
],
"summary": "Create a block",
"description": "Creates an empty block in the given block group. The block defaults to 30 minutes.",
"operationId": "BlockCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateBlockRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/{id}": {
"get": {
"tags": [
"Blocks"
],
"summary": "Get a block by id",
"operationId": "GetBlockById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Blocks"
],
"summary": "Delete a block",
"operationId": "BlockDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Blocks"
],
"summary": "Replace a block and its items",
"description": "Replaces the block's name/minutes/stop-scheduling and its full item list. Item indexes are assigned from the array order. Minutes must be greater than zero, divisible by 5, and at most 24 hours. Send the ETag from the items GET as If-Match to reject a stale overwrite with 412 (issue #253); a successful response carries the new ETag.",
"operationId": "BlockReplace",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlockWithItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlockWithItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlockWithItemsResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/{id}/items": {
"get": {
"tags": [
"Blocks"
],
"summary": "Get block items",
"description": "Returns the block's items and a strong ETag of the block's version. Pass that ETag back as If-Match on the replace (PUT) to detect a concurrent edit (issue #253).",
"operationId": "BlockGetItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockItemResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/{id}/preview": {
"post": {
"tags": [
"Blocks"
],
"summary": "Preview a block playout",
"description": "Builds a preview playout from the supplied block definition without persisting any changes to the block, its items, or any playout. Returns the resulting start/finish/title/duration list.",
"operationId": "BlockPreview",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceBlockRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockPreviewItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockPreviewItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockPreviewItemResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/blocks/{id}/copy": {
"post": {
"tags": [
"Blocks"
],
"summary": "Copy a block",
"description": "Copies the block and its items into another (or the same) block group under a new name.",
"operationId": "BlockCopy",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CopyBlockRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CopyBlockRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CopyBlockRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CopyBlockRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels": {
"get": {
"tags": [
"Channel"
],
"operationId": "ChannelGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Channels"
],
"summary": "Create a channel",
"operationId": "ChannelCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/state": {
"get": {
"tags": [
"Channels"
],
"summary": "Get channel runtime state",
"operationId": "ChannelGetState",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelStateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelStateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelStateResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/guide": {
"get": {
"tags": [
"Channels"
],
"summary": "Get the JSON channel guide (EPG)",
"description": "Returns per-channel programme arrays for the EPG grid. When omitted, start defaults to now, and end defaults to start plus the configured XmltvDaysToBuild window.",
"operationId": "ChannelGetGuide",
"parameters": [
{
"name": "start",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "end",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelGuideResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelGuideResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelGuideResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/{id}/playback-source": {
"get": {
"tags": [
"Channels"
],
"summary": "Resolve the scheduled playback source for a channel",
"description": "Returns the physical media item and in-file offset selected by the channel schedule at the requested time. This read-only endpoint never starts an ErsatzTV transcoder. at defaults to now.",
"operationId": "ChannelGetPlaybackSource",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "at",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelPlaybackSourceResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelPlaybackSourceResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelPlaybackSourceResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/music-video-credits-templates": {
"get": {
"tags": [
"Channels"
],
"summary": "Get available music video credits template names",
"operationId": "GetMusicVideoCreditsTemplates",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/stream-selectors": {
"get": {
"tags": [
"Channels"
],
"summary": "Get available channel stream selector names",
"operationId": "GetChannelStreamSelectors",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/{id}": {
"get": {
"tags": [
"Channels"
],
"summary": "Get a channel by id",
"operationId": "GetChannelById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Channels"
],
"summary": "Update a channel",
"operationId": "ChannelUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Channels"
],
"summary": "Delete a channel",
"operationId": "ChannelDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/from-lineup": {
"post": {
"tags": [
"Channels"
],
"summary": "Create a channel from a library lineup",
"description": "Atomically creates the channel, program schedule, a classic playout, and (for multi-item lineups) a generated system playlist. A single-item lineup produces one flood schedule item that references the target directly (movie, show, season, artist, collection, smart/multi collection, rerun collection, or playlist) and no generated playlist. A lineup with two or more items produces one generated system playlist whose entries play in the given order (each entry played in full before the next) referenced by one flood schedule item; only movies, shows, seasons, artists, collections, smart collections and multi collections are allowed there (rerun collections and playlists are single-item only). playbackOrder sets how items within each lineup entry are ordered. Template defaults are stamped at create time; advanced overrides win.",
"operationId": "CreateChannelFromLineup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelFromLineupResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/bulk/renumber": {
"post": {
"tags": [
"Channels"
],
"summary": "Renumber channels",
"operationId": "ChannelBulkRenumber",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/BulkRenumberChannelsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkRenumberChannelsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkRenumberChannelsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkRenumberChannelsRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/bulk/group": {
"post": {
"tags": [
"Channels"
],
"summary": "Move channels to a group",
"operationId": "ChannelBulkMoveToGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/bulk/delete": {
"post": {
"tags": [
"Channels"
],
"summary": "Delete channels",
"operationId": "ChannelBulkDelete",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/BulkDeleteChannelsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkDeleteChannelsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/BulkDeleteChannelsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/BulkDeleteChannelsRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channels/{id}/playout/reset": {
"post": {
"tags": [
"Channels"
],
"summary": "Reset channel playout",
"description": "When mode is omitted, classic playouts use Refresh (rebuild while maintaining collection progress) and all other playout kinds use Reset (rebuild from scratch), matching the Blazor UI. Pass mode to force a specific PlayoutBuildMode.",
"operationId": "ChannelResetPlayout",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "mode",
"in": "query",
"schema": {
"$ref": "#/components/schemas/PlayoutBuildMode"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channel-templates": {
"get": {
"tags": [
"Channel Templates"
],
"summary": "Get all channel templates",
"operationId": "GetChannelTemplates",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Channel Templates"
],
"summary": "Create a channel template",
"operationId": "CreateChannelTemplate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateChannelTemplateRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channel-templates/default": {
"get": {
"tags": [
"Channel Templates"
],
"summary": "Get the default channel template",
"operationId": "GetDefaultChannelTemplate",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channel-templates/default/{id}": {
"put": {
"tags": [
"Channel Templates"
],
"summary": "Set the default channel template",
"operationId": "SetDefaultChannelTemplate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/channel-templates/{id}": {
"get": {
"tags": [
"Channel Templates"
],
"summary": "Get a channel template by id",
"operationId": "GetChannelTemplateById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Channel Templates"
],
"summary": "Update a channel template",
"operationId": "UpdateChannelTemplate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateChannelTemplateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChannelTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Channel Templates"
],
"summary": "Delete a channel template",
"operationId": "DeleteChannelTemplate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/collections": {
"get": {
"tags": [
"Collections"
],
"summary": "Get all collections",
"operationId": "CollectionGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Collections"
],
"summary": "Create a collection",
"operationId": "CollectionCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateCollectionRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/collections/{id}": {
"get": {
"tags": [
"Collections"
],
"summary": "Get a collection by id",
"operationId": "GetCollectionById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Collections"
],
"summary": "Update a collection",
"operationId": "CollectionUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MediaCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Collections"
],
"summary": "Delete a collection",
"operationId": "CollectionDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/collections/{id}/items": {
"get": {
"tags": [
"Collections"
],
"summary": "Get the items in a manual collection",
"description": "Returns a manual collection's full contents (all media kinds), paged.",
"operationId": "GetCollectionItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Collections"
],
"summary": "Add items to a collection",
"operationId": "CollectionAddItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToCollectionRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/collections/{id}/custom-order": {
"put": {
"tags": [
"Collections"
],
"summary": "Set a collection's custom playback order",
"description": "Replaces the custom playback order of a manual collection. CustomIndex is assigned from array position (the request body has no index field); ids that are not members of the collection are ignored. Set UseCustomPlaybackOrder on the collection for this order to take effect.",
"operationId": "CollectionUpdateCustomOrder",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionCustomOrderRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionCustomOrderRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionCustomOrderRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionCustomOrderRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/collections/{id}/items/{mediaItemId}": {
"delete": {
"tags": [
"Collections"
],
"summary": "Remove an item from a collection",
"operationId": "CollectionRemoveItem",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "mediaItemId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/decos/groups": {
"get": {
"tags": [
"Decos"
],
"summary": "Get all deco groups",
"operationId": "GetDecoGroups",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Decos"
],
"summary": "Create a deco group",
"operationId": "DecoCreateGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoGroupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoGroupResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/decos/groups/{id}": {
"delete": {
"tags": [
"Decos"
],
"summary": "Delete a deco group",
"description": "Deletes the deco group. The database cascade removes every deco in the group (and each deco's break content and watermark/graphics-element assignments); any playout that used a removed deco has its default deco cleared.",
"operationId": "DecoDeleteGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/decos": {
"get": {
"tags": [
"Decos"
],
"summary": "Get all decos",
"description": "Returns every deco as a flat list, ordered by group name then deco name.",
"operationId": "DecoGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoListItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoListItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoListItemResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Decos"
],
"summary": "Create a deco",
"description": "Creates a deco in the given deco group. The deco inherits everything by default.",
"operationId": "DecoCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/decos/{id}": {
"get": {
"tags": [
"Decos"
],
"summary": "Get a deco by id",
"operationId": "GetDecoById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Decos"
],
"summary": "Delete a deco",
"description": "Deletes the deco. Any playout that used it as its default deco has that default cleared.",
"operationId": "DecoDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Decos"
],
"summary": "Replace a deco",
"description": "Replaces the full state of the deco (name and all six sections). Send the entire desired state, including unchanged sections. Merge is only valid for the watermark and graphics-element modes. Break content allows at most one item per placement.",
"operationId": "DecoReplace",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/deco-templates/groups": {
"get": {
"tags": [
"DecoTemplates"
],
"summary": "Get all deco template groups",
"operationId": "GetDecoTemplateGroups",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"DecoTemplates"
],
"summary": "Create a deco template group",
"operationId": "DecoTemplateCreateGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateGroupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateGroupResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/deco-templates/groups/{id}": {
"delete": {
"tags": [
"DecoTemplates"
],
"summary": "Delete a deco template group",
"description": "Deletes the deco template group. The database cascade removes every deco template (and its items) in the group; any playout template that used a removed deco template has that reference cleared.",
"operationId": "DecoTemplateDeleteGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/deco-templates": {
"get": {
"tags": [
"DecoTemplates"
],
"summary": "Get all deco templates",
"description": "Returns every deco template as a flat list, ordered by group name then deco template name.",
"operationId": "DecoTemplateGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"DecoTemplates"
],
"summary": "Create a deco template",
"description": "Creates an empty deco template in the given deco template group.",
"operationId": "DecoTemplateCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateDecoTemplateRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/deco-templates/{id}": {
"get": {
"tags": [
"DecoTemplates"
],
"summary": "Get a deco template by id",
"operationId": "GetDecoTemplateById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"DecoTemplates"
],
"summary": "Delete a deco template",
"operationId": "DecoTemplateDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"DecoTemplates"
],
"summary": "Replace a deco template and its items",
"description": "Replaces the deco template's name and its full item list. Each item assigns a deco to a start/end time of day; an end time of 00:00:00 means the item runs to the end of the day. Items must not overlap. Send the ETag from the items GET as If-Match to reject a stale overwrite with 412 (issue #253); a successful response carries the new ETag.",
"operationId": "DecoTemplateReplace",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceDecoTemplateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateWithItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateWithItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DecoTemplateWithItemsResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/deco-templates/{id}/items": {
"get": {
"tags": [
"DecoTemplates"
],
"summary": "Get deco template items",
"description": "Returns the deco template's items and a strong ETag of the deco template's version. Pass that ETag back as If-Match on the replace (PUT) to detect a concurrent edit (issue #253).",
"operationId": "DecoTemplateGetItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateItemResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby": {
"get": {
"tags": [
"Emby"
],
"summary": "Get Emby connection state and discovered servers",
"operationId": "GetEmbyState",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/connection": {
"get": {
"tags": [
"Emby"
],
"summary": "Get the Emby connection address",
"description": "Never returns the API key — only whether one is currently configured (design #202 secure connection contract). Use the PUT to (re)connect; a blank apiKey there retains the existing key.",
"operationId": "GetEmbyConnection",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Emby"
],
"summary": "Connect, reconnect, or edit the Emby connection",
"description": "A blank/omitted apiKey retains the existing key; a non-blank value sets a new one. The key is required on first connect (no existing secret).",
"operationId": "SaveEmbyConnection",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/disconnect": {
"post": {
"tags": [
"Emby"
],
"summary": "Disconnect Emby",
"description": "Purges the Emby connection, discovered servers, and all synced Emby content.",
"operationId": "DisconnectEmby",
"responses": {
"204": {
"description": "No Content"
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/{id}/libraries": {
"get": {
"tags": [
"Emby"
],
"summary": "Get an Emby source's libraries",
"operationId": "GetEmbyLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Emby"
],
"summary": "Replace an Emby source's library sync preferences",
"description": "The body must be the complete set of the source's libraries (design #202 §C4a) — a row absent from the request is rejected, not silently ignored. Ids are not stable across a disable, so re-fetch this response rather than the request body.",
"operationId": "ReplaceEmbyLibraryPreferences",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/{id}/path-replacements": {
"get": {
"tags": [
"Emby"
],
"summary": "Get an Emby source's path replacements",
"operationId": "GetEmbyPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Emby"
],
"summary": "Replace an Emby source's path replacements",
"operationId": "ReplaceEmbyPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/{id}/refresh-libraries": {
"post": {
"tags": [
"Emby"
],
"summary": "Refresh an Emby source's libraries",
"operationId": "RefreshEmbyLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/emby/{id}/scan-collections": {
"post": {
"tags": [
"Emby"
],
"summary": "Scan an Emby source's collections",
"description": "Queues a synchronization of the source's collections (fire-and-forget). Pass ?deep=true for a deep scan. Returns 409 while an Emby collections scan is already in progress.",
"operationId": "ScanEmbyCollections",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "deep",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/ffmpeg/profiles": {
"get": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Get all FFmpeg profiles",
"operationId": "GetFFmpegProfiles",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Create an FFmpeg profile",
"operationId": "CreateFFmpegProfile",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateFFmpegProfileRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateFFmpegProfileRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateFFmpegProfileRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateFFmpegProfileRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/ffmpeg/hardware-acceleration-kinds": {
"get": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Get supported hardware acceleration kinds",
"description": "Returns the hardware-acceleration kinds available on this host (probed from the configured FFmpeg binary). Always includes None; falls back to just None when FFmpeg is unavailable.",
"operationId": "GetSupportedHardwareAccelerationKinds",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/ffmpeg/profiles/{id}": {
"get": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Get an FFmpeg profile by id",
"operationId": "GetFFmpegProfileById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Update an FFmpeg profile",
"operationId": "UpdateFFmpegProfile",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegProfileRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegProfileRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegProfileRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegProfileRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegFullProfileResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"FFmpeg Profiles"
],
"summary": "Delete an FFmpeg profile",
"operationId": "DeleteFFmpegProfile",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/filler-presets": {
"get": {
"tags": [
"Filler Presets"
],
"summary": "Get all filler presets",
"description": "Optionally filter to a single filler kind via the fillerKind query parameter.",
"operationId": "GetFillerPresets",
"parameters": [
{
"name": "fillerKind",
"in": "query",
"schema": {
"$ref": "#/components/schemas/FillerKind"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FillerPresetResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FillerPresetResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FillerPresetResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Filler Presets"
],
"summary": "Create a filler preset",
"operationId": "CreateFillerPreset",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateFillerPresetRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateFillerPresetRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateFillerPresetRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateFillerPresetRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/filler-presets/{id}": {
"get": {
"tags": [
"Filler Presets"
],
"summary": "Get a filler preset by id",
"operationId": "GetFillerPresetById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Filler Presets"
],
"summary": "Update a filler preset",
"operationId": "UpdateFillerPreset",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFillerPresetRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFillerPresetRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFillerPresetRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFillerPresetRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FillerPresetFullResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Filler Presets"
],
"summary": "Delete a filler preset",
"operationId": "DeleteFillerPreset",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/graphics-elements": {
"get": {
"tags": [
"Graphics Elements"
],
"summary": "Get all graphics elements",
"description": "Returns all graphics elements.",
"operationId": "GetGraphicsElements",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/GraphicsElementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/GraphicsElementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/GraphicsElementResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/graphics-elements/refresh": {
"post": {
"tags": [
"Graphics Elements"
],
"summary": "Re-sync graphics elements from disk",
"description": "Re-syncs the on-disk graphics element definitions into the database (matching the legacy Blazor behavior) so newly added files appear.",
"operationId": "RefreshGraphicsElements",
"responses": {
"204": {
"description": "No Content"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/health": {
"get": {
"tags": [
"Health"
],
"summary": "Get health check results",
"operationId": "GetHealthChecks",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HealthCheckResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HealthCheckResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HealthCheckResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/images/folders": {
"get": {
"tags": [
"Images"
],
"summary": "List image library folders",
"description": "Omit parentId for the top-level folders; pass a folder id to list that folder's children.",
"operationId": "GetImageFolders",
"parameters": [
{
"name": "parentId",
"in": "query",
"description": "Parent image library-folder id; omit for the top-level folders",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ImageFolderResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ImageFolderResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ImageFolderResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/images/folders/{id}/duration": {
"put": {
"tags": [
"Images"
],
"summary": "Set or clear an image folder's playout duration",
"description": "Pass a positive durationSeconds to set the per-image duration for this folder (cascades to descendant images that don't override it); pass null to clear it and inherit from an ancestor.",
"operationId": "UpdateImageFolderDuration",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateImageFolderDurationResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin": {
"get": {
"tags": [
"Jellyfin"
],
"summary": "Get Jellyfin connection state and discovered servers",
"operationId": "GetJellyfinState",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/connection": {
"get": {
"tags": [
"Jellyfin"
],
"summary": "Get the Jellyfin connection address",
"description": "Never returns the API key — only whether one is currently configured (design #202 secure connection contract). Use the PUT to (re)connect; a blank apiKey there retains the existing key.",
"operationId": "GetJellyfinConnection",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Jellyfin"
],
"summary": "Connect, reconnect, or edit the Jellyfin connection",
"description": "A blank/omitted apiKey retains the existing key; a non-blank value sets a new one. The key is required on first connect (no existing secret).",
"operationId": "SaveJellyfinConnection",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/SaveRemoteConnectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteConnectionResponseModel"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/disconnect": {
"post": {
"tags": [
"Jellyfin"
],
"summary": "Disconnect Jellyfin",
"description": "Purges the Jellyfin connection, discovered servers, and all synced Jellyfin content.",
"operationId": "DisconnectJellyfin",
"responses": {
"204": {
"description": "No Content"
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/{id}/libraries": {
"get": {
"tags": [
"Jellyfin"
],
"summary": "Get a Jellyfin source's libraries",
"operationId": "GetJellyfinLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Jellyfin"
],
"summary": "Replace a Jellyfin source's library sync preferences",
"description": "The body must be the complete set of the source's libraries (design #202 §C4a) — a row absent from the request is rejected, not silently ignored. Ids are not stable across a disable, so re-fetch this response rather than the request body.",
"operationId": "ReplaceJellyfinLibraryPreferences",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/{id}/path-replacements": {
"get": {
"tags": [
"Jellyfin"
],
"summary": "Get a Jellyfin source's path replacements",
"operationId": "GetJellyfinPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Jellyfin"
],
"summary": "Replace a Jellyfin source's path replacements",
"operationId": "ReplaceJellyfinPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/{id}/refresh-libraries": {
"post": {
"tags": [
"Jellyfin"
],
"summary": "Refresh a Jellyfin source's libraries",
"operationId": "RefreshJellyfinLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/jellyfin/{id}/scan-collections": {
"post": {
"tags": [
"Jellyfin"
],
"summary": "Scan a Jellyfin source's collections",
"description": "Queues a synchronization of the source's collections (fire-and-forget). Pass ?deep=true for a deep scan. Returns 409 while a Jellyfin collections scan is already in progress.",
"operationId": "ScanJellyfinCollections",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "deep",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/languages": {
"get": {
"tags": [
"Languages"
],
"summary": "Get all available language codes",
"operationId": "GetLanguages",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LanguageCodeResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LanguageCodeResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LanguageCodeResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/scan-status": {
"get": {
"tags": [
"Libraries"
],
"summary": "Get active library scan status",
"operationId": "GetLibraryScanStatus",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryScanStatusResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryScanStatusResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryScanStatusResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/{id}/scan": {
"post": {
"tags": [
"Libraries"
],
"summary": "Scan library",
"description": "Queues a scan of the whole library. Pass ?deep=true for a deep (metadata-refresh) scan.",
"operationId": "LibrariesScanLibrary",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "deep",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/{id}/scan-show": {
"post": {
"tags": [
"Libraries"
],
"summary": "Scan show",
"operationId": "LibrariesScanShow",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ScanShowRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScanShowRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScanShowRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ScanShowRequest"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/library/browse": {
"get": {
"tags": [
"Libraries"
],
"summary": "Browse and search library items",
"operationId": "BrowseLibrary",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "libraryId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "mediaType",
"in": "query",
"schema": {
"$ref": "#/components/schemas/LibraryBrowseMediaType"
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
},
{
"name": "parentId",
"in": "query",
"description": "Parent id for a drill-in listing; only used with mediaType=TelevisionSeason (that show's seasons), mediaType=Episode (that season's episodes) or mediaType=MusicVideo (that artist's music videos), ignored otherwise",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedLibraryBrowseItemsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/local": {
"get": {
"tags": [
"Libraries"
],
"summary": "Get all local libraries",
"operationId": "GetLocalLibraries",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Libraries"
],
"summary": "Create a local library",
"operationId": "LocalLibrariesCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateLocalLibraryRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateLocalLibraryRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateLocalLibraryRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateLocalLibraryRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/local/{id}": {
"get": {
"tags": [
"Libraries"
],
"summary": "Get a local library by id",
"operationId": "GetLocalLibrary",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Libraries"
],
"summary": "Update a local library",
"description": "Replaces the library's name and full path list. MediaKind is immutable after create and is not part of this request. Paths are identified by normalized path string, not id — a renamed path is a delete-old + add-new (its id changes).",
"operationId": "LocalLibrariesUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateLocalLibraryRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateLocalLibraryRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateLocalLibraryRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateLocalLibraryRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LocalLibraryDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Libraries"
],
"summary": "Delete a local library",
"operationId": "LocalLibrariesDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/local/paths/{pathId}/move": {
"post": {
"tags": [
"Libraries"
],
"summary": "Move a local library path to another local library",
"description": "Moves a path (and its scanned media) from its current library to a different local library of the same media kind. Blazor's move dialog enforces same-kind/different-library only client-side; this endpoint enforces both server-side so API/MCP clients cannot bypass them.",
"operationId": "LocalLibrariesMovePath",
"parameters": [
{
"name": "pathId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/MoveLocalLibraryPathRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MoveLocalLibraryPathRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MoveLocalLibraryPathRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/MoveLocalLibraryPathRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/libraries/local/path-exists": {
"post": {
"tags": [
"Libraries"
],
"summary": "Check whether a filesystem path exists",
"description": "Server-side existence check for the SPA's add-path UX (a browser cannot call Directory.Exists). This is a check-then-act convenience only — Create/Update still validate new paths at save time (design #202 §C2).",
"operationId": "LocalLibrariesCheckPathExists",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LocalPathCheckResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/logs": {
"get": {
"tags": [
"Logs"
],
"summary": "Get recent log entries",
"description": "sortField is validated against an allow-list (timestamp, level); an unrecognized value falls back to timestamp. sortDirection accepts asc/desc and falls back to desc (the pre-existing default, newest first).",
"operationId": "GetLogs",
"parameters": [
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
},
{
"name": "filter",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "sortField",
"in": "query",
"schema": {
"type": "string",
"default": "timestamp"
}
},
{
"name": "sortDirection",
"in": "query",
"schema": {
"type": "string",
"default": "desc"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedLogEntriesResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedLogEntriesResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedLogEntriesResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/maintenance/gc": {
"post": {
"tags": [
"Maintenance"
],
"summary": "Garbage collect",
"operationId": "MaintenanceGarbageCollection",
"parameters": [
{
"name": "force",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/maintenance/empty_trash": {
"post": {
"tags": [
"Maintenance"
],
"summary": "Empty trash",
"operationId": "MaintenanceEmptyTrash",
"responses": {
"200": {
"description": "OK"
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/maintenance/clean_artwork": {
"post": {
"tags": [
"Maintenance"
],
"summary": "Clean artwork cache",
"operationId": "MaintenanceCleanArtwork",
"responses": {
"202": {
"description": "Accepted"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-items": {
"delete": {
"tags": [
"Media Items"
],
"summary": "Delete media items from the database",
"operationId": "DeleteMediaItems",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/DeleteMediaItemsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeleteMediaItemsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DeleteMediaItemsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/DeleteMediaItemsRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-items/{id}/info": {
"get": {
"tags": [
"Media Items"
],
"summary": "Get technical media info for a media item",
"operationId": "GetMediaItemInfo",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MediaItemInfoResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MediaItemInfoResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MediaItemInfoResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources": {
"get": {
"tags": [
"Media Sources"
],
"summary": "Get all media sources with their libraries",
"operationId": "GetMediaSources",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaSourceResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaSourceResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaSourceResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/collections-scan-status": {
"get": {
"tags": [
"Media Sources"
],
"summary": "Get active external-collections scan status",
"description": "Returns the media-source families (plex/jellyfin/emby) whose external-collections scan lock is currently held. Collections locks are family-global, so an entry means every source of that family is scanning. Empty when nothing is scanning. The SPA polls this to reconcile the collections scan buttons against a live active set, matching the library-scan UX.",
"operationId": "GetCollectionsScanStatus",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CollectionsScanStatusResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CollectionsScanStatusResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CollectionsScanStatusResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/movies/{id}": {
"get": {
"tags": [
"Movies"
],
"summary": "Get a movie by id",
"operationId": "GetMovieById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MovieDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MovieDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MovieDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/multi-collections": {
"get": {
"tags": [
"Multi Collections"
],
"summary": "Get all multi collections (paged)",
"operationId": "GetMultiCollections",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedMultiCollectionsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedMultiCollectionsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedMultiCollectionsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Multi Collections"
],
"summary": "Create a multi collection",
"operationId": "MultiCollectionCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateMultiCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateMultiCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateMultiCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateMultiCollectionRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/multi-collections/{id}": {
"get": {
"tags": [
"Multi Collections"
],
"summary": "Get a multi collection by id",
"operationId": "GetMultiCollectionById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Multi Collections"
],
"summary": "Update a multi collection",
"operationId": "MultiCollectionUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateMultiCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateMultiCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateMultiCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateMultiCollectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Multi Collections"
],
"summary": "Delete a multi collection",
"operationId": "MultiCollectionDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists/groups": {
"get": {
"tags": [
"Playlists"
],
"summary": "Get all playlist groups",
"operationId": "GetPlaylistGroups",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Playlists"
],
"summary": "Create a playlist group",
"operationId": "CreatePlaylistGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistGroupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists/groups/{id}": {
"put": {
"tags": [
"Playlists"
],
"summary": "Rename a playlist group",
"operationId": "UpdatePlaylistGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlaylistGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlaylistGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlaylistGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlaylistGroupRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistGroupResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Playlists"
],
"summary": "Delete a playlist group",
"operationId": "DeletePlaylistGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists": {
"get": {
"tags": [
"Playlists"
],
"summary": "Get playlists in a playlist group",
"description": "Returns the playlists in the given playlist group.",
"operationId": "GetPlaylists",
"parameters": [
{
"name": "playlistGroupId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Playlists"
],
"summary": "Create a playlist",
"operationId": "CreatePlaylistInGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlaylistRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists/{id}": {
"get": {
"tags": [
"Playlists"
],
"summary": "Get a playlist by id",
"operationId": "GetPlaylistById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlaylistResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Playlists"
],
"summary": "Update a playlist (rename and replace its items)",
"description": "Replaces the playlist's name and its full item list. Item indexes are assigned from the array order. Send the ETag from the items GET as If-Match to reject a stale overwrite with 412 (issue #253); a successful response carries the new ETag.",
"operationId": "UpdatePlaylist",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Playlists"
],
"summary": "Delete a playlist",
"operationId": "DeletePlaylist",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists/{id}/items": {
"get": {
"tags": [
"Playlists"
],
"summary": "Get the items in a playlist",
"description": "Returns the playlist's items and a strong ETag of the playlist's version. Pass that ETag back as If-Match on the replace (PUT) to detect a concurrent edit (issue #253).",
"operationId": "GetPlaylistItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistItemResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Playlists"
],
"summary": "Add items to a playlist",
"operationId": "AddItemsToPlaylist",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToPlaylistRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToPlaylistRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToPlaylistRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/AddItemsToPlaylistRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playlists/preview": {
"post": {
"tags": [
"Playlists"
],
"summary": "Preview the playout of a draft playlist",
"description": "Builds a preview playout from the posted draft playlist items (no persistence).",
"operationId": "PreviewPlaylist",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlaylistRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistPreviewItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistPreviewItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlaylistPreviewItemResponseModel"
}
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts": {
"get": {
"tags": [
"Playouts"
],
"summary": "List playouts",
"operationId": "GetPlayouts",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Playouts"
],
"summary": "Create a playout",
"description": "Creates a playout of any kind (Classic, Block, Sequential, Scripted, or ExternalJson) for a channel. Classic requires ProgramScheduleId; Sequential/Scripted/ExternalJson require ScheduleFile; Block requires neither. A channel may only have one playout.",
"operationId": "PlayoutCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlayoutRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlayoutRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreatePlayoutRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreatePlayoutRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/warnings/count": {
"get": {
"tags": [
"Playouts"
],
"summary": "Count playouts with a failed build",
"operationId": "GetPlayoutWarningsCount",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "integer",
"format": "int32"
}
},
"application/json": {
"schema": {
"type": "integer",
"format": "int32"
}
},
"text/json": {
"schema": {
"type": "integer",
"format": "int32"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get a playout by id",
"operationId": "GetPlayoutById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Playouts"
],
"summary": "Update playout scheduling details",
"description": "DailyRebuildTime is always applied; omit it (null) to clear the daily reset. ScheduleFile is only valid for Sequential, Scripted, and ExternalJson playouts; omit it (null) to leave it unchanged.",
"operationId": "PlayoutUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutDetailsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutDetailsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutDetailsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutDetailsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Playouts"
],
"summary": "Delete a playout",
"operationId": "PlayoutDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/items": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get upcoming items (and unscheduled gaps) for a playout",
"operationId": "GetPlayoutItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "showFiller",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutItemsResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/deco": {
"put": {
"tags": [
"Playouts"
],
"summary": "Set (or clear) a playout's default deco",
"description": "Assigns the default deco for a block playout. Send a null decoId to clear it.",
"operationId": "PlayoutUpdateDefaultDeco",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateDefaultDecoRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateDefaultDecoRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateDefaultDecoRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateDefaultDecoRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/alternate-schedules": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get a classic playout's alternate schedules",
"description": "Lists a Classic playout's alternate schedules in priority order (first = highest priority). The last entry is the catch-all default, and its schedule is the playout's default schedule; if no explicit catch-all exists the query synthesizes one from the playout's default schedule. Only valid for Classic playouts; other kinds return 422.",
"operationId": "GetPlayoutAlternateSchedules",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Playouts"
],
"summary": "Replace a classic playout's alternate schedules",
"description": "Replaces a Classic playout's alternate schedules. Items are ordered by priority: the first item is the highest priority and the last item is the catch-all default whose schedule becomes the playout's default schedule. Index is assigned from array order (the request body has no Index field). The list must contain at least one item, and every ProgramScheduleId must exist. Only valid for Classic playouts.",
"operationId": "PlayoutReplaceAlternateSchedules",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutAlternateSchedulesRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutAlternateSchedulesRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutAlternateSchedulesRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutAlternateSchedulesRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleResponseModel"
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/templates": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get a block playout's templates",
"description": "Lists a Block playout's templates in priority order (first = highest priority). Each template optionally carries a deco template. Only valid for Block playouts; other kinds return 422.",
"operationId": "GetPlayoutTemplates",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Playouts"
],
"summary": "Replace a block playout's templates",
"description": "Replaces a Block playout's templates. Items are ordered by priority (first = highest priority); Index is assigned from array order (the request body has no Index field). Every TemplateId must exist, and any supplied DecoTemplateId must exist. An empty list clears all templates. Only valid for Block playouts.",
"operationId": "PlayoutReplaceTemplates",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutTemplatesRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutTemplatesRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutTemplatesRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePlayoutTemplatesRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutTemplateResponseModel"
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/blocks": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get the blocks scheduled by a block playout",
"description": "Lists the distinct blocks reachable through a Block playout's templates, ordered by group then name. A playout with no templates (including non-Block playouts) returns an empty list.",
"operationId": "GetPlayoutBlocks",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/blocks/{blockId}/history": {
"get": {
"tags": [
"Playouts"
],
"summary": "Get a block's playout history",
"description": "Returns the paged scheduling history for a single block within a block playout, oldest first. Each row's Key and Details carry raw JSON; decode a row via GET /api/v1/playouts/history/{id}.",
"operationId": "GetPlayoutBlockHistory",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "blockId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutHistoryResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutHistoryResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedPlayoutHistoryResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/history/{id}": {
"get": {
"tags": [
"Playouts"
],
"summary": "Decode a playout history row",
"description": "Decodes a single playout history row (by its id) into its playback order, collection, and media-item details. Returns 422 if the row's stored Key/Details JSON cannot be decoded.",
"operationId": "GetPlayoutHistoryDetails",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutHistoryDetailsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutHistoryDetailsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutHistoryDetailsResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/reset-all": {
"post": {
"tags": [
"Playouts"
],
"summary": "Reset all playouts",
"operationId": "ResetAllPlayouts",
"responses": {
"202": {
"description": "Accepted",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ResetAllPlayoutsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResetAllPlayoutsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ResetAllPlayoutsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/erase-items": {
"post": {
"tags": [
"Playouts"
],
"summary": "Erase a playout's items",
"description": "Deletes the built items (plus gaps and build status) for a Block, Sequential, or Scripted playout, preserving history that precedes the currently-airing item. Only valid for those kinds; other kinds return 422.",
"operationId": "ErasePlayoutItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/{id}/erase-items-and-history": {
"post": {
"tags": [
"Playouts"
],
"summary": "Erase a playout's items and history",
"description": "Deletes all built items, history, anchors, and build status for a Classic, Block, Sequential, or Scripted playout, and reseeds it. Only valid for those kinds; other kinds return 422.",
"operationId": "ErasePlayoutItemsAndHistory",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/playouts/items/{id}/scheduling-context": {
"get": {
"tags": [
"Playouts"
],
"summary": "Decode a playout item's scheduling context",
"description": "Decodes the stored scheduling context for a single playout item (by its row id) into readable, enriched JSON. Returns 404 when the item is missing or has no scheduling context.",
"operationId": "GetPlayoutItemSchedulingContext",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutItemSchedulingContextResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutItemSchedulingContextResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutItemSchedulingContextResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex": {
"get": {
"tags": [
"Plex"
],
"summary": "Get Plex connection state",
"description": "Returns whether ErsatzTV is authorized with plex.tv, whether a Plex sign-in/sync lock is held, and the list of discovered Plex servers. Poll this during the pin flow: authorized && !locked = done.",
"operationId": "GetPlexState",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RemoteMediaSourceStateResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/pin-flow": {
"post": {
"tags": [
"Plex"
],
"summary": "Start the Plex sign-in pin flow",
"description": "Acquires the Plex lock and starts the OAuth pin flow, returning the plex.tv authorization URL to open in a new tab. The lock stays held for the background flow; poll GET /api/v1/media-sources/plex until authorized && !locked. Also used to fix credentials for an existing but unauthorized server.",
"operationId": "StartPlexPinFlow",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlexPinFlowResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlexPinFlowResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlexPinFlowResponseModel"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/sign-out": {
"post": {
"tags": [
"Plex"
],
"summary": "Sign out of Plex",
"description": "Purges all Plex servers, synced Plex content, and stored credentials. Acquires the Plex lock; the handler always releases it (even on failure).",
"operationId": "SignOutOfPlex",
"responses": {
"204": {
"description": "No Content"
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/{id}/libraries": {
"get": {
"tags": [
"Plex"
],
"summary": "Get a Plex server's libraries",
"operationId": "GetPlexLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Plex"
],
"summary": "Replace a Plex server's library sync preferences",
"description": "The body is the complete set of the source's libraries with each shouldSyncItems flag. A row absent from the request is left untouched. Every id must belong to this source (no Id=0 rows). Returns the reloaded list — library ids change when sync is disabled, so re-key any client draft off the response. Enabled libraries are queued for sync (locked libraries are skipped).",
"operationId": "ReplacePlexLibraryPreferences",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceRemoteLibraryPreferencesRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteLibraryResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/{id}/path-replacements": {
"get": {
"tags": [
"Plex"
],
"summary": "Get a Plex server's path replacements",
"operationId": "GetPlexPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Plex"
],
"summary": "Replace a Plex server's path replacements",
"description": "Replaces the source's path replacements: an existing id updates, id<1 adds, an existing id absent from the body is deleted. Every positive id must belong to this source and every row needs a non-empty RemotePath and LocalPath (else 422, no partial mutation). Returns the reloaded list.",
"operationId": "ReplacePlexPathReplacements",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplacePathReplacementsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PathReplacementResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/{id}/refresh-libraries": {
"post": {
"tags": [
"Plex"
],
"summary": "Refresh a Plex server's libraries",
"description": "Queues a synchronization of the server's libraries (fire-and-forget). Returns 409 while a Plex sign-in/sync lock is held; duplicate refreshes are accepted (the scan is idempotent).",
"operationId": "RefreshPlexLibraries",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/media-sources/plex/{id}/scan-collections": {
"post": {
"tags": [
"Plex"
],
"summary": "Scan a Plex server's collections",
"description": "Queues a synchronization of the server's collections (fire-and-forget). Pass ?deep=true for a deep scan. Returns 409 while a Plex collections scan is already in progress.",
"operationId": "ScanPlexCollections",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "deep",
"in": "query",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/rerun-collections": {
"get": {
"tags": [
"Rerun Collections"
],
"summary": "Get all rerun collections (paged)",
"operationId": "GetRerunCollections",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedRerunCollectionsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedRerunCollectionsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedRerunCollectionsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Rerun Collections"
],
"summary": "Create a rerun collection",
"operationId": "RerunCollectionCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateRerunCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateRerunCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateRerunCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateRerunCollectionRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/rerun-collections/{id}": {
"get": {
"tags": [
"Rerun Collections"
],
"summary": "Get a rerun collection by id",
"operationId": "GetRerunCollectionById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Rerun Collections"
],
"summary": "Update a rerun collection",
"operationId": "RerunCollectionUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateRerunCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateRerunCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateRerunCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateRerunCollectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Rerun Collections"
],
"summary": "Delete a rerun collection",
"operationId": "RerunCollectionDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/ffmpeg/resolution/by-name/{name}": {
"get": {
"tags": [
"Settings"
],
"summary": "Get a resolution by name",
"operationId": "GetResolutionByName",
"parameters": [
{
"name": "name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/resolutions": {
"get": {
"tags": [
"Settings"
],
"summary": "Get all resolutions, including custom resolutions",
"operationId": "GetResolutions",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Settings"
],
"summary": "Create a custom resolution",
"operationId": "CreateResolution",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateResolutionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateResolutionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateResolutionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateResolutionRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ResolutionResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/resolutions/{id}": {
"delete": {
"tags": [
"Settings"
],
"summary": "Delete a custom resolution",
"operationId": "DeleteResolution",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/schedules": {
"get": {
"tags": [
"Schedules"
],
"summary": "Get all schedules",
"operationId": "ScheduleGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Schedules"
],
"summary": "Create a schedule",
"operationId": "ScheduleCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateScheduleRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateScheduleRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateScheduleRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateScheduleRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/schedules/{id}": {
"get": {
"tags": [
"Schedules"
],
"summary": "Get a schedule by id",
"operationId": "GetScheduleById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Schedules"
],
"summary": "Update a schedule",
"operationId": "ScheduleUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateScheduleRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateScheduleRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateScheduleRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateScheduleRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProgramScheduleResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Schedules"
],
"summary": "Delete a schedule",
"operationId": "ScheduleDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/schedules/{id}/items": {
"get": {
"tags": [
"Schedules"
],
"summary": "Get schedule items",
"description": "Returns the schedule's items plus a computed, best-effort runtime estimate: each item carries a nullable durationEstimate and the envelope carries a nullable totalDurationEstimate. Estimates are derived from referenced collection/media runtimes and are null when unbounded or unknown. The response also carries a strong ETag of the schedule's version; pass that ETag back as If-Match on the replace (PUT) to detect a concurrent edit (issue #253).",
"operationId": "ScheduleGetItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemsResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Schedules"
],
"summary": "Add a schedule item",
"operationId": "ScheduleAddItem",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Schedules"
],
"summary": "Replace schedule items",
"description": "Replaces the schedule's full item list; item indexes are assigned from the array order. Send the ETag from the items GET as If-Match to reject a stale overwrite with 412 (issue #253); a successful response carries the new ETag.",
"operationId": "ScheduleReplaceItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceScheduleItemsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceScheduleItemsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceScheduleItemsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceScheduleItemsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/schedules/{id}/items/{itemId}": {
"delete": {
"tags": [
"Schedules"
],
"summary": "Delete a schedule item",
"operationId": "ScheduleDeleteItem",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "itemId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search": {
"get": {
"tags": [
"Search"
],
"summary": "Search library items across all media kinds",
"operationId": "Search",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
},
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 50
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SearchResultsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchResultsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SearchResultsResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/all-items": {
"get": {
"tags": [
"Search"
],
"summary": "Search library items across all media kinds and return raw id lists",
"description": "Returns every matching item's id, grouped by media kind, with no paging. Used by the SPA's \"add all to collection/playlist\" flow to materialize ids before calling the add endpoints.",
"operationId": "SearchAllItems",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SearchResultAllItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchResultAllItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SearchResultAllItemsResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/collections": {
"get": {
"tags": [
"Search"
],
"summary": "Search collections by name",
"description": "Returns matching collections as {id, name} options for scheduling editors.",
"operationId": "SearchCollections",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/television-shows": {
"get": {
"tags": [
"Search"
],
"summary": "Search television shows by name",
"description": "Returns matching television shows as {id, name} options for scheduling editors.",
"operationId": "SearchTelevisionShows",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/television-seasons": {
"get": {
"tags": [
"Search"
],
"summary": "Search television seasons by name",
"description": "Returns matching television seasons as {id, name} options for scheduling editors.",
"operationId": "SearchTelevisionSeasons",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/smart-collections": {
"get": {
"tags": [
"Search"
],
"summary": "Search smart collections by name",
"description": "Returns matching smart collections as {id, name} options for scheduling editors.",
"operationId": "SearchSmartCollections",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/artists": {
"get": {
"tags": [
"Search"
],
"summary": "Search artists by name",
"description": "Returns matching artists as {id, name} options for scheduling editors.",
"operationId": "SearchArtists",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/search/multi-collections": {
"get": {
"tags": [
"Search"
],
"summary": "Search multi collections by name",
"description": "Returns matching multi collections as {id, name} options for scheduling editors.",
"operationId": "SearchMultiCollections",
"parameters": [
{
"name": "query",
"in": "query",
"schema": {
"type": "string",
"default": ""
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SchedulingPickerOptionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/seasons/{id}": {
"get": {
"tags": [
"Television"
],
"summary": "Get a television season by id",
"operationId": "GetSeasonById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SeasonDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SeasonDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SeasonDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/sessions": {
"get": {
"tags": [
"Sessions"
],
"summary": "Get sessions",
"operationId": "SessionGetSessions",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HlsSessionModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HlsSessionModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HlsSessionModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/session/{channelNumber}": {
"delete": {
"tags": [
"Sessions"
],
"summary": "Stop session",
"operationId": "SessionStopSession",
"parameters": [
{
"name": "channelNumber",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/ffmpeg": {
"get": {
"tags": [
"Settings"
],
"summary": "Get global FFmpeg settings",
"operationId": "GetFfmpegSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update global FFmpeg settings",
"operationId": "UpdateFfmpegSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateFFmpegSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/FFmpegSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/playout": {
"get": {
"tags": [
"Settings"
],
"summary": "Get global playout settings",
"operationId": "GetPlayoutSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update global playout settings",
"operationId": "UpdatePlayoutSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdatePlayoutSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PlayoutSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/xmltv": {
"get": {
"tags": [
"Settings"
],
"summary": "Get global XMLTV settings",
"operationId": "GetXmltvSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update global XMLTV settings",
"operationId": "UpdateXmltvSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateXmltvSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateXmltvSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateXmltvSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateXmltvSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/XmltvSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/scanner": {
"get": {
"tags": [
"Settings"
],
"summary": "Get library scan cadence",
"operationId": "GetScannerSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update library scan cadence",
"operationId": "UpdateScannerSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateScannerSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateScannerSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateScannerSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateScannerSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ScannerSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/logging": {
"get": {
"tags": [
"Settings"
],
"summary": "Get per-area minimum log levels",
"operationId": "GetLoggingSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update per-area minimum log levels",
"operationId": "UpdateLoggingSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateLoggingSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateLoggingSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateLoggingSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateLoggingSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/LoggingSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/ui": {
"get": {
"tags": [
"Settings"
],
"summary": "Get UI preferences",
"operationId": "GetUiSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update UI preferences",
"operationId": "UpdateUiSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateUiSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateUiSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateUiSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateUiSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UiSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/settings/hdhr": {
"get": {
"tags": [
"Settings"
],
"summary": "Get HDHomeRun emulation settings",
"operationId": "GetHdhrSettings",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Settings"
],
"summary": "Update HDHomeRun emulation settings",
"operationId": "UpdateHdhrSettings",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateHdhrSettingsRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateHdhrSettingsRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateHdhrSettingsRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateHdhrSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/HdhrSettingsResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/shows/{id}": {
"get": {
"tags": [
"Television"
],
"summary": "Get a television show by id",
"operationId": "GetShowById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ShowDetailResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShowDetailResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ShowDetailResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/smart-collections": {
"get": {
"tags": [
"Smart Collections"
],
"summary": "Get all smart collections",
"operationId": "SmartCollectionGetAll",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Smart Collections"
],
"summary": "Create a smart collection",
"operationId": "SmartCollectionCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateSmartCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateSmartCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateSmartCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateSmartCollectionRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/smart-collections/{id}": {
"get": {
"tags": [
"Smart Collections"
],
"summary": "Get a smart collection by id",
"operationId": "GetSmartCollectionById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Smart Collections"
],
"summary": "Update a smart collection",
"operationId": "SmartCollectionUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateSmartCollectionRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateSmartCollectionRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateSmartCollectionRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateSmartCollectionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/SmartCollectionResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Smart Collections"
],
"summary": "Delete a smart collection",
"operationId": "SmartCollectionDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates/groups": {
"get": {
"tags": [
"Templates"
],
"summary": "Get all template groups",
"operationId": "GetTemplateGroups",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Templates"
],
"summary": "Create a template group",
"operationId": "TemplateCreateGroup",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateGroupRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateGroupRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateGroupRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateGroupRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TemplateGroupResponseModel"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates/groups/{id}": {
"delete": {
"tags": [
"Templates"
],
"summary": "Delete a template group",
"description": "Deletes the template group. The database cascade removes every template (and its items) in the group.",
"operationId": "TemplateDeleteGroup",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates": {
"get": {
"tags": [
"Templates"
],
"summary": "Get all templates",
"description": "Returns every template. Pass templateGroupId to filter to the templates in a single template group.",
"operationId": "TemplateGetAll",
"parameters": [
{
"name": "templateGroupId",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Templates"
],
"summary": "Create a template",
"description": "Creates an empty template in the given template group.",
"operationId": "TemplateCreate",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateTemplateRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates/{id}": {
"get": {
"tags": [
"Templates"
],
"summary": "Get a template by id",
"operationId": "GetTemplateById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Templates"
],
"summary": "Delete a template",
"operationId": "TemplateDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Templates"
],
"summary": "Replace a template and its items",
"description": "Replaces the template's name and its full item list. Each item assigns a block to a start time of day; items must not overlap (an item's end time is its start time plus the assigned block's duration). Send the ETag from the items GET as If-Match to reject a stale overwrite with 412 (issue #253); a successful response carries the new ETag.",
"operationId": "TemplateReplace",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ReplaceTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ReplaceTemplateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TemplateWithItemsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateWithItemsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TemplateWithItemsResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"412": {
"description": "Precondition Failed",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates/{id}/items": {
"get": {
"tags": [
"Templates"
],
"summary": "Get template items",
"description": "Returns the template's items and a strong ETag of the template's version. Pass that ETag back as If-Match on the replace (PUT) to detect a concurrent edit (issue #253).",
"operationId": "TemplateGetItems",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateItemResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateItemResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateItemResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/templates/{id}/copy": {
"post": {
"tags": [
"Templates"
],
"summary": "Copy a template",
"description": "Copies the template and its items into another (or the same) template group under a new name.",
"operationId": "TemplateCopy",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CopyTemplateRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CopyTemplateRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CopyTemplateRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CopyTemplateRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TemplateResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/trakt/lists": {
"get": {
"tags": [
"Trakt"
],
"summary": "Get paged Trakt lists",
"operationId": "GetTraktLists",
"parameters": [
{
"name": "pageNum",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 0
}
},
{
"name": "pageSize",
"in": "query",
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/PagedTraktListsResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/PagedTraktListsResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/PagedTraktListsResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Trakt"
],
"summary": "Add a Trakt list by URL",
"description": "Dispatches to the same background worker channel used by the classic UI's \"Add Trakt List\" dialog; the list is fetched, saved, and matched asynchronously. Poll GET /api/v1/trakt/status while busy.",
"operationId": "TraktAdd",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/AddTraktListRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddTraktListRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AddTraktListRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/AddTraktListRequest"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Accepted"
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/trakt/lists/{id}": {
"get": {
"tags": [
"Trakt"
],
"summary": "Get a Trakt list by id",
"operationId": "GetTraktListById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Trakt"
],
"summary": "Delete a Trakt list",
"operationId": "TraktDelete",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Trakt"
],
"summary": "Update a Trakt list's settings",
"operationId": "TraktUpdate",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateTraktListRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateTraktListRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateTraktListRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateTraktListRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/trakt/lists/{id}/match": {
"post": {
"tags": [
"Trakt"
],
"summary": "Match a Trakt list's items",
"operationId": "TraktMatch",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"202": {
"description": "Accepted"
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/trakt/status": {
"get": {
"tags": [
"Trakt"
],
"summary": "Get Trakt background operation status",
"description": "Wraps IEntityLocker.IsTraktLocked() — the HTTP-observable substitute for the Blazor page's live lock event. The SPA polls this while add/match/delete are in flight.",
"operationId": "GetTraktStatus",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TraktStatusResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TraktStatusResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TraktStatusResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/info": {
"get": {
"tags": [
"Troubleshooting"
],
"summary": "Get troubleshooting diagnostic info",
"operationId": "GetTroubleshootingInfo",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingInfoResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingInfoResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingInfoResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/validate-schedule": {
"post": {
"tags": [
"Troubleshooting"
],
"summary": "Validate a sequential schedule YAML document",
"description": "Validates a sequential-schedule YAML string against the full (or import) schema. Returns whether it is valid, any validation messages, and the JSON conversion of the YAML. Parse/validator errors are reported as messages (IsValid=false), never as a 500.",
"operationId": "ValidateSequentialSchedule",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ValidateSequentialScheduleResponseModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/start": {
"post": {
"tags": [
"Troubleshooting"
],
"summary": "Start a troubleshooting playback session",
"operationId": "StartTroubleshootingPlayback",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/StartTroubleshootingPlaybackRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/StartTroubleshootingPlaybackRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/StartTroubleshootingPlaybackRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/StartTroubleshootingPlaybackRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStartedResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStartedResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStartedResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/archive": {
"post": {
"tags": [
"Troubleshooting"
],
"summary": "Download the last troubleshooting playback session archive",
"operationId": "DownloadTroubleshootingArchive",
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/sample/{mediaItemId}": {
"post": {
"tags": [
"Troubleshooting"
],
"summary": "Download a media sample archive for troubleshooting",
"operationId": "DownloadTroubleshootingMediaSample",
"parameters": [
{
"name": "mediaItemId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/stream-selectors": {
"get": {
"tags": [
"Troubleshooting"
],
"summary": "List available channel stream selectors",
"operationId": "GetTroubleshootingStreamSelectors",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/subtitles/{mediaItemId}": {
"get": {
"tags": [
"Troubleshooting"
],
"summary": "List selectable subtitle streams for a media item",
"description": "Returns the subtitle streams that can be burned in for a troubleshooting playback. Each item's id is the value to pass back as the POST /api/v1/troubleshoot/playback/start request body's subtitleId field.",
"operationId": "GetTroubleshootingSubtitles",
"parameters": [
{
"name": "mediaItemId",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TroubleshootingSubtitleResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TroubleshootingSubtitleResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TroubleshootingSubtitleResponseModel"
}
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/troubleshoot/playback/status": {
"get": {
"tags": [
"Troubleshooting"
],
"summary": "Get the status of the current or last troubleshooting playback session",
"description": "Reports whether a troubleshooting playback is idle, running, completed, or failed, along with the last session's ffmpeg exit code, playback speed, and a tail (last 500 lines) of its log output.",
"operationId": "GetTroubleshootingPlaybackStatus",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStatusResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStatusResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/TroubleshootingPlaybackStatusResponseModel"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/version": {
"get": {
"tags": [
"Version"
],
"summary": "Get version",
"operationId": "GetVersion",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/CombinedVersion"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CombinedVersion"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CombinedVersion"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/watermarks": {
"get": {
"tags": [
"Watermarks"
],
"summary": "Get all watermarks",
"operationId": "GetWatermarks",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/WatermarkResponseModel"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/WatermarkResponseModel"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/WatermarkResponseModel"
}
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"post": {
"tags": [
"Watermarks"
],
"summary": "Create a watermark",
"operationId": "CreateWatermark",
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/CreateWatermarkRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateWatermarkRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/CreateWatermarkRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/CreateWatermarkRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
},
"/api/v1/watermarks/{id}": {
"get": {
"tags": [
"Watermarks"
],
"summary": "Get a watermark by id",
"operationId": "GetWatermarkById",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "API key missing or invalid.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"put": {
"tags": [
"Watermarks"
],
"summary": "Update a watermark",
"operationId": "UpdateWatermark",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/UpdateWatermarkRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateWatermarkRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/UpdateWatermarkRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/UpdateWatermarkRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/WatermarkFullResponseModel"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
},
"delete": {
"tags": [
"Watermarks"
],
"summary": "Delete a watermark",
"operationId": "DeleteWatermark",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"401": {
"description": "Unauthorized",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Entity",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request validation failed (model binding or FluentValidation).",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ValidationProblemDetails"
}
}
}
}
},
"security": [
{
"ApiKey": [ ]
}
]
}
}
},
"components": {
"schemas": {
"ActorResponseModel": {
"required": [
"id",
"name",
"role",
"thumb"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"role": {
"type": [
"null",
"string"
]
},
"thumb": {
"type": "string"
}
}
},
"AddItemsToCollectionRequest": {
"required": [
"movieIds",
"showIds",
"seasonIds",
"episodeIds",
"artistIds",
"musicVideoIds",
"otherVideoIds",
"songIds",
"imageIds",
"remoteStreamIds"
],
"type": "object",
"properties": {
"movieIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"showIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"seasonIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"episodeIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"artistIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"musicVideoIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"otherVideoIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"songIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"imageIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"remoteStreamIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"AddItemsToPlaylistRequest": {
"required": [
"movieIds",
"showIds",
"seasonIds",
"episodeIds",
"artistIds",
"musicVideoIds",
"otherVideoIds",
"songIds",
"imageIds",
"remoteStreamIds"
],
"type": "object",
"properties": {
"movieIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"showIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"seasonIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"episodeIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"artistIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"musicVideoIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"otherVideoIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"songIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"imageIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"remoteStreamIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"AddTraktListRequest": {
"required": [
"url"
],
"type": "object",
"properties": {
"url": {
"type": [
"null",
"string"
]
}
}
},
"ArtistDetailResponseModel": {
"required": [
"id",
"name",
"disambiguation",
"biography",
"thumbnail",
"fanArt",
"genres",
"styles",
"moods",
"languages"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"disambiguation": {
"type": [
"null",
"string"
]
},
"biography": {
"type": [
"null",
"string"
]
},
"thumbnail": {
"type": "string"
},
"fanArt": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"styles": {
"type": "array",
"items": {
"type": "string"
}
},
"moods": {
"type": "array",
"items": {
"type": "string"
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ArtworkContentTypeModel": {
"required": [
"path",
"contentType"
],
"type": "object",
"properties": {
"path": {
"type": [
"null",
"string"
]
},
"contentType": {
"type": [
"null",
"string"
]
},
"isExternalUrl": {
"type": "boolean"
},
"hasContentType": {
"type": "boolean"
},
"urlWithContentType": {
"type": [
"null",
"string"
]
}
}
},
"ArtworkUploadResponseModel": {
"required": [
"path",
"contentType"
],
"type": "object",
"properties": {
"path": {
"type": "string"
},
"contentType": {
"type": "string"
}
}
},
"BlockGroupResponseModel": {
"required": [
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"BlockItemRequest": {
"required": [
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"mediaItemId",
"searchTitle",
"searchQuery",
"playbackOrder",
"includeInProgramGuide",
"disableWatermarks",
"watermarkIds",
"graphicsElementIds"
],
"type": "object",
"properties": {
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"searchTitle": {
"type": [
"null",
"string"
]
},
"searchQuery": {
"type": [
"null",
"string"
]
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"includeInProgramGuide": {
"type": "boolean"
},
"disableWatermarks": {
"type": "boolean"
},
"watermarkIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"graphicsElementIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"BlockItemResponseModel": {
"required": [
"id",
"index",
"collectionType",
"collectionId",
"collectionName",
"multiCollectionId",
"multiCollectionName",
"smartCollectionId",
"smartCollectionName",
"mediaItemId",
"mediaItemName",
"searchTitle",
"searchQuery",
"playbackOrder",
"includeInProgramGuide",
"disableWatermarks",
"watermarkIds",
"graphicsElementIds"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"index": {
"type": "integer",
"format": "int32"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"collectionName": {
"type": [
"null",
"string"
]
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionName": {
"type": [
"null",
"string"
]
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionName": {
"type": [
"null",
"string"
]
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemName": {
"type": [
"null",
"string"
]
},
"searchTitle": {
"type": "string"
},
"searchQuery": {
"type": "string"
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"includeInProgramGuide": {
"type": "boolean"
},
"disableWatermarks": {
"type": "boolean"
},
"watermarkIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"graphicsElementIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"BlockPreviewItemResponseModel": {
"required": [
"title",
"start",
"finish",
"duration"
],
"type": "object",
"properties": {
"title": {
"type": "string"
},
"start": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"finish": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"duration": {
"type": "string"
}
}
},
"BlockResponseModel": {
"required": [
"id",
"groupId",
"groupName",
"name",
"minutes",
"stopScheduling"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"groupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
},
"minutes": {
"type": "integer",
"format": "int32"
},
"stopScheduling": {
"$ref": "#/components/schemas/BlockStopScheduling"
}
}
},
"BlockStopScheduling": {
"enum": [
"AfterDurationEnd",
"BeforeDurationEnd"
],
"type": "string"
},
"BlockWithItemsResponseModel": {
"required": [
"id",
"groupId",
"groupName",
"name",
"minutes",
"stopScheduling",
"items"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"groupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
},
"minutes": {
"type": "integer",
"format": "int32"
},
"stopScheduling": {
"$ref": "#/components/schemas/BlockStopScheduling"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BlockItemResponseModel"
}
}
}
},
"BulkDeleteChannelsRequest": {
"required": [
"channelIds"
],
"type": "object",
"properties": {
"channelIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"BulkMoveChannelsToGroupRequest": {
"required": [
"channelIds",
"group"
],
"type": "object",
"properties": {
"channelIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"group": {
"type": "string"
}
}
},
"BulkRenumberChannelRequest": {
"required": [
"id",
"number"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"number": {
"type": "string"
}
}
},
"BulkRenumberChannelsRequest": {
"required": [
"channels"
],
"type": "object",
"properties": {
"channels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BulkRenumberChannelRequest"
}
}
}
},
"ChannelDetailResponseModel": {
"required": [
"id",
"number",
"name",
"group",
"categories",
"ffmpegProfileId",
"slugSeconds",
"logo",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"mirrorSourceChannelId",
"playoutOffset",
"streamingMode",
"watermarkId",
"fallbackFillerId",
"playoutCount",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"isEnabled",
"showInEpg"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"number": {
"type": "string"
},
"name": {
"type": "string"
},
"group": {
"type": "string"
},
"categories": {
"type": "string"
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"slugSeconds": {
"type": [
"null",
"number"
],
"format": "double"
},
"logo": {
"$ref": "#/components/schemas/ChannelLogoResponseModel"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": "string"
},
"preferredAudioLanguageCode": {
"type": "string"
},
"preferredAudioTitle": {
"type": "string"
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"mirrorSourceChannelId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playoutOffset": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playoutCount": {
"type": "integer",
"format": "int32"
},
"preferredSubtitleLanguageCode": {
"type": "string"
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": "string"
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"isEnabled": {
"type": "boolean"
},
"showInEpg": {
"type": "boolean"
}
}
},
"ChannelGuideChannelResponseModel": {
"required": [
"id",
"number",
"name",
"programmes"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"number": {
"type": "string"
},
"name": {
"type": "string"
},
"programmes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelGuideProgrammeResponseModel"
}
}
}
},
"ChannelGuideProgrammeResponseModel": {
"required": [
"start",
"stop",
"title",
"subTitle",
"category",
"fillerKind"
],
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date-time"
},
"stop": {
"type": "string",
"format": "date-time"
},
"title": {
"type": "string"
},
"subTitle": {
"type": [
"null",
"string"
]
},
"category": {
"type": [
"null",
"string"
]
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
}
}
},
"ChannelGuideResponseModel": {
"required": [
"start",
"end",
"channels"
],
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date-time"
},
"end": {
"type": "string",
"format": "date-time"
},
"channels": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChannelGuideChannelResponseModel"
}
}
}
},
"ChannelIdleBehavior": {
"enum": [
"StopOnDisconnect",
"KeepRunning"
],
"type": "string"
},
"ChannelLogoResponseModel": {
"required": [
"path",
"contentType"
],
"type": "object",
"properties": {
"path": {
"type": "string"
},
"contentType": {
"type": "string"
},
"isExternalUrl": {
"type": "boolean"
},
"hasContentType": {
"type": "boolean"
},
"urlWithContentType": {
"type": [
"null",
"string"
]
}
}
},
"ChannelMusicVideoCreditsMode": {
"enum": [
"None",
"GenerateSubtitles"
],
"type": "string"
},
"ChannelNowPlayingResponseModel": {
"required": [
"title",
"startUtc",
"finishUtc"
],
"type": "object",
"properties": {
"title": {
"type": "string"
},
"startUtc": {
"type": "string",
"format": "date-time"
},
"finishUtc": {
"type": "string",
"format": "date-time"
}
}
},
"ChannelPlaybackItemResponseModel": {
"required": [
"playoutItemId",
"mediaItemId",
"start",
"finish",
"inPointTicks",
"currentOffsetTicks",
"outPointTicks",
"fillerKind",
"source"
],
"type": "object",
"properties": {
"playoutItemId": {
"type": "integer",
"format": "int32"
},
"mediaItemId": {
"type": "integer",
"format": "int32"
},
"start": {
"type": "string",
"format": "date-time"
},
"finish": {
"type": "string",
"format": "date-time"
},
"inPointTicks": {
"type": "integer",
"format": "int64"
},
"currentOffsetTicks": {
"type": "integer",
"format": "int64"
},
"outPointTicks": {
"type": "integer",
"format": "int64"
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
},
"source": {
"$ref": "#/components/schemas/ChannelPlaybackSourceReferenceResponseModel"
}
}
},
"ChannelPlaybackSourceKind": {
"enum": [
"LocalFile",
"JellyfinItem",
"PlexItem",
"EmbyItem",
"RemoteUrl",
"Unsupported"
],
"type": "string"
},
"ChannelPlaybackSourceReferenceResponseModel": {
"required": [
"kind",
"itemId",
"path",
"isLive"
],
"type": "object",
"properties": {
"kind": {
"$ref": "#/components/schemas/ChannelPlaybackSourceKind"
},
"itemId": {
"type": [
"null",
"string"
]
},
"path": {
"type": [
"null",
"string"
]
},
"isLive": {
"type": "boolean"
}
}
},
"ChannelPlaybackSourceResponseModel": {
"required": [
"channelId",
"sourceChannelId",
"resolvedAt",
"sourceAt",
"nextTransitionAt",
"active"
],
"type": "object",
"properties": {
"channelId": {
"type": "integer",
"format": "int32"
},
"sourceChannelId": {
"type": "integer",
"format": "int32"
},
"resolvedAt": {
"type": "string",
"format": "date-time"
},
"sourceAt": {
"type": "string",
"format": "date-time"
},
"nextTransitionAt": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"active": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelPlaybackItemResponseModel"
}
]
}
}
},
"ChannelPlayoutMode": {
"enum": [
"Continuous",
"OnDemand"
],
"type": "string"
},
"ChannelPlayoutSource": {
"enum": [
"Generated",
"Mirror"
],
"type": "string"
},
"ChannelResponseModel": {
"required": [
"id",
"number",
"sortNumber",
"name",
"group",
"categories",
"ffmpegProfile",
"language",
"streamingMode",
"isEnabled",
"showInEpg"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"number": {
"type": "string"
},
"sortNumber": {
"type": "number",
"format": "double"
},
"name": {
"type": "string"
},
"group": {
"type": "string"
},
"categories": {
"type": "string"
},
"ffmpegProfile": {
"type": "string"
},
"language": {
"type": "string"
},
"streamingMode": {
"type": "string"
},
"isEnabled": {
"type": "boolean"
},
"showInEpg": {
"type": "boolean"
}
}
},
"ChannelSongVideoMode": {
"enum": [
"Default",
"WithProgress"
],
"type": "string"
},
"ChannelStateResponseModel": {
"required": [
"channelId",
"channelNumber",
"onAir",
"nowPlaying"
],
"type": "object",
"properties": {
"channelId": {
"type": "integer",
"format": "int32"
},
"channelNumber": {
"type": "string"
},
"onAir": {
"type": "boolean"
},
"nowPlaying": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelNowPlayingResponseModel"
}
]
}
}
},
"ChannelStreamSelectorMode": {
"enum": [
"Default",
"Custom",
"Troubleshooting"
],
"type": "string"
},
"ChannelSubtitleMode": {
"enum": [
"None",
"Forced",
"Default",
"Any"
],
"type": "string"
},
"ChannelTemplateResponseModel": {
"required": [
"id",
"name",
"description",
"isSystem",
"isDefault",
"ffmpegProfileId",
"watermarkId",
"fallbackFillerId",
"preRollFillerId",
"midRollFillerId",
"postRollFillerId",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"streamingMode",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isSystem": {
"type": "boolean"
},
"isDefault": {
"type": "boolean"
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"ChannelTranscodeMode": {
"enum": [
"OnDemand"
],
"type": "string"
},
"ChannelWatermarkImageSource": {
"enum": [
"Custom",
"ChannelLogo",
"Resource"
],
"type": "string"
},
"ChannelWatermarkMode": {
"enum": [
"None",
"Permanent",
"Intermittent",
"OpacityExpression"
],
"type": "string"
},
"CollectionsScanStatusResponseModel": {
"required": [
"family"
],
"type": "object",
"properties": {
"family": {
"type": "string"
}
}
},
"CollectionType": {
"enum": [
"Collection",
"TelevisionShow",
"TelevisionSeason",
"Artist",
"MultiCollection",
"SmartCollection",
"Playlist",
"RerunFirstRun",
"RerunRerun",
"SearchQuery",
"Movie",
"Episode",
"MusicVideo",
"OtherVideo",
"Song",
"Image",
"RemoteStream",
"FakeCollection",
"FakePlaylistItem"
],
"type": "string"
},
"CombinedVersion": {
"required": [
"apiVersion",
"appVersion"
],
"type": "object",
"properties": {
"apiVersion": {
"type": "integer",
"format": "int32"
},
"appVersion": {
"type": [
"null",
"string"
]
}
}
},
"CopyBlockRequest": {
"required": [
"blockGroupId",
"name"
],
"type": "object",
"properties": {
"blockGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CopyTemplateRequest": {
"required": [
"templateGroupId",
"name"
],
"type": "object",
"properties": {
"templateGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateBlockGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateBlockRequest": {
"required": [
"blockGroupId",
"name"
],
"type": "object",
"properties": {
"blockGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateChannelFromLineupAdvancedOptionsRequest": {
"type": "object",
"properties": {
"playbackOrder": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/PlaybackOrder"
}
]
},
"ffmpegProfileId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"streamSelectorMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
}
]
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelPlayoutSource"
}
]
},
"playoutMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelPlayoutMode"
}
]
},
"streamingMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/StreamingMode"
}
]
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelSubtitleMode"
}
]
},
"musicVideoCreditsMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
}
]
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelSongVideoMode"
}
]
},
"transcodeMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelTranscodeMode"
}
]
},
"idleBehavior": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelIdleBehavior"
}
]
},
"shuffleScheduleItems": {
"type": [
"null",
"boolean"
]
},
"randomStartPoint": {
"type": [
"null",
"boolean"
]
},
"fixedStartTimeBehavior": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
]
}
}
},
"CreateChannelFromLineupItemRequest": {
"required": [
"mediaType",
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"rerunCollectionId",
"mediaItemId",
"playlistId"
],
"type": "object",
"properties": {
"mediaType": {
"$ref": "#/components/schemas/LibraryBrowseMediaType"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"rerunCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"CreateChannelFromLineupRequest": {
"required": [
"name",
"number",
"group",
"categories",
"logo",
"isEnabled",
"showInEpg",
"templateId",
"advanced",
"lineup"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"number": {
"type": "string"
},
"group": {
"type": "string"
},
"categories": {
"type": "string"
},
"logo": {
"$ref": "#/components/schemas/ArtworkContentTypeModel"
},
"isEnabled": {
"type": "boolean"
},
"showInEpg": {
"type": "boolean"
},
"templateId": {
"type": "integer",
"format": "int32"
},
"advanced": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/CreateChannelFromLineupAdvancedOptionsRequest"
}
]
},
"lineup": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CreateChannelFromLineupItemRequest"
}
}
}
},
"CreateChannelFromLineupResponseModel": {
"required": [
"channelId",
"playlistId",
"programScheduleId",
"playoutId"
],
"type": "object",
"properties": {
"channelId": {
"type": "integer",
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"programScheduleId": {
"type": "integer",
"format": "int32"
},
"playoutId": {
"type": "integer",
"format": "int32"
}
}
},
"CreateChannelRequest": {
"required": [
"name",
"number",
"group",
"categories",
"ffmpegProfileId",
"slugSeconds",
"logo",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"mirrorSourceChannelId",
"playoutOffset",
"streamingMode",
"watermarkId",
"fallbackFillerId",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"isEnabled",
"showInEpg"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"number": {
"type": [
"null",
"string"
]
},
"group": {
"type": [
"null",
"string"
]
},
"categories": {
"type": [
"null",
"string"
]
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"slugSeconds": {
"type": [
"null",
"number"
],
"format": "double"
},
"logo": {
"$ref": "#/components/schemas/ArtworkContentTypeModel"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"mirrorSourceChannelId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playoutOffset": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"isEnabled": {
"type": "boolean"
},
"showInEpg": {
"type": "boolean"
}
}
},
"CreateChannelTemplateRequest": {
"required": [
"name",
"description",
"ffmpegProfileId",
"watermarkId",
"fallbackFillerId",
"preRollFillerId",
"midRollFillerId",
"postRollFillerId",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"streamingMode",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"CreateCollectionRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateDecoGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateDecoRequest": {
"required": [
"decoGroupId",
"name"
],
"type": "object",
"properties": {
"decoGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateDecoTemplateGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateDecoTemplateRequest": {
"required": [
"decoTemplateGroupId",
"name"
],
"type": "object",
"properties": {
"decoTemplateGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateFFmpegProfileRequest": {
"required": [
"name",
"threadCount",
"normalizeAudio",
"normalizeVideo",
"hardwareAcceleration",
"vaapiDisplay",
"vaapiDriver",
"vaapiDevice",
"qsvExtraHardwareFrames",
"resolutionId",
"scalingBehavior",
"padMode",
"videoFormat",
"videoProfile",
"videoPreset",
"allowBFrames",
"bitDepth",
"videoBitrate",
"videoBufferSize",
"tonemapAlgorithm",
"audioFormat",
"audioBitrate",
"audioBufferSize",
"normalizeLoudnessMode",
"targetLoudness",
"audioChannels",
"audioSampleRate",
"normalizeFramerate",
"normalizeColors",
"deinterlaceVideo"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"threadCount": {
"type": "integer",
"format": "int32"
},
"normalizeAudio": {
"type": "boolean"
},
"normalizeVideo": {
"type": "boolean"
},
"hardwareAcceleration": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
},
"vaapiDisplay": {
"type": [
"null",
"string"
]
},
"vaapiDriver": {
"$ref": "#/components/schemas/VaapiDriver"
},
"vaapiDevice": {
"type": [
"null",
"string"
]
},
"qsvExtraHardwareFrames": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"resolutionId": {
"type": "integer",
"format": "int32"
},
"scalingBehavior": {
"$ref": "#/components/schemas/ScalingBehavior"
},
"padMode": {
"$ref": "#/components/schemas/FilterMode"
},
"videoFormat": {
"$ref": "#/components/schemas/FFmpegProfileVideoFormat"
},
"videoProfile": {
"type": [
"null",
"string"
]
},
"videoPreset": {
"type": [
"null",
"string"
]
},
"allowBFrames": {
"type": "boolean"
},
"bitDepth": {
"$ref": "#/components/schemas/FFmpegProfileBitDepth"
},
"videoBitrate": {
"type": "integer",
"format": "int32"
},
"videoBufferSize": {
"type": "integer",
"format": "int32"
},
"tonemapAlgorithm": {
"$ref": "#/components/schemas/FFmpegProfileTonemapAlgorithm"
},
"audioFormat": {
"$ref": "#/components/schemas/FFmpegProfileAudioFormat"
},
"audioBitrate": {
"type": "integer",
"format": "int32"
},
"audioBufferSize": {
"type": "integer",
"format": "int32"
},
"normalizeLoudnessMode": {
"$ref": "#/components/schemas/NormalizeLoudnessMode"
},
"targetLoudness": {
"type": [
"null",
"number"
],
"format": "double"
},
"audioChannels": {
"type": "integer",
"format": "int32"
},
"audioSampleRate": {
"type": "integer",
"format": "int32"
},
"normalizeFramerate": {
"type": "boolean"
},
"normalizeColors": {
"type": "boolean"
},
"deinterlaceVideo": {
"type": "boolean"
}
}
},
"CreateFillerPresetRequest": {
"required": [
"name",
"fillerKind",
"fillerMode",
"duration",
"count",
"padToNearestMinute",
"allowWatermarks",
"collectionType",
"collectionId",
"mediaItemId",
"multiCollectionId",
"smartCollectionId",
"playlistId",
"expression",
"useChaptersAsMediaItems"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
},
"fillerMode": {
"$ref": "#/components/schemas/FillerMode"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"count": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"padToNearestMinute": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"allowWatermarks": {
"type": "boolean"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"expression": {
"type": [
"null",
"string"
]
},
"useChaptersAsMediaItems": {
"type": "boolean"
}
}
},
"CreateLocalLibraryRequest": {
"required": [
"name",
"mediaKind",
"paths"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"mediaKind": {
"$ref": "#/components/schemas/LibraryMediaKind"
},
"paths": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
}
}
},
"CreateMultiCollectionRequest": {
"required": [
"name",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/MultiCollectionItemRequest"
}
}
}
},
"CreatePlaylistGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreatePlaylistRequest": {
"required": [
"playlistGroupId",
"name"
],
"type": "object",
"properties": {
"playlistGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreatePlayoutRequest": {
"required": [
"channelId",
"scheduleKind",
"programScheduleId",
"scheduleFile"
],
"type": "object",
"properties": {
"channelId": {
"type": "integer",
"format": "int32"
},
"scheduleKind": {
"$ref": "#/components/schemas/PlayoutScheduleKind"
},
"programScheduleId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"scheduleFile": {
"type": [
"null",
"string"
]
}
}
},
"CreateRerunCollectionRequest": {
"required": [
"name",
"collectionType",
"selectedId",
"firstRunPlaybackOrder",
"rerunPlaybackOrder"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"selectedId": {
"type": "integer",
"format": "int32"
},
"firstRunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"rerunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
}
}
},
"CreateResolutionRequest": {
"required": [
"width",
"height"
],
"type": "object",
"properties": {
"width": {
"type": "integer",
"format": "int32"
},
"height": {
"type": "integer",
"format": "int32"
}
}
},
"CreateScheduleRequest": {
"required": [
"name",
"keepMultiPartEpisodesTogether",
"treatCollectionsAsShows",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"keepMultiPartEpisodesTogether": {
"type": "boolean"
},
"treatCollectionsAsShows": {
"type": "boolean"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"CreateSmartCollectionRequest": {
"required": [
"name",
"query"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"query": {
"type": [
"null",
"string"
]
}
}
},
"CreateTemplateGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateTemplateRequest": {
"required": [
"templateGroupId",
"name"
],
"type": "object",
"properties": {
"templateGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
}
}
},
"CreateWatermarkRequest": {
"required": [
"name",
"mode",
"imageSource",
"image",
"imageContentType",
"location",
"size",
"width",
"horizontalMargin",
"verticalMargin",
"frequencyMinutes",
"durationSeconds",
"opacity",
"opacityExpression",
"zIndex",
"placeWithinSourceContent"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"mode": {
"$ref": "#/components/schemas/ChannelWatermarkMode"
},
"imageSource": {
"$ref": "#/components/schemas/ChannelWatermarkImageSource"
},
"image": {
"type": [
"null",
"string"
]
},
"imageContentType": {
"type": [
"null",
"string"
]
},
"location": {
"$ref": "#/components/schemas/WatermarkLocation"
},
"size": {
"$ref": "#/components/schemas/WatermarkSize"
},
"width": {
"type": "number",
"format": "double"
},
"horizontalMargin": {
"type": "number",
"format": "double"
},
"verticalMargin": {
"type": "number",
"format": "double"
},
"frequencyMinutes": {
"type": "integer",
"format": "int32"
},
"durationSeconds": {
"type": "integer",
"format": "int32"
},
"opacity": {
"type": "integer",
"format": "int32"
},
"opacityExpression": {
"type": [
"null",
"string"
]
},
"zIndex": {
"type": "integer",
"format": "int32"
},
"placeWithinSourceContent": {
"type": "boolean"
}
}
},
"DayOfWeek": {
"enum": [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"type": "string"
},
"DecoBreakContentRequest": {
"required": [
"id",
"collectionType",
"collectionId",
"mediaItemId",
"multiCollectionId",
"smartCollectionId",
"playlistId",
"placement"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"placement": {
"$ref": "#/components/schemas/DecoBreakPlacement"
}
}
},
"DecoBreakContentResponseModel": {
"required": [
"id",
"collectionType",
"collectionId",
"mediaItemId",
"multiCollectionId",
"smartCollectionId",
"playlistId",
"playlistGroupId",
"selectionName",
"placement"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistGroupId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"selectionName": {
"type": [
"null",
"string"
]
},
"placement": {
"$ref": "#/components/schemas/DecoBreakPlacement"
}
}
},
"DecoBreakPlacement": {
"enum": [
"BlockStart",
"BlockFinish",
"BetweenBlockItems",
"ChapterMarkers"
],
"type": "string"
},
"DecoGroupResponseModel": {
"required": [
"id",
"name",
"decoCount"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"decoCount": {
"type": "integer",
"format": "int32"
}
}
},
"DecoListItemResponseModel": {
"required": [
"id",
"decoGroupId",
"decoGroupName",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"decoGroupId": {
"type": "integer",
"format": "int32"
},
"decoGroupName": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"DecoMode": {
"enum": [
"Inherit",
"Disable",
"Override",
"Merge"
],
"type": "string"
},
"DecoResponseModel": {
"required": [
"id",
"decoGroupId",
"decoGroupName",
"name",
"watermarkMode",
"watermarkIds",
"useWatermarkDuringFiller",
"graphicsElementsMode",
"graphicsElementIds",
"useGraphicsElementsDuringFiller",
"breakContentMode",
"breakContent",
"defaultFillerMode",
"defaultFillerCollectionType",
"defaultFillerCollectionId",
"defaultFillerMediaItemId",
"defaultFillerMultiCollectionId",
"defaultFillerSmartCollectionId",
"defaultFillerSelectionName",
"defaultFillerTrimToFit",
"deadAirFallbackMode",
"deadAirFallbackCollectionType",
"deadAirFallbackCollectionId",
"deadAirFallbackMediaItemId",
"deadAirFallbackMultiCollectionId",
"deadAirFallbackSmartCollectionId",
"deadAirFallbackSelectionName"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"decoGroupId": {
"type": "integer",
"format": "int32"
},
"decoGroupName": {
"type": "string"
},
"name": {
"type": "string"
},
"watermarkMode": {
"$ref": "#/components/schemas/DecoMode"
},
"watermarkIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"useWatermarkDuringFiller": {
"type": "boolean"
},
"graphicsElementsMode": {
"$ref": "#/components/schemas/DecoMode"
},
"graphicsElementIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"useGraphicsElementsDuringFiller": {
"type": "boolean"
},
"breakContentMode": {
"$ref": "#/components/schemas/DecoMode"
},
"breakContent": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoBreakContentResponseModel"
}
},
"defaultFillerMode": {
"$ref": "#/components/schemas/DecoMode"
},
"defaultFillerCollectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"defaultFillerCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerMediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerMultiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerSmartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerSelectionName": {
"type": [
"null",
"string"
]
},
"defaultFillerTrimToFit": {
"type": "boolean"
},
"deadAirFallbackMode": {
"$ref": "#/components/schemas/DecoMode"
},
"deadAirFallbackCollectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"deadAirFallbackCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackMediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackMultiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackSmartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackSelectionName": {
"type": [
"null",
"string"
]
}
}
},
"DecoTemplateGroupResponseModel": {
"required": [
"id",
"name",
"decoTemplateCount"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"decoTemplateCount": {
"type": "integer",
"format": "int32"
}
}
},
"DecoTemplateItemRequest": {
"required": [
"decoId",
"startTime",
"endTime"
],
"type": "object",
"properties": {
"decoId": {
"type": "integer",
"format": "int32"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"endTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
}
}
},
"DecoTemplateItemResponseModel": {
"required": [
"decoId",
"decoName",
"startTime",
"endTime"
],
"type": "object",
"properties": {
"decoId": {
"type": "integer",
"format": "int32"
},
"decoName": {
"type": "string"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"endTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
}
}
},
"DecoTemplateResponseModel": {
"required": [
"id",
"decoTemplateGroupId",
"groupName",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"decoTemplateGroupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"DecoTemplateWithItemsResponseModel": {
"required": [
"id",
"decoTemplateGroupId",
"groupName",
"name",
"items"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"decoTemplateGroupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DecoTemplateItemResponseModel"
}
}
}
},
"DeleteMediaItemsRequest": {
"required": [
"ids"
],
"type": "object",
"properties": {
"ids": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"FFmpegFullProfileResponseModel": {
"required": [
"id",
"name",
"threadCount",
"normalizeAudio",
"normalizeVideo",
"hardwareAcceleration",
"vaapiDisplay",
"vaapiDriver",
"vaapiDevice",
"qsvExtraHardwareFrames",
"resolutionId",
"resolution",
"scalingBehavior",
"padMode",
"videoFormat",
"videoProfile",
"videoPreset",
"allowBFrames",
"bitDepth",
"videoBitrate",
"videoBufferSize",
"tonemapAlgorithm",
"audioFormat",
"audioBitrate",
"audioBufferSize",
"normalizeLoudnessMode",
"targetLoudness",
"audioChannels",
"audioSampleRate",
"normalizeFramerate",
"normalizeColors",
"deinterlaceVideo"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"threadCount": {
"type": "integer",
"format": "int32"
},
"normalizeAudio": {
"type": "boolean"
},
"normalizeVideo": {
"type": "boolean"
},
"hardwareAcceleration": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
},
"vaapiDisplay": {
"type": "string"
},
"vaapiDriver": {
"$ref": "#/components/schemas/VaapiDriver"
},
"vaapiDevice": {
"type": "string"
},
"qsvExtraHardwareFrames": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"resolutionId": {
"type": "integer",
"format": "int32"
},
"resolution": {
"type": "string"
},
"scalingBehavior": {
"$ref": "#/components/schemas/ScalingBehavior"
},
"padMode": {
"$ref": "#/components/schemas/FilterMode"
},
"videoFormat": {
"$ref": "#/components/schemas/FFmpegProfileVideoFormat"
},
"videoProfile": {
"type": "string"
},
"videoPreset": {
"type": "string"
},
"allowBFrames": {
"type": "boolean"
},
"bitDepth": {
"$ref": "#/components/schemas/FFmpegProfileBitDepth"
},
"videoBitrate": {
"type": "integer",
"format": "int32"
},
"videoBufferSize": {
"type": "integer",
"format": "int32"
},
"tonemapAlgorithm": {
"$ref": "#/components/schemas/FFmpegProfileTonemapAlgorithm"
},
"audioFormat": {
"$ref": "#/components/schemas/FFmpegProfileAudioFormat"
},
"audioBitrate": {
"type": "integer",
"format": "int32"
},
"audioBufferSize": {
"type": "integer",
"format": "int32"
},
"normalizeLoudnessMode": {
"$ref": "#/components/schemas/NormalizeLoudnessMode"
},
"targetLoudness": {
"type": [
"null",
"number"
],
"format": "double"
},
"audioChannels": {
"type": "integer",
"format": "int32"
},
"audioSampleRate": {
"type": "integer",
"format": "int32"
},
"normalizeFramerate": {
"type": "boolean"
},
"normalizeColors": {
"type": "boolean"
},
"deinterlaceVideo": {
"type": "boolean"
}
}
},
"FFmpegProfileAudioFormat": {
"enum": [
"None",
"Aac",
"Ac3",
"AacLatm",
"Copy"
],
"type": "string"
},
"FFmpegProfileBitDepth": {
"enum": [
"EightBit",
"TenBit"
],
"type": "string"
},
"FFmpegProfileTonemapAlgorithm": {
"enum": [
"Linear",
"Clip",
"Gamma",
"Reinhard",
"Mobius",
"Hable"
],
"type": "string"
},
"FFmpegProfileVideoFormat": {
"enum": [
"None",
"H264",
"Hevc",
"Mpeg2Video",
"Av1",
"Copy"
],
"type": "string"
},
"FFmpegSettingsResponseModel": {
"required": [
"fFmpegPath",
"fFprobePath",
"defaultFFmpegProfileId",
"preferredAudioLanguageCode",
"useEmbeddedSubtitles",
"extractEmbeddedSubtitles",
"probeForInterlacedFrames",
"saveReports",
"globalWatermarkId",
"globalFallbackFillerId",
"hlsSegmenterIdleTimeout",
"workAheadSegmenterLimit",
"initialSegmentCount",
"hlsDirectOutputFormat",
"defaultMpegTsScript"
],
"type": "object",
"properties": {
"fFmpegPath": {
"type": "string"
},
"fFprobePath": {
"type": "string"
},
"defaultFFmpegProfileId": {
"type": "integer",
"format": "int32"
},
"preferredAudioLanguageCode": {
"type": "string"
},
"useEmbeddedSubtitles": {
"type": "boolean"
},
"extractEmbeddedSubtitles": {
"type": "boolean"
},
"probeForInterlacedFrames": {
"type": "boolean"
},
"saveReports": {
"type": "boolean"
},
"globalWatermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"globalFallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"hlsSegmenterIdleTimeout": {
"type": "integer",
"format": "int32"
},
"workAheadSegmenterLimit": {
"type": "integer",
"format": "int32"
},
"initialSegmentCount": {
"type": "integer",
"format": "int32"
},
"hlsDirectOutputFormat": {
"$ref": "#/components/schemas/OutputFormatKind"
},
"defaultMpegTsScript": {
"type": "string"
}
}
},
"FillerKind": {
"enum": [
"None",
"PreRoll",
"MidRoll",
"PostRoll",
"Tail",
"Fallback",
"GuideMode",
"DecoDefault"
],
"type": "string"
},
"FillerMode": {
"enum": [
"None",
"Duration",
"Count",
"Pad",
"RandomCount"
],
"type": "string"
},
"FillerPresetFullResponseModel": {
"required": [
"id",
"name",
"fillerKind",
"fillerMode",
"duration",
"count",
"padToNearestMinute",
"allowWatermarks",
"collectionType",
"collectionId",
"mediaItemId",
"multiCollectionId",
"smartCollectionId",
"playlistId",
"expression",
"useChaptersAsMediaItems"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
},
"fillerMode": {
"$ref": "#/components/schemas/FillerMode"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"count": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"padToNearestMinute": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"allowWatermarks": {
"type": "boolean"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"expression": {
"type": [
"null",
"string"
]
},
"useChaptersAsMediaItems": {
"type": "boolean"
}
}
},
"FillerPresetResponseModel": {
"required": [
"id",
"name",
"fillerKind"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
}
}
},
"FillWithGroupMode": {
"enum": [
"None",
"FillWithOrderedGroups",
"FillWithShuffledGroups"
],
"type": "string"
},
"FilterMode": {
"enum": [
"HardwareIfPossible",
"Software"
],
"type": "string"
},
"FixedStartTimeBehavior": {
"enum": [
"Strict",
"Flexible"
],
"type": "string"
},
"GraphicsElementResponseModel": {
"required": [
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"GuideMode": {
"enum": [
"Normal",
"Filler"
],
"type": "string"
},
"HardwareAccelerationKind": {
"enum": [
"None",
"Qsv",
"Nvenc",
"Vaapi",
"VideoToolbox",
"Amf",
"V4l2m2m",
"Rkmpp"
],
"type": "string"
},
"HdhrSettingsResponseModel": {
"required": [
"tunerCount",
"uuid"
],
"type": "object",
"properties": {
"tunerCount": {
"type": "integer",
"format": "int32"
},
"uuid": {
"type": "string",
"format": "uuid"
}
}
},
"HealthCheckResponseModel": {
"required": [
"title",
"status",
"detail",
"link"
],
"type": "object",
"properties": {
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"detail": {
"type": "string"
},
"link": {
"type": [
"null",
"string"
]
}
}
},
"HlsSessionModel": {
"required": [
"channelNumber",
"state",
"transcodedUntil",
"lastAccess"
],
"type": "object",
"properties": {
"channelNumber": {
"type": [
"null",
"string"
]
},
"state": {
"type": [
"null",
"string"
]
},
"transcodedUntil": {
"type": "string",
"format": "date-time"
},
"lastAccess": {
"type": "string",
"format": "date-time"
}
}
},
"IFormFile": {
"type": "string",
"format": "binary"
},
"ImageFolderResponseModel": {
"required": [
"libraryFolderId",
"name",
"fullPath",
"subfolderCount",
"imageCount",
"durationSeconds"
],
"type": "object",
"properties": {
"libraryFolderId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"fullPath": {
"type": "string"
},
"subfolderCount": {
"type": "integer",
"format": "int32"
},
"imageCount": {
"type": "integer",
"format": "int32"
},
"durationSeconds": {
"type": [
"null",
"number"
],
"format": "double"
}
}
},
"LanguageCodeResponseModel": {
"required": [
"code",
"englishName"
],
"type": "object",
"properties": {
"code": {
"type": "string"
},
"englishName": {
"type": "string"
}
}
},
"LibraryBrowseItemResponseModel": {
"required": [
"id",
"mediaType",
"title",
"libraryId",
"libraryName",
"artwork",
"duration",
"itemCount",
"collectionKind",
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"rerunCollectionId",
"mediaItemId",
"playlistId"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"mediaType": {
"$ref": "#/components/schemas/LibraryBrowseMediaType"
},
"title": {
"type": "string"
},
"libraryId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"libraryName": {
"type": [
"null",
"string"
]
},
"artwork": {
"type": "string"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"itemCount": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"collectionKind": {
"type": [
"null",
"string"
]
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"rerunCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"subtitle": {
"type": [
"null",
"string"
]
},
"seasonId": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"LibraryBrowseMediaType": {
"enum": [
"Movie",
"TelevisionShow",
"TelevisionSeason",
"Artist",
"Collection",
"SmartCollection",
"MultiCollection",
"RerunCollection",
"Playlist",
"Episode",
"MusicVideo",
"Song",
"OtherVideo",
"Image",
"RemoteStream"
],
"type": "string"
},
"LibraryMediaKind": {
"enum": [
"Movies",
"Shows",
"MusicVideos",
"OtherVideos",
"Songs",
"Images",
"RemoteStreams"
],
"type": "string"
},
"LibraryScanStatusResponseModel": {
"required": [
"libraryId",
"percent"
],
"type": "object",
"properties": {
"libraryId": {
"type": "integer",
"format": "int32"
},
"percent": {
"type": "number",
"format": "double"
}
}
},
"LocalLibraryDetailResponseModel": {
"required": [
"id",
"name",
"mediaKind",
"isLocked",
"mediaItemCount",
"paths"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"mediaKind": {
"$ref": "#/components/schemas/LibraryMediaKind"
},
"isLocked": {
"type": "boolean"
},
"mediaItemCount": {
"type": "integer",
"format": "int32"
},
"paths": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LocalLibraryPathResponseModel"
}
}
}
},
"LocalLibraryPathResponseModel": {
"required": [
"id",
"path",
"mediaItemCount"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"path": {
"type": "string"
},
"mediaItemCount": {
"type": "integer",
"format": "int32"
}
}
},
"LocalLibraryResponseModel": {
"required": [
"id",
"name",
"mediaKind",
"isLocked"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"mediaKind": {
"$ref": "#/components/schemas/LibraryMediaKind"
},
"isLocked": {
"type": "boolean"
}
}
},
"LocalPathCheckRequest": {
"required": [
"path"
],
"type": "object",
"properties": {
"path": {
"type": [
"null",
"string"
]
}
}
},
"LocalPathCheckResponseModel": {
"required": [
"exists"
],
"type": "object",
"properties": {
"exists": {
"type": "boolean"
}
}
},
"LogEntryResponseModel": {
"required": [
"timestamp",
"level",
"message"
],
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time"
},
"level": {
"type": "string"
},
"message": {
"type": "string"
}
}
},
"LogEventLevel": {
"enum": [
"Verbose",
"Debug",
"Information",
"Warning",
"Error",
"Fatal"
],
"type": "string"
},
"LoggingSettingsResponseModel": {
"required": [
"defaultMinimumLogLevel",
"scanningMinimumLogLevel",
"schedulingMinimumLogLevel",
"searchingMinimumLogLevel",
"streamingMinimumLogLevel",
"httpMinimumLogLevel"
],
"type": "object",
"properties": {
"defaultMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"scanningMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"schedulingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"searchingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"streamingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"httpMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
}
}
},
"MarathonGroupBy": {
"enum": [
"None",
"Show",
"Season",
"Artist",
"Album",
"Director"
],
"type": "string"
},
"MediaCollectionResponseModel": {
"required": [
"id",
"name",
"collectionType",
"useCustomPlaybackOrder"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"useCustomPlaybackOrder": {
"type": "boolean"
}
}
},
"MediaItemInfoChapterResponseModel": {
"required": [
"title",
"startTime",
"endTime"
],
"type": "object",
"properties": {
"title": {
"type": [
"null",
"string"
]
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"endTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
}
}
},
"MediaItemInfoResponseModel": {
"required": [
"id",
"title",
"kind",
"libraryKind",
"serverName",
"libraryName",
"state",
"duration",
"sampleAspectRatio",
"displayAspectRatio",
"rFrameRate",
"videoScanKind",
"interlacedRatio",
"width",
"height",
"streams",
"chapters"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"title": {
"type": "string"
},
"kind": {
"type": "string"
},
"libraryKind": {
"type": "string"
},
"serverName": {
"type": [
"null",
"string"
]
},
"libraryName": {
"type": "string"
},
"state": {
"$ref": "#/components/schemas/MediaItemState"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"sampleAspectRatio": {
"type": [
"null",
"string"
]
},
"displayAspectRatio": {
"type": [
"null",
"string"
]
},
"rFrameRate": {
"type": [
"null",
"string"
]
},
"videoScanKind": {
"$ref": "#/components/schemas/VideoScanKind"
},
"interlacedRatio": {
"type": [
"null",
"number"
],
"format": "double"
},
"width": {
"type": "integer",
"format": "int32"
},
"height": {
"type": "integer",
"format": "int32"
},
"streams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaItemInfoStreamResponseModel"
}
},
"chapters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaItemInfoChapterResponseModel"
}
}
}
},
"MediaItemInfoStreamResponseModel": {
"required": [
"index",
"kind",
"title",
"codec",
"profile",
"language",
"channels",
"default",
"forced",
"attachedPic",
"pixelFormat",
"colorRange",
"colorSpace",
"colorTransfer",
"colorPrimaries",
"bitsPerRawSample",
"mimeType",
"fileName",
"isExtracted"
],
"type": "object",
"properties": {
"index": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"kind": {
"$ref": "#/components/schemas/MediaStreamKind"
},
"title": {
"type": [
"null",
"string"
]
},
"codec": {
"type": [
"null",
"string"
]
},
"profile": {
"type": [
"null",
"string"
]
},
"language": {
"type": [
"null",
"string"
]
},
"channels": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"default": {
"type": [
"null",
"boolean"
]
},
"forced": {
"type": [
"null",
"boolean"
]
},
"attachedPic": {
"type": [
"null",
"boolean"
]
},
"pixelFormat": {
"type": [
"null",
"string"
]
},
"colorRange": {
"type": [
"null",
"string"
]
},
"colorSpace": {
"type": [
"null",
"string"
]
},
"colorTransfer": {
"type": [
"null",
"string"
]
},
"colorPrimaries": {
"type": [
"null",
"string"
]
},
"bitsPerRawSample": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mimeType": {
"type": [
"null",
"string"
]
},
"fileName": {
"type": [
"null",
"string"
]
},
"isExtracted": {
"type": [
"null",
"boolean"
]
}
}
},
"MediaItemState": {
"enum": [
"Normal",
"FileNotFound",
"Unavailable",
"RemoteOnly"
],
"type": "string"
},
"MediaSourceKind": {
"enum": [
"Local",
"Plex",
"Jellyfin",
"Emby"
],
"type": "string"
},
"MediaSourceLibraryResponseModel": {
"required": [
"id",
"name",
"mediaKind",
"lastScan",
"itemCount"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"mediaKind": {
"$ref": "#/components/schemas/LibraryMediaKind"
},
"lastScan": {
"type": [
"null",
"string"
],
"format": "date-time"
},
"itemCount": {
"type": "integer",
"format": "int32"
}
}
},
"MediaSourceResponseModel": {
"required": [
"id",
"kind",
"name",
"connectionAddress",
"libraries"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"connectionAddress": {
"type": [
"null",
"string"
]
},
"libraries": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MediaSourceLibraryResponseModel"
}
}
}
},
"MediaStreamKind": {
"enum": [
"Video",
"Audio",
"Subtitle",
"Attachment",
"ExternalSubtitle"
],
"type": "string"
},
"MoveLocalLibraryPathRequest": {
"required": [
"targetLibraryId"
],
"type": "object",
"properties": {
"targetLibraryId": {
"type": "integer",
"format": "int32"
}
}
},
"MovieDetailResponseModel": {
"required": [
"id",
"title",
"year",
"plot",
"genres",
"tags",
"studios",
"contentRatings",
"languages",
"actors",
"directors",
"writers",
"path",
"localPath",
"state",
"poster",
"fanArt"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"title": {
"type": "string"
},
"year": {
"type": [
"null",
"string"
]
},
"plot": {
"type": [
"null",
"string"
]
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"studios": {
"type": "array",
"items": {
"type": "string"
}
},
"contentRatings": {
"type": "array",
"items": {
"type": "string"
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
},
"actors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActorResponseModel"
}
},
"directors": {
"type": "array",
"items": {
"type": "string"
}
},
"writers": {
"type": "array",
"items": {
"type": "string"
}
},
"path": {
"type": [
"null",
"string"
]
},
"localPath": {
"type": [
"null",
"string"
]
},
"state": {
"$ref": "#/components/schemas/MediaItemState"
},
"poster": {
"type": "string"
},
"fanArt": {
"type": "string"
}
}
},
"MultiCollectionItemRequest": {
"required": [
"collectionId",
"smartCollectionId",
"scheduleAsGroup",
"playbackOrder"
],
"type": "object",
"properties": {
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"scheduleAsGroup": {
"type": "boolean"
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
}
}
},
"MultiCollectionItemResponseModel": {
"required": [
"collectionId",
"smartCollectionId",
"name",
"scheduleAsGroup",
"playbackOrder"
],
"type": "object",
"properties": {
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"name": {
"type": "string"
},
"scheduleAsGroup": {
"type": "boolean"
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
}
}
},
"MultiCollectionResponseModel": {
"required": [
"id",
"name",
"items"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MultiCollectionItemResponseModel"
}
}
}
},
"MultipleMode": {
"enum": [
"Count",
"CollectionSize",
"PlaylistItemSize",
"MultiEpisodeGroupSize"
],
"type": "string"
},
"NamedIdResponseModel": {
"required": [
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"NormalizeLoudnessMode": {
"enum": [
"Off",
"LoudNorm"
],
"type": "string"
},
"OutputFormatKind": {
"enum": [
"None",
"Mkv",
"MpegTs",
"Mp4",
"Hls",
"HlsMp4",
"Nut"
],
"type": "string"
},
"PagedLibraryBrowseItemsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryBrowseItemResponseModel"
}
}
}
},
"PagedLogEntriesResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LogEntryResponseModel"
}
}
}
},
"PagedMultiCollectionsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MultiCollectionResponseModel"
}
}
}
},
"PagedPlayoutHistoryResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutHistoryResponseModel"
}
}
}
},
"PagedPlayoutItemsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutItemResponseModel"
}
}
}
},
"PagedPlayoutsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayoutListItemResponseModel"
}
}
}
},
"PagedRerunCollectionsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RerunCollectionResponseModel"
}
}
}
},
"PagedTraktListsResponseModel": {
"required": [
"totalCount",
"page"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"page": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TraktListResponseModel"
}
}
}
},
"PathReplacementItemRequest": {
"required": [
"id",
"remotePath",
"localPath"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"remotePath": {
"type": [
"null",
"string"
]
},
"localPath": {
"type": [
"null",
"string"
]
}
}
},
"PathReplacementResponseModel": {
"required": [
"id",
"remotePath",
"localPath"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"remotePath": {
"type": [
"null",
"string"
]
},
"localPath": {
"type": [
"null",
"string"
]
}
}
},
"PlaybackOrder": {
"enum": [
"None",
"Chronological",
"Random",
"Shuffle",
"ShuffleInOrder",
"MultiEpisodeShuffle",
"SeasonEpisode",
"RandomRotation",
"Marathon"
],
"type": "string"
},
"PlaylistGroupResponseModel": {
"required": [
"id",
"name",
"playlistCount",
"isSystem"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"playlistCount": {
"type": "integer",
"format": "int32"
},
"isSystem": {
"type": "boolean"
}
}
},
"PlaylistItemRequest": {
"required": [
"index",
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"mediaItemId",
"playbackOrder",
"count",
"playAll",
"includeInProgramGuide"
],
"type": "object",
"properties": {
"index": {
"type": "integer",
"format": "int32"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"count": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playAll": {
"type": "boolean"
},
"includeInProgramGuide": {
"type": "boolean"
}
}
},
"PlaylistItemResponseModel": {
"required": [
"id",
"index",
"collectionType",
"collectionId",
"collectionName",
"multiCollectionId",
"multiCollectionName",
"smartCollectionId",
"smartCollectionName",
"mediaItemId",
"mediaItemName",
"playbackOrder",
"count",
"playAll",
"includeInProgramGuide"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"index": {
"type": "integer",
"format": "int32"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"collectionName": {
"type": [
"null",
"string"
]
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionName": {
"type": [
"null",
"string"
]
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionName": {
"type": [
"null",
"string"
]
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemName": {
"type": [
"null",
"string"
]
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"count": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playAll": {
"type": "boolean"
},
"includeInProgramGuide": {
"type": "boolean"
}
}
},
"PlaylistPreviewItemResponseModel": {
"required": [
"title",
"start",
"finish",
"duration"
],
"type": "object",
"properties": {
"title": {
"type": "string"
},
"start": {
"type": "string"
},
"finish": {
"type": "string"
},
"duration": {
"type": "string"
}
}
},
"PlaylistResponseModel": {
"required": [
"id",
"playlistGroupId",
"name",
"isSystem"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"playlistGroupId": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"isSystem": {
"type": "boolean"
}
}
},
"PlayoutAlternateScheduleItemRequest": {
"required": [
"id",
"programScheduleId",
"daysOfWeek",
"daysOfMonth",
"monthsOfYear",
"limitToDateRange",
"startMonth",
"startDay",
"startYear",
"endMonth",
"endDay",
"endYear"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"programScheduleId": {
"type": "integer",
"format": "int32"
},
"daysOfWeek": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/DayOfWeek"
}
},
"daysOfMonth": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"monthsOfYear": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"limitToDateRange": {
"type": "boolean"
},
"startMonth": {
"type": "integer",
"format": "int32"
},
"startDay": {
"type": "integer",
"format": "int32"
},
"startYear": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"endMonth": {
"type": "integer",
"format": "int32"
},
"endDay": {
"type": "integer",
"format": "int32"
},
"endYear": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"PlayoutAlternateScheduleResponseModel": {
"required": [
"id",
"index",
"programScheduleId",
"daysOfWeek",
"daysOfMonth",
"monthsOfYear",
"limitToDateRange",
"startMonth",
"startDay",
"startYear",
"endMonth",
"endDay",
"endYear"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"index": {
"type": "integer",
"format": "int32"
},
"programScheduleId": {
"type": "integer",
"format": "int32"
},
"daysOfWeek": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DayOfWeek"
}
},
"daysOfMonth": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"monthsOfYear": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"limitToDateRange": {
"type": "boolean"
},
"startMonth": {
"type": "integer",
"format": "int32"
},
"startDay": {
"type": "integer",
"format": "int32"
},
"startYear": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"endMonth": {
"type": "integer",
"format": "int32"
},
"endDay": {
"type": "integer",
"format": "int32"
},
"endYear": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"PlayoutBuildMode": {
"enum": [
"Continue",
"Refresh",
"Reset"
],
"type": "string"
},
"PlayoutBuildStatusResponseModel": {
"required": [
"lastBuild",
"success",
"message"
],
"type": "object",
"properties": {
"lastBuild": {
"type": "string",
"format": "date-time"
},
"success": {
"type": "boolean"
},
"message": {
"type": "string"
}
}
},
"PlayoutHistoryDetailsResponseModel": {
"required": [
"playbackOrder",
"collectionType",
"name",
"mediaItemType",
"mediaItemTitle"
],
"type": "object",
"properties": {
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"name": {
"type": "string"
},
"mediaItemType": {
"type": "string"
},
"mediaItemTitle": {
"type": "string"
}
}
},
"PlayoutHistoryResponseModel": {
"required": [
"id",
"when",
"finish",
"key",
"details"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"when": {
"type": "string",
"format": "date-time"
},
"finish": {
"type": "string",
"format": "date-time"
},
"key": {
"type": "string"
},
"details": {
"type": "string"
}
}
},
"PlayoutItemResponseModel": {
"required": [
"id",
"title",
"start",
"finish",
"duration",
"fillerKind",
"hasSchedulingContext"
],
"type": "object",
"properties": {
"id": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"title": {
"type": "string"
},
"start": {
"type": "string",
"format": "date-time"
},
"finish": {
"type": "string",
"format": "date-time"
},
"duration": {
"type": "string"
},
"fillerKind": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/FillerKind"
}
]
},
"hasSchedulingContext": {
"type": "boolean"
}
}
},
"PlayoutItemSchedulingContextResponseModel": {
"required": [
"context"
],
"type": "object",
"properties": {
"context": {
"type": "string"
}
}
},
"PlayoutListItemResponseModel": {
"required": [
"id",
"channelNumber",
"channelName",
"scheduleKind",
"scheduleName",
"dailyRebuildTime",
"buildStatus",
"playoutMode",
"isLocked"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"channelNumber": {
"type": "string"
},
"channelName": {
"type": "string"
},
"scheduleKind": {
"$ref": "#/components/schemas/PlayoutScheduleKind"
},
"scheduleName": {
"type": "string"
},
"dailyRebuildTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"buildStatus": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/PlayoutBuildStatusResponseModel"
}
]
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"isLocked": {
"type": "boolean"
}
}
},
"PlayoutMode": {
"enum": [
"Flood",
"One",
"Multiple",
"Duration"
],
"type": "string"
},
"PlayoutResponseModel": {
"required": [
"id",
"scheduleKind",
"channelName",
"channelNumber",
"playoutMode",
"scheduleName",
"scheduleFile",
"dailyRebuildTime",
"buildStatus",
"decoId",
"decoName",
"isLocked"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"scheduleKind": {
"$ref": "#/components/schemas/PlayoutScheduleKind"
},
"channelName": {
"type": "string"
},
"channelNumber": {
"type": "string"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"scheduleName": {
"type": "string"
},
"scheduleFile": {
"type": [
"null",
"string"
]
},
"dailyRebuildTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"buildStatus": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/PlayoutBuildStatusResponseModel"
}
]
},
"decoId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"decoName": {
"type": [
"null",
"string"
]
},
"isLocked": {
"type": "boolean"
}
}
},
"PlayoutScheduleKind": {
"enum": [
"None",
"Classic",
"Block",
"Sequential",
"Scripted",
"ExternalJson"
],
"type": "string"
},
"PlayoutSettingsResponseModel": {
"required": [
"daysToBuild",
"skipMissingItems",
"scriptedScheduleTimeoutSeconds"
],
"type": "object",
"properties": {
"daysToBuild": {
"type": "integer",
"format": "int32"
},
"skipMissingItems": {
"type": "boolean"
},
"scriptedScheduleTimeoutSeconds": {
"type": "integer",
"format": "int32"
}
}
},
"PlayoutTemplateItemRequest": {
"required": [
"id",
"templateId",
"decoTemplateId",
"daysOfWeek",
"daysOfMonth",
"monthsOfYear",
"limitToDateRange",
"startMonth",
"startDay",
"startYear",
"endMonth",
"endDay",
"endYear"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"templateId": {
"type": "integer",
"format": "int32"
},
"decoTemplateId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"daysOfWeek": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/DayOfWeek"
}
},
"daysOfMonth": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"monthsOfYear": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"limitToDateRange": {
"type": "boolean"
},
"startMonth": {
"type": "integer",
"format": "int32"
},
"startDay": {
"type": "integer",
"format": "int32"
},
"startYear": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"endMonth": {
"type": "integer",
"format": "int32"
},
"endDay": {
"type": "integer",
"format": "int32"
},
"endYear": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"PlayoutTemplateResponseModel": {
"required": [
"id",
"index",
"templateId",
"templateName",
"templateGroupName",
"decoTemplateId",
"decoTemplateName",
"decoTemplateGroupName",
"daysOfWeek",
"daysOfMonth",
"monthsOfYear",
"limitToDateRange",
"startMonth",
"startDay",
"startYear",
"endMonth",
"endDay",
"endYear"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"index": {
"type": "integer",
"format": "int32"
},
"templateId": {
"type": "integer",
"format": "int32"
},
"templateName": {
"type": "string"
},
"templateGroupName": {
"type": "string"
},
"decoTemplateId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"decoTemplateName": {
"type": [
"null",
"string"
]
},
"decoTemplateGroupName": {
"type": [
"null",
"string"
]
},
"daysOfWeek": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DayOfWeek"
}
},
"daysOfMonth": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"monthsOfYear": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"limitToDateRange": {
"type": "boolean"
},
"startMonth": {
"type": "integer",
"format": "int32"
},
"startDay": {
"type": "integer",
"format": "int32"
},
"startYear": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"endMonth": {
"type": "integer",
"format": "int32"
},
"endDay": {
"type": "integer",
"format": "int32"
},
"endYear": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"PlexPinFlowResponseModel": {
"required": [
"authUrl"
],
"type": "object",
"properties": {
"authUrl": {
"type": "string"
}
}
},
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": [
"null",
"string"
]
},
"title": {
"type": [
"null",
"string"
]
},
"status": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"detail": {
"type": [
"null",
"string"
]
},
"instance": {
"type": [
"null",
"string"
]
}
}
},
"ProgramScheduleResponseModel": {
"required": [
"id",
"name",
"keepMultiPartEpisodesTogether",
"treatCollectionsAsShows",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"keepMultiPartEpisodesTogether": {
"type": "boolean"
},
"treatCollectionsAsShows": {
"type": "boolean"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"RemoteConnectionResponseModel": {
"required": [
"address",
"hasApiKey"
],
"type": "object",
"properties": {
"address": {
"type": "string"
},
"hasApiKey": {
"type": "boolean"
}
}
},
"RemoteLibraryPreferenceRequest": {
"required": [
"id",
"shouldSyncItems"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"shouldSyncItems": {
"type": "boolean"
}
}
},
"RemoteLibraryResponseModel": {
"required": [
"id",
"name",
"mediaKind",
"shouldSyncItems"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
},
"mediaKind": {
"$ref": "#/components/schemas/LibraryMediaKind"
},
"shouldSyncItems": {
"type": "boolean"
}
}
},
"RemoteMediaSourceItemResponseModel": {
"required": [
"id",
"name",
"address"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": [
"null",
"string"
]
},
"address": {
"type": [
"null",
"string"
]
}
}
},
"RemoteMediaSourceStateResponseModel": {
"required": [
"isAuthorized",
"isLocked",
"servers"
],
"type": "object",
"properties": {
"isAuthorized": {
"type": "boolean"
},
"isLocked": {
"type": "boolean"
},
"servers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RemoteMediaSourceItemResponseModel"
}
}
}
},
"ReplaceBlockRequest": {
"required": [
"name",
"minutes",
"stopScheduling",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"minutes": {
"type": "integer",
"format": "int32"
},
"stopScheduling": {
"$ref": "#/components/schemas/BlockStopScheduling"
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/BlockItemRequest"
}
}
}
},
"ReplaceDecoRequest": {
"required": [
"name",
"watermarkMode",
"watermarkIds",
"useWatermarkDuringFiller",
"graphicsElementsMode",
"graphicsElementIds",
"useGraphicsElementsDuringFiller",
"breakContentMode",
"breakContent",
"defaultFillerMode",
"defaultFillerCollectionType",
"defaultFillerCollectionId",
"defaultFillerMediaItemId",
"defaultFillerMultiCollectionId",
"defaultFillerSmartCollectionId",
"defaultFillerTrimToFit",
"deadAirFallbackMode",
"deadAirFallbackCollectionType",
"deadAirFallbackCollectionId",
"deadAirFallbackMediaItemId",
"deadAirFallbackMultiCollectionId",
"deadAirFallbackSmartCollectionId"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"watermarkMode": {
"$ref": "#/components/schemas/DecoMode"
},
"watermarkIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"useWatermarkDuringFiller": {
"type": "boolean"
},
"graphicsElementsMode": {
"$ref": "#/components/schemas/DecoMode"
},
"graphicsElementIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"useGraphicsElementsDuringFiller": {
"type": "boolean"
},
"breakContentMode": {
"$ref": "#/components/schemas/DecoMode"
},
"breakContent": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/DecoBreakContentRequest"
}
},
"defaultFillerMode": {
"$ref": "#/components/schemas/DecoMode"
},
"defaultFillerCollectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"defaultFillerCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerMediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerMultiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerSmartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"defaultFillerTrimToFit": {
"type": "boolean"
},
"deadAirFallbackMode": {
"$ref": "#/components/schemas/DecoMode"
},
"deadAirFallbackCollectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"deadAirFallbackCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackMediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackMultiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"deadAirFallbackSmartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"ReplaceDecoTemplateRequest": {
"required": [
"name",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/DecoTemplateItemRequest"
}
}
}
},
"ReplacePathReplacementsRequest": {
"required": [
"items"
],
"type": "object",
"properties": {
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/PathReplacementItemRequest"
}
}
}
},
"ReplacePlaylistRequest": {
"required": [
"name",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/PlaylistItemRequest"
}
}
}
},
"ReplacePlayoutAlternateSchedulesRequest": {
"required": [
"items"
],
"type": "object",
"properties": {
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/PlayoutAlternateScheduleItemRequest"
}
}
}
},
"ReplacePlayoutTemplatesRequest": {
"required": [
"items"
],
"type": "object",
"properties": {
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/PlayoutTemplateItemRequest"
}
}
}
},
"ReplaceRemoteLibraryPreferencesRequest": {
"required": [
"libraries"
],
"type": "object",
"properties": {
"libraries": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/RemoteLibraryPreferenceRequest"
}
}
}
},
"ReplaceScheduleItemsRequest": {
"required": [
"items"
],
"type": "object",
"properties": {
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/ScheduleItemRequest"
}
}
}
},
"ReplaceTemplateRequest": {
"required": [
"name",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/TemplateItemRequest"
}
}
}
},
"RerunCollectionResponseModel": {
"required": [
"id",
"name",
"collectionType",
"selectedId",
"selectedName",
"firstRunPlaybackOrder",
"rerunPlaybackOrder"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"selectedId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"selectedName": {
"type": [
"null",
"string"
]
},
"firstRunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"rerunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
}
}
},
"ResetAllPlayoutsResponseModel": {
"required": [
"queuedPlayoutIds",
"skippedLocked",
"skippedUnsupported"
],
"type": "object",
"properties": {
"queuedPlayoutIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"skippedLocked": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"skippedUnsupported": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"ResolutionResponseModel": {
"required": [
"id",
"name",
"width",
"height",
"isCustom"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"width": {
"type": "integer",
"format": "int32"
},
"height": {
"type": "integer",
"format": "int32"
},
"isCustom": {
"type": "boolean"
}
}
},
"SaveRemoteConnectionRequest": {
"required": [
"address",
"apiKey"
],
"type": "object",
"properties": {
"address": {
"type": [
"null",
"string"
]
},
"apiKey": {
"type": [
"null",
"string"
]
}
}
},
"ScalingBehavior": {
"enum": [
"ScaleAndPad",
"Stretch",
"Crop"
],
"type": "string"
},
"ScannerSettingsResponseModel": {
"required": [
"libraryRefreshInterval"
],
"type": "object",
"properties": {
"libraryRefreshInterval": {
"type": "integer",
"format": "int32"
}
}
},
"ScanShowRequest": {
"required": [
"showId"
],
"type": "object",
"properties": {
"showId": {
"type": "integer",
"format": "int32"
},
"deepScan": {
"type": "boolean",
"default": false
}
}
},
"ScheduleItemRequest": {
"required": [
"id",
"startType",
"startTime",
"fixedStartTimeBehavior",
"playoutMode",
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"rerunCollectionId",
"mediaItemId",
"playlistId",
"searchTitle",
"searchQuery",
"playbackOrder",
"marathonGroupBy",
"marathonShuffleGroups",
"marathonShuffleItems",
"marathonBatchSize",
"fillWithGroupMode",
"multipleMode",
"multipleCount",
"playoutDuration",
"tailMode",
"discardToFillAttempts",
"customTitle",
"guideMode",
"preRollFillerId",
"midRollFillerId",
"postRollFillerId",
"tailFillerId",
"fallbackFillerId",
"watermarkIds",
"graphicsElementIds",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"preferredSubtitleLanguageCode",
"subtitleMode"
],
"type": "object",
"properties": {
"id": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"startType": {
"$ref": "#/components/schemas/StartType"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"fixedStartTimeBehavior": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
]
},
"playoutMode": {
"$ref": "#/components/schemas/PlayoutMode"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"rerunCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"searchTitle": {
"type": [
"null",
"string"
]
},
"searchQuery": {
"type": [
"null",
"string"
]
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"marathonGroupBy": {
"$ref": "#/components/schemas/MarathonGroupBy"
},
"marathonShuffleGroups": {
"type": "boolean"
},
"marathonShuffleItems": {
"type": "boolean"
},
"marathonBatchSize": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fillWithGroupMode": {
"$ref": "#/components/schemas/FillWithGroupMode"
},
"multipleMode": {
"$ref": "#/components/schemas/MultipleMode"
},
"multipleCount": {
"type": [
"null",
"string"
]
},
"playoutDuration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"tailMode": {
"$ref": "#/components/schemas/TailMode"
},
"discardToFillAttempts": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"customTitle": {
"type": [
"null",
"string"
]
},
"guideMode": {
"$ref": "#/components/schemas/GuideMode"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"tailFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"watermarkIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"graphicsElementIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelSubtitleMode"
}
]
}
}
},
"ScheduleItemResponseModel": {
"required": [
"id",
"index",
"startType",
"startTime",
"fixedStartTimeBehavior",
"playoutMode",
"collectionType",
"collectionId",
"multiCollectionId",
"smartCollectionId",
"rerunCollectionId",
"mediaItemId",
"playlistId",
"searchTitle",
"searchQuery",
"playbackOrder",
"marathonGroupBy",
"marathonShuffleGroups",
"marathonShuffleItems",
"marathonBatchSize",
"fillWithGroupMode",
"multipleMode",
"multipleCount",
"playoutDuration",
"tailMode",
"discardToFillAttempts",
"customTitle",
"guideMode",
"preRollFillerId",
"midRollFillerId",
"postRollFillerId",
"tailFillerId",
"fallbackFillerId",
"watermarkIds",
"graphicsElementIds",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"preferredSubtitleLanguageCode",
"subtitleMode",
"collectionName",
"multiCollectionName",
"smartCollectionName",
"rerunCollectionName",
"playlistName",
"playlistGroupId",
"mediaItemName",
"preRollFillerName",
"midRollFillerName",
"postRollFillerName",
"tailFillerName",
"fallbackFillerName",
"watermarks",
"graphicsElements",
"name",
"durationEstimate"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"index": {
"type": "integer",
"format": "int32"
},
"startType": {
"$ref": "#/components/schemas/StartType"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"fixedStartTimeBehavior": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
]
},
"playoutMode": {
"$ref": "#/components/schemas/PlayoutMode"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"rerunCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"searchTitle": {
"type": [
"null",
"string"
]
},
"searchQuery": {
"type": [
"null",
"string"
]
},
"playbackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"marathonGroupBy": {
"$ref": "#/components/schemas/MarathonGroupBy"
},
"marathonShuffleGroups": {
"type": "boolean"
},
"marathonShuffleItems": {
"type": "boolean"
},
"marathonBatchSize": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fillWithGroupMode": {
"$ref": "#/components/schemas/FillWithGroupMode"
},
"multipleMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/MultipleMode"
}
]
},
"multipleCount": {
"type": [
"null",
"string"
]
},
"playoutDuration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"tailMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/TailMode"
}
]
},
"discardToFillAttempts": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"customTitle": {
"type": [
"null",
"string"
]
},
"guideMode": {
"$ref": "#/components/schemas/GuideMode"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"tailFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"watermarkIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"graphicsElementIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ChannelSubtitleMode"
}
]
},
"collectionName": {
"type": [
"null",
"string"
]
},
"multiCollectionName": {
"type": [
"null",
"string"
]
},
"smartCollectionName": {
"type": [
"null",
"string"
]
},
"rerunCollectionName": {
"type": [
"null",
"string"
]
},
"playlistName": {
"type": [
"null",
"string"
]
},
"playlistGroupId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemName": {
"type": [
"null",
"string"
]
},
"preRollFillerName": {
"type": [
"null",
"string"
]
},
"midRollFillerName": {
"type": [
"null",
"string"
]
},
"postRollFillerName": {
"type": [
"null",
"string"
]
},
"tailFillerName": {
"type": [
"null",
"string"
]
},
"fallbackFillerName": {
"type": [
"null",
"string"
]
},
"watermarks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/NamedIdResponseModel"
}
},
"graphicsElements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/NamedIdResponseModel"
}
},
"name": {
"type": [
"null",
"string"
]
},
"durationEstimate": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
}
}
},
"ScheduleItemsResponseModel": {
"required": [
"items",
"totalDurationEstimate"
],
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ScheduleItemResponseModel"
}
},
"totalDurationEstimate": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
}
}
},
"SchedulingPickerOptionResponseModel": {
"required": [
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"SearchResultAllItemsResponseModel": {
"required": [
"movieIds",
"showIds",
"seasonIds",
"episodeIds",
"artistIds",
"musicVideoIds",
"otherVideoIds",
"songIds",
"imageIds",
"remoteStreamIds"
],
"type": "object",
"properties": {
"movieIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"showIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"seasonIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"episodeIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"artistIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"musicVideoIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"otherVideoIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"songIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"imageIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"remoteStreamIds": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"SearchResultGroupResponseModel": {
"required": [
"totalCount",
"items"
],
"type": "object",
"properties": {
"totalCount": {
"type": "integer",
"format": "int32"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LibraryBrowseItemResponseModel"
}
}
}
},
"SearchResultsResponseModel": {
"required": [
"movies",
"shows",
"seasons",
"artists",
"episodes",
"musicVideos",
"songs",
"otherVideos",
"images",
"remoteStreams"
],
"type": "object",
"properties": {
"movies": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"shows": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"seasons": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"artists": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"episodes": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"musicVideos": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"songs": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"otherVideos": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"images": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
},
"remoteStreams": {
"$ref": "#/components/schemas/SearchResultGroupResponseModel"
}
}
},
"SeasonDetailResponseModel": {
"required": [
"id",
"showId",
"title",
"year",
"name",
"poster",
"fanArt"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"showId": {
"type": "integer",
"format": "int32"
},
"title": {
"type": "string"
},
"year": {
"type": [
"null",
"string"
]
},
"name": {
"type": "string"
},
"poster": {
"type": "string"
},
"fanArt": {
"type": "string"
}
}
},
"ShowDetailResponseModel": {
"required": [
"id",
"libraryId",
"mediaSourceKind",
"title",
"year",
"plot",
"poster",
"fanArt",
"genres",
"tags",
"studios",
"networks",
"contentRatings",
"languages",
"actors"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"libraryId": {
"type": "integer",
"format": "int32"
},
"mediaSourceKind": {
"$ref": "#/components/schemas/MediaSourceKind"
},
"title": {
"type": "string"
},
"year": {
"type": [
"null",
"string"
]
},
"plot": {
"type": [
"null",
"string"
]
},
"poster": {
"type": "string"
},
"fanArt": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"studios": {
"type": "array",
"items": {
"type": "string"
}
},
"networks": {
"type": "array",
"items": {
"type": "string"
}
},
"contentRatings": {
"type": "array",
"items": {
"type": "string"
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
},
"actors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActorResponseModel"
}
}
}
},
"SmartCollectionResponseModel": {
"required": [
"id",
"name",
"query"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"query": {
"type": "string"
}
}
},
"StartTroubleshootingPlaybackRequest": {
"required": [
"mediaItem",
"channel",
"ffmpegProfile",
"streamingMode",
"watermark",
"graphicsElement",
"streamSelector",
"subtitleId",
"seekSeconds",
"start"
],
"type": "object",
"properties": {
"mediaItem": {
"type": "integer",
"format": "int32"
},
"channel": {
"type": "integer",
"format": "int32"
},
"ffmpegProfile": {
"type": "integer",
"format": "int32"
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"watermark": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"graphicsElement": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"subtitleId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"seekSeconds": {
"type": "integer",
"format": "int32"
},
"start": {
"type": [
"null",
"string"
],
"format": "date-time"
}
}
},
"StartType": {
"enum": [
"Dynamic",
"Fixed"
],
"type": "string"
},
"StreamingMode": {
"enum": [
"TransportStream",
"HttpLiveStreamingDirect",
"HttpLiveStreamingSegmenter",
"TransportStreamHybrid"
],
"type": "string"
},
"TailMode": {
"enum": [
"None",
"Offline",
"Slate",
"Filler"
],
"type": "string"
},
"TemplateGroupResponseModel": {
"required": [
"id",
"name",
"templateCount"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"templateCount": {
"type": "integer",
"format": "int32"
}
}
},
"TemplateItemRequest": {
"required": [
"blockId",
"startTime"
],
"type": "object",
"properties": {
"blockId": {
"type": "integer",
"format": "int32"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
}
}
},
"TemplateItemResponseModel": {
"required": [
"blockId",
"blockName",
"blockMinutes",
"startTime"
],
"type": "object",
"properties": {
"blockId": {
"type": "integer",
"format": "int32"
},
"blockName": {
"type": "string"
},
"blockMinutes": {
"type": "integer",
"format": "int32"
},
"startTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
}
}
},
"TemplateResponseModel": {
"required": [
"id",
"templateGroupId",
"groupName",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"templateGroupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"TemplateWithItemsResponseModel": {
"required": [
"id",
"templateGroupId",
"groupName",
"name",
"items"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"templateGroupId": {
"type": "integer",
"format": "int32"
},
"groupName": {
"type": "string"
},
"name": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TemplateItemResponseModel"
}
}
}
},
"TraktListResponseModel": {
"required": [
"id",
"traktId",
"slug",
"name",
"itemCount",
"matchCount",
"autoRefresh",
"generatePlaylist"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"traktId": {
"type": "integer",
"format": "int32"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"itemCount": {
"type": "integer",
"format": "int32"
},
"matchCount": {
"type": "integer",
"format": "int32"
},
"autoRefresh": {
"type": "boolean"
},
"generatePlaylist": {
"type": "boolean"
}
}
},
"TraktStatusResponseModel": {
"required": [
"busy"
],
"type": "object",
"properties": {
"busy": {
"type": "boolean"
}
}
},
"TroubleshootingInfoResponseModel": {
"required": [
"generalJson",
"nvidiaCapabilities",
"qsvCapabilities",
"vaapiCapabilities",
"videoToolboxCapabilities"
],
"type": "object",
"properties": {
"generalJson": {
"type": "string"
},
"nvidiaCapabilities": {
"type": [
"null",
"string"
]
},
"qsvCapabilities": {
"type": [
"null",
"string"
]
},
"vaapiCapabilities": {
"type": [
"null",
"string"
]
},
"videoToolboxCapabilities": {
"type": [
"null",
"string"
]
}
}
},
"TroubleshootingPlaybackStartedResponseModel": {
"required": [
"url"
],
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"TroubleshootingPlaybackStatusResponseModel": {
"required": [
"state",
"exitCode",
"speed",
"logs"
],
"type": "object",
"properties": {
"state": {
"type": "string"
},
"exitCode": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"speed": {
"type": [
"null",
"number"
],
"format": "double"
},
"logs": {
"type": [
"null",
"string"
]
}
}
},
"TroubleshootingSubtitleResponseModel": {
"required": [
"id",
"language",
"title",
"codec"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"language": {
"type": [
"null",
"string"
]
},
"title": {
"type": [
"null",
"string"
]
},
"codec": {
"type": [
"null",
"string"
]
}
}
},
"UiSettingsResponseModel": {
"required": [
"isDarkMode",
"language"
],
"type": "object",
"properties": {
"isDarkMode": {
"type": "boolean"
},
"language": {
"type": "string"
}
}
},
"UpdateChannelRequest": {
"required": [
"name",
"number",
"group",
"categories",
"ffmpegProfileId",
"slugSeconds",
"logo",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"mirrorSourceChannelId",
"playoutOffset",
"streamingMode",
"watermarkId",
"fallbackFillerId",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"isEnabled",
"showInEpg"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"number": {
"type": [
"null",
"string"
]
},
"group": {
"type": [
"null",
"string"
]
},
"categories": {
"type": [
"null",
"string"
]
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"slugSeconds": {
"type": [
"null",
"number"
],
"format": "double"
},
"logo": {
"$ref": "#/components/schemas/ArtworkContentTypeModel"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"mirrorSourceChannelId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playoutOffset": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"isEnabled": {
"type": "boolean"
},
"showInEpg": {
"type": "boolean"
}
}
},
"UpdateChannelTemplateRequest": {
"required": [
"name",
"description",
"ffmpegProfileId",
"watermarkId",
"fallbackFillerId",
"preRollFillerId",
"midRollFillerId",
"postRollFillerId",
"streamSelectorMode",
"streamSelector",
"preferredAudioLanguageCode",
"preferredAudioTitle",
"playoutSource",
"playoutMode",
"streamingMode",
"preferredSubtitleLanguageCode",
"subtitleMode",
"musicVideoCreditsMode",
"musicVideoCreditsTemplate",
"songVideoMode",
"transcodeMode",
"idleBehavior",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"ffmpegProfileId": {
"type": "integer",
"format": "int32"
},
"watermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"fallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"preRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"midRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"postRollFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"streamSelectorMode": {
"$ref": "#/components/schemas/ChannelStreamSelectorMode"
},
"streamSelector": {
"type": [
"null",
"string"
]
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"preferredAudioTitle": {
"type": [
"null",
"string"
]
},
"playoutSource": {
"$ref": "#/components/schemas/ChannelPlayoutSource"
},
"playoutMode": {
"$ref": "#/components/schemas/ChannelPlayoutMode"
},
"streamingMode": {
"$ref": "#/components/schemas/StreamingMode"
},
"preferredSubtitleLanguageCode": {
"type": [
"null",
"string"
]
},
"subtitleMode": {
"$ref": "#/components/schemas/ChannelSubtitleMode"
},
"musicVideoCreditsMode": {
"$ref": "#/components/schemas/ChannelMusicVideoCreditsMode"
},
"musicVideoCreditsTemplate": {
"type": [
"null",
"string"
]
},
"songVideoMode": {
"$ref": "#/components/schemas/ChannelSongVideoMode"
},
"transcodeMode": {
"$ref": "#/components/schemas/ChannelTranscodeMode"
},
"idleBehavior": {
"$ref": "#/components/schemas/ChannelIdleBehavior"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"UpdateCollectionCustomOrderRequest": {
"required": [
"mediaItemIds"
],
"type": "object",
"properties": {
"mediaItemIds": {
"type": [
"null",
"array"
],
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"UpdateCollectionRequest": {
"required": [
"name",
"useCustomPlaybackOrder"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"useCustomPlaybackOrder": {
"type": [
"null",
"boolean"
]
}
}
},
"UpdateDefaultDecoRequest": {
"required": [
"decoId"
],
"type": "object",
"properties": {
"decoId": {
"type": [
"null",
"integer"
],
"format": "int32"
}
}
},
"UpdateFFmpegProfileRequest": {
"required": [
"name",
"threadCount",
"normalizeAudio",
"normalizeVideo",
"hardwareAcceleration",
"vaapiDisplay",
"vaapiDriver",
"vaapiDevice",
"qsvExtraHardwareFrames",
"resolutionId",
"scalingBehavior",
"padMode",
"videoFormat",
"videoProfile",
"videoPreset",
"allowBFrames",
"bitDepth",
"videoBitrate",
"videoBufferSize",
"tonemapAlgorithm",
"audioFormat",
"audioBitrate",
"audioBufferSize",
"normalizeLoudnessMode",
"targetLoudness",
"audioChannels",
"audioSampleRate",
"normalizeFramerate",
"normalizeColors",
"deinterlaceVideo"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"threadCount": {
"type": "integer",
"format": "int32"
},
"normalizeAudio": {
"type": "boolean"
},
"normalizeVideo": {
"type": "boolean"
},
"hardwareAcceleration": {
"$ref": "#/components/schemas/HardwareAccelerationKind"
},
"vaapiDisplay": {
"type": [
"null",
"string"
]
},
"vaapiDriver": {
"$ref": "#/components/schemas/VaapiDriver"
},
"vaapiDevice": {
"type": [
"null",
"string"
]
},
"qsvExtraHardwareFrames": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"resolutionId": {
"type": "integer",
"format": "int32"
},
"scalingBehavior": {
"$ref": "#/components/schemas/ScalingBehavior"
},
"padMode": {
"$ref": "#/components/schemas/FilterMode"
},
"videoFormat": {
"$ref": "#/components/schemas/FFmpegProfileVideoFormat"
},
"videoProfile": {
"type": [
"null",
"string"
]
},
"videoPreset": {
"type": [
"null",
"string"
]
},
"allowBFrames": {
"type": "boolean"
},
"bitDepth": {
"$ref": "#/components/schemas/FFmpegProfileBitDepth"
},
"videoBitrate": {
"type": "integer",
"format": "int32"
},
"videoBufferSize": {
"type": "integer",
"format": "int32"
},
"tonemapAlgorithm": {
"$ref": "#/components/schemas/FFmpegProfileTonemapAlgorithm"
},
"audioFormat": {
"$ref": "#/components/schemas/FFmpegProfileAudioFormat"
},
"audioBitrate": {
"type": "integer",
"format": "int32"
},
"audioBufferSize": {
"type": "integer",
"format": "int32"
},
"normalizeLoudnessMode": {
"$ref": "#/components/schemas/NormalizeLoudnessMode"
},
"targetLoudness": {
"type": [
"null",
"number"
],
"format": "double"
},
"audioChannels": {
"type": "integer",
"format": "int32"
},
"audioSampleRate": {
"type": "integer",
"format": "int32"
},
"normalizeFramerate": {
"type": "boolean"
},
"normalizeColors": {
"type": "boolean"
},
"deinterlaceVideo": {
"type": "boolean"
}
}
},
"UpdateFFmpegSettingsRequest": {
"required": [
"fFmpegPath",
"fFprobePath",
"defaultFFmpegProfileId",
"preferredAudioLanguageCode",
"useEmbeddedSubtitles",
"extractEmbeddedSubtitles",
"probeForInterlacedFrames",
"saveReports",
"globalWatermarkId",
"globalFallbackFillerId",
"hlsSegmenterIdleTimeout",
"workAheadSegmenterLimit",
"initialSegmentCount",
"hlsDirectOutputFormat",
"defaultMpegTsScript"
],
"type": "object",
"properties": {
"fFmpegPath": {
"type": [
"null",
"string"
]
},
"fFprobePath": {
"type": [
"null",
"string"
]
},
"defaultFFmpegProfileId": {
"type": "integer",
"format": "int32"
},
"preferredAudioLanguageCode": {
"type": [
"null",
"string"
]
},
"useEmbeddedSubtitles": {
"type": "boolean"
},
"extractEmbeddedSubtitles": {
"type": "boolean"
},
"probeForInterlacedFrames": {
"type": "boolean"
},
"saveReports": {
"type": "boolean"
},
"globalWatermarkId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"globalFallbackFillerId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"hlsSegmenterIdleTimeout": {
"type": "integer",
"format": "int32"
},
"workAheadSegmenterLimit": {
"type": "integer",
"format": "int32"
},
"initialSegmentCount": {
"type": "integer",
"format": "int32"
},
"hlsDirectOutputFormat": {
"$ref": "#/components/schemas/OutputFormatKind"
},
"defaultMpegTsScript": {
"type": [
"null",
"string"
]
}
}
},
"UpdateFillerPresetRequest": {
"required": [
"name",
"fillerKind",
"fillerMode",
"duration",
"count",
"padToNearestMinute",
"allowWatermarks",
"collectionType",
"collectionId",
"mediaItemId",
"multiCollectionId",
"smartCollectionId",
"playlistId",
"expression",
"useChaptersAsMediaItems"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"fillerKind": {
"$ref": "#/components/schemas/FillerKind"
},
"fillerMode": {
"$ref": "#/components/schemas/FillerMode"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"count": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"padToNearestMinute": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"allowWatermarks": {
"type": "boolean"
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"collectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"mediaItemId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"multiCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"smartCollectionId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"playlistId": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"expression": {
"type": [
"null",
"string"
]
},
"useChaptersAsMediaItems": {
"type": "boolean"
}
}
},
"UpdateHdhrSettingsRequest": {
"required": [
"tunerCount"
],
"type": "object",
"properties": {
"tunerCount": {
"type": "integer",
"format": "int32"
}
}
},
"UpdateImageFolderDurationRequest": {
"required": [
"durationSeconds"
],
"type": "object",
"properties": {
"durationSeconds": {
"type": [
"null",
"number"
],
"format": "double"
}
}
},
"UpdateImageFolderDurationResponseModel": {
"required": [
"durationSeconds"
],
"type": "object",
"properties": {
"durationSeconds": {
"type": [
"null",
"number"
],
"format": "double"
}
}
},
"UpdateLocalLibraryPathRequest": {
"required": [
"id",
"path"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"path": {
"type": [
"null",
"string"
]
}
}
},
"UpdateLocalLibraryRequest": {
"required": [
"name",
"paths"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"paths": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/UpdateLocalLibraryPathRequest"
}
}
}
},
"UpdateLoggingSettingsRequest": {
"required": [
"defaultMinimumLogLevel",
"scanningMinimumLogLevel",
"schedulingMinimumLogLevel",
"searchingMinimumLogLevel",
"streamingMinimumLogLevel",
"httpMinimumLogLevel"
],
"type": "object",
"properties": {
"defaultMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"scanningMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"schedulingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"searchingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"streamingMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
},
"httpMinimumLogLevel": {
"$ref": "#/components/schemas/LogEventLevel"
}
}
},
"UpdateMultiCollectionRequest": {
"required": [
"name",
"items"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"items": {
"type": [
"null",
"array"
],
"items": {
"$ref": "#/components/schemas/MultiCollectionItemRequest"
}
}
}
},
"UpdatePlaylistGroupRequest": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
}
}
},
"UpdatePlayoutDetailsRequest": {
"required": [
"dailyRebuildTime",
"scheduleFile"
],
"type": "object",
"properties": {
"dailyRebuildTime": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": [
"null",
"string"
]
},
"scheduleFile": {
"type": [
"null",
"string"
]
}
}
},
"UpdatePlayoutSettingsRequest": {
"required": [
"daysToBuild",
"skipMissingItems",
"scriptedScheduleTimeoutSeconds"
],
"type": "object",
"properties": {
"daysToBuild": {
"type": "integer",
"format": "int32"
},
"skipMissingItems": {
"type": "boolean"
},
"scriptedScheduleTimeoutSeconds": {
"type": "integer",
"format": "int32"
}
}
},
"UpdateRerunCollectionRequest": {
"required": [
"name",
"collectionType",
"selectedId",
"firstRunPlaybackOrder",
"rerunPlaybackOrder"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"collectionType": {
"$ref": "#/components/schemas/CollectionType"
},
"selectedId": {
"type": "integer",
"format": "int32"
},
"firstRunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
},
"rerunPlaybackOrder": {
"$ref": "#/components/schemas/PlaybackOrder"
}
}
},
"UpdateScannerSettingsRequest": {
"required": [
"libraryRefreshInterval"
],
"type": "object",
"properties": {
"libraryRefreshInterval": {
"type": "integer",
"format": "int32"
}
}
},
"UpdateScheduleRequest": {
"required": [
"name",
"keepMultiPartEpisodesTogether",
"treatCollectionsAsShows",
"shuffleScheduleItems",
"randomStartPoint",
"fixedStartTimeBehavior"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"keepMultiPartEpisodesTogether": {
"type": "boolean"
},
"treatCollectionsAsShows": {
"type": "boolean"
},
"shuffleScheduleItems": {
"type": "boolean"
},
"randomStartPoint": {
"type": "boolean"
},
"fixedStartTimeBehavior": {
"$ref": "#/components/schemas/FixedStartTimeBehavior"
}
}
},
"UpdateSmartCollectionRequest": {
"required": [
"name",
"query"
],
"type": "object",
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"query": {
"type": [
"null",
"string"
]
}
}
},
"UpdateTraktListRequest": {
"required": [
"autoRefresh",
"generatePlaylist"
],
"type": "object",
"properties": {
"autoRefresh": {
"type": "boolean"
},
"generatePlaylist": {
"type": "boolean"
}
}
},
"UpdateUiSettingsRequest": {
"required": [
"isDarkMode",
"language"
],
"type": "object",
"properties": {
"isDarkMode": {
"type": "boolean"
},
"language": {
"type": [
"null",
"string"
]
}
}
},
"UpdateWatermarkRequest": {
"required": [
"name",
"mode",
"imageSource",
"image",
"imageContentType",
"location",
"size",
"width",
"horizontalMargin",
"verticalMargin",
"frequencyMinutes",
"durationSeconds",
"opacity",
"opacityExpression",
"zIndex",
"placeWithinSourceContent"
],
"type": "object",
"properties": {
"name": {
"type": "string"
},
"mode": {
"$ref": "#/components/schemas/ChannelWatermarkMode"
},
"imageSource": {
"$ref": "#/components/schemas/ChannelWatermarkImageSource"
},
"image": {
"type": [
"null",
"string"
]
},
"imageContentType": {
"type": [
"null",
"string"
]
},
"location": {
"$ref": "#/components/schemas/WatermarkLocation"
},
"size": {
"$ref": "#/components/schemas/WatermarkSize"
},
"width": {
"type": "number",
"format": "double"
},
"horizontalMargin": {
"type": "number",
"format": "double"
},
"verticalMargin": {
"type": "number",
"format": "double"
},
"frequencyMinutes": {
"type": "integer",
"format": "int32"
},
"durationSeconds": {
"type": "integer",
"format": "int32"
},
"opacity": {
"type": "integer",
"format": "int32"
},
"opacityExpression": {
"type": [
"null",
"string"
]
},
"zIndex": {
"type": "integer",
"format": "int32"
},
"placeWithinSourceContent": {
"type": "boolean"
}
}
},
"UpdateXmltvSettingsRequest": {
"required": [
"daysToBuild",
"timeZone",
"blockBehavior"
],
"type": "object",
"properties": {
"daysToBuild": {
"type": "integer",
"format": "int32"
},
"timeZone": {
"$ref": "#/components/schemas/XmltvTimeZone"
},
"blockBehavior": {
"$ref": "#/components/schemas/XmltvBlockBehavior"
}
}
},
"VaapiDriver": {
"enum": [
"Default",
"iHD",
"i965",
"RadeonSI",
"Nouveau"
],
"type": "string"
},
"ValidateSequentialScheduleRequest": {
"required": [
"yaml",
"isImport"
],
"type": "object",
"properties": {
"yaml": {
"type": [
"null",
"string"
]
},
"isImport": {
"type": "boolean"
}
}
},
"ValidateSequentialScheduleResponseModel": {
"required": [
"isValid",
"messages",
"json"
],
"type": "object",
"properties": {
"isValid": {
"type": "boolean"
},
"messages": {
"type": "array",
"items": {
"type": "string"
}
},
"json": {
"type": "string"
}
}
},
"ValidationProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": [
"null",
"string"
]
},
"title": {
"type": [
"null",
"string"
]
},
"status": {
"type": [
"null",
"integer"
],
"format": "int32"
},
"detail": {
"type": [
"null",
"string"
]
},
"instance": {
"type": [
"null",
"string"
]
},
"errors": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"VideoScanKind": {
"enum": [
"Unknown",
"Progressive",
"Interlaced"
],
"type": "string"
},
"WatermarkFullResponseModel": {
"required": [
"id",
"name",
"mode",
"imageSource",
"image",
"imageContentType",
"location",
"size",
"width",
"horizontalMargin",
"verticalMargin",
"frequencyMinutes",
"durationSeconds",
"opacity",
"opacityExpression",
"zIndex",
"placeWithinSourceContent"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"mode": {
"$ref": "#/components/schemas/ChannelWatermarkMode"
},
"imageSource": {
"$ref": "#/components/schemas/ChannelWatermarkImageSource"
},
"image": {
"type": [
"null",
"string"
]
},
"imageContentType": {
"type": [
"null",
"string"
]
},
"location": {
"$ref": "#/components/schemas/WatermarkLocation"
},
"size": {
"$ref": "#/components/schemas/WatermarkSize"
},
"width": {
"type": "number",
"format": "double"
},
"horizontalMargin": {
"type": "number",
"format": "double"
},
"verticalMargin": {
"type": "number",
"format": "double"
},
"frequencyMinutes": {
"type": "integer",
"format": "int32"
},
"durationSeconds": {
"type": "integer",
"format": "int32"
},
"opacity": {
"type": "integer",
"format": "int32"
},
"opacityExpression": {
"type": [
"null",
"string"
]
},
"zIndex": {
"type": "integer",
"format": "int32"
},
"placeWithinSourceContent": {
"type": "boolean"
}
}
},
"WatermarkLocation": {
"enum": [
"BottomRight",
"BottomLeft",
"TopRight",
"TopLeft",
"TopMiddle",
"RightMiddle",
"BottomMiddle",
"LeftMiddle",
"MiddleCenter"
],
"type": "string"
},
"WatermarkResponseModel": {
"required": [
"id",
"name"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"WatermarkSize": {
"enum": [
"Scaled",
"ActualSize"
],
"type": "string"
},
"XmltvBlockBehavior": {
"enum": [
"SplitTimeEvenly",
"UseActualTimes"
],
"type": "string"
},
"XmltvSettingsResponseModel": {
"required": [
"daysToBuild",
"timeZone",
"blockBehavior"
],
"type": "object",
"properties": {
"daysToBuild": {
"type": "integer",
"format": "int32"
},
"timeZone": {
"$ref": "#/components/schemas/XmltvTimeZone"
},
"blockBehavior": {
"$ref": "#/components/schemas/XmltvBlockBehavior"
}
}
},
"XmltvTimeZone": {
"enum": [
"Local",
"Utc"
],
"type": "string"
}
},
"securitySchemes": {
"ApiKey": {
"type": "apiKey",
"description": "API key sent in the 'X-Api-Key' request header. Required for all mutating requests and, under the default posture (Api:RequireKeyForReads=true), for reads as well.",
"name": "X-Api-Key",
"in": "header"
}
}
},
"tags": [
{
"name": "Artists"
},
{
"name": "Artwork"
},
{
"name": "Blocks"
},
{
"name": "Channel"
},
{
"name": "Channels"
},
{
"name": "Channel Templates"
},
{
"name": "Collections"
},
{
"name": "Decos"
},
{
"name": "DecoTemplates"
},
{
"name": "Emby"
},
{
"name": "FFmpeg Profiles"
},
{
"name": "Filler Presets"
},
{
"name": "Graphics Elements"
},
{
"name": "Health"
},
{
"name": "Images"
},
{
"name": "Jellyfin"
},
{
"name": "Languages"
},
{
"name": "Libraries"
},
{
"name": "Logs"
},
{
"name": "Maintenance"
},
{
"name": "Media Items"
},
{
"name": "Media Sources"
},
{
"name": "Movies"
},
{
"name": "Multi Collections"
},
{
"name": "Playlists"
},
{
"name": "Playouts"
},
{
"name": "Plex"
},
{
"name": "Rerun Collections"
},
{
"name": "Settings"
},
{
"name": "Schedules"
},
{
"name": "Search"
},
{
"name": "Television"
},
{
"name": "Sessions"
},
{
"name": "Smart Collections"
},
{
"name": "Templates"
},
{
"name": "Trakt"
},
{
"name": "Troubleshooting"
},
{
"name": "Version"
},
{
"name": "Watermarks"
}
]
}