summaryrefslogtreecommitdiffstats
path: root/xbmc/interfaces/json-rpc/schema
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/interfaces/json-rpc/schema/CMakeLists.txt30
-rw-r--r--xbmc/interfaces/json-rpc/schema/GenerateAddonXml.cmake6
-rw-r--r--xbmc/interfaces/json-rpc/schema/license.txt7
-rw-r--r--xbmc/interfaces/json-rpc/schema/methods.json2941
-rw-r--r--xbmc/interfaces/json-rpc/schema/notifications.json464
-rw-r--r--xbmc/interfaces/json-rpc/schema/types.json2081
-rw-r--r--xbmc/interfaces/json-rpc/schema/version.txt1
7 files changed, 5530 insertions, 0 deletions
diff --git a/xbmc/interfaces/json-rpc/schema/CMakeLists.txt b/xbmc/interfaces/json-rpc/schema/CMakeLists.txt
new file mode 100644
index 0000000..a4d5583
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/CMakeLists.txt
@@ -0,0 +1,30 @@
+set(JSON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/version.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/license.txt
+ ${CMAKE_CURRENT_SOURCE_DIR}/methods.json
+ ${CMAKE_CURRENT_SOURCE_DIR}/types.json
+ ${CMAKE_CURRENT_SOURCE_DIR}/notifications.json)
+
+add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ServiceDescription.h
+ COMMAND JsonSchemaBuilder::JsonSchemaBuilder ${JSON_SRCS}
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
+ DEPENDS ${JSON_SRCS}
+ COMMENT "Generating ServiceDescription.h")
+
+add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/addons/xbmc.json/addon.xml
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
+ -DCORE_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/GenerateAddonXml.cmake
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ DEPENDS ${JSON_SRCS} ${CMAKE_SOURCE_DIR}/addons/xbmc.json/addon.xml.in
+ COMMENT "Generating xbmc.json/addon.xml")
+
+add_custom_target(generate_json_header ALL
+ DEPENDS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ServiceDescription.h
+ ${CMAKE_BINARY_DIR}/addons/xbmc.json/addon.xml)
+set_target_properties(generate_json_header PROPERTIES FOLDER "Build Utilities")
+
+if(BOOTSTRAP_IN_TREE)
+ add_dependencies(generate_json_header JsonSchemaBuilder::JsonSchemaBuilder)
+endif()
diff --git a/xbmc/interfaces/json-rpc/schema/GenerateAddonXml.cmake b/xbmc/interfaces/json-rpc/schema/GenerateAddonXml.cmake
new file mode 100644
index 0000000..7f0817b
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/GenerateAddonXml.cmake
@@ -0,0 +1,6 @@
+include(${CMAKE_SOURCE_DIR}/cmake/scripts/common/Macros.cmake)
+core_find_versions()
+
+file(REMOVE ${CORE_BINARY_DIR}/addons/xbmc.json/addon.xml)
+configure_file(${CMAKE_SOURCE_DIR}/addons/xbmc.json/addon.xml.in
+ ${CORE_BINARY_DIR}/addons/xbmc.json/addon.xml @ONLY)
diff --git a/xbmc/interfaces/json-rpc/schema/license.txt b/xbmc/interfaces/json-rpc/schema/license.txt
new file mode 100644
index 0000000..97af310
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/license.txt
@@ -0,0 +1,7 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
diff --git a/xbmc/interfaces/json-rpc/schema/methods.json b/xbmc/interfaces/json-rpc/schema/methods.json
new file mode 100644
index 0000000..4d396cf
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/methods.json
@@ -0,0 +1,2941 @@
+{
+ "JSONRPC.Introspect": {
+ "type": "method",
+ "description": "Enumerates all actions and descriptions",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "getdescriptions", "type": "boolean", "default": true },
+ { "name": "getmetadata", "type": "boolean", "default": false },
+ { "name": "filterbytransport", "type": "boolean", "default": true },
+ { "name": "filter", "type": "object",
+ "properties": {
+ "id": { "type": "string", "required": true, "description": "Name of a namespace, method or type" },
+ "type": { "type": "string", "required": true, "enum": [ "method", "namespace", "type", "notification" ], "description": "Type of the given name" },
+ "getreferences": { "type": "boolean", "default": true, "description": "Whether or not to print the schema for referenced types" }
+ }
+ }
+ ],
+ "returns": "object"
+ },
+ "JSONRPC.Version": {
+ "type": "method",
+ "description": "Retrieve the JSON-RPC protocol version.",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "version": { "type": "object", "required": true,
+ "properties": {
+ "major": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards incompatible changes to the API definition" },
+ "minor": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards compatible additions/changes to the API definition" },
+ "patch": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on any changes to the internal implementation but not to the API definition" }
+ }
+ }
+ }
+ }
+ },
+ "JSONRPC.Permission": {
+ "type": "method",
+ "description": "Retrieve the clients permissions",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "ReadData": { "type": "boolean", "required": true },
+ "ControlPlayback": { "type": "boolean", "required": true },
+ "ControlNotify": { "type": "boolean", "required": true },
+ "ControlPower": { "type": "boolean", "required": true },
+ "UpdateData": { "type": "boolean", "required": true },
+ "RemoveData": { "type": "boolean", "required": true },
+ "Navigate": { "type": "boolean", "required": true },
+ "WriteFile": { "type": "boolean", "required": true },
+ "ControlSystem": { "type": "boolean", "required": true },
+ "ControlGUI": { "type": "boolean", "required": true },
+ "ManageAddon": { "type": "boolean", "required": true },
+ "ExecuteAddon": { "type": "boolean", "required": true },
+ "ControlPVR": { "type": "boolean", "required": true }
+ }
+ }
+ },
+ "JSONRPC.Ping": {
+ "type": "method",
+ "description": "Ping responder",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": "string"
+ },
+ "JSONRPC.GetConfiguration": {
+ "type": "method",
+ "description": "Get client-specific configurations",
+ "transport": "Announcing",
+ "permission": "ReadData",
+ "params": [],
+ "returns": { "$ref": "Configuration" }
+ },
+ "JSONRPC.SetConfiguration": {
+ "type": "method",
+ "description": "Change the client-specific configuration",
+ "transport": "Announcing",
+ "permission": "ControlNotify",
+ "params": [
+ { "name": "notifications", "type": "object",
+ "properties": {
+ "Player": { "$ref": "Optional.Boolean" },
+ "Playlist": { "$ref": "Optional.Boolean" },
+ "GUI": { "$ref": "Optional.Boolean" },
+ "System": { "$ref": "Optional.Boolean" },
+ "AudioLibrary": { "$ref": "Optional.Boolean" },
+ "VideoLibrary": { "$ref": "Optional.Boolean" },
+ "Application": { "$ref": "Optional.Boolean" },
+ "Input": { "$ref": "Optional.Boolean" },
+ "Other": { "$ref": "Optional.Boolean" }
+ }
+ }
+ ],
+ "returns": { "$ref": "Configuration" }
+ },
+ "JSONRPC.NotifyAll": {
+ "type": "method",
+ "description": "Notify all other connected clients",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "message", "type": "string", "required": true },
+ { "name": "data", "type": "any", "default": null }
+ ],
+ "returns": "any"
+ },
+ "Player.Open": {
+ "type": "method",
+ "description": "Start playback of either the playlist with the given ID, a slideshow with the pictures from the given directory or a single file or an item from the database.",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "item",
+ "type": [
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "playlistid": { "$ref": "Playlist.Id", "required": true },
+ "position": { "$ref": "Playlist.Position", "default": 0 }
+ }
+ },
+ { "$ref": "Playlist.Item", "required": true },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "path": { "type": "string", "required": true },
+ "random": { "type": "boolean", "default": true, "description": "Deprecated, use the shuffled property of the options parameter instead" },
+ "recursive": { "type": "boolean", "default": true }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "partymode": { "type": [
+ { "type": "string", "required": true, "enum": [ "music", "video" ] },
+ { "type": "string", "required": true, "minLength": 5, "description": "Path to a smartplaylist (*.xsp) file" }
+ ]
+ }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "broadcastid": { "$ref": "Library.Id", "required": true }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "channelid": { "$ref": "Library.Id", "required": true }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "recordingid": { "$ref": "Library.Id", "required": true }
+ }
+ }
+ ]
+ },
+ { "name": "options", "type": "object", "additionalProperties": false,
+ "properties": {
+ "playername": { "type": [
+ "null",
+ { "type": "string", "enum": [ "default" ], "required": true },
+ { "type": "string", "minLength": 1, "required": true, "description": "name of player" }
+ ],
+ "default": null
+ },
+ "shuffled": { "$ref": "Optional.Boolean" },
+ "repeat": { "type": [ "null", { "$ref": "Player.Repeat", "required": true } ], "default": null },
+ "resume": { "type": [
+ { "type": "boolean", "required": true, "description": "Whether to resume from the resume point or not" },
+ { "$ref": "Player.Position.Percentage", "required": true, "description": "Percentage value to start from" },
+ { "$ref": "Player.Position.Time", "required": true, "description": "Time to start from" }
+ ],
+ "default": false
+ }
+ }
+ }
+ ],
+ "returns": "string"
+ },
+ "Player.GetActivePlayers": {
+ "type": "method",
+ "description": "Returns all active players",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "playerid": { "$ref": "Player.Id", "required": true },
+ "type": { "$ref": "Player.Type", "required": true },
+ "playertype": { "type": "string", "enum": [ "internal", "external", "remote" ], "required": true }
+ }
+ }
+ }
+ },
+ "Player.GetPlayers": {
+ "type": "method",
+ "description": "Get a list of available players",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "media", "type": "string", "enum": [ "all", "video", "audio" ], "default": "all" }
+ ],
+ "returns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": { "$ref": "Global.String.NotEmpty", "required": true },
+ "type": { "type": "string", "enum": [ "internal", "external", "remote" ], "required": true },
+ "playsvideo": { "type": "boolean", "required": true },
+ "playsaudio": { "type": "boolean", "required": true }
+ }
+ }
+ }
+ },
+ "Player.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "Player.Property.Name" } }
+ ],
+ "returns": { "$ref": "Player.Property.Value", "required": true }
+ },
+ "Player.GetItem": {
+ "type": "method",
+ "description": "Retrieves the currently played item",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "properties", "$ref": "List.Fields.All" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "item": { "$ref": "List.Item.All", "required": true }
+ }
+ }
+ },
+ "Player.PlayPause": {
+ "type": "method",
+ "description": "Pauses or unpause playback and returns the new state",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "play", "$ref": "Global.Toggle", "default": "toggle" }
+ ],
+ "returns": { "$ref": "Player.Speed" }
+ },
+ "Player.Stop": {
+ "type": "method",
+ "description": "Stops playback",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.GetAudioDelay": {
+ "type": "method",
+ "description": "Get the audio delay for the current playback",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "offset": {
+ "type": "number",
+ "description": "The offset value used in the current playback.",
+ "required": true
+ }
+ }
+ }
+ },
+ "Player.SetAudioDelay": {
+ "type": "method",
+ "description": "Set the audio delay for the current playback",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ {
+ "name": "playerid",
+ "$ref": "Player.Id",
+ "required": true
+ },
+ {
+ "name": "offset",
+ "type": [
+ {
+ "type": "number",
+ "description": "The value should be a multiple of 0.025 in a range of +/-10 (the default range can be overriden by advancedsettings.xml).",
+ "required": true
+ },
+ {
+ "$ref": "Global.IncrementDecrement",
+ "required": true
+ }
+ ],
+ "required": true
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "offset": {
+ "type": "number",
+ "description": "The offset value used in the current playback.",
+ "required": true
+ }
+ }
+ }
+ },
+ "Player.SetSpeed": {
+ "type": "method",
+ "description": "Set the speed of the current playback",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "speed", "type": [
+ { "type": "integer", "required": true, "enum": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32 ] },
+ { "$ref": "Global.IncrementDecrement", "required": true }
+ ],
+ "required": true
+ }
+ ],
+ "returns": { "$ref": "Player.Speed" }
+ },
+ "Player.Seek": {
+ "type": "method",
+ "description": "Seek through the playing item",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "value", "required": true, "type": [
+ { "type": "object", "properties": { "percentage": { "$ref": "Player.Position.Percentage", "required": true, "description": "Percentage value to seek to" } }, "additionalProperties": false, "required": true },
+ { "type": "object", "properties": { "time": { "$ref": "Player.Position.Time", "required": true, "description": "Time to seek to" } }, "additionalProperties": false, "required": true },
+ { "type": "object", "properties": { "step": { "type": "string", "enum": [ "smallforward", "smallbackward", "bigforward", "bigbackward" ], "required": true, "description": "Seek by predefined jumps" } }, "additionalProperties": false, "required": true },
+ { "type": "object", "properties": { "seconds": { "type": "integer", "required": true, "description": "Seek by the given number of seconds" } }, "additionalProperties": false, "required": true }
+ ]
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "percentage": { "$ref": "Player.Position.Percentage" },
+ "time": { "$ref": "Global.Time" },
+ "totaltime": { "$ref": "Global.Time" }
+ }
+ }
+ },
+ "Player.Move": {
+ "type": "method",
+ "description": "If picture is zoomed move viewport left/right/up/down otherwise skip previous/next",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "direction", "type": "string", "enum": [ "left", "right", "up", "down" ], "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.Zoom": {
+ "type": "method",
+ "description": "Zoom current picture",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "zoom", "type": [
+ { "type": "string", "enum": [ "in", "out" ], "required": true },
+ { "type": "integer", "minimum": 1, "maximum": 10, "description": "zoom level", "required": true }
+ ],
+ "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.SetViewMode": {
+ "type": "method",
+ "description": "Set view mode of video player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "viewmode", "type": [
+ { "$ref": "Player.CustomViewMode", "description": "Custom view mode", "required": true },
+ { "name": "value", "$ref": "Player.ViewMode", "required": true}
+ ],
+ "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.GetViewMode": {
+ "type": "method",
+ "description": "Get view mode of video player",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "viewmode": { "$ref": "Player.ViewMode", "required": true },
+ "zoom": { "type": "number", "required": true },
+ "pixelratio": { "type": "number", "required": true },
+ "verticalshift": { "type": "number", "required": true },
+ "nonlinearstretch": { "type": "boolean", "required": true }
+ }
+ }
+ },
+ "Player.Rotate": {
+ "type": "method",
+ "description": "Rotates current picture",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "value", "type": "string", "enum": [ "clockwise", "counterclockwise" ], "default": "clockwise" }
+ ],
+ "returns": "string"
+ },
+ "Player.GoTo": {
+ "type": "method",
+ "description": "Go to previous/next/specific item in the playlist",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "to", "type": [
+ { "type": "string", "enum": [ "previous", "next" ], "required": true },
+ { "$ref": "Playlist.Position", "description": "position in playlist", "required": true }
+ ],
+ "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.SetShuffle": {
+ "type": "method",
+ "description": "Shuffle/Unshuffle items in the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "shuffle", "$ref": "Global.Toggle", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.SetRepeat": {
+ "type": "method",
+ "description": "Set the repeat mode of the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "repeat", "type": [
+ { "$ref": "Player.Repeat", "required": true },
+ { "type": "string", "enum": [ "cycle" ], "required": true }
+ ],
+ "required": true
+ }
+ ],
+ "returns": "string"
+ },
+ "Player.SetPartymode": {
+ "type": "method",
+ "description": "Turn partymode on or off",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "partymode", "$ref": "Global.Toggle", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Player.SetAudioStream": {
+ "type": "method",
+ "description": "Set the audio stream played by the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "stream", "required": true, "type": [
+ { "type": "string", "enum": [ "previous", "next" ] },
+ { "type": "integer", "minimum": 0, "description": "Index of the audio stream to play" }
+ ]
+ }
+ ],
+ "returns": "string"
+ },
+ "Player.SetVideoStream": {
+ "type": "method",
+ "description": "Set the video stream played by the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "stream", "required": true, "type": [
+ { "type": "string", "enum": [ "previous", "next" ] },
+ { "type": "integer", "minimum": 0, "description": "Index of the video stream to play" }
+ ]
+ }
+ ],
+ "returns": "string"
+ },
+ "Player.AddSubtitle": {
+ "type": "method",
+ "description": "Add subtitle to the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "subtitle", "type": "string", "required": true, "description": "Local path or remote URL to the subtitle file to load" }
+ ],
+ "returns": "string"
+ },
+ "Player.SetSubtitle": {
+ "type": "method",
+ "description": "Set the subtitle displayed by the player",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playerid", "$ref": "Player.Id", "required": true },
+ { "name": "subtitle", "required": true, "type": [
+ { "type": "string", "enum": [ "previous", "next", "off", "on" ] },
+ { "type": "integer", "minimum": 0, "description": "Index of the subtitle to display" }
+ ]
+ },
+ { "name": "enable", "type": "boolean", "default": false, "description": "Whether to enable subtitles to be displayed after setting the new subtitle" }
+ ],
+ "returns": "string"
+ },
+ "Playlist.GetPlaylists": {
+ "type": "method",
+ "description": "Returns all existing playlists",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "playlistid": { "$ref": "Playlist.Id", "required": true },
+ "type": { "$ref": "Playlist.Type", "required": true }
+ }
+ }
+ }
+ },
+ "Playlist.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "Playlist.Property.Name" } }
+ ],
+ "returns": { "$ref": "Playlist.Property.Value", "required": true }
+ },
+ "Playlist.GetItems": {
+ "type": "method",
+ "description": "Get all items from playlist",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "properties", "$ref": "List.Fields.All" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "items": { "type": "array", "items": { "$ref": "List.Item.All" }, "required": true }
+ }
+ }
+ },
+ "Playlist.Add": {
+ "type": "method",
+ "description": "Add item(s) to playlist",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "item",
+ "type": [
+ { "$ref": "Playlist.Item", "required": true },
+ { "type": "array", "items": { "$ref": "Playlist.Item" }, "required": true }
+ ],
+ "required": true }
+ ],
+ "returns": "string"
+ },
+ "Playlist.Insert": {
+ "type": "method",
+ "description": "Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "position", "$ref": "Playlist.Position", "required": true },
+ { "name": "item",
+ "type": [
+ { "$ref": "Playlist.Item", "required": true },
+ { "type": "array", "items": { "$ref": "Playlist.Item" }, "required": true }
+ ],
+ "required": true }
+ ],
+ "returns": "string"
+ },
+ "Playlist.Remove": {
+ "type": "method",
+ "description": "Remove item from playlist. Does not work for picture playlists (aka slideshows).",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "position", "$ref": "Playlist.Position", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Playlist.Clear": {
+ "type": "method",
+ "description": "Clear playlist",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Playlist.Swap": {
+ "type": "method",
+ "description": "Swap items in the playlist. Does not work for picture playlists (aka slideshows).",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "playlistid", "$ref": "Playlist.Id", "required": true },
+ { "name": "position1", "$ref": "Playlist.Position", "required": true },
+ { "name": "position2", "$ref": "Playlist.Position", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Files.GetSources": {
+ "type": "method",
+ "description": "Get the sources of the media windows",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "media", "$ref": "Files.Media", "required": true },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "sources": { "$ref": "List.Items.Sources", "required": true }
+ }
+ }
+ },
+ "Files.PrepareDownload": {
+ "type": "method",
+ "description": "Provides a way to download a given file (e.g. providing an URL to the real file location)",
+ "transport": [ "Response", "FileDownloadRedirect" ],
+ "permission": "ReadData",
+ "params": [
+ { "name": "path", "type": "string", "required": true }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "protocol": { "type": "string", "enum": [ "http" ], "required": true },
+ "details": { "type": "any", "required": true, "description": "Transport specific details on how/from where to download the given file" },
+ "mode": { "type": "string", "enum": [ "redirect", "direct" ], "required": true, "description": "Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol" }
+ }
+ }
+ },
+ "Files.Download": {
+ "type": "method",
+ "description": "Downloads the given file",
+ "transport": [ "Response", "FileDownloadDirect" ],
+ "permission": "ReadData",
+ "params": [
+ { "name": "path", "type": "string", "required": true }
+ ],
+ "returns": { "type": "any", "required": true }
+ },
+ "Files.GetDirectory": {
+ "type": "method",
+ "description": "Get the directories and files in the given directory",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "directory", "type": "string", "required": true },
+ { "name": "media", "$ref": "Files.Media", "default": "files" },
+ { "name": "properties", "$ref": "List.Fields.Files" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "limits", "$ref": "List.Limits", "description": "Limits are applied after getting the directory content thus retrieval is not faster when they are applied." }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "files": { "type": "array", "items": { "$ref": "List.Item.File" }, "required": true }
+ }
+ }
+ },
+ "Files.GetFileDetails": {
+ "type": "method",
+ "description": "Get details for a specific file",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "file", "type": "string", "required": true, "description": "Full path to the file" },
+ { "name": "media", "$ref": "Files.Media", "default": "files" },
+ { "name": "properties", "$ref": "List.Fields.Files" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "filedetails": { "$ref": "List.Item.File", "required": true }
+ }
+ }
+ },
+ "Files.SetFileDetails": {
+ "type": "method",
+ "description": "Update the given specific file with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "file", "type": "string", "required": true, "description": "Full path to the file" },
+ { "name": "media", "$ref": "Files.Media", "required": true, "description": "File type to update correct database. Currently only \"video\" is supported." },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "lastplayed", "$ref": "Optional.String", "description": "Setting a valid lastplayed without a playcount will force playcount to 1." },
+ { "name": "resume", "type": [ "null", { "$ref": "Video.Resume", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the music library properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "Audio.Property.Name" } }
+ ],
+ "returns": { "$ref": "Audio.Property.Value", "required": true }
+ },
+ "AudioLibrary.GetArtists": {
+ "type": "method",
+ "description": "Retrieve all artists. For backward compatibility by default this implicitly does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "albumartistsonly", "$ref": "Optional.Boolean", "description": "Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used" },
+ { "name": "properties", "$ref": "Audio.Fields.Artist" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Deprecated, use songgenreid. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenreid": { "$ref": "Library.Id", "required": true, "description": "Song genreid. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenreid": { "$ref": "Library.Id", "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenreid": { "$ref": "Library.Id", "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true, "description": "Deprecated, use songgenre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenre": { "type": "string", "minLength": 1, "required": true, "description": "Song genre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenre": { "type": "string", "minLength": 1, "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "songgenre": { "type": "string", "minLength": 1, "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "album": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "roleid": { "$ref": "Library.Id", "required": true, "description": "Role contributed by artist. Overridden by allroles parameter" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "role": { "type": "string", "minLength": 1, "required": true, "description": "Role contributed by artist. Overridden by allroles parameter" } }, "additionalProperties": false },
+ { "$ref": "List.Filter.Artists" }
+ ]
+ },
+ { "name": "allroles", "type": "boolean", "default":false, "description": "Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value." }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "artists": { "type": "array",
+ "items": { "$ref": "Audio.Details.Artist" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetArtistDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific artist",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "artistid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Audio.Fields.Artist" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "artistdetails": { "$ref": "Audio.Details.Artist" }
+ }
+ }
+ },
+ "AudioLibrary.GetAlbums": {
+ "type": "method",
+ "description": "Retrieve all albums from specified artist (and role) or that has songs of the specified genre",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Album" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Song genre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true, "description": "Song genre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "$ref": "List.Filter.Albums" }
+ ]
+ },
+ { "name": "includesingles", "type": "boolean", "default": false },
+ { "name": "allroles", "type": "boolean", "default":false, "description": "Whether or not to include all roles when filtering by artist, rather than the default of excluding other contributions. When true it overrides any role filter value." }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "albums": { "type": "array",
+ "items": { "$ref": "Audio.Details.Album" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetAlbumDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific album",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "albumid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Audio.Fields.Album" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "albumdetails": { "$ref": "Audio.Details.Album" }
+ }
+ }
+ },
+ "AudioLibrary.GetSongs": {
+ "type": "method",
+ "description": "Retrieve all songs from specified album, artist or genre",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Song" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Song genre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true, "description": "Song genre. Filter for existence of songs with this genre" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true },
+ "role": { "type": "string", "minLength": 1, "required": true }}, "additionalProperties": false },
+ { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "album": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "$ref": "List.Filter.Songs" }
+ ]
+ },
+ { "name": "includesingles", "type": "boolean", "default": true, "description": "Only songs from albums are returned when false, but overridden when singlesonly parameter is true" },
+ { "name": "allroles", "type": "boolean", "default":false, "description": "Whether or not to include all roles when filtering by artist, rather than default of excluding other contributors. When true it overrides any role filter value." },
+ { "name": "singlesonly", "type": "boolean", "default": false, "description": "Only singles are returned when true, and overrides includesingles parameter" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "songs": { "type": "array",
+ "items": { "$ref": "Audio.Details.Song" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetSongDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific song",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "songid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Audio.Fields.Song" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "songdetails": { "$ref": "Audio.Details.Song" }
+ }
+ }
+ },
+ "AudioLibrary.GetRecentlyAddedAlbums": {
+ "type": "method",
+ "description": "Retrieve recently added albums",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Album" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "albums": { "type": "array",
+ "items": { "$ref": "Audio.Details.Album" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetRecentlyAddedSongs": {
+ "type": "method",
+ "description": "Retrieve recently added songs",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "albumlimit", "$ref": "List.Amount", "description": "The amount of recently added albums from which to return the songs" },
+ { "name": "properties", "$ref": "Audio.Fields.Song" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "songs": { "type": "array",
+ "items": { "$ref": "Audio.Details.Song" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetRecentlyPlayedAlbums": {
+ "type": "method",
+ "description": "Retrieve recently played albums",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Album" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "albums": { "type": "array",
+ "items": { "$ref": "Audio.Details.Album" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetRecentlyPlayedSongs": {
+ "type": "method",
+ "description": "Retrieve recently played songs",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Song" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "songs": { "type": "array",
+ "items": { "$ref": "Audio.Details.Song" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetGenres": {
+ "type": "method",
+ "description": "Retrieve all genres",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Library.Fields.Genre" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "genres": { "type": "array", "required": true,
+ "items": { "$ref": "Library.Details.Genre" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetSources": {
+ "type": "method",
+ "description": "Get all music sources, including unique ID",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Library.Fields.Source" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "sources": { "type": "array", "required": true,
+ "items": { "$ref": "Library.Details.Source" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetRoles": {
+ "type": "method",
+ "description": "Retrieve all contributor roles",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Audio.Fields.Role" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "roles": { "type": "array", "required": true,
+ "items": { "$ref": "Audio.Details.Role" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetAvailableArtTypes": {
+ "type": "method",
+ "description": "Retrieve a list of potential art types for a media item",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ {
+ "name": "item", "required": true,
+ "type": [
+ { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false }
+ ]
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "availablearttypes": { "type": "array", "required": true,
+ "items": { "type": "string" }
+ }
+ }
+ }
+ },
+ "AudioLibrary.GetAvailableArt": {
+ "type": "method",
+ "description": "Retrieve all potential art URLs for a media item by art type",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ {
+ "name": "item", "required": true,
+ "type": [
+ { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false }
+ ]
+ },
+ { "name": "arttype", "type": "string" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "availableart": { "type": "array", "required": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "url": { "type": "string", "description": "URL to the original image", "required": true },
+ "arttype": { "type": "string", "required": true },
+ "previewurl": { "type": "string", "description": "URL to a preview thumbnail of the image" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "AudioLibrary.SetArtistDetails": {
+ "type": "method",
+ "description": "Update the given artist with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "artistid", "$ref": "Library.Id", "required": true },
+ { "name": "artist", "$ref": "Optional.String" },
+ { "name": "instrument", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "style", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "mood", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "born", "$ref": "Optional.String" },
+ { "name": "formed", "$ref": "Optional.String" },
+ { "name": "description", "$ref": "Optional.String" },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "died", "$ref": "Optional.String" },
+ { "name": "disbanded", "$ref": "Optional.String" },
+ { "name": "yearsactive", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "musicbrainzartistid", "$ref": "Optional.String" },
+ { "name": "sortname", "$ref": "Optional.String" },
+ { "name": "type", "$ref": "Optional.String" },
+ { "name": "gender", "$ref": "Optional.String" },
+ { "name": "disambiguation", "$ref": "Optional.String" },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.SetAlbumDetails": {
+ "type": "method",
+ "description": "Update the given album with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "albumid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "artist", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "description", "$ref": "Optional.String" },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "theme", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "mood", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "style", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "type", "$ref": "Optional.String" },
+ { "name": "albumlabel", "$ref": "Optional.String" },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "year", "$ref": "Optional.Integer" },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "votes", "$ref": "Optional.Integer" },
+ { "name": "musicbrainzalbumid", "$ref": "Optional.String" },
+ { "name": "musicbrainzreleasegroupid", "$ref": "Optional.String" },
+ { "name": "sortartist", "$ref": "Optional.String" },
+ { "name": "displayartist", "$ref": "Optional.String" },
+ { "name": "musicbrainzalbumartistid", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "isboxset", "$ref": "Optional.Boolean" },
+ { "name": "releasedate", "$ref": "Optional.String" },
+ { "name": "originaldate", "$ref": "Optional.String" }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.SetSongDetails": {
+ "type": "method",
+ "description": "Update the given song with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "songid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "artist", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "year", "$ref": "Optional.Integer" },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "track", "$ref": "Optional.Integer" },
+ { "name": "disc", "$ref": "Optional.Integer" },
+ { "name": "duration", "$ref": "Optional.Integer" },
+ { "name": "comment", "$ref": "Optional.String" },
+ { "name": "musicbrainztrackid", "$ref": "Optional.String" },
+ { "name": "musicbrainzartistid", "$ref": "Optional.String" },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "lastplayed", "$ref": "Optional.String" },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "votes", "$ref": "Optional.Integer" },
+ { "name": "displayartist", "$ref": "Optional.String" },
+ { "name": "sortartist", "$ref": "Optional.String" },
+ { "name": "mood", "$ref": "Optional.String" },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "disctitle", "$ref": "Optional.String" },
+ { "name": "releasedate", "$ref": "Optional.String" },
+ { "name": "originaldate", "$ref": "Optional.String" },
+ { "name": "bpm", "$ref": "Optional.Integer" }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.Scan": {
+ "type": "method",
+ "description": "Scans the audio sources for new library items",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "directory", "type": "string", "default": "" },
+ { "name": "showdialogs", "type": "boolean", "default": true, "description": "Whether or not to show the progress bar or any other GUI dialog" }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.Export": {
+ "type": "method",
+ "description": "Exports all items from the audio library",
+ "transport": "Response",
+ "permission": "WriteFile",
+ "params": [
+ { "name": "options", "type": [
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "path": { "type": "string", "required": true, "minLength": 1, "description": "Path to the directory to where the data should be exported" }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "overwrite": { "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
+ "images": { "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" }
+ }
+ }
+ ]
+ }
+ ],
+ "returns": "string"
+ },
+ "AudioLibrary.Clean": {
+ "type": "method",
+ "description": "Cleans the audio library from non-existent items",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "showdialogs", "type": "boolean", "default": true, "description": "Whether or not to show the progress bar or any other GUI dialog" }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.GetMovies": {
+ "type": "method",
+ "description": "Retrieve all movies",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.Movie" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "year": { "type": "integer", "minimum": 0, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "actor": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "director": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "studio": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "country": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "setid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "set": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "tag": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "$ref": "List.Filter.Movies" }
+ ]
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "movies": { "type": "array",
+ "items": { "$ref": "Video.Details.Movie" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetMovieDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific movie",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "movieid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.Movie" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "moviedetails": { "$ref": "Video.Details.Movie" }
+ }
+ }
+ },
+ "VideoLibrary.GetMovieSets": {
+ "type": "method",
+ "description": "Retrieve all movie sets",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.MovieSet" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "sets": { "type": "array",
+ "items": { "$ref": "Video.Details.MovieSet" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetMovieSetDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific movie set",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "setid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.MovieSet" },
+ { "name": "movies", "type": "object",
+ "properties": {
+ "properties": { "$ref": "Video.Fields.Movie" },
+ "limits": { "$ref": "List.Limits" },
+ "sort": { "$ref": "List.Sort" }
+ }
+ }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "setdetails": { "$ref": "Video.Details.MovieSet.Extended" }
+ }
+ }
+ },
+ "VideoLibrary.GetTVShows": {
+ "type": "method",
+ "description": "Retrieve all tv shows",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.TVShow" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "year": { "type": "integer", "minimum": 0, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "actor": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "studio": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "tag": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "$ref": "List.Filter.TVShows" }
+ ]
+ }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "tvshows": { "type": "array",
+ "items": { "$ref": "Video.Details.TVShow" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetTVShowDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific tv show",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.TVShow" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "tvshowdetails": { "$ref": "Video.Details.TVShow" }
+ }
+ }
+ },
+ "VideoLibrary.GetSeasons": {
+ "type": "method",
+ "description": "Retrieve all tv seasons",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id" },
+ { "name": "properties", "$ref": "Video.Fields.Season" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "seasons": { "type": "array",
+ "items": { "$ref": "Video.Details.Season" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetSeasonDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific tv show season",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "seasonid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.Season" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "seasondetails": { "$ref": "Video.Details.Season" }
+ }
+ }
+ },
+ "VideoLibrary.GetEpisodes": {
+ "type": "method",
+ "description": "Retrieve all tv show episodes",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id" },
+ { "name": "season", "type": "integer", "minimum": 0, "default": -1 },
+ { "name": "properties", "$ref": "Video.Fields.Episode" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Requires tvshowid to be set" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true, "description": "Requires tvshowid to be set" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "year": { "type": "integer", "minimum": 0, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "actor": { "type": "string", "minLength": 1, "required": true, "description": "Requires tvshowid to be set" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "director": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "$ref": "List.Filter.Episodes" }
+ ]
+ }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "episodes": { "type": "array",
+ "items": { "$ref": "Video.Details.Episode" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetEpisodeDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific tv show episode",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "episodeid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.Episode" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "episodedetails": { "$ref": "Video.Details.Episode" }
+ }
+ }
+ },
+ "VideoLibrary.GetMusicVideos": {
+ "type": "method",
+ "description": "Retrieve all music videos",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.MusicVideo" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" },
+ { "name": "filter",
+ "type": [
+ { "type": "object", "properties": { "artist": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genre": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "year": { "type": "integer", "minimum": 0, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "director": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "studio": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "tag": { "type": "string", "minLength": 1, "required": true } }, "additionalProperties": false },
+ { "$ref": "List.Filter.MusicVideos" }
+ ]
+ }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "musicvideos": { "type": "array",
+ "items": { "$ref": "Video.Details.MusicVideo" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetMusicVideoDetails": {
+ "type": "method",
+ "description": "Retrieve details about a specific music video",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "musicvideoid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "Video.Fields.MusicVideo" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "musicvideodetails": { "$ref": "Video.Details.MusicVideo" }
+ }
+ }
+ },
+ "VideoLibrary.GetRecentlyAddedMovies": {
+ "type": "method",
+ "description": "Retrieve all recently added movies",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.Movie" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "movies": { "type": "array",
+ "items": { "$ref": "Video.Details.Movie" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetRecentlyAddedEpisodes": {
+ "type": "method",
+ "description": "Retrieve all recently added tv episodes",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.Episode" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "episodes": { "type": "array",
+ "items": { "$ref": "Video.Details.Episode" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetRecentlyAddedMusicVideos": {
+ "type": "method",
+ "description": "Retrieve all recently added music videos",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.MusicVideo" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "musicvideos": { "type": "array",
+ "items": { "$ref": "Video.Details.MusicVideo" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetInProgressTVShows": {
+ "type": "method",
+ "description": "Retrieve all in progress tvshows",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Video.Fields.TVShow" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "tvshows": { "type": "array",
+ "items": { "$ref": "Video.Details.TVShow" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetGenres": {
+ "type": "method",
+ "description": "Retrieve all genres",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "type", "type": "string", "required": true, "enum": [ "movie", "tvshow", "musicvideo"] },
+ { "name": "properties", "$ref": "Library.Fields.Genre" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "genres": { "type": "array", "required": true,
+ "items": { "$ref": "Library.Details.Genre" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetTags": {
+ "type": "method",
+ "description": "Retrieve all tags",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "type", "type": "string", "required": true, "enum": [ "movie", "tvshow", "musicvideo" ] },
+ { "name": "properties", "$ref": "Library.Fields.Tag" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "tags": { "type": "array", "required": true,
+ "items": { "$ref": "Library.Details.Tag" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetAvailableArtTypes": {
+ "type": "method",
+ "description": "Retrieve a list of potential art types for a media item",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ {
+ "name": "item", "required": true,
+ "type": [
+ { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "tvshowid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "seasonid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "setid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false }
+ ]
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "availablearttypes": { "type": "array", "required": true,
+ "items": { "type": "string" }
+ }
+ }
+ }
+ },
+ "VideoLibrary.GetAvailableArt": {
+ "type": "method",
+ "description": "Retrieve all potential art URLs for a media item by art type",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ {
+ "name": "item", "required": true,
+ "type": [
+ { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "tvshowid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "seasonid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "setid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false }
+ ]
+ },
+ { "name": "arttype", "type": "string" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "availableart": { "type": "array", "required": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "url": { "type": "string", "description": "URL to the original image", "required": true },
+ "arttype": { "type": "string", "required": true },
+ "previewurl": { "type": "string", "description": "URL to a preview thumbnail of the image" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "VideoLibrary.SetMovieDetails": {
+ "type": "method",
+ "description": "Update the given movie with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "movieid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "runtime", "$ref": "Optional.Integer", "description": "Runtime in seconds" },
+ { "name": "director", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "studio", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "year", "$ref": "Optional.Integer", "description": "linked with premiered. Overridden by premiered parameter" },
+ { "name": "plot", "$ref": "Optional.String" },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "mpaa", "$ref": "Optional.String" },
+ { "name": "imdbnumber", "$ref": "Optional.String" },
+ { "name": "votes", "$ref": "Optional.String" },
+ { "name": "lastplayed", "$ref": "Optional.String" },
+ { "name": "originaltitle", "$ref": "Optional.String" },
+ { "name": "trailer", "$ref": "Optional.String" },
+ { "name": "tagline", "$ref": "Optional.String" },
+ { "name": "plotoutline", "$ref": "Optional.String" },
+ { "name": "writer", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "country", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "top250", "$ref": "Optional.Integer" },
+ { "name": "sorttitle", "$ref": "Optional.String" },
+ { "name": "set", "$ref": "Optional.String" },
+ { "name": "showlink", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "thumbnail", "$ref": "Optional.String" },
+ { "name": "fanart", "$ref": "Optional.String" },
+ { "name": "tag", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "resume", "type": [ "null", { "$ref": "Video.Resume", "required": true } ], "default": null },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "ratings", "$ref": "Video.Ratings.Set" },
+ { "name": "dateadded", "$ref": "Optional.String" },
+ { "name": "premiered", "$ref": "Optional.String", "description": "linked with year. Overrides year" },
+ { "name": "uniqueid", "type": [ "null", { "$ref": "Media.UniqueID.Set", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.SetMovieSetDetails": {
+ "type": "method",
+ "description": "Update the given movie set with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "setid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "plot", "$ref": "Optional.String" }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.SetTVShowDetails": {
+ "type": "method",
+ "description": "Update the given tvshow with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "studio", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "plot", "$ref": "Optional.String" },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "mpaa", "$ref": "Optional.String" },
+ { "name": "imdbnumber", "$ref": "Optional.String" },
+ { "name": "premiered", "$ref": "Optional.String" },
+ { "name": "votes", "$ref": "Optional.String" },
+ { "name": "lastplayed", "$ref": "Optional.String" },
+ { "name": "originaltitle", "$ref": "Optional.String" },
+ { "name": "sorttitle", "$ref": "Optional.String" },
+ { "name": "episodeguide", "$ref": "Optional.String" },
+ { "name": "thumbnail", "$ref": "Optional.String" },
+ { "name": "fanart", "$ref": "Optional.String" },
+ { "name": "tag", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "ratings", "$ref": "Video.Ratings.Set" },
+ { "name": "dateadded", "$ref": "Optional.String" },
+ { "name": "runtime", "$ref": "Optional.Integer", "description": "Runtime in seconds" },
+ { "name": "status", "$ref": "Optional.String", "description": "Valid values: 'returning series', 'in production', 'planned', 'cancelled', 'ended'" },
+ { "name": "uniqueid", "type": [ "null", { "$ref": "Media.UniqueID.Set", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.SetSeasonDetails": {
+ "type": "method",
+ "description": "Update the given season with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "seasonid", "$ref": "Library.Id", "required": true },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "title", "$ref": "Optional.String" }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.SetEpisodeDetails": {
+ "type": "method",
+ "description": "Update the given episode with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "episodeid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "runtime", "$ref": "Optional.Integer", "description": "Runtime in seconds" },
+ { "name": "director", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "plot", "$ref": "Optional.String" },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "votes", "$ref": "Optional.String" },
+ { "name": "lastplayed", "$ref": "Optional.String" },
+ { "name": "writer", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "firstaired", "$ref": "Optional.String" },
+ { "name": "productioncode", "$ref": "Optional.String" },
+ { "name": "season", "$ref": "Optional.Integer" },
+ { "name": "episode", "$ref": "Optional.Integer" },
+ { "name": "originaltitle", "$ref": "Optional.String" },
+ { "name": "thumbnail", "$ref": "Optional.String" },
+ { "name": "fanart", "$ref": "Optional.String" },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "resume", "type": [ "null", { "$ref": "Video.Resume", "required": true } ], "default": null },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "ratings", "$ref": "Video.Ratings.Set" },
+ { "name": "dateadded", "$ref": "Optional.String" },
+ { "name": "uniqueid", "type": [ "null", { "$ref": "Media.UniqueID.Set", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.SetMusicVideoDetails": {
+ "type": "method",
+ "description": "Update the given music video with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "musicvideoid", "$ref": "Library.Id", "required": true },
+ { "name": "title", "$ref": "Optional.String" },
+ { "name": "playcount", "$ref": "Optional.Integer" },
+ { "name": "runtime", "$ref": "Optional.Integer", "description": "Runtime in seconds" },
+ { "name": "director", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "studio", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "year", "$ref": "Optional.Integer", "description": "linked with premiered. Overridden by premiered parameter" },
+ { "name": "plot", "$ref": "Optional.String" },
+ { "name": "album", "$ref": "Optional.String" },
+ { "name": "artist", "type": [ "null", { "$ref": "Array.String", "required": true } ] },
+ { "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "track", "$ref": "Optional.Integer" },
+ { "name": "lastplayed", "$ref": "Optional.String" },
+ { "name": "thumbnail", "$ref": "Optional.String" },
+ { "name": "fanart", "$ref": "Optional.String" },
+ { "name": "tag", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
+ { "name": "art", "type": [ "null", { "$ref": "Media.Artwork.Set", "required": true } ], "default": null },
+ { "name": "resume", "type": [ "null", { "$ref": "Video.Resume", "required": true } ], "default": null },
+ { "name": "rating", "$ref": "Optional.Number" },
+ { "name": "userrating", "$ref": "Optional.Integer" },
+ { "name": "dateadded", "$ref": "Optional.String" },
+ { "name": "premiered", "$ref": "Optional.String", "description": "linked with year. Overrides year" },
+ { "name": "uniqueid", "type": [ "null", { "$ref": "Media.UniqueID.Set", "required": true } ], "default": null }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RefreshMovie": {
+ "type": "method",
+ "description": "Refresh the given movie in the library",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "movieid", "$ref": "Library.Id", "required": true },
+ { "name": "ignorenfo", "type": "boolean", "required": false, "default": false, "description": "Whether or not to ignore a local NFO if present." },
+ { "name": "title", "type": "string", "required": "false", "default": "", "description": "Title to use for searching (instead of determining it from the item's filename/path)." }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RefreshTVShow": {
+ "type": "method",
+ "description": "Refresh the given tv show in the library",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id", "required": true },
+ { "name": "ignorenfo", "type": "boolean", "required": false, "default": false, "description": "Whether or not to ignore a local NFO if present." },
+ { "name": "refreshepisodes", "type": "boolean", "required": false, "default": false, "description": "Whether or not to refresh all episodes belonging to the TV show." },
+ { "name": "title", "type": "string", "required": "false", "default": "", "description": "Title to use for searching (instead of determining it from the item's filename/path)." }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RefreshEpisode": {
+ "type": "method",
+ "description": "Refresh the given episode in the library",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "episodeid", "$ref": "Library.Id", "required": true },
+ { "name": "ignorenfo", "type": "boolean", "required": false, "default": false, "description": "Whether or not to ignore a local NFO if present." },
+ { "name": "title", "type": "string", "required": "false", "default": "", "description": "Title to use for searching (instead of determining it from the item's filename/path)." }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RefreshMusicVideo": {
+ "type": "method",
+ "description": "Refresh the given music video in the library",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "musicvideoid", "$ref": "Library.Id", "required": true },
+ { "name": "ignorenfo", "type": "boolean", "required": false, "default": false, "description": "Whether or not to ignore a local NFO if present." },
+ { "name": "title", "type": "string", "required": "false", "default": "", "description": "Title to use for searching (instead of determining it from the item's filename/path)." }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RemoveMovie": {
+ "type": "method",
+ "description": "Removes the given movie from the library",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "movieid", "$ref": "Library.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RemoveTVShow": {
+ "type": "method",
+ "description": "Removes the given tv show from the library",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "tvshowid", "$ref": "Library.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RemoveEpisode": {
+ "type": "method",
+ "description": "Removes the given episode from the library",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "episodeid", "$ref": "Library.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.RemoveMusicVideo": {
+ "type": "method",
+ "description": "Removes the given music video from the library",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "musicvideoid", "$ref": "Library.Id", "required": true }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.Scan": {
+ "type": "method",
+ "description": "Scans the video sources for new library items",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "directory", "type": "string", "default": "" },
+ { "name": "showdialogs", "type": "boolean", "default": true, "description": "Whether or not to show the progress bar or any other GUI dialog" }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.Export": {
+ "type": "method",
+ "description": "Exports all items from the video library",
+ "transport": "Response",
+ "permission": "WriteFile",
+ "params": [
+ { "name": "options", "type": [
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "path": { "type": "string", "required": true, "minLength": 1, "description": "Path to the directory to where the data should be exported" }
+ }
+ },
+ { "type": "object", "required": true, "additionalProperties": false,
+ "properties": {
+ "overwrite": { "type": "boolean", "default": false, "description": "Whether to overwrite existing exported files" },
+ "images": { "type": "boolean", "default": false, "description": "Whether to export thumbnails and fanart images" },
+ "actorthumbs": { "type": "boolean", "default": false, "description": "Whether to export actor thumbnails" }
+ }
+ }
+ ]
+ }
+ ],
+ "returns": "string"
+ },
+ "VideoLibrary.Clean": {
+ "type": "method",
+ "description": "Cleans the video library for non-existent items",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "showdialogs", "type": "boolean", "default": true, "description": "Whether or not to show the progress bar or any other GUI dialog" },
+ { "name": "content", "type": "string", "default": "video", "enum": [ "video", "movies", "tvshows", "musicvideos" ], "description": "Content type to clean for" },
+ { "name": "directory", "type": "string", "default": "", "description": "Path to the directory to clean up; performs a global cleanup if not specified" }
+ ],
+ "returns": "string"
+ },
+ "GUI.ActivateWindow": {
+ "type": "method",
+ "description": "Activates the given window",
+ "transport": "Response",
+ "permission": "ControlGUI",
+ "params": [
+ { "name": "window", "$ref": "GUI.Window", "required": true },
+ { "name": "parameters", "type": "array", "items": { "type": "string", "minLength": 1, "required": true }, "minItems": 1 }
+ ],
+ "returns": "string"
+ },
+ "GUI.ShowNotification": {
+ "type": "method",
+ "description": "Shows a GUI notification",
+ "transport": "Response",
+ "permission": "ControlGUI",
+ "params": [
+ { "name": "title", "type": "string", "required": true },
+ { "name": "message", "type": "string", "required": true },
+ { "name": "image", "type": [
+ { "type": "string", "required": true, "enum": [ "info", "warning", "error" ] },
+ { "type": "string", "required": true }
+ ], "default": ""
+ },
+ { "name": "displaytime", "type": "integer", "minimum": 1500, "default": 5000, "description": "The time in milliseconds the notification will be visible" }
+ ],
+ "returns": "string"
+ },
+ "GUI.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "GUI.Property.Name" } }
+ ],
+ "returns": { "$ref": "GUI.Property.Value", "required": true }
+ },
+ "GUI.SetFullscreen": {
+ "type": "method",
+ "description": "Toggle fullscreen/GUI",
+ "transport": "Response",
+ "permission": "ControlGUI",
+ "params": [
+ { "name": "fullscreen", "required": true, "$ref": "Global.Toggle" }
+ ],
+ "returns": { "type": "boolean", "description": "Fullscreen state" }
+ },
+ "GUI.SetStereoscopicMode": {
+ "type": "method",
+ "description": "Sets the stereoscopic mode of the GUI to the given mode",
+ "transport": "Response",
+ "permission": "ControlGUI",
+ "params": [
+ { "name": "mode", "type": "string", "enum": [ "toggle", "tomono", "next", "previous", "select", "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "monoscopic" ], "required": true }
+ ],
+ "returns": "string"
+ },
+ "GUI.GetStereoscopicModes": {
+ "type": "method",
+ "description": "Returns the supported stereoscopic modes of the GUI",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "stereoscopicmodes" : {
+ "type": "array",
+ "uniqueItems": true,
+ "items": { "$ref": "GUI.Stereoscopy.Mode" }
+ }
+ }
+ }
+ },
+ "Addons.GetAddons": {
+ "type": "method",
+ "description": "Gets all available addons",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "type", "$ref": "Addon.Types" },
+ { "name": "content", "$ref": "Addon.Content", "description": "Content provided by the addon. Only considered for plugins and scripts." },
+ { "name": "enabled", "type": [ { "type": "boolean" }, { "type": "string", "enum": [ "all" ] } ], "default": "all" },
+ { "name": "properties", "$ref": "Addon.Fields" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "installed", "type": [ { "type": "boolean" }, { "type": "string", "enum": [ "all" ] } ], "default": true }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "addons": { "type": "array",
+ "items": { "$ref": "Addon.Details" }
+ }
+ }
+ }
+ },
+ "Addons.GetAddonDetails": {
+ "type": "method",
+ "description": "Gets the details of a specific addon",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "addonid", "type": "string", "required": true },
+ { "name": "properties", "$ref": "Addon.Fields" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "addon": { "$ref": "Addon.Details", "required": true }
+ }
+ }
+ },
+ "Addons.SetAddonEnabled": {
+ "type": "method",
+ "description": "Enables/Disables a specific addon",
+ "transport": "Response",
+ "permission": "ManageAddon",
+ "params": [
+ { "name": "addonid", "type": "string", "required": true },
+ { "name": "enabled", "$ref": "Global.Toggle", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Addons.ExecuteAddon": {
+ "type": "method",
+ "description": "Executes the given addon with the given parameters (if possible)",
+ "transport": "Response",
+ "permission": "ExecuteAddon",
+ "params": [
+ { "name": "addonid", "type": "string", "required": true },
+ { "name": "params", "type": [
+ { "type": "object", "additionalProperties": { "type": "string" } },
+ { "type": "array", "items": { "type": "string" } },
+ { "type": "string", "description": "URL path (must start with / or ?" }
+ ],
+ "default": ""
+ },
+ { "name": "wait", "type": "boolean", "default": false }
+ ],
+ "returns": "string"
+ },
+ "PVR.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "PVR.Property.Name" } }
+ ],
+ "returns": { "$ref": "PVR.Property.Value", "required": true }
+ },
+ "PVR.GetChannelGroups": {
+ "type": "method",
+ "description": "Retrieves the channel groups for the specified type",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "channeltype", "$ref": "PVR.Channel.Type", "required": true },
+ { "name": "limits", "$ref": "List.Limits" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "channelgroups": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.ChannelGroup" }
+ }
+ }
+ }
+ },
+ "PVR.GetChannelGroupDetails": {
+ "type": "method",
+ "description": "Retrieves the details of a specific channel group",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "channelgroupid", "$ref": "PVR.ChannelGroup.Id", "required": true },
+ { "name": "channels", "type": "object",
+ "properties": {
+ "properties": { "$ref": "PVR.Fields.Channel" },
+ "limits": { "$ref": "List.Limits" }
+ }
+ }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "channelgroupdetails": { "$ref": "PVR.Details.ChannelGroup.Extended" }
+ }
+ }
+ },
+ "PVR.GetChannels": {
+ "type": "method",
+ "description": "Retrieves the channel list",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "channelgroupid", "$ref": "PVR.ChannelGroup.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Channel" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "channels": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.Channel" }
+ }
+ }
+ }
+ },
+ "PVR.GetChannelDetails": {
+ "type": "method",
+ "description": "Retrieves the details of a specific channel",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "channelid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Channel" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "channeldetails": { "$ref": "PVR.Details.Channel" }
+ }
+ }
+ },
+ "PVR.GetClients": {
+ "type": "method",
+ "description": "Retrieves the enabled PVR clients and their capabilities",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "limits", "$ref": "List.Limits" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "clients": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.Client" }
+ }
+ }
+ }
+ },
+ "PVR.GetBroadcasts": {
+ "type": "method",
+ "description": "Retrieves the program of a specific channel",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "channelid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Broadcast" },
+ { "name": "limits", "$ref": "List.Limits" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "broadcasts": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.Broadcast" }
+ }
+ }
+ }
+ },
+ "PVR.GetBroadcastDetails": {
+ "type": "method",
+ "description": "Retrieves the details of a specific broadcast",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "broadcastid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Broadcast" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "broadcastdetails": { "$ref": "PVR.Details.Broadcast" }
+ }
+ }
+ },
+ "PVR.GetBroadcastIsPlayable": {
+ "type": "method",
+ "description": "Retrieves whether or not a broadcast is playable",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "broadcastid", "$ref": "Library.Id", "required": true, "description": "the id of the broadcast to check for playability" }
+ ],
+ "returns": "boolean"
+ },
+ "PVR.GetTimers": {
+ "type": "method",
+ "description": "Retrieves the timers",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "PVR.Fields.Timer" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "timers": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.Timer" }
+ }
+ }
+ }
+ },
+ "PVR.GetTimerDetails": {
+ "type": "method",
+ "description": "Retrieves the details of a specific timer",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "timerid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Timer" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "timerdetails": { "$ref": "PVR.Details.Timer" }
+ }
+ }
+ },
+ "PVR.AddTimer": {
+ "type": "method",
+ "description": "Adds a timer to record the given show one times or a timer rule to record all showings of the given show or adds a reminder timer or reminder timer rule",
+ "transport": "Response",
+ "permission": "ControlPVR",
+ "params": [
+ { "name": "broadcastid", "$ref": "Library.Id", "required": true, "description": "the broadcast id of the item to record" },
+ { "name": "timerrule", "type": "boolean", "default": false, "description": "controls whether to create a timer rule or a onetime timer" },
+ { "name": "reminder", "type": "boolean", "default": false, "description": "controls whether to create a reminder timer or a recording timer" }
+ ],
+ "returns": "string"
+ },
+ "PVR.DeleteTimer": {
+ "type": "method",
+ "description": "Deletes a onetime timer or a timer rule",
+ "transport": "Response",
+ "permission": "ControlPVR",
+ "params": [
+ { "name": "timerid", "$ref": "Library.Id", "required": true, "description": "the id of the onetime timer or timer rule to delete" }
+ ],
+ "returns": "string"
+ },
+ "PVR.ToggleTimer": {
+ "type": "method",
+ "description": "Creates or deletes a onetime timer or timer rule for a given show. If it exists, it will be deleted. If it does not exist, it will be created",
+ "transport": "Response",
+ "permission": "ControlPVR",
+ "params": [
+ { "name": "broadcastid", "$ref": "Library.Id", "required": true, "description": "the broadcast id of the item to toggle a onetime timer or time rule for" },
+ { "name": "timerrule", "type": "boolean", "default": false, "description": "controls whether to create / delete a timer rule or a onetime timer" }
+ ],
+ "returns": "string"
+ },
+ "PVR.GetRecordings": {
+ "type": "method",
+ "description": "Retrieves the recordings",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "PVR.Fields.Recording" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "recordings": { "type": "array", "required": true,
+ "items": { "$ref": "PVR.Details.Recording" }
+ }
+ }
+ }
+ },
+ "PVR.GetRecordingDetails": {
+ "type": "method",
+ "description": "Retrieves the details of a specific recording",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "recordingid", "$ref": "Library.Id", "required": true },
+ { "name": "properties", "$ref": "PVR.Fields.Recording" }
+ ],
+ "returns": { "type": "object",
+ "properties": {
+ "recordingdetails": { "$ref": "PVR.Details.Recording" }
+ }
+ }
+ },
+ "PVR.Record": {
+ "type": "method",
+ "description": "Toggle recording of a channel",
+ "transport": "Response",
+ "permission": "ControlPVR",
+ "params": [
+ { "name": "record", "$ref": "Global.Toggle", "default": "toggle" },
+ { "name": "channel", "type": [
+ { "type": "string", "enum": [ "current" ], "required": true },
+ { "$ref": "Library.Id", "required": true }
+ ],
+ "default": "current"
+ }
+ ],
+ "returns": "string"
+ },
+ "PVR.Scan": {
+ "type": "method",
+ "description": "Starts a channel scan",
+ "transport": "Response",
+ "permission": "ControlPVR",
+ "params": [
+ { "name": "clientid", "$ref": "Library.Id", "description": "Specify a PVR client id to avoid UI dialog, optional in kodi 19, required in kodi 20" }
+ ],
+ "returns": "string"
+ },
+ "Textures.GetTextures": {
+ "type": "method",
+ "description": "Retrieve all textures",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Textures.Fields.Texture" },
+ { "name": "filter", "$ref": "List.Filter.Textures" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "textures": { "type": "array", "required": true,
+ "items": { "$ref": "Textures.Details.Texture" }
+ }
+ }
+ }
+ },
+ "Textures.RemoveTexture": {
+ "type": "method",
+ "description": "Remove the specified texture",
+ "transport": "Response",
+ "permission": "RemoveData",
+ "params": [
+ { "name": "textureid", "$ref": "Library.Id", "required": true, "description": "Texture database identifier" }
+ ],
+ "returns": "string"
+ },
+ "Profiles.GetProfiles": {
+ "type": "method",
+ "description": "Retrieve all profiles",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Profiles.Fields.Profile" },
+ { "name": "limits", "$ref": "List.Limits" },
+ { "name": "sort", "$ref": "List.Sort" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "profiles": { "type": "array", "required": true,
+ "items": { "$ref": "Profiles.Details.Profile" }
+ }
+ }
+ }
+ },
+ "Profiles.GetCurrentProfile": {
+ "type": "method",
+ "description": "Retrieve the current profile",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "$ref": "Profiles.Fields.Profile" }
+ ],
+ "returns": { "$ref": "Profiles.Details.Profile", "required": true }
+ },
+ "Profiles.LoadProfile": {
+ "type": "method",
+ "description": "Load the specified profile",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [
+ { "name": "profile", "type": "string", "required": true, "description": "Profile name" },
+ { "name": "prompt", "type": "boolean", "description": "Prompt for password" },
+ { "name": "password", "$ref": "Profiles.Password" }
+ ],
+ "returns": "string"
+ },
+ "System.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "System.Property.Name" } }
+ ],
+ "returns": { "$ref": "System.Property.Value", "required": true }
+ },
+ "System.EjectOpticalDrive": {
+ "type": "method",
+ "description": "Ejects or closes the optical disc drive (if available)",
+ "transport": "Response",
+ "permission": "ControlSystem",
+ "params": [ ],
+ "returns": "string"
+ },
+ "System.Shutdown": {
+ "type": "method",
+ "description": "Shuts the system running Kodi down",
+ "transport": "Response",
+ "permission": "ControlPower",
+ "params": [],
+ "returns": "string"
+ },
+ "System.Suspend": {
+ "type": "method",
+ "description": "Suspends the system running Kodi",
+ "transport": "Response",
+ "permission": "ControlPower",
+ "params": [],
+ "returns": "string"
+ },
+ "System.Hibernate": {
+ "type": "method",
+ "description": "Puts the system running Kodi into hibernate mode",
+ "transport": "Response",
+ "permission": "ControlPower",
+ "params": [],
+ "returns": "string"
+ },
+ "System.Reboot": {
+ "type": "method",
+ "description": "Reboots the system running Kodi",
+ "transport": "Response",
+ "permission": "ControlPower",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.SendText": {
+ "type": "method",
+ "description": "Send a generic (unicode) text",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [
+ { "name": "text", "type": "string", "required": true, "description": "Unicode text" },
+ { "name": "done", "type": "boolean", "default": true, "description": "Whether this is the whole input or not (closes an open input dialog if true)." }
+ ],
+ "returns": "string"
+ },
+ "Input.ExecuteAction": {
+ "type": "method",
+ "description": "Execute a specific action",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [
+ { "name": "action", "$ref": "Input.Action", "required": true }
+ ],
+ "returns": "string"
+ },
+ "Input.ButtonEvent": {
+ "type": "method",
+ "description": "Send a button press event",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [
+ { "name": "button", "type": "string", "required": true, "description": "Button name" },
+ { "name": "keymap", "type": "string", "required": true, "description": "Keymap name (KB, XG, R1, or R2)", "enum": [ "KB", "XG", "R1", "R2" ] },
+ { "name": "holdtime", "type": "integer", "required": false, "minimum" : 0, "default" : 0, "description": "Number of milliseconds to simulate button hold." }
+ ],
+ "returns": "string"
+ },
+ "Input.Left": {
+ "type": "method",
+ "description": "Navigate left in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Right": {
+ "type": "method",
+ "description": "Navigate right in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Down": {
+ "type": "method",
+ "description": "Navigate down in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Up": {
+ "type": "method",
+ "description": "Navigate up in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Select": {
+ "type": "method",
+ "description": "Select current item in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Back": {
+ "type": "method",
+ "description": "Goes back in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.ContextMenu": {
+ "type": "method",
+ "description": "Shows the context menu",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Info": {
+ "type": "method",
+ "description": "Shows the information dialog",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.Home": {
+ "type": "method",
+ "description": "Goes to home window in GUI",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.ShowCodec": {
+ "type": "method",
+ "description": "Show codec information of the playing item",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.ShowOSD": {
+ "type": "method",
+ "description": "Show the on-screen display for the current player",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Input.ShowPlayerProcessInfo": {
+ "type": "method",
+ "description": "Show player process information of the playing item, like video decoder, pixel format, pvr signal strength, ...",
+ "transport": "Response",
+ "permission": "Navigate",
+ "params": [],
+ "returns": "string"
+ },
+ "Application.GetProperties": {
+ "type": "method",
+ "description": "Retrieves the values of the given properties",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "properties", "type": "array", "uniqueItems": true, "required": true, "items": { "$ref": "Application.Property.Name" } }
+ ],
+ "returns": { "$ref": "Application.Property.Value", "required": true }
+ },
+ "Application.SetVolume": {
+ "type": "method",
+ "description": "Set the current volume",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "volume", "type": [
+ { "type": "integer", "minimum": 0, "maximum": 100, "required": true },
+ { "$ref": "Global.IncrementDecrement", "required": true }
+ ],
+ "required": true
+ }
+ ],
+ "returns": "integer"
+ },
+ "Application.SetMute": {
+ "type": "method",
+ "description": "Toggle mute/unmute",
+ "transport": "Response",
+ "permission": "ControlPlayback",
+ "params": [
+ { "name": "mute", "required": true, "$ref": "Global.Toggle" }
+ ],
+ "returns": { "type": "boolean", "description": "Mute state" }
+ },
+ "Application.Quit": {
+ "type": "method",
+ "description": "Quit application",
+ "transport": "Response",
+ "permission": "ControlPower",
+ "params": [],
+ "returns": "string"
+ },
+ "XBMC.GetInfoLabels": {
+ "type": "method",
+ "description": "Retrieve info labels about Kodi and the system",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "labels", "type": "array", "required": true, "items": { "type": "string" }, "minItems": 1, "description": "See http://kodi.wiki/view/InfoLabels for a list of possible info labels" }
+ ],
+ "returns": {
+ "type": "object",
+ "description": "Object containing key-value pairs of the retrieved info labels",
+ "additionalProperties": { "type": "string" }
+ }
+ },
+ "XBMC.GetInfoBooleans": {
+ "type": "method",
+ "description": "Retrieve info booleans about Kodi and the system",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "booleans", "type": "array", "required": true, "items": { "type": "string" }, "minItems": 1 }
+ ],
+ "returns": {
+ "type": "object",
+ "description": "Object containing key-value pairs of the retrieved info booleans",
+ "additionalProperties": { "type": "string" }
+ }
+ },
+ "Favourites.GetFavourites": {
+ "type": "method",
+ "description": "Retrieve all favourites",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "type", "type": [ "null", { "$ref": "Favourite.Type" } ], "default": null },
+ { "name": "properties", "$ref": "Favourite.Fields.Favourite" }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "favourites": { "type": "array",
+ "items": { "$ref": "Favourite.Details.Favourite" }
+ }
+ }
+ }
+ },
+ "Favourites.AddFavourite": {
+ "type": "method",
+ "description": "Add a favourite with the given details",
+ "transport": "Response",
+ "permission": "UpdateData",
+ "params": [
+ { "name": "title", "type": "string", "required": true },
+ { "name": "type", "$ref": "Favourite.Type", "required": true },
+ { "name": "path", "$ref": "Optional.String", "description": "Required for media, script and androidapp favourites types" },
+ { "name": "window", "$ref": "Optional.String", "description": "Required for window favourite type" },
+ { "name": "windowparameter", "$ref": "Optional.String" },
+ { "name": "thumbnail", "$ref": "Optional.String" }
+ ],
+ "returns": "string"
+ },
+ "Settings.GetSections": {
+ "type": "method",
+ "description": "Retrieves all setting sections",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+ { "name": "properties", "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "categories" ]
+ }
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "sections": { "type": "array",
+ "items": { "$ref": "Setting.Details.Section" }
+ }
+ }
+ }
+ },
+ "Settings.GetCategories": {
+ "type": "method",
+ "description": "Retrieves all setting categories",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+ { "name": "section", "type": "string", "default": "" },
+ { "name": "properties", "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "settings" ]
+ }
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "categories": { "type": "array",
+ "items": { "$ref": "Setting.Details.Category" }
+ }
+ }
+ }
+ },
+ "Settings.GetSettings": {
+ "type": "method",
+ "description": "Retrieves all settings",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+ { "name": "filter", "type": [
+ { "type": "object",
+ "properties": {
+ "section": { "type": "string", "required": true, "minLength": 1 },
+ "category": { "type": "string", "required": true, "minLength": 1 }
+ },
+ "additionalProperties": false,
+ "required": true
+ }
+ ],
+ "default": null
+ }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "settings": { "type": "array",
+ "items": { "$ref": "Setting.Details.Setting" }
+ }
+ }
+ }
+ },
+ "Settings.GetSettingValue": {
+ "type": "method",
+ "description": "Retrieves the value of a setting",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "setting", "type": "string", "required": true, "minLength": 1 }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "value": { "$ref": "Setting.Value.Extended", "required": true }
+ }
+ }
+ },
+ "Settings.SetSettingValue": {
+ "type": "method",
+ "description": "Changes the value of a setting",
+ "transport": "Response",
+ "permission": "WriteSetting",
+ "params": [
+ { "name": "setting", "type": "string", "required": true, "minLength": 1 },
+ { "name": "value", "$ref": "Setting.Value.Extended", "required": true }
+ ],
+ "returns": "boolean"
+ },
+ "Settings.ResetSettingValue": {
+ "type": "method",
+ "description": "Resets the value of a setting",
+ "transport": "Response",
+ "permission": "WriteSetting",
+ "params": [
+ { "name": "setting", "type": "string", "required": true, "minLength": 1 }
+ ],
+ "returns": "string"
+ },
+ "Settings.GetSkinSettingValue": {
+ "type": "method",
+ "description": "Retrieves the value of the specified skin setting",
+ "transport": "Response",
+ "permission": "ReadData",
+ "params": [
+ { "name": "setting", "type": "string", "required": true, "minLength": 1 }
+ ],
+ "returns": {
+ "type": "object",
+ "properties": {
+ "value": { "type": [ "boolean", "string" ], "required": true }
+ }
+ }
+ },
+ "Settings.SetSkinSettingValue": {
+ "type": "method",
+ "description": "Changes the value of the specified skin setting",
+ "transport": "Response",
+ "permission": "WriteSetting",
+ "params": [
+ { "name": "setting", "type": "string", "required": true, "minLength": 1 },
+ { "name": "value", "type": [ "boolean", "string" ], "required": true }
+ ],
+ "returns": "boolean"
+ },
+ "Settings.GetSkinSettings": {
+ "type": "method",
+ "description": "Retrieves all skin settings of the currently used skin",
+ "transport": "Response",
+ "permission": "ReadData",
+ "returns": {
+ "type": "object",
+ "properties": {
+ "skin": { "type": "string", "required": true, "minLength": 1 },
+ "settings": { "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "id": { "type": "string", "required": true, "minLength": 1 },
+ "type": { "type": "string", "enum": [ "boolean", "string" ], "required": true },
+ "value": { "type": [ "boolean", "string" ], "required": true }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/xbmc/interfaces/json-rpc/schema/notifications.json b/xbmc/interfaces/json-rpc/schema/notifications.json
new file mode 100644
index 0000000..fa738cf
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/notifications.json
@@ -0,0 +1,464 @@
+{
+ "Player.OnPlay": {
+ "type": "notification",
+ "description": "Playback of a media item has been started or the playback speed has changed. If there is no ID available extra information will be provided.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "$ref": "Player.Notifications.Data", "required": true }
+ ],
+ "returns": null
+ },
+ "Player.OnResume": {
+ "type": "notification",
+ "description": "Playback of a media item has been resumed. If there is no ID available extra information will be provided.",
+ "params": [
+ {
+ "name": "sender",
+ "type": "string",
+ "required": true
+ },
+ {
+ "name": "data",
+ "$ref": "Player.Notifications.Data",
+ "required": true
+ }
+ ],
+ "returns": null
+ },
+ "Player.OnAVStart": {
+ "type": "notification",
+ "description": "Playback of a media item has been started and first frame is available. If there is no ID available extra information will be provided.",
+ "params": [
+ {
+ "name": "sender",
+ "type": "string",
+ "required": true
+ },
+ {
+ "name": "data",
+ "$ref": "Player.Notifications.Data",
+ "required": true
+ }
+ ],
+ "returns": null
+ },
+ "Player.OnAVChange": {
+ "type": "notification",
+ "description": "Audio- or videostream has changed. If there is no ID available extra information will be provided.",
+ "params": [
+ {
+ "name": "sender",
+ "type": "string",
+ "required": true
+ },
+ {
+ "name": "data",
+ "$ref": "Player.Notifications.Data",
+ "required": true
+ }
+ ],
+ "returns": null
+ },
+ "Player.OnPause": {
+ "type": "notification",
+ "description": "Playback of a media item has been paused. If there is no ID available extra information will be provided.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "$ref": "Player.Notifications.Data", "required": true }
+ ],
+ "returns": null
+ },
+ "Player.OnStop": {
+ "type": "notification",
+ "description": "Playback of a media item has been stopped. If there is no ID available extra information will be provided.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "item": { "$ref": "Notifications.Item" },
+ "end": { "type": "boolean", "required": true, "description": "Whether the player has reached the end of the playable item(s) or not" }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Player.OnSpeedChanged": {
+ "type": "notification",
+ "description": "Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "$ref": "Player.Notifications.Data", "required": true }
+ ],
+ "returns": null
+ },
+ "Player.OnSeek": {
+ "type": "notification",
+ "description": "The playback position has been changed. If there is no ID available extra information will be provided.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "item": { "$ref": "Notifications.Item" },
+ "player": { "$ref": "Player.Notifications.Player.Seek", "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Player.OnPropertyChanged": {
+ "type": "notification",
+ "description": "A property of the playing items has changed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "property": { "$ref": "Player.Property.Value" },
+ "player": { "$ref": "Player.Notifications.Player", "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Playlist.OnAdd": {
+ "type": "notification",
+ "description": "A playlist item has been added.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "playlistid": { "$ref": "Playlist.Id", "required": true },
+ "item": { "$ref": "Notifications.Item" },
+ "position": { "$ref": "Playlist.Position" }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Playlist.OnRemove": {
+ "type": "notification",
+ "description": "A playlist item has been removed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "playlistid": { "$ref": "Playlist.Id", "required": true },
+ "position": { "$ref": "Playlist.Position" }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Playlist.OnClear": {
+ "type": "notification",
+ "description": "A playlist item has been cleared.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "playlistid": { "$ref": "Playlist.Id", "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnUpdate": {
+ "type": "notification",
+ "description": "An audio item has been updated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "id": { "$ref": "Library.Id", "required": true },
+ "type": { "type": "string", "id": "Notifications.Library.Audio.Type", "enum": [ "song" ], "required": true },
+ "transaction": { "$ref": "Optional.Boolean", "description": "True if the update is being performed within a transaction." },
+ "added": { "$ref": "Optional.Boolean", "description": "True if the update is for a newly added item." }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnRemove": {
+ "type": "notification",
+ "description": "An audio item has been removed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "id": { "$ref": "Library.Id", "required": true },
+ "type": { "$ref": "Notifications.Library.Audio.Type", "required": true },
+ "transaction": { "$ref": "Optional.Boolean", "description": "True if the removal is being performed within a transaction." }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnScanStarted": {
+ "type": "notification",
+ "description": "An audio library scan has started.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnScanFinished": {
+ "type": "notification",
+ "description": "Scanning the audio library has been finished.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnCleanStarted": {
+ "type": "notification",
+ "description": "An audio library clean operation has started.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnCleanFinished": {
+ "type": "notification",
+ "description": "The audio library has been cleaned.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "AudioLibrary.OnExport": {
+ "type": "notification",
+ "description": "An audio library export has finished.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": false,
+ "properties": {
+ "file": { "type": "string", "required": false, "default": "" },
+ "failcount": { "type": "integer", "minimum": 0, "required": false, "default": 0 }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnUpdate": {
+ "type": "notification",
+ "description": "A video item has been updated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "id": { "$ref": "Library.Id", "required": true },
+ "type": { "type": "string", "id": "Notifications.Library.Video.Type", "enum": [ "movie", "tvshow", "episode", "musicvideo" ], "required": true },
+ "playcount": { "type": "integer", "minimum": 0, "default": -1 },
+ "transaction": { "$ref": "Optional.Boolean", "description": "True if the update is being performed within a transaction." },
+ "added": { "$ref": "Optional.Boolean", "description": "True if the update is for a newly added item." }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnExport": {
+ "type": "notification",
+ "description": "A video library export has finished.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": false,
+ "properties": {
+ "file": { "type": "string", "required": false, "default": "" },
+ "root": { "type": "string", "required": false, "default": "" },
+ "failcount": { "type": "integer", "minimum": 0, "required": false, "default": 0 }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnRemove": {
+ "type": "notification",
+ "description": "A video item has been removed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "id": { "$ref": "Library.Id", "required": true },
+ "type": { "$ref": "Notifications.Library.Video.Type", "required": true },
+ "transaction": { "$ref": "Optional.Boolean", "description": "True if the removal is being performed within a transaction." }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnScanStarted": {
+ "type": "notification",
+ "description": "A video library scan has started.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnScanFinished": {
+ "type": "notification",
+ "description": "Scanning the video library has been finished.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnCleanStarted": {
+ "type": "notification",
+ "description": "A video library clean operation has started.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnCleanFinished": {
+ "type": "notification",
+ "description": "The video library has been cleaned.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "VideoLibrary.OnRefresh": {
+ "type": "notification",
+ "description": "The video library has been refreshed and a home screen reload might be necessary.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "System.OnQuit": {
+ "type": "notification",
+ "description": "Kodi will be closed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "exitcode": { "type": "integer", "minimum": 0, "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "System.OnRestart": {
+ "type": "notification",
+ "description": "The system will be restarted.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "System.OnSleep": {
+ "type": "notification",
+ "description": "The system will be suspended.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "System.OnWake": {
+ "type": "notification",
+ "description": "The system woke up from suspension.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "System.OnLowBattery": {
+ "type": "notification",
+ "description": "The system is on low battery.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "Application.OnVolumeChanged": {
+ "type": "notification",
+ "description": "The volume of the application has changed.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "volume": { "type": "integer", "minimum": 0, "maximum": 100, "required": true },
+ "muted": { "type": "boolean", "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Input.OnInputRequested": {
+ "type": "notification",
+ "description": "The user is requested to provide some information.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "type": { "type": "string", "enum": [ "keyboard", "time", "date", "ip", "password", "numericpassword", "number", "seconds" ], "required": true },
+ "value": { "type": "string", "required": true },
+ "title": { "type": "string" }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "Input.OnInputFinished": {
+ "type": "notification",
+ "description": "The user has provided the requested input.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "GUI.OnScreensaverActivated": {
+ "type": "notification",
+ "description": "The screensaver has been activated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "GUI.OnScreensaverDeactivated": {
+ "type": "notification",
+ "description": "The screensaver has been deactivated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "object", "required": true,
+ "properties": {
+ "shuttingdown": { "type": "boolean", "required": true }
+ }
+ }
+ ],
+ "returns": null
+ },
+ "GUI.OnDPMSActivated": {
+ "type": "notification",
+ "description": "Energy saving/DPMS has been activated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ },
+ "GUI.OnDPMSDeactivated": {
+ "type": "notification",
+ "description": "Energy saving/DPMS has been deactivated.",
+ "params": [
+ { "name": "sender", "type": "string", "required": true },
+ { "name": "data", "type": "null", "required": true }
+ ],
+ "returns": null
+ }
+}
diff --git a/xbmc/interfaces/json-rpc/schema/types.json b/xbmc/interfaces/json-rpc/schema/types.json
new file mode 100644
index 0000000..37b5140
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/types.json
@@ -0,0 +1,2081 @@
+{
+ "Optional.Boolean": {
+ "type": [ "null", "boolean" ],
+ "default": null
+ },
+ "Optional.String": {
+ "type": [ "null", "string" ],
+ "default": null
+ },
+ "Optional.Integer": {
+ "type": [ "null", "integer" ],
+ "default": null
+ },
+ "Optional.Number": {
+ "type": [ "null", "number" ],
+ "default": null
+ },
+ "Array.String": {
+ "type": "array",
+ "items": { "type": "string", "minLength": 1 }
+ },
+ "Array.Integer": {
+ "type": "array",
+ "items": { "type": "integer" }
+ },
+ "Global.Time": {
+ "type": "object",
+ "description": "A duration.",
+ "properties": {
+ "hours": { "type": "integer", "required": true, "minimum": 0 },
+ "minutes": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
+ "seconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
+ "milliseconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 999 }
+ },
+ "additionalProperties": false
+ },
+ "Global.Weekday": {
+ "type": "string",
+ "enum": [ "monday", "tuesday", "wednesday", "thursday",
+ "friday", "saturday", "sunday" ]
+ },
+ "Global.IncrementDecrement": {
+ "type": "string",
+ "enum": [ "increment", "decrement" ]
+ },
+ "Global.Toggle": {
+ "type": [
+ { "type": "boolean", "required": true },
+ { "type": "string", "enum": [ "toggle" ], "required": true }
+ ]
+ },
+ "Global.String.NotEmpty": {
+ "type": "string",
+ "minLength": 1
+ },
+ "Configuration.Notifications": {
+ "type": "object",
+ "properties": {
+ "Player": { "type": "boolean", "required": true },
+ "Playlist": { "type": "boolean", "required": true },
+ "GUI": { "type": "boolean", "required": true },
+ "System": { "type": "boolean", "required": true },
+ "VideoLibrary": { "type": "boolean", "required": true },
+ "AudioLibrary": { "type": "boolean", "required": true },
+ "Application": { "type": "boolean", "required": true },
+ "Input": { "type": "boolean", "required": true },
+ "PVR": { "type": "boolean", "required": true },
+ "Other": { "type": "boolean", "required": true }
+ },
+ "additionalProperties": false
+ },
+ "Configuration": {
+ "type": "object", "required": true,
+ "properties": {
+ "notifications": { "$ref": "Configuration.Notifications", "required": true }
+ }
+ },
+ "Files.Media": {
+ "type": "string",
+ "enum": [ "video", "music", "pictures", "files", "programs" ]
+ },
+ "List.Amount": {
+ "type": "integer",
+ "default": -1,
+ "minimum": 0
+ },
+ "List.Limits": {
+ "type": "object",
+ "properties": {
+ "start": { "type": "integer", "minimum": 0, "default": 0, "description": "Index of the first item to return" },
+ "end": { "$ref": "List.Amount", "description": "Index of the last item to return" }
+ },
+ "additionalProperties": false
+ },
+ "List.LimitsReturned": {
+ "type": "object",
+ "properties": {
+ "start": { "type": "integer", "minimum": 0, "default": 0 },
+ "end": { "$ref": "List.Amount" },
+ "total": { "type": "integer", "minimum": 0, "required": true }
+ },
+ "additionalProperties": false
+ },
+ "List.Sort": {
+ "type": "object",
+ "properties": {
+ "method": { "type": "string", "default": "none",
+ "enum": [ "none", "label", "date", "size", "file", "path", "drivetype", "title", "track", "time", "artist",
+ "album", "albumtype", "genre", "country", "year", "rating", "userrating", "votes", "top250", "programcount",
+ "playlist", "episode", "season", "totalepisodes", "watchedepisodes", "tvshowstatus", "tvshowtitle",
+ "sorttitle", "productioncode", "mpaa", "studio", "dateadded", "lastplayed", "playcount", "listeners",
+ "bitrate", "random", "totaldiscs", "originaldate", "bpm", "originaltitle" ]
+ },
+ "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
+ "ignorearticle": { "type": "boolean", "default": false },
+ "useartistsortname": { "type": "boolean", "default": false }
+ }
+ },
+ "Library.Id": {
+ "type": "integer",
+ "default": -1,
+ "minimum": 1
+ },
+ "PVR.Channel.Type": {
+ "type": "string",
+ "enum": [ "tv", "radio" ]
+ },
+ "Playlist.Id": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2,
+ "default": -1
+ },
+ "Playlist.Type": {
+ "type": "string",
+ "enum": [ "unknown", "video", "audio", "picture", "mixed" ]
+ },
+ "Playlist.Property.Name": {
+ "type": "string",
+ "enum": [ "type", "size" ]
+ },
+ "Playlist.Property.Value": {
+ "type": "object",
+ "properties": {
+ "type": { "$ref": "Playlist.Type" },
+ "size": { "type": "integer", "minimum": 0 }
+ }
+ },
+ "Playlist.Position": {
+ "type": "integer",
+ "minimum": 0,
+ "default": -1
+ },
+ "Playlist.Item": {
+ "type": [
+ { "type": "object", "properties": { "file": { "type": "string", "description": "Path to a file (not a directory) to be added to the playlist", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "directory": { "type": "string", "required": true }, "recursive": { "type": "boolean", "default": false }, "media": { "$ref": "Files.Media", "default": "files" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
+ { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Identification of a genre from the AudioLibrary" } }, "additionalProperties": false },
+ { "type": "object", "properties": { "recordingid": { "$ref": "Library.Id", "required": true, "description": "Identification of a PVR recording" } }, "additionalProperties": false }
+ ]
+ },
+ "Player.Id": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2,
+ "default": -1
+ },
+ "Player.Type": {
+ "type": "string",
+ "enum": [ "video", "audio", "picture" ]
+ },
+ "Player.Position.Percentage": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 100.0
+ },
+ "Player.Position.Time": {
+ "type": "object",
+ "description": "A position in duration.",
+ "additionalProperties": false,
+ "properties": {
+ "hours": { "type": "integer", "minimum": 0, "default": 0 },
+ "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
+ "seconds": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
+ "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999, "default": 0 }
+ }
+ },
+ "Player.Speed": {
+ "type": "object",
+ "required": true,
+ "properties": {
+ "speed": { "type": "integer" }
+ }
+ },
+ "Player.ViewMode": {
+ "type": "string",
+ "enum": [ "normal", "zoom", "stretch4x3", "widezoom", "stretch16x9", "original",
+ "stretch16x9nonlin", "zoom120width", "zoom110width" ]
+ },
+ "Player.CustomViewMode": {
+ "type": "object",
+ "required": true,
+ "properties": {
+ "zoom": { "type": [
+ { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
+ { "$ref": "Optional.Number", "minimum":0.5, "maximum": 2.0, "description": "Zoom where 1.0 means 100%", "required": true } ] },
+ "pixelratio": { "type": [
+ { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
+ { "$ref": "Optional.Number", "minimum":0.5, "maximum": 2.0, "description": "Pixel aspect ratio where 1.0 means square pixel", "required": true } ] },
+ "verticalshift": { "type": [
+ { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
+ { "$ref": "Optional.Number", "minimum": -2.0, "maximum": 2.0, "description": "Vertical shift 1.0 means shift to bottom", "required": true } ] },
+ "nonlinearstretch": { "type": [
+ { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
+ { "$ref": "Optional.Boolean", "description": "Flag to enable nonlinear stretch", "required": true } ] }
+ }
+ },
+ "Player.Repeat": {
+ "type": "string",
+ "enum": [ "off", "one", "all" ]
+ },
+ "Player.Audio.Stream": {
+ "type": "object",
+ "properties": {
+ "index": { "type": "integer", "minimum": 0, "required": true },
+ "name": { "type": "string", "required": true },
+ "language": { "type": "string", "required": true },
+ "codec": { "type": "string", "required": true },
+ "bitrate": { "type": "integer", "required": true },
+ "channels": { "type": "integer", "required": true },
+ "isdefault": { "type": "boolean", "required": true },
+ "isoriginal": { "type": "boolean", "required": true },
+ "isimpaired": { "type": "boolean", "required": true },
+ "samplerate": { "type": "integer", "required": true }
+ }
+ },
+ "Player.Video.Stream": {
+ "type": "object",
+ "properties": {
+ "index": { "type": "integer", "minimum": 0, "required": true },
+ "name": { "type": "string", "required": true },
+ "language": { "type": "string", "required": true },
+ "codec": { "type": "string", "required": true },
+ "width": { "type": "integer", "required": true },
+ "height": { "type": "integer", "required": true }
+ }
+ },
+ "Player.Subtitle": {
+ "type": "object",
+ "properties": {
+ "index": { "type": "integer", "minimum": 0, "required": true },
+ "name": { "type": "string", "required": true },
+ "language": { "type": "string", "required": true },
+ "isdefault": { "type": "boolean", "required": true },
+ "isforced": { "type": "boolean", "required": true },
+ "isimpaired": { "type": "boolean", "required": true }
+ }
+ },
+ "Player.Property.Name": {
+ "type": "string",
+ "enum": [ "type", "partymode", "speed", "time", "percentage",
+ "totaltime", "playlistid", "position", "repeat", "shuffled",
+ "canseek", "canchangespeed", "canmove", "canzoom", "canrotate",
+ "canshuffle", "canrepeat", "currentaudiostream", "audiostreams",
+ "subtitleenabled", "currentsubtitle", "subtitles", "live",
+ "currentvideostream", "videostreams", "cachepercentage" ]
+ },
+ "Player.Property.Value": {
+ "type": "object",
+ "properties": {
+ "type": { "$ref": "Player.Type" },
+ "partymode": { "type": "boolean" },
+ "speed": { "type": "integer" },
+ "time": { "$ref": "Global.Time" },
+ "percentage": { "$ref": "Player.Position.Percentage" },
+ "totaltime": { "$ref": "Global.Time" },
+ "playlistid": { "$ref": "Playlist.Id" },
+ "position": { "$ref": "Playlist.Position" },
+ "repeat": { "$ref": "Player.Repeat" },
+ "shuffled": { "type": "boolean" },
+ "canseek": { "type": "boolean" },
+ "canchangespeed": { "type": "boolean" },
+ "canmove": { "type": "boolean" },
+ "canzoom": { "type": "boolean" },
+ "canrotate": { "type": "boolean" },
+ "canshuffle": { "type": "boolean" },
+ "canrepeat": { "type": "boolean" },
+ "currentaudiostream": { "$ref": "Player.Audio.Stream" },
+ "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream" } },
+ "currentvideostream": { "$ref": "Player.Video.Stream" },
+ "videostreams": { "type": "array", "items": { "$ref": "Player.Video.Stream" } },
+ "subtitleenabled": { "type": "boolean" },
+ "currentsubtitle": { "$ref": "Player.Subtitle" },
+ "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } },
+ "live": { "type": "boolean" },
+ "cachepercentage": { "$ref": "Player.Position.Percentage" }
+ }
+ },
+ "Notifications.Item.Type": {
+ "type": "string",
+ "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ]
+ },
+ "Notifications.Item": {
+ "type": [
+ { "type": "object", "description": "An unknown item does not have any additional information.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true }
+ }
+ },
+ { "type": "object", "description": "An item known to the database has an identification.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "id": { "$ref": "Library.Id", "required": true }
+ }
+ },
+ { "type": "object", "description": "A movie item has a title and may have a release year.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "title": { "type": "string", "required": true },
+ "year": { "type": "integer" }
+ }
+ },
+ { "type": "object", "description": "A tv episode has a title and may have an episode number, season number and the title of the show it belongs to.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "title": { "type": "string", "required": true },
+ "episode": { "type": "integer" },
+ "season": { "type": "integer" },
+ "showtitle": { "type": "string" }
+ }
+ },
+ { "type": "object", "description": "A music video has a title and may have an album and an artist.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "title": { "type": "string", "required": true },
+ "album": { "type": "string" },
+ "artist": { "type": "string" }
+ }
+ },
+ { "type": "object", "description": "A song has a title and may have an album, an artist and a track number.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "title": { "type": "string", "required": true },
+ "album": { "type": "string" },
+ "artist": { "type": "string" },
+ "track": { "type": "integer" }
+ }
+ },
+ { "type": "object", "description": "A picture has a file path.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "file": { "type": "string", "required": true }
+ }
+ },
+ { "type": "object", "description": "A PVR channel is either a radio or tv channel and has a title.",
+ "properties": {
+ "type": { "$ref": "Notifications.Item.Type", "required": true },
+ "id": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string", "required": true },
+ "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
+ }
+ }
+ ]
+ },
+ "Player.Notifications.Player": {
+ "type": "object",
+ "properties": {
+ "playerid": { "$ref": "Player.Id", "required": true },
+ "speed": { "type": "integer" }
+ }
+ },
+ "Player.Notifications.Player.Seek": {
+ "extends": "Player.Notifications.Player",
+ "properties": {
+ "time": { "$ref": "Global.Time" },
+ "seekoffset": { "$ref": "Global.Time" }
+ }
+ },
+ "Player.Notifications.Data": {
+ "type": "object",
+ "properties": {
+ "item": { "$ref": "Notifications.Item", "required": true },
+ "player": { "$ref": "Player.Notifications.Player", "required": true }
+ }
+ },
+ "Item.Fields.Base": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": { "type": "string" }
+ },
+ "Item.Details.Base": {
+ "type": "object",
+ "properties": {
+ "label": { "type": "string", "required": true }
+ }
+ },
+ "Item.CustomProperties": {
+ "type": "object",
+ "additionalProperties": { "$ref": "Global.String.NotEmpty" }
+ },
+ "Media.Details.Base": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "fanart": { "type": "string" },
+ "thumbnail": { "type": "string" }
+ }
+ },
+ "Media.Artwork": {
+ "type": "object",
+ "properties": {
+ "thumb": { "$ref": "Global.String.NotEmpty" },
+ "poster": { "$ref": "Global.String.NotEmpty" },
+ "banner": { "$ref": "Global.String.NotEmpty" },
+ "fanart": { "$ref": "Global.String.NotEmpty" }
+ },
+ "additionalProperties": { "$ref": "Global.String.NotEmpty" }
+ },
+ "Media.Artwork.Set": {
+ "type": "object",
+ "properties": {
+ "thumb": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
+ "poster": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
+ "banner": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
+ "fanart": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" }
+ },
+ "additionalProperties": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ] }
+ },
+ "Video.Rating": {
+ "type": "object",
+ "properties": {
+ "rating": { "type": "number", "required": true },
+ "votes": { "type": "integer" },
+ "default": { "type": "boolean" }
+ }
+ },
+ "Video.Ratings": {
+ "type": "object",
+ "additionalProperties": { "$ref": "Video.Rating" }
+ },
+ "Video.Ratings.Set": {
+ "type": "object",
+ "additionalProperties": { "type": [ "null", { "$ref": "Video.Rating", "required": true } ] }
+ },
+ "Media.UniqueID": {
+ "type": "object",
+ "additionalProperties": { "$ref": "Global.String.NotEmpty" }
+ },
+ "Media.UniqueID.Set": {
+ "type": "object",
+ "additionalProperties": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ] }
+ },
+ "Library.Fields.Source": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string", "enum": [ "file", "paths" ] }
+ },
+ "Library.Details.Source": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "sourceid": { "$ref": "Library.Id", "required": true },
+ "file": { "type": "string", "description": "The url encoded multipath string combining all paths of the source ", "required": true },
+ "paths": { "$ref": "Array.String", "description": "The individual paths of the media source" }
+ }
+ },
+ "Library.Fields.Genre": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string", "enum": [ "title", "thumbnail", "sourceid" ] }
+ },
+ "Library.Details.Genre": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "genreid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" },
+ "thumbnail": { "type": "string" },
+ "sourceid": { "$ref": "Array.Integer", "description": "The ids of sources with songs of the genre" }
+ }
+ },
+ "Library.Fields.Tag": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string", "enum": [ "title" ] }
+ },
+ "Library.Details.Tag": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "tagid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" }
+ }
+ },
+ "Audio.Fields.Role": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string", "enum": [ "title" ] }
+ },
+ "Audio.Details.Role": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "roleid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" }
+ }
+ },
+ "Audio.Fields.Artist": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the (song)genreid/genre, roleid/role or sourceid fields will result in increased response times",
+ "enum": [ "instrument", "style", "mood", "born", "formed",
+ "description", "genre", "died", "disbanded",
+ "yearsactive", "musicbrainzartistid", "fanart",
+ "thumbnail", "compilationartist", "dateadded",
+ "roles", "songgenres", "isalbumartist",
+ "sortname", "type", "gender", "disambiguation", "art", "sourceid",
+ "datemodified", "datenew" ]
+ }
+ },
+ "Audio.Fields.Album": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the songgenres, artistid and/or sourceid fields will result in increased response times",
+ "enum": [ "title", "description", "artist", "genre",
+ "theme", "mood", "style", "type", "albumlabel",
+ "rating", "votes", "userrating","year", "musicbrainzalbumid",
+ "musicbrainzalbumartistid", "fanart", "thumbnail",
+ "playcount", "artistid", "displayartist",
+ "compilation", "releasetype", "dateadded",
+ "sortartist", "musicbrainzreleasegroupid", "songgenres", "art",
+ "lastplayed", "sourceid","isboxset", "totaldiscs",
+ "releasedate", "originaldate", "albumstatus", "datemodified", "datenew",
+ "albumduration"]
+ }
+ },
+ "Audio.Fields.Song": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the genreid, artistid, albumartistid and/or sourceid fields will result in increased response times",
+ "enum": [ "title", "artist", "albumartist", "genre", "year",
+ "rating", "album", "track", "duration", "comment",
+ "lyrics", "musicbrainztrackid", "musicbrainzartistid",
+ "musicbrainzalbumid", "musicbrainzalbumartistid",
+ "playcount", "fanart", "thumbnail", "file", "albumid",
+ "lastplayed", "disc", "genreid", "artistid", "displayartist",
+ "albumartistid", "albumreleasetype", "dateadded",
+ "votes", "userrating", "mood", "contributors",
+ "displaycomposer", "displayconductor", "displayorchestra", "displaylyricist",
+ "sortartist", "art", "sourceid", "disctitle", "releasedate", "originaldate",
+ "bpm", "samplerate", "bitrate", "channels", "datemodified", "datenew" ]
+ }
+ },
+ "Audio.Album.ReleaseType": {
+ "type": "string",
+ "enum": [ "album", "single" ],
+ "default": "album"
+ },
+ "Audio.Contributors": {
+ "type": "array",
+ "items": { "type": "object",
+ "description": "The artist and the role they contribute to a song",
+ "properties": {
+ "name": { "type": "string", "required": true },
+ "role": { "type": "string", "required": true },
+ "roleid": { "$ref": "Library.Id", "required": true },
+ "artistid": { "$ref": "Library.Id", "required": true }
+ },
+ "additionalProperties": false
+ }
+ },
+ "Audio.Artist.Roles": {
+ "type": "array",
+ "items": { "type": "object",
+ "description": "The various roles contributed by an artist to one or more songs",
+ "properties": {
+ "roleid": { "$ref": "Library.Id", "required": true },
+ "role": { "type": "string", "required": true }
+ },
+ "additionalProperties": false
+ }
+ },
+ "Audio.Details.Genres": {
+ "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "genreid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" }
+ }
+ }
+ },
+ "Audio.Details.Base": {
+ "extends": "Media.Details.Base",
+ "properties": {
+ "genre": { "$ref": "Array.String" },
+ "dateadded": { "type": "string" },
+ "art": { "$ref": "Media.Artwork" }
+ }
+ },
+ "Audio.Details.Media": {
+ "extends": "Audio.Details.Base",
+ "properties": {
+ "title": { "type": "string" },
+ "artist": { "$ref": "Array.String" },
+ "year": { "type": "integer" },
+ "rating": { "type": "number" },
+ "musicbrainzalbumartistid": { "$ref": "Array.String" },
+ "artistid": { "$ref": "Array.Integer" },
+ "displayartist": { "type" : "string" },
+ "votes": { "type": "integer" },
+ "userrating": { "type": "integer" },
+ "sortartist": { "type" : "string" },
+ "releasedate": { "type" : "string" },
+ "originaldate": { "type" : "string" }
+ }
+ },
+ "Audio.Details.Artist": {
+ "extends": "Audio.Details.Base",
+ "properties": {
+ "artistid": { "$ref": "Library.Id", "required": true },
+ "artist": { "type": "string", "required": true },
+ "instrument": { "$ref": "Array.String" },
+ "style": { "$ref": "Array.String" },
+ "mood": { "$ref": "Array.String" },
+ "born": { "type": "string" },
+ "formed": { "type": "string" },
+ "description": { "type": "string" },
+ "died": { "type": "string" },
+ "disbanded": { "type": "string" },
+ "yearsactive": { "$ref": "Array.String" },
+ "compilationartist": { "type": "boolean" },
+ "musicbrainzartistid": { "$ref": "Array.String" },
+ "roles": {"$ref": "Audio.Artist.Roles"},
+ "songgenres": {"$ref": "Audio.Details.Genres"},
+ "isalbumartist": { "type": "boolean" },
+ "sortname": { "type": "string" },
+ "type": { "type": "string" },
+ "gender": { "type": "string" },
+ "disambiguation": { "type": "string" },
+ "sourceid": { "$ref": "Array.Integer" }
+ }
+ },
+ "Audio.Details.Album": {
+ "extends": "Audio.Details.Media",
+ "properties": {
+ "albumid": { "$ref": "Library.Id", "required": true },
+ "description": { "type": "string" },
+ "theme": { "$ref": "Array.String" },
+ "mood": { "$ref": "Array.String" },
+ "style": { "$ref": "Array.String" },
+ "type": { "type": "string" },
+ "albumlabel": { "type": "string" },
+ "playcount": { "type": "integer" },
+ "compilation": { "type": "boolean" },
+ "releasetype": { "$ref": "Audio.Album.ReleaseType" },
+ "musicbrainzreleasegroupid": { "type": "string" },
+ "musicbrainzalbumid": { "type": "string" },
+ "songgenres": {"$ref": "Audio.Details.Genres"},
+ "lastplayed": { "type": "string" },
+ "sourceid": { "$ref": "Array.Integer" },
+ "isboxset" : { "type": "boolean" },
+ "totaldiscs": { "type": "integer" },
+ "albumstatus": { "type": "string" },
+ "albumduration": { "type": "integer" }
+ }
+ },
+ "Audio.Details.Song": {
+ "extends": "Audio.Details.Media",
+ "properties": {
+ "songid": { "$ref": "Library.Id", "required": true },
+ "file": { "type": "string" },
+ "albumartist": { "$ref": "Array.String" },
+ "album": { "type": "string" },
+ "track": { "type": "integer" },
+ "duration": { "type": "integer" },
+ "comment": { "type": "string" },
+ "lyrics": { "type": "string" },
+ "playcount": { "type": "integer" },
+ "musicbrainztrackid": { "type": "string" },
+ "musicbrainzartistid": { "$ref": "Array.String" },
+ "albumid": { "$ref": "Library.Id" },
+ "lastplayed": { "type": "string" },
+ "disc": { "type": "integer" },
+ "albumartistid": { "$ref": "Array.Integer" },
+ "albumreleasetype": { "$ref": "Audio.Album.ReleaseType" },
+ "mood": { "type": "string"},
+ "contributors": { "$ref": "Audio.Contributors" },
+ "displaycomposer": { "type": "string"},
+ "displayconductor": { "type": "string"},
+ "displayorchestra": { "type": "string"},
+ "displaylyricist": { "type": "string"},
+ "genreid": { "$ref": "Array.Integer"},
+ "sourceid": { "$ref": "Array.Integer" },
+ "disctitle": { "type": "string" },
+ "bpm": { "type": "Integer" },
+ "samplerate": { "type": "Integer" },
+ "bitrate": { "type": "Integer"},
+ "channels": { "type": "Integer"}
+ }
+ },
+ "Audio.Property.Name": {
+ "type": "string",
+ "enum": [ "missingartistid", "librarylastupdated", "librarylastcleaned", "artistlinksupdated",
+ "songslastadded", "albumslastadded", "artistslastadded", "genreslastadded",
+ "songsmodified", "albumsmodified", "artistsmodified"]
+ },
+ "Audio.Property.Value": {
+ "type": "object",
+ "properties": {
+ "missingartistid": { "$ref": "Library.Id" },
+ "librarylastupdated": { "type": "string" },
+ "librarylastcleaned": { "type": "string" },
+ "artistlinksupdated": { "type": "string" },
+ "songslastadded": { "type": "string" },
+ "albumslastadded": { "type": "string" },
+ "artistslastadded": { "type": "string" },
+ "genreslastadded": { "type": "string" },
+ "songsmodified": { "type": "string" },
+ "albumsmodified": { "type": "string" },
+ "artistsmodified": { "type": "string" }
+ }
+ },
+ "Video.Fields.Movie": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the cast, ratings, showlink, streamdetails, uniqueid and/or tag field will result in increased response times",
+ "enum": [ "title", "genre", "year", "rating", "director", "trailer",
+ "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
+ "playcount", "writer", "studio", "mpaa", "cast", "country",
+ "imdbnumber", "runtime", "set", "showlink", "streamdetails",
+ "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
+ "resume", "setid", "dateadded", "tag", "art", "userrating",
+ "ratings", "premiered", "uniqueid" ]
+ }
+ },
+ "Video.Fields.MovieSet": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "playcount", "fanart", "thumbnail", "art", "plot" ]
+ }
+ },
+ "Video.Fields.TVShow": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the cast, ratings, uniqueid and/or tag field will result in increased response times",
+ "enum": [ "title", "genre", "year", "rating", "plot",
+ "studio", "mpaa", "cast", "playcount", "episode",
+ "imdbnumber", "premiered", "votes", "lastplayed",
+ "fanart", "thumbnail", "file", "originaltitle",
+ "sorttitle", "episodeguide", "season", "watchedepisodes",
+ "dateadded", "tag", "art", "userrating", "ratings",
+ "runtime", "uniqueid" ]
+ }
+ },
+ "Video.Fields.Season": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
+ "watchedepisodes", "art", "userrating", "title" ]
+ }
+ },
+ "Video.Fields.Episode": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the cast, ratings, streamdetails, uniqueid and/or tag field will result in increased response times",
+ "enum": [ "title", "plot", "votes", "rating", "writer",
+ "firstaired", "playcount", "runtime", "director",
+ "productioncode", "season", "episode", "originaltitle",
+ "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
+ "thumbnail", "file", "resume", "tvshowid", "dateadded",
+ "uniqueid", "art", "specialsortseason", "specialsortepisode", "userrating",
+ "seasonid", "ratings" ]
+ }
+ },
+ "Video.Fields.MusicVideo": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "description": "Requesting the streamdetails, uniqueid and/or tag field will result in increased response times",
+ "enum": [ "title", "playcount", "runtime", "director",
+ "studio", "year", "plot", "album", "artist",
+ "genre", "track", "streamdetails", "lastplayed",
+ "fanart", "thumbnail", "file", "resume", "dateadded",
+ "tag", "art", "rating", "userrating", "premiered", "uniqueid" ]
+ }
+ },
+ "Video.Cast": {
+ "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "name": { "type": "string", "required": true },
+ "role": { "type": "string", "required": true },
+ "order": { "type": "integer", "required": true },
+ "thumbnail": { "type": "string" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "Video.Streams": {
+ "type": "object",
+ "properties": {
+ "audio": { "type": "array", "minItems": 1,
+ "items": { "type": "object",
+ "properties": {
+ "codec": { "type": "string" },
+ "language": { "type": "string" },
+ "channels": { "type": "integer" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "video": { "type": "array", "minItems": 1,
+ "items": { "type": "object",
+ "properties": {
+ "codec": { "type": "string" },
+ "aspect": { "type": "number" },
+ "width": { "type": "integer" },
+ "height": { "type": "integer" },
+ "duration": { "type": "integer" },
+ "hdrtype": { "type": "string"}
+ },
+ "additionalProperties": false
+ }
+ },
+ "subtitle": { "type": "array", "minItems": 1,
+ "items": { "type": "object",
+ "properties": {
+ "language": { "type": "string" }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Video.Resume": {
+ "type": "object",
+ "properties": {
+ "position": { "type": "number", "minimum": 0.0 },
+ "total": { "type": "number", "minimum": 0.0 }
+ },
+ "additionalProperties": false
+ },
+ "Video.Details.Base": {
+ "extends": "Media.Details.Base",
+ "properties": {
+ "playcount": { "type": "integer" },
+ "art": { "$ref": "Media.Artwork" }
+ }
+ },
+ "Video.Details.Media": {
+ "extends": "Video.Details.Base",
+ "properties": {
+ "title": { "type": "string" }
+ }
+ },
+ "Video.Details.Item": {
+ "extends": "Video.Details.Media",
+ "properties": {
+ "file": { "type": "string" },
+ "plot": { "type": "string" },
+ "lastplayed": { "type": "string" },
+ "dateadded": { "type": "string" }
+ }
+ },
+ "Video.Details.File": {
+ "extends": "Video.Details.Item",
+ "properties": {
+ "runtime": { "type": "integer", "description": "Runtime in seconds" },
+ "director": { "$ref": "Array.String" },
+ "streamdetails": { "$ref": "Video.Streams" },
+ "resume": { "$ref": "Video.Resume" }
+ }
+ },
+ "Video.Details.Movie": {
+ "extends": "Video.Details.File",
+ "properties": {
+ "movieid": { "$ref": "Library.Id", "required": true },
+ "genre": { "$ref": "Array.String" },
+ "year": { "type": "integer" },
+ "rating": { "type": "number" },
+ "trailer": { "type": "string" },
+ "tagline": { "type": "string" },
+ "plotoutline": { "type": "string" },
+ "originaltitle": { "type": "string" },
+ "sorttitle": { "type": "string" },
+ "writer": { "$ref": "Array.String" },
+ "studio": { "$ref": "Array.String" },
+ "mpaa": { "type": "string" },
+ "cast": { "$ref": "Video.Cast" },
+ "country": { "$ref": "Array.String" },
+ "imdbnumber": { "type": "string" },
+ "set": { "type": "string" },
+ "showlink": { "$ref": "Array.String" },
+ "top250": { "type": "integer" },
+ "votes": { "type": "string" },
+ "setid": { "$ref": "Library.Id" },
+ "tag": { "$ref": "Array.String" },
+ "userrating": { "type": "integer" },
+ "ratings": { "type": "Video.Ratings" },
+ "premiered": { "type": "string" },
+ "uniqueid": { "$ref": "Media.UniqueID" }
+ }
+ },
+ "Video.Details.MovieSet": {
+ "extends": "Video.Details.Media",
+ "properties": {
+ "setid": { "$ref": "Library.Id", "required": true },
+ "plot": { "type": "string" }
+ }
+ },
+ "Video.Details.MovieSet.Extended": {
+ "extends": "Video.Details.MovieSet",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "movies": { "type": "array",
+ "items": { "$ref": "Video.Details.Movie" }
+ }
+ }
+ },
+ "Video.Details.TVShow": {
+ "extends": "Video.Details.Item",
+ "properties": {
+ "tvshowid": { "$ref": "Library.Id", "required": true },
+ "genre": { "$ref": "Array.String" },
+ "year": { "type": "integer" },
+ "rating": { "type": "number" },
+ "originaltitle": { "type": "string" },
+ "sorttitle": { "type": "string" },
+ "studio": { "$ref": "Array.String" },
+ "mpaa": { "type": "string" },
+ "cast": { "$ref": "Video.Cast" },
+ "episode": { "type": "integer" },
+ "watchedepisodes": { "type": "integer" },
+ "imdbnumber": { "type": "string" },
+ "premiered": { "type": "string" },
+ "votes": { "type": "string" },
+ "episodeguide": { "type": "string" },
+ "season": { "type": "integer" },
+ "tag": { "$ref": "Array.String" },
+ "userrating": { "type": "integer" },
+ "ratings": { "type": "Video.Ratings" },
+ "runtime": { "type": "integer", "description": "Runtime in seconds" },
+ "status": { "type": "string", "description": "Returns 'returning series', 'in production', 'planned', 'cancelled' or 'ended'" },
+ "uniqueid": { "$ref": "Media.UniqueID" }
+ }
+ },
+ "Video.Details.Season": {
+ "extends": "Video.Details.Base",
+ "properties": {
+ "seasonid": { "$ref": "Library.Id", "required": true },
+ "season": { "type": "integer", "required": true },
+ "showtitle": { "type": "string" },
+ "episode": { "type": "integer" },
+ "watchedepisodes": { "type": "integer" },
+ "tvshowid": { "$ref": "Library.Id" },
+ "userrating": { "type": "integer" },
+ "title": { "type": "string" }
+ }
+ },
+ "Video.Details.Episode": {
+ "extends": "Video.Details.File",
+ "properties": {
+ "episodeid": { "$ref": "Library.Id", "required": true },
+ "votes": { "type": "string" },
+ "rating": { "type": "number" },
+ "writer": { "$ref": "Array.String" },
+ "firstaired": { "type": "string" },
+ "productioncode": { "type": "string" },
+ "season": { "type": "integer" },
+ "episode": { "type": "integer" },
+ "uniqueid": { "$ref": "Media.UniqueID" },
+ "originaltitle": { "type": "string" },
+ "showtitle": { "type": "string" },
+ "cast": { "$ref": "Video.Cast" },
+ "tvshowid": { "$ref": "Library.Id" },
+ "specialsortseason": { "type": "integer" },
+ "specialsortepisode": { "type": "integer" },
+ "userrating": { "type": "integer" },
+ "seasonid": { "$ref": "Library.Id" },
+ "ratings": { "type": "Video.Ratings" }
+ }
+ },
+ "Video.Details.MusicVideo": {
+ "extends": "Video.Details.File",
+ "properties": {
+ "musicvideoid": { "$ref": "Library.Id", "required": true },
+ "studio": { "$ref": "Array.String" },
+ "year": { "type": "integer" },
+ "album": { "type": "string" },
+ "artist": { "$ref": "Array.String" },
+ "genre": { "$ref": "Array.String" },
+ "track": { "type": "integer" },
+ "tag": { "$ref": "Array.String" },
+ "rating": { "type": "number" },
+ "userrating": { "type": "integer" },
+ "premiered": { "type": "string" },
+ "uniqueid": { "$ref": "Media.UniqueID" }
+ }
+ },
+ "PVR.Property.Name": {
+ "type": "string",
+ "enum": [ "available", "recording", "scanning" ]
+ },
+ "PVR.Property.Value": {
+ "type": "object",
+ "properties": {
+ "available": { "type": "boolean" },
+ "recording": { "type": "boolean" },
+ "scanning": { "type": "boolean" }
+ }
+ },
+ "PVR.ChannelGroup.Id": {
+ "type": [
+ { "$ref": "Library.Id", "required": true },
+ { "type": "string", "enum": [ "alltv", "allradio" ], "required": true }
+ ]
+ },
+ "PVR.Fields.Broadcast": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "plot", "plotoutline", "starttime",
+ "endtime", "runtime", "progress", "progresspercentage",
+ "genre", "episodename", "episodenum", "episodepart",
+ "firstaired", "hastimer", "isactive", "parentalrating",
+ "wasactive", "thumbnail", "rating", "originaltitle", "cast",
+ "director", "writer", "year", "imdbnumber", "hastimerrule",
+ "hasrecording", "recording", "isseries", "isplayable", "clientid",
+ "hasreminder", "seasonnum" ]
+ }
+ },
+ "PVR.Details.Broadcast": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "broadcastid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" },
+ "plot": { "type": "string" },
+ "plotoutline": { "type": "string" },
+ "starttime": { "type": "string" },
+ "endtime": { "type": "string" },
+ "runtime": { "type": "integer" },
+ "progress": { "type": "integer" },
+ "progresspercentage": { "type": "number" },
+ "genre": { "type": "string" },
+ "episodename": { "type": "string" },
+ "episodenum": { "type": "integer" },
+ "episodepart": { "type": "integer" },
+ "firstaired": { "type": "string" },
+ "hastimer": { "type": "boolean" },
+ "isactive": { "type": "boolean" },
+ "parentalrating": { "type": "integer" },
+ "wasactive": { "type": "boolean" },
+ "thumbnail": { "type": "string" },
+ "rating": { "type": "integer" },
+ "originaltitle": { "type": "string" },
+ "cast": { "type": "string" },
+ "director": { "type": "string" },
+ "writer": { "type": "string" },
+ "year": { "type": "integer" },
+ "imdbnumber": { "type": "integer" },
+ "hastimerrule": { "type": "boolean" },
+ "hasrecording": { "type": "boolean" },
+ "recording": { "type": "string" },
+ "isseries": { "type": "boolean" },
+ "isplayable": { "type": "boolean", "description": "Deprecated - Use GetBroadcastIsPlayable instead" },
+ "clientid": { "$ref": "Library.Id" },
+ "hasreminder": { "type": "boolean" },
+ "seasonnum": { "type": "integer" }
+ }
+ },
+ "PVR.Fields.Channel": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed",
+ "broadcastnow", "broadcastnext", "uniqueid", "icon", "channelnumber",
+ "subchannelnumber", "isrecording", "hasarchive", "clientid" ]
+ }
+ },
+ "PVR.Details.Channel": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "channelid": { "$ref": "Library.Id", "required": true },
+ "channel": { "type": "string" },
+ "channeltype": { "$ref": "PVR.Channel.Type" },
+ "hidden": { "type": "boolean" },
+ "locked": { "type": "boolean" },
+ "thumbnail": { "type": "string" },
+ "lastplayed": { "type": "string" },
+ "broadcastnow": { "$ref": "PVR.Details.Broadcast" },
+ "broadcastnext": { "$ref": "PVR.Details.Broadcast" },
+ "uniqueid": { "type": "integer", "required": true },
+ "icon": { "type": "string" },
+ "channelnumber": { "type": "integer" },
+ "subchannelnumber": { "type": "integer" },
+ "isrecording": { "type": "boolean" },
+ "hasarchive": { "type": "boolean" },
+ "clientid": { "$ref": "Library.Id" }
+ }
+ },
+ "PVR.Details.ChannelGroup": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "channelgroupid": { "$ref": "Library.Id", "required": true },
+ "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
+ }
+ },
+ "PVR.Details.ChannelGroup.Extended": {
+ "extends": "PVR.Details.ChannelGroup",
+ "properties": {
+ "limits": { "$ref": "List.LimitsReturned", "required": true },
+ "channels": { "type": "array",
+ "items": { "$ref": "PVR.Details.Channel" }
+ }
+ }
+ },
+ "PVR.Fields.Client": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "addonid", "supportstv", "supportsradio", "supportsepg",
+ "supportsrecordings", "supportstimers", "supportschannelgroups",
+ "supportschannelscan" ]
+ }
+ },
+ "PVR.Details.Client": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "clientid": { "$ref": "Library.Id", "required": true },
+ "addonid": { "type": "string" },
+ "supportstv": { "type": "boolean" },
+ "supportsradio": { "type": "boolean" },
+ "supportsepg": { "type": "boolean" },
+ "supportsrecordings": { "type": "boolean" },
+ "supportstimers": { "type": "boolean" },
+ "supportschannelgroups": { "type": "boolean" },
+ "supportschannelscan": { "type": "boolean" }
+ }
+ },
+ "PVR.TimerState": {
+ "type": "string",
+ "enum": [ "unknown", "new", "scheduled", "recording", "completed",
+ "aborted", "cancelled", "conflict_ok", "conflict_notok",
+ "error", "disabled" ]
+ },
+ "PVR.Fields.Timer": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "summary", "channelid", "isradio", "istimerrule", "ismanual",
+ "starttime", "endtime", "runtime", "lifetime", "firstday",
+ "weekdays", "priority", "startmargin", "endmargin", "state",
+ "file", "directory", "preventduplicateepisodes", "startanytime",
+ "endanytime", "epgsearchstring", "fulltextepgsearch", "recordinggroup",
+ "maxrecordings", "epguid", "isreadonly", "isreminder", "clientid", "broadcastid" ]
+ }
+ },
+ "PVR.Details.Timer": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "timerid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" },
+ "summary": { "type": "string" },
+ "channelid": { "$ref": "Library.Id" },
+ "isradio": { "type": "boolean" },
+ "istimerrule": { "type": "boolean" },
+ "ismanual": { "type": "boolean" },
+ "starttime": { "type": "string" },
+ "endtime": { "type": "string" },
+ "runtime": { "type": "integer" },
+ "lifetime": { "type": "integer" },
+ "firstday": { "type": "string" },
+ "weekdays": { "type": "array",
+ "items": { "$ref": "Global.Weekday" },
+ "uniqueItems": true
+ },
+ "priority": { "type": "integer" },
+ "startmargin": { "type": "integer" },
+ "endmargin": { "type": "integer" },
+ "state": { "$ref": "PVR.TimerState" },
+ "file": { "type": "string" },
+ "directory": { "type": "string" },
+ "preventduplicateepisodes": { "type": "integer" },
+ "startanytime": { "type": "boolean" },
+ "endanytime": { "type": "boolean" },
+ "epgsearchstring": { "type": "string" },
+ "fulltextepgsearch": { "type": "boolean" },
+ "recordinggroup": { "type": "integer" },
+ "maxrecordings": { "type": "integer" },
+ "epguid": { "type": "integer" },
+ "isreadonly": { "type": "boolean" },
+ "isreminder": { "type": "boolean" },
+ "clientid": { "$ref": "Library.Id" },
+ "broadcastid": { "$ref": "Library.Id" }
+ }
+ },
+ "PVR.Fields.Recording": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "plot", "plotoutline", "genre", "playcount",
+ "resume", "channel", "starttime","endtime", "runtime",
+ "lifetime", "icon", "art", "streamurl", "file",
+ "directory", "radio", "isdeleted", "epgeventid", "channeluid",
+ "season", "episode", "showtitle", "clientid" ]
+ }
+ },
+ "PVR.Details.Recording": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "recordingid": { "$ref": "Library.Id", "required": true },
+ "title": { "type": "string" },
+ "plot": { "type": "string" },
+ "plotoutline": { "type": "string" },
+ "genre": { "type": "string" },
+ "playcount": { "type": "integer" },
+ "resume": { "$ref": "Video.Resume" },
+ "channel": { "type": "string" },
+ "starttime": { "type": "string" },
+ "endtime": { "type": "string" },
+ "runtime": { "type": "integer" },
+ "lifetime": { "type": "integer" },
+ "icon": { "type": "string" },
+ "art": { "$ref": "Media.Artwork" },
+ "streamurl": { "type": "string" },
+ "file": { "type": "string" },
+ "directory": { "type": "string" },
+ "radio": { "type": "boolean" },
+ "isdeleted": { "type": "boolean" },
+ "epgeventid": { "type": "integer" },
+ "channeluid": { "type": "integer" },
+ "season": { "type": "integer" },
+ "episode": { "type": "integer" },
+ "showtitle": { "type": "string" },
+ "clientid": { "$ref": "Library.Id" }
+ }
+ },
+ "Textures.Details.Size": {
+ "type": "object",
+ "properties": {
+ "size": { "type": "integer", "description": "Size of the texture (1 == largest)" },
+ "width": { "type": "integer", "description": "Width of texture" },
+ "height": { "type": "integer", "description": "Height of texture" },
+ "usecount": { "type": "integer", "description": "Number of uses" },
+ "lastused": { "type": "string", "description": "Date of last use" }
+ }
+ },
+ "Textures.Fields.Texture": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "url", "cachedurl", "lasthashcheck", "imagehash", "sizes" ]
+ }
+ },
+ "Textures.Details.Texture": {
+ "type": "object",
+ "properties": {
+ "textureid": { "$ref": "Library.Id", "required": "true" },
+ "url": { "type": "string", "description": "Original source URL" },
+ "cachedurl": { "type": "string", "description": "Cached URL on disk" },
+ "lasthashcheck": { "type": "string", "description": "Last time source was checked for changes" },
+ "imagehash": { "type": "string", "description": "Hash of image" },
+ "sizes": { "type": "array", "items": { "$ref": "Textures.Details.Size" } }
+ }
+ },
+ "Profiles.Password": {
+ "type": "object",
+ "properties": {
+ "value": { "type": "string", "required": true, "description": "Password" },
+ "encryption": { "type": "string", "description": "Password Encryption", "default": "md5", "enum": [ "none", "md5" ] }
+ }
+ },
+ "Profiles.Fields.Profile": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string", "enum": [ "thumbnail", "lockmode" ] }
+ },
+ "Profiles.Details.Profile": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "thumbnail": { "type": "string" },
+ "lockmode": { "type": "integer" }
+ }
+ },
+ "List.Filter.Rule": {
+ "type": "object",
+ "properties": {
+ "operator": { "$ref": "List.Filter.Operators", "required": true },
+ "value": {
+ "type": [
+ { "type": "string", "required": true },
+ { "type": "array", "items": { "type": "string" }, "required": true }
+ ], "required": true
+ }
+ }
+ },
+ "List.Filter.Rule.Movies": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Movies", "required": true }
+ }
+ },
+ "List.Filter.Rule.TVShows": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.TVShows", "required": true }
+ }
+ },
+ "List.Filter.Rule.Episodes": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Episodes", "required": true }
+ }
+ },
+ "List.Filter.Rule.MusicVideos": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.MusicVideos", "required": true }
+ }
+ },
+ "List.Filter.Rule.Artists": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Artists", "required": true }
+ }
+ },
+ "List.Filter.Rule.Albums": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Albums", "required": true }
+ }
+ },
+ "List.Filter.Rule.Songs": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Songs", "required": true }
+ }
+ },
+ "List.Filter.Rule.Textures": {
+ "extends": "List.Filter.Rule",
+ "properties": {
+ "field": { "$ref": "List.Filter.Fields.Textures", "required": true }
+ }
+ },
+ "List.Filter.Movies": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Movies" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Movies" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Movies" }
+ ]
+ },
+ "List.Filter.TVShows": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.TVShows" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.TVShows" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.TVShows" }
+ ]
+ },
+ "List.Filter.Episodes": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Episodes" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Episodes" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Episodes" }
+ ]
+ },
+ "List.Filter.MusicVideos": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.MusicVideos" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.MusicVideos" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.MusicVideos" }
+ ]
+ },
+ "List.Filter.Artists": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Artists" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Artists" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Artists" }
+ ]
+ },
+ "List.Filter.Albums": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Albums" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Albums" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Albums" }
+ ]
+ },
+ "List.Filter.Songs": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Songs" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Songs" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Songs" }
+ ]
+ },
+ "List.Filter.Textures": {
+ "type": [
+ { "type": "object",
+ "properties": {
+ "and": { "type": "array",
+ "items": { "$ref": "List.Filter.Textures" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "type": "object",
+ "properties": {
+ "or": { "type": "array",
+ "items": { "$ref": "List.Filter.Textures" },
+ "minItems": 1, "required": true
+ }
+ }
+ },
+ { "$ref": "List.Filter.Rule.Textures" }
+ ]
+ },
+ "List.Item.Base": {
+ "extends": [ "Video.Details.File", "Audio.Details.Media" ],
+ "properties": {
+ "id": { "$ref": "Library.Id" },
+ "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel", "recording" ] },
+ "albumartist": { "$ref": "Array.String" },
+ "album": { "type": "string" },
+ "track": { "type": "integer" },
+ "duration": { "type": "integer" },
+ "comment": { "type": "string" },
+ "lyrics": { "type": "string" },
+ "musicbrainztrackid": { "type": "string" },
+ "musicbrainzartistid": { "$ref": "Array.String" },
+ "trailer": { "type": "string" },
+ "tagline": { "type": "string" },
+ "plotoutline": { "type": "string" },
+ "originaltitle": { "type": "string" },
+ "writer": { "$ref": "Array.String" },
+ "studio": { "$ref": "Array.String" },
+ "mpaa": { "type": "string" },
+ "cast": { "$ref": "Video.Cast" },
+ "country": { "$ref": "Array.String" },
+ "imdbnumber": { "type": "string" },
+ "premiered": { "type": "string" },
+ "productioncode": { "type": "string" },
+ "set": { "type": "string" },
+ "showlink": { "$ref": "Array.String" },
+ "top250": { "type": "integer" },
+ "votes": { "type": "string" },
+ "firstaired": { "type": "string" },
+ "season": { "type": "integer" },
+ "episode": { "type": "integer" },
+ "showtitle": { "type": "string" },
+ "albumid": { "$ref": "Library.Id" },
+ "setid": { "$ref": "Library.Id" },
+ "tvshowid": { "$ref": "Library.Id" },
+ "watchedepisodes": { "type": "integer" },
+ "disc": { "type": "integer" },
+ "tag": { "$ref": "Array.String" },
+ "albumartistid": { "$ref": "Array.Integer" },
+ "uniqueid": { "$ref": "Media.UniqueID" },
+ "episodeguide": { "type": "string" },
+ "sorttitle": { "type": "string" },
+ "description": { "type": "string" },
+ "theme": { "$ref": "Array.String" },
+ "mood": { "$ref": "Array.String" },
+ "style": { "$ref": "Array.String" },
+ "albumlabel": { "type": "string" },
+ "specialsortseason": { "type": "integer" },
+ "specialsortepisode": { "type": "integer" },
+ "compilation": { "type": "boolean" },
+ "releasetype": { "$ref": "Audio.Album.ReleaseType" },
+ "albumreleasetype": { "$ref": "Audio.Album.ReleaseType" },
+ "contributors": { "$ref": "Audio.Contributors" },
+ "displaycomposer": { "type": "string"},
+ "displayconductor": { "type": "string"},
+ "displayorchestra": { "type": "string"},
+ "displaylyricist": { "type": "string"},
+ "mediapath": { "type": "string", "description": "Media source path that identifies the item"},
+ "dynpath": { "type": "string", "description": "An experimental property for debug purposes, often same as mediapath but when different gives the actual file playing that should also be in file property"},
+ "isboxset": { "type": "boolean" },
+ "totaldiscs": { "type": "integer" },
+ "disctitle": { "type": "string" },
+ "releasedate": { "type": "string" },
+ "originaldate": { "type": "string" },
+ "bpm": { "type": "integer" },
+ "bitrate": { "type": "integer" },
+ "samplerate": { "type": "integer" },
+ "channels": { "type": "integer"},
+ "albumstatus": { "type": "string" },
+ "customproperties": { "$ref": "Item.CustomProperties" }
+ }
+ },
+ "List.Fields.All": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
+ "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
+ "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
+ "playcount", "fanart", "director", "trailer", "tagline", "plot",
+ "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
+ "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
+ "runtime", "set", "showlink", "streamdetails", "top250", "votes",
+ "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
+ "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
+ "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
+ "description", "theme", "mood", "style", "albumlabel", "sorttitle",
+ "episodeguide", "uniqueid", "dateadded", "channel", "channeltype", "hidden",
+ "locked", "channelnumber", "subchannelnumber", "starttime", "endtime",
+ "specialsortseason", "specialsortepisode", "compilation", "releasetype",
+ "albumreleasetype", "contributors", "displaycomposer", "displayconductor",
+ "displayorchestra", "displaylyricist", "userrating", "votes", "sortartist",
+ "musicbrainzreleasegroupid", "mediapath", "dynpath", "isboxset", "totaldiscs",
+ "disctitle", "releasedate", "originaldate", "bpm", "bitrate", "samplerate",
+ "channels", "albumstatus", "datemodified", "datenew", "customproperties",
+ "albumduration"]
+ }
+ },
+ "List.Item.All": {
+ "extends": "List.Item.Base",
+ "properties": {
+ "channel": { "type": "string" },
+ "channeltype": { "$ref": "PVR.Channel.Type" },
+ "hidden": { "type": "boolean" },
+ "locked": { "type": "boolean" },
+ "channelnumber": { "type": "integer" },
+ "subchannelnumber": { "type": "integer" },
+ "starttime": { "type": "string" },
+ "endtime": { "type": "string" }
+ }
+ },
+ "List.Fields.Files": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
+ "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
+ "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
+ "playcount", "fanart", "director", "trailer", "tagline", "plot",
+ "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
+ "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
+ "runtime", "set", "showlink", "streamdetails", "top250", "votes",
+ "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
+ "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
+ "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
+ "description", "theme", "mood", "style", "albumlabel", "sorttitle",
+ "episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype",
+ "specialsortseason", "specialsortepisode", "sortartist", "musicbrainzreleasegroupid",
+ "isboxset", "totaldiscs", "disctitle", "releasedate", "originaldate", "bpm",
+ "bitrate", "samplerate", "channels", "datemodified", "datenew", "customproperties",
+ "albumduration", "userrating"]
+ }
+ },
+ "List.Item.File": {
+ "extends": "List.Item.Base",
+ "properties": {
+ "file": { "type": "string", "required": true },
+ "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
+ "size": { "type": "integer", "description": "Size of the file in bytes" },
+ "lastmodified": { "type": "string" },
+ "mimetype": { "type": "string" }
+ }
+ },
+ "List.Items.Sources": {
+ "type": "array",
+ "items": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "file": { "type": "string", "required": true }
+ }
+ }
+ },
+ "Addon.Content": {
+ "type": "string",
+ "enum": [ "unknown", "video", "audio", "image", "executable" ],
+ "default": "unknown"
+ },
+ "Addon.Fields": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "name", "version", "summary", "description", "path", "author", "thumbnail", "disclaimer", "fanart",
+ "dependencies", "broken", "extrainfo", "rating", "enabled", "installed", "deprecated" ]
+ }
+ },
+ "Addon.Details": {
+ "extends": "Item.Details.Base",
+ "properties": {
+ "addonid": { "type": "string", "required": true },
+ "type": { "$ref": "Addon.Types", "required": true },
+ "name": { "type": "string" },
+ "version": { "type": "string" },
+ "summary": { "type": "string" },
+ "description": { "type": "string" },
+ "path": { "type": "string" },
+ "author": { "type": "string" },
+ "thumbnail": { "type": "string" },
+ "disclaimer": { "type": "string" },
+ "fanart": { "type": "string" },
+ "dependencies": { "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "addonid": { "type": "string", "required": true },
+ "version": { "type": "string", "required": true },
+ "optional": { "type": "boolean", "required": true }
+ }
+ }
+ },
+ "broken": { "type": [ "boolean", "string" ] },
+ "extrainfo": { "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "key": { "type": "string", "required": true },
+ "value": { "type": "string", "required": true }
+ }
+ }
+ },
+ "rating": { "type": "integer" },
+ "enabled": { "type": "boolean" },
+ "installed": { "type": "boolean" },
+ "deprecated": { "type": [ "boolean", "string" ] }
+ }
+ },
+ "GUI.Stereoscopy.Mode": {
+ "type": "object",
+ "properties": {
+ "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "anaglyph_yellow_blue", "monoscopic" ] },
+ "label": { "type": "string", "required": true }
+ }
+ },
+ "GUI.Property.Name": {
+ "type": "string",
+ "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen", "stereoscopicmode" ]
+ },
+ "GUI.Property.Value": {
+ "type": "object",
+ "properties": {
+ "currentwindow": { "type": "object",
+ "properties": {
+ "id": { "type": "integer", "required": true },
+ "label": { "type": "string", "required": true }
+ }
+ },
+ "currentcontrol": { "type": "object",
+ "properties": {
+ "label": { "type": "string", "required": true }
+ }
+ },
+ "skin": { "type": "object",
+ "properties": {
+ "id": { "type": "string", "required": true, "minLength": 1 },
+ "name": { "type": "string" }
+ }
+ },
+ "fullscreen": { "type": "boolean" },
+ "stereoscopicmode": { "$ref": "GUI.Stereoscopy.Mode" }
+ }
+ },
+ "System.Property.Name": {
+ "type": "string",
+ "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
+ },
+ "System.Property.Value": {
+ "type": "object",
+ "properties": {
+ "canshutdown": { "type": "boolean" },
+ "cansuspend": { "type": "boolean" },
+ "canhibernate": { "type": "boolean" },
+ "canreboot": { "type": "boolean" }
+ }
+ },
+ "Application.Property.Name": {
+ "type": "string",
+ "enum": [ "volume", "muted", "name", "version", "volume", "sorttokens", "language" ]
+ },
+ "Application.Property.Value": {
+ "type": "object",
+ "properties": {
+ "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
+ "muted": { "type": "boolean" },
+ "name": { "type": "string", "minLength": 1 },
+ "version": { "type": "object",
+ "properties": {
+ "major": { "type": "integer", "minimum": 0, "required": true },
+ "minor": { "type": "integer", "minimum": 0, "required": true },
+ "revision": { "type": [ "string", "integer" ] },
+ "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true },
+ "tagversion": { "type": "string" }
+ }
+ },
+ "sorttokens": { "$ref": "Array.String", "description": "Articles ignored during sorting when ignorearticle is enabled." },
+ "language": { "type": "string", "minLength": 1, "description": "Current language code and region e.g. en_GB" }
+ }
+ },
+ "Favourite.Fields.Favourite": {
+ "extends": "Item.Fields.Base",
+ "items": { "type": "string",
+ "enum": [ "window", "windowparameter", "thumbnail", "path" ]
+ }
+ },
+ "Favourite.Type": {
+ "type": "string",
+ "enum": [ "media", "window", "script", "androidapp", "unknown" ]
+ },
+ "Favourite.Details.Favourite": {
+ "type": "object",
+ "properties": {
+ "title": { "type": "string", "required": true },
+ "type": { "$ref": "Favourite.Type", "required": true },
+ "path": { "type": "string" },
+ "window": { "type": "string" },
+ "windowparameter": { "type": "string" },
+ "thumbnail": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Type": {
+ "type": "string",
+ "enum": [
+ "boolean", "integer", "number", "string", "action", "list",
+ "path", "addon", "date", "time"
+ ]
+ },
+ "Setting.Level": {
+ "type": "string",
+ "enum": [ "basic", "standard", "advanced", "expert" ]
+ },
+ "Setting.Value": {
+ "type": [
+ { "type": "boolean", "required": true },
+ { "type": "integer", "required": true },
+ { "type": "number", "required": true },
+ { "type": "string", "required": true }
+ ]
+ },
+ "Setting.Value.List": {
+ "type": "array",
+ "items": { "$ref": "Setting.Value" }
+ },
+ "Setting.Value.Extended": {
+ "type": [
+ { "type": "boolean", "required": true },
+ { "type": "integer", "required": true },
+ { "type": "number", "required": true },
+ { "type": "string", "required": true },
+ { "$ref": "Setting.Value.List", "required": true }
+ ]
+ },
+ "Setting.Details.ControlBase": {
+ "type": "object",
+ "properties": {
+ "type": { "type": "string", "required": true },
+ "format": { "type": "string", "required": true },
+ "delayed": { "type": "boolean", "required": true }
+ }
+ },
+ "Setting.Details.ControlCheckmark": {
+ "extends": "Setting.Details.ControlBase",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "toggle" ] },
+ "format": { "type": "string", "required": true, "enum": [ "boolean" ] }
+ }
+ },
+ "Setting.Details.ControlSpinner": {
+ "extends": "Setting.Details.ControlBase",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "spinner" ] },
+ "formatlabel": { "type": "string" },
+ "minimumlabel": { "type": "string" }
+ }
+ },
+ "Setting.Details.ControlHeading": {
+ "extends": "Setting.Details.ControlBase",
+ "properties": {
+ "heading": { "type": "string" }
+ }
+ },
+ "Setting.Details.ControlEdit": {
+ "extends": "Setting.Details.ControlHeading",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "edit" ] },
+ "hidden": { "type": "boolean", "required": true },
+ "verifynewvalue": { "type": "boolean", "required": true }
+ }
+ },
+ "Setting.Details.ControlButton": {
+ "extends": "Setting.Details.ControlHeading",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "button" ] }
+ }
+ },
+ "Setting.Details.ControlList": {
+ "extends": "Setting.Details.ControlHeading",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "list" ] },
+ "multiselect": { "type": "boolean", "required": true }
+ }
+ },
+ "Setting.Details.ControlSlider": {
+ "extends": "Setting.Details.ControlHeading",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "slider" ] },
+ "formatlabel": { "type": "string", "required": true },
+ "popup": { "type": "boolean", "required": true }
+ }
+ },
+ "Setting.Details.ControlRange": {
+ "extends": "Setting.Details.ControlBase",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "range" ] },
+ "formatlabel": { "type": "string", "required": true },
+ "formatvalue": { "type": "string", "required": true }
+ }
+ },
+ "Setting.Details.ControlLabel": {
+ "extends": "Setting.Details.ControlBase",
+ "properties": {
+ "type": { "type": "string", "required": true, "enum": [ "label" ] },
+ "format": { "type": "string", "required": true, "enum": [ "string" ] }
+ }
+ },
+ "Setting.Details.Control": {
+ "type": [
+ { "$ref": "Setting.Details.ControlCheckmark", "required": true },
+ { "$ref": "Setting.Details.ControlSpinner", "required": true },
+ { "$ref": "Setting.Details.ControlEdit", "required": true },
+ { "$ref": "Setting.Details.ControlButton", "required": true },
+ { "$ref": "Setting.Details.ControlList", "required": true },
+ { "$ref": "Setting.Details.ControlSlider", "required": true },
+ { "$ref": "Setting.Details.ControlRange", "required": true },
+ { "$ref": "Setting.Details.ControlLabel", "required": true }
+ ]
+ },
+ "Setting.Details.Base": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "required": true, "minLength": 1 },
+ "label": { "type": "string", "required": true },
+ "help": { "type": "string" }
+ }
+ },
+ "Setting.Details.SettingBase": {
+ "extends": "Setting.Details.Base",
+ "properties": {
+ "type": { "$ref": "Setting.Type", "required": true },
+ "enabled": { "type": "boolean", "required": true },
+ "level": { "$ref": "Setting.Level", "required": true },
+ "parent": { "type": "string" },
+ "control": { "$ref": "Setting.Details.Control" }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingBool": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "value": { "type": "boolean", "required": true },
+ "default": { "type": "boolean", "required": true }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingInt": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "value": { "type": "integer", "required": true },
+ "default": { "type": "integer", "required": true },
+ "minimum": { "type": "integer" },
+ "step": { "type": "integer" },
+ "maximum": { "type": "integer" },
+ "options": { "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "label": { "type": "string", "required": true },
+ "value": { "type": "integer", "required": true }
+ }
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingNumber": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "value": { "type": "number", "required": true },
+ "default": { "type": "number", "required": true },
+ "minimum": { "type": "number", "required": true },
+ "step": { "type": "number", "required": true },
+ "maximum": { "type": "number", "required": true }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingString": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "value": { "type": "string", "required": true },
+ "default": { "type": "string", "required": true },
+ "allowempty": { "type": "boolean", "required": true },
+ "options": { "type": "array",
+ "items": { "type": "object",
+ "properties": {
+ "label": { "type": "string", "required": true },
+ "value": { "type": "string", "required": true }
+ }
+ }
+ }
+ }
+ },
+ "Setting.Details.SettingAction": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "data": { "type": "string", "required": true }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingList": {
+ "extends": "Setting.Details.SettingBase",
+ "properties": {
+ "value": { "$ref": "Setting.Value.List", "required": true },
+ "default": { "$ref": "Setting.Value.List", "required": true },
+ "elementtype": { "$ref": "Setting.Type", "required": true },
+ "definition": { "$ref": "Setting.Details.Setting", "required": true },
+ "delimiter": { "type": "string", "required": true },
+ "minimumItems": { "type": "integer" },
+ "maximumItems": { "type": "integer" }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingPath": {
+ "extends": "Setting.Details.SettingString",
+ "properties": {
+ "writable": { "type": "boolean", "required": true },
+ "sources": { "type": "array", "items": { "type": "string" } }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingAddon": {
+ "extends": "Setting.Details.SettingString",
+ "properties": {
+ "addontype": { "$ref": "Addon.Types", "required": true }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingDate": {
+ "extends": "Setting.Details.SettingString",
+ "additionalProperties": false
+ },
+ "Setting.Details.SettingTime": {
+ "extends": "Setting.Details.SettingString",
+ "additionalProperties": false
+ },
+ "Setting.Details.Setting": {
+ "type": [
+ { "$ref": "Setting.Details.SettingBool", "required": true },
+ { "$ref": "Setting.Details.SettingInt", "required": true },
+ { "$ref": "Setting.Details.SettingNumber", "required": true },
+ { "$ref": "Setting.Details.SettingString", "required": true },
+ { "$ref": "Setting.Details.SettingAction", "required": true },
+ { "$ref": "Setting.Details.SettingList", "required": true },
+ { "$ref": "Setting.Details.SettingPath", "required": true },
+ { "$ref": "Setting.Details.SettingAddon", "required": true },
+ { "$ref": "Setting.Details.SettingDate", "required": true },
+ { "$ref": "Setting.Details.SettingTime", "required": true }
+ ]
+ },
+ "Setting.Details.Group": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "required": true, "minLength": 1 },
+ "settings": {
+ "type": "array",
+ "items": { "$ref": "Setting.Details.Setting" },
+ "minItems": 1,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.Category": {
+ "extends": "Setting.Details.Base",
+ "properties": {
+ "groups": {
+ "type": "array",
+ "items": { "$ref": "Setting.Details.Group" },
+ "minItems": 1,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "Setting.Details.Section": {
+ "extends": "Setting.Details.Base",
+ "properties": {
+ "categories": {
+ "type": "array",
+ "items": { "$ref": "Setting.Details.Category" },
+ "minItems": 1,
+ "uniqueItems": true
+ }
+ },
+ "additionalProperties": false
+ }
+}
diff --git a/xbmc/interfaces/json-rpc/schema/version.txt b/xbmc/interfaces/json-rpc/schema/version.txt
new file mode 100644
index 0000000..40bfd87
--- /dev/null
+++ b/xbmc/interfaces/json-rpc/schema/version.txt
@@ -0,0 +1 @@
+JSONRPC_VERSION 13.0.0