User:Ronie: Difference between revisions

From Official Kodi Wiki
Jump to navigation Jump to search
No edit summary
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{mininav|[[Development]]|[[JSON-RPC API]]}}
[[File:ronie.jpg]]
Version 12 is the current development version of Kodi's JSON-RPC API and will be published with the release of v19 (Matrix).<br />
This document has been updated to version 11.8.1. Recent changes are announced on the [https://forum.kodi.tv/showthread.php?tid=352779 forum]
 
It comes with support for [http://en.wikipedia.org/wiki/WebSocket WebSockets] as an alternative transport for third party clients. Using WebSockets will allow webinterfaces (which are currently restricted to the HTTP transport only) to get access to a bidirectional transport with Kodi's JSON-RPC API and can therefore also profit from additional features like notifications.
 
 
{{TOC right}}
== JSON-RPC 2.0 compatibility ==
{| class="prettytable" style="margin-right: 0;"
!style="padding-left: 5px; width: 7em; text-align: left;"|Version
!style="padding-left: 10px; padding-right: 10px;"|Method calls
!style="padding-left: 10px; padding-right: 10px;"|Notifications<br />(server-side)
!style="padding-left: 10px; padding-right: 10px;"|Notifications<br />(client-side)
!style="padding-left: 10px; padding-right: 10px;"|Parameters<br />by-name
!style="padding-left: 10px; padding-right: 10px;"|Parameters<br />by-position
!style="padding-left: 10px; padding-right: 10px;"|Batch requests
|-
|style="padding-left: 5px;"|Version 6
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
|}
 
== Documentation (JSON Schema) ==
=== Supported features of JSON Schema ===
<div style="float:left; margin-right:2em">
{| class="prettytable" style="margin-right: 0;"
!style="width: 10em; text-align: left;"|Schema
!style="padding-left: 10px; padding-right: 10px;"|IETF Draft 03
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1 type]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.2 properties]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.3 patternProperties]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.4 additionalProperties]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.5 items]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.6 additionalItems]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7 required]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.8 dependencies]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.9 minimum]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.10 maximum]
|{{yes}}
|-
|}
</div>
 
<div style="float:left; margin-right:2em">
{| class="prettytable" style="margin-right: 0;"
!style="width: 10em; text-align: left;"|Schema
 
!style="padding-left: 10px; padding-right: 10px;"|IETF Draft 03
 
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.11 exclusiveMinimum]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.12 exclusiveMaximum]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.13 minItems]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.14 maxItems]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.15 uniqueItems]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.16 pattern]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.17 minLength]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.18 maxLength]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.19 enum]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.20 default]
|{{yes}}
|-
|}
</div>
 
<div style="float:left;">
{| class="prettytable" style="margin-right: 0;"
!style="width: 10em; text-align: left;"|Schema
 
!style="padding-left: 10px; padding-right: 10px;"|IETF Draft 03
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.21 title]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22 description]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23 format]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.24 divisibleBy]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.25 disallow]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.26 extends]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.27 id]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.28 $ref]
|{{yes}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.29 $schema]
|{{no}}
|-
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-6 Hyper Schema]
|{{no}}
|-
|}
</div>
<div style="clear:left;"></div>
 
== Error message ==
If Kodi detects a bad or missing parameter in a JSON-RPC request it returns an error object. The JSON schema description of that error object is
{|
|
 
{
  <span style="color: red;">"type"<span>: "object",
  "properties": {
    "code": { "type": "integer", "required": true },
    "message": { "type": "string", "required": true },
    "data": { "type": "object",
      "properties": {
        "method": { "type": "string", "required": true },
        "stack": { "type": "object", "id": "Error.Stack",
          "properties": {
            "name": { "type": "string", "required": true },
            "type": { "type": "string", "required": true },
            "message": { "type": "string", "required": true },
            "property": { "$ref": "Error.Stack" }
          }
        }
      }
    }
  }
}
 
|}
 
== Namespaces ==
The Kodi JSON-RPC API is split up into namespaces, which contain methods that can be called. These namespaces are:
{|
|
<pre>
Addons          List, enable and execute addons
Application      Application information and control
AudioLibrary    Audio Library information
Favourites      Favourites GetFavourites and AddFavourite
Files            Shares information & filesystem listings
GUI              Window properties and activation
Input            Allows limited navigation within Kodi
JSONRPC          A variety of standard JSONRPC calls
Player          Manages all available players
Playlist        Playlist modification
Profiles        Support for Profiles operations to xbmc.
PVR              Live TV control
Settings        Allows manipulation of Kodi settings.
System          System controls and information
Textures        Supplies GetTextures and RemoveTexture. Textures are images.
VideoLibrary    Video Library information
XBMC            Dumping ground for very Kodi specific operations
</pre>
|}
 
== Methods ==
=== Addons ===
==== Addons.ExecuteAddon ====
Executes the given addon with the given parameters (if possible)<br />
'''Permissions:'''
* ExecuteAddon
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' addonid<br />
# [''mixed: object|array|string'' params = ""]<br />
# [''boolean'' wait = False]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== Addons.GetAddonDetails ====
Gets the details of a specific addon<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' addonid<br />
# [''[[#Addon.Fields|Addon.Fields]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''[[#Addon.Details|Addon.Details]]'' addon<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetAddons ====
Gets all available addons<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Addon.Types|Addon.Types]]'' type]<br />
# [''[[#Addon.Content|Addon.Content]]'' content] (Content provided by the addon. Only considered for plugins and scripts.)<br />
# [''mixed: boolean|string'' enabled = all]<br />
# [''[[#Addon.Fields|Addon.Fields]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''mixed: boolean|string'' installed = True]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Addon.Details|Addon.Details]]'' addons]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetAddonEnabled ====
Enables/Disables a specific addon<br />
'''Permissions:'''
* ManageAddon
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' addonid<br />
# ''[[#Global.Toggle|Global.Toggle]]'' enabled<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Application ===
==== Application.GetProperties ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Application.Property.Value|Application.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Quit ====
Quit application<br />
'''Permissions:'''
* ControlPower
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Quit application",
  "transport": "Response",
  "permission": "ControlPower",
  "params": [],
  "returns": "string"
}
}}
==== Application.SetMute ====
Toggle mute/unmute<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Global.Toggle|Global.Toggle]]'' mute<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''boolean (Mute state)''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetVolume ====
Set the current volume<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''mixed: integer|[[#Global.IncrementDecrement|Global.IncrementDecrement]]'' volume<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''integer''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== AudioLibrary ===
==== AudioLibrary.Clean ====
Cleans the audio library from non-existent items<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''boolean'' showdialogs = True] (Whether or not to show the progress bar or any other GUI dialog)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== AudioLibrary.Export ====
Exports all items from the audio library<br />
'''Permissions:'''
* WriteFile
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''mixed: object|object'' options]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetAlbumDetails ====
Retrieve details about a specific album<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' albumid<br />
# [''[[#Audio.Fields.Album|Audio.Fields.Album]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Audio.Details.Album|Audio.Details.Album]]'' albumdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetAlbums ====
Retrieve all albums from specified artist (and role) or that has songs of the specified genre<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Album|Audio.Fields.Album]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|object|object|[[#List.Filter.Albums|List.Filter.Albums]]'' filter]<br />
# [''boolean'' includesingles = False]<br />
# [''boolean'' allroles = False] (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.)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetArtistDetails ====
Retrieve details about a specific artist<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' artistid<br />
# [''[[#Audio.Fields.Artist|Audio.Fields.Artist]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Audio.Details.Artist|Audio.Details.Artist]]'' artistdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetArtists ====
Retrieve all artists. For backward compatibility by default this implicity does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Optional.Boolean|Optional.Boolean]]'' albumartistsonly] (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)<br />
# [''[[#Audio.Fields.Artist|Audio.Fields.Artist]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|object|object|object|object|object|object|object|object|object|[[#List.Filter.Artists|List.Filter.Artists]]'' filter]<br />
# [''boolean'' allroles = False] (Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value.)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Artist|Audio.Details.Artist]]'' artists]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Retrieve all artists. For backward compatibility by default this implicity 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.GetGenres ====
Retrieve all genres<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Library.Fields.Genre|Library.Fields.Genre]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Library.Details.Genre|Library.Details.Genre]]'' genres<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetProperties ====
Retrieves the values of the music library properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Audio.Property.Value|Audio.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecentlyAddedAlbums ====
Retrieve recently added albums<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Album|Audio.Fields.Album]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Retrieve recently added songs<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#List.Amount|List.Amount]]'' albumlimit] (The amount of recently added albums from which to return the songs)<br />
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Song|Audio.Details.Song]]'' songs]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Retrieve recently played albums<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Album|Audio.Fields.Album]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Retrieve recently played songs<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Song|Audio.Details.Song]]'' songs]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRoles ====
Retrieve all contributor roles<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Role|Audio.Fields.Role]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Audio.Details.Role|Audio.Details.Role]]'' roles<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSongDetails ====
Retrieve details about a specific song<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' songid<br />
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Audio.Details.Song|Audio.Details.Song]]'' songdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSongs ====
Retrieve all songs from specified album, artist or genre<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|object|object|object|object|[[#List.Filter.Songs|List.Filter.Songs]]'' filter]<br />
# [''boolean'' includesingles = True] (Only songs from albums are returned when false, but overidden when singlesonly parameter is true)<br />
# [''boolean'' allroles = False] (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.)<br />
# [''boolean'' singlesonly = False] (Only singles are returned when true, and overides includesingles parameter)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Song|Audio.Details.Song]]'' songs]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 overidden 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 overides includesingles parameter"
    }
  ],
  "returns": {
    "type": "object",
    "properties": {
      "limits": {
        "$ref": "List.LimitsReturned",
        "required": true
      },
      "songs": {
        "type": "array",
        "items": {
          "$ref": "Audio.Details.Song"
        }
      }
    }
  }
}
}}
==== AudioLibrary.GetSources ====
Get all music sources, including unique ID<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Library.Fields.Source|Library.Fields.Source]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Library.Details.Source|Library.Details.Source]]'' sources<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Scan ====
Scans the audio sources for new library items<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''string'' directory = ""]<br />
# [''boolean'' showdialogs = True] (Whether or not to show the progress bar or any other GUI dialog)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetAlbumDetails ====
Update the given album with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' albumid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''mixed: [[#Array.String|Array.String]]'' artist = None]<br />
# [''[[#Optional.String|Optional.String]]'' description]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' theme = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' mood = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' style = None]<br />
# [''[[#Optional.String|Optional.String]]'' type]<br />
# [''[[#Optional.String|Optional.String]]'' albumlabel]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' votes]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzalbumid]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzreleasegroupid]<br />
# [''[[#Optional.String|Optional.String]]'' sortartist]<br />
# [''[[#Optional.String|Optional.String]]'' displayartist]<br />
# [''mixed: [[#Array.String|Array.String]]'' musicbrainzalbumartistid = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.Boolean|Optional.Boolean]]'' isboxset]<br />
# [''[[#Optional.String|Optional.String]]'' releasedate]<br />
# [''[[#Optional.String|Optional.String]]'' originaldate]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetArtistDetails ====
Update the given artist with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' artistid<br />
# [''[[#Optional.String|Optional.String]]'' artist]<br />
# [''mixed: [[#Array.String|Array.String]]'' instrument = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' style = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' mood = None]<br />
# [''[[#Optional.String|Optional.String]]'' born]<br />
# [''[[#Optional.String|Optional.String]]'' formed]<br />
# [''[[#Optional.String|Optional.String]]'' description]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.String|Optional.String]]'' died]<br />
# [''[[#Optional.String|Optional.String]]'' disbanded]<br />
# [''mixed: [[#Array.String|Array.String]]'' yearsactive = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid]<br />
# [''[[#Optional.String|Optional.String]]'' sortname]<br />
# [''[[#Optional.String|Optional.String]]'' type]<br />
# [''[[#Optional.String|Optional.String]]'' gender]<br />
# [''[[#Optional.String|Optional.String]]'' disambiguation]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetSongDetails ====
Update the given song with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' songid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''mixed: [[#Array.String|Array.String]]'' artist = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' track]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' disc]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' duration]<br />
# [''[[#Optional.String|Optional.String]]'' comment]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainztrackid]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' votes]<br />
# [''[[#Optional.String|Optional.String]]'' displayartist]<br />
# [''[[#Optional.String|Optional.String]]'' sortartist]<br />
# [''[[#Optional.String|Optional.String]]'' mood]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.String|Optional.String]]'' disctitle]<br />
# [''[[#Optional.String|Optional.String]]'' releasedate]<br />
# [''[[#Optional.String|Optional.String]]'' originaldate]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' bpm]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Favourites ===
==== Favourites.AddFavourite ====
Add a favourite with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' title<br />
# ''[[#Favourite.Type|Favourite.Type]]'' type<br />
# [''[[#Optional.String|Optional.String]]'' path] (Required for media, script and androidapp favourites types)<br />
# [''[[#Optional.String|Optional.String]]'' window] (Required for window favourite type)<br />
# [''[[#Optional.String|Optional.String]]'' windowparameter]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== Favourites.GetFavourites ====
Retrieve all favourites<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''mixed: [[#Favourite.Type|Favourite.Type]]'' type = None]<br />
# [''[[#Favourite.Fields.Favourite|Favourite.Fields.Favourite]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Favourite.Details.Favourite|Favourite.Details.Favourite]]'' favourites]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
        }
      }
    }
  }
}
}}
=== Files ===
==== Files.Download ====
Downloads the given file<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' path<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''any''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Get the directories and files in the given directory<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' directory<br />
# [''[[#Files.Media|Files.Media]]'' media = files]<br />
# [''[[#List.Fields.Files|List.Fields.Files]]'' properties]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''[[#List.Limits|List.Limits]]'' limits] (Limits are applied after getting the directory content thus retrieval is not faster when they are applied.)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#List.Item.File|List.Item.File]]'' files<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Get details for a specific file<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' file (Full path to the file)<br />
# [''[[#Files.Media|Files.Media]]'' media = files]<br />
# [''[[#List.Fields.Files|List.Fields.Files]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.Item.File|List.Item.File]]'' filedetails<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSources ====
Get the sources of the media windows<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Files.Media|Files.Media]]'' media<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''[[#List.Items.Sources|List.Items.Sources]]'' sources<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Provides a way to download a given file (e.g. providing an URL to the real file location)<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' path<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''string'' protocol<br />
# ''any'' details (Transport specific details on how/from where to download the given file)<br />
# ''string'' mode (Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol)<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetFileDetails ====
Update the given specific file with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' file (Full path to the file)<br />
# ''[[#Files.Media|Files.Media]]'' media (File type to update correct database. Currently only "video" is supported.)<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed] (Setting a valid lastplayed without a playcount will force playcount to 1.)<br />
# [''mixed: [[#Video.Resume|Video.Resume]]'' resume = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== GUI ===
==== GUI.ActivateWindow ====
Activates the given window<br />
'''Permissions:'''
* ControlGUI
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#GUI.Window|GUI.Window]]'' window<br />
# [''array'' parameters]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetProperties ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#GUI.Property.Value|GUI.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetStereoscopicModes ====
Returns the supported stereoscopic modes of the GUI<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''array[[#GUI.Stereoscopy.Mode|GUI.Stereoscopy.Mode]]'' stereoscopicmodes]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
        }
      }
    }
  }
}
}}
==== GUI.SetFullscreen ====
Toggle fullscreen/GUI<br />
'''Permissions:'''
* ControlGUI
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Global.Toggle|Global.Toggle]]'' fullscreen<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''boolean (Fullscreen state)''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Sets the stereoscopic mode of the GUI to the given mode<br />
'''Permissions:'''
* ControlGUI
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' mode<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ShowNotification ====
Shows a GUI notification<br />
'''Permissions:'''
* ControlGUI
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' title<br />
# ''string'' message<br />
# [''mixed: string|string'' image = ""]<br />
# [''integer'' displaytime = 5000] (The time in milliseconds the notification will be visible)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Input ===
==== Input.Back ====
Goes back in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Goes back in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.ButtonEvent ====
Send a button press event<br />
'''Permissions:'''
* Navigate
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' button (Button name)<br />
# ''string'' keymap (Keymap name (KB, XG, R1, or R2))<br />
# ''integer'' holdtime = 0 (Number of milliseconds to simulate button hold.)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ContextMenu ====
Shows the context menu<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Shows the context menu",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.Down ====
Navigate down in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Navigate down in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.ExecuteAction ====
Execute a specific action<br />
'''Permissions:'''
* Navigate
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Input.Action|Input.Action]]'' action<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Execute a specific action",
  "transport": "Response",
  "permission": "Navigate",
  "params": [
    {
      "name": "action",
      "$ref": "Input.Action",
      "required": true
    }
  ],
  "returns": "string"
}
}}
==== Input.Home ====
Goes to home window in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Goes to home window in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.Info ====
Shows the information dialog<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Shows the information dialog",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.Left ====
Navigate left in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Navigate left in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.Right ====
Navigate right in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Navigate right in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.Select ====
Select current item in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Select current item in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.SendText ====
Send a generic (unicode) text<br />
'''Permissions:'''
* Navigate
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' text (Unicode text)<br />
# [''boolean'' done = True] (Whether this is the whole input or not (closes an open input dialog if true).)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ShowCodec ====
Show codec information of the playing item<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Show codec information of the playing item",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.ShowOSD ====
Show the on-screen display for the current player<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Show the on-screen display for the current player",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
==== Input.ShowPlayerProcessInfo ====
Show player process information of the playing item, like video decoder, pixel format, pvr signal strength, ...<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== Input.Up ====
Navigate up in GUI<br />
'''Permissions:'''
* Navigate
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Navigate up in GUI",
  "transport": "Response",
  "permission": "Navigate",
  "params": [],
  "returns": "string"
}
}}
=== JSONRPC ===
==== JSONRPC.GetConfiguration ====
Get client-specific configurations<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Configuration|Configuration]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Get client-specific configurations",
  "transport": "Announcing",
  "permission": "ReadData",
  "params": [],
  "returns": {
    "$ref": "Configuration"
  }
}
}}
==== JSONRPC.Introspect ====
Enumerates all actions and descriptions<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''boolean'' getdescriptions = True]<br />
# [''boolean'' getmetadata = False]<br />
# [''boolean'' filterbytransport = True]<br />
# [''object'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.NotifyAll ====
Notify all other connected clients<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender<br />
# ''string'' message<br />
# [''any'' data = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''any''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== JSONRPC.Permission ====
Retrieve the clients permissions<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''boolean'' ReadData<br />
# ''boolean'' ControlPlayback<br />
# ''boolean'' ControlNotify<br />
# ''boolean'' ControlPower<br />
# ''boolean'' UpdateData<br />
# ''boolean'' RemoveData<br />
# ''boolean'' Navigate<br />
# ''boolean'' WriteFile<br />
# ''boolean'' ControlSystem<br />
# ''boolean'' ControlGUI<br />
# ''boolean'' ManageAddon<br />
# ''boolean'' ExecuteAddon<br />
# ''boolean'' ControlPVR<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Ping responder<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Ping responder",
  "transport": "Response",
  "permission": "ReadData",
  "params": [],
  "returns": "string"
}
}}
==== JSONRPC.SetConfiguration ====
Change the client-specific configuration<br />
'''Permissions:'''
* ControlNotify
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''object'' notifications]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Configuration|Configuration]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Version ====
Retrieve the JSON-RPC protocol version.<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''object'' version<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
          }
        }
      }
    }
  }
}
}}
=== PVR ===
==== PVR.AddTimer ====
Adds a timer to record the given show one times or a timer rule to record all showings of the given show<br />
'''Permissions:'''
* ControlPVR
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' broadcastid (the broadcast id of the item to record)<br />
# [''boolean'' timerrule = False] (controls whether to create a timer rule or a onetime timer)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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",
  "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"
    }
  ],
  "returns": "string"
}
}}
==== PVR.DeleteTimer ====
Deletes a onetime timer or a timer rule<br />
'''Permissions:'''
* ControlPVR
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' timerid (the id of the onetime timer or timer rule to delete)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetBroadcastDetails ====
Retrieves the details of a specific broadcast<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' broadcastid<br />
# [''[[#PVR.Fields.Broadcast|PVR.Fields.Broadcast]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcastdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetBroadcasts ====
Retrieves the program of a specific channel<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' channelid<br />
# [''[[#PVR.Fields.Broadcast|PVR.Fields.Broadcast]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcasts<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetChannelDetails ====
Retrieves the details of a specific channel<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' channelid<br />
# [''[[#PVR.Fields.Channel|PVR.Fields.Channel]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#PVR.Details.Channel|PVR.Details.Channel]]'' channeldetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetChannelGroupDetails ====
Retrieves the details of a specific channel group<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#PVR.ChannelGroup.Id|PVR.ChannelGroup.Id]]'' channelgroupid<br />
# [''object'' channels]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#PVR.Details.ChannelGroup.Extended|PVR.Details.ChannelGroup.Extended]]'' channelgroupdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetChannelGroups ====
Retrieves the channel groups for the specified type<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#PVR.Channel.Type|PVR.Channel.Type]]'' channeltype<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.ChannelGroup|PVR.Details.ChannelGroup]]'' channelgroups<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetChannels ====
Retrieves the channel list<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#PVR.ChannelGroup.Id|PVR.ChannelGroup.Id]]'' channelgroupid<br />
# [''[[#PVR.Fields.Channel|PVR.Fields.Channel]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Channel|PVR.Details.Channel]]'' channels<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  ],
  "returns": {
    "type": "object",
    "properties": {
      "limits": {
        "$ref": "List.LimitsReturned",
        "required": true
      },
      "channels": {
        "type": "array",
        "required": true,
        "items": {
          "$ref": "PVR.Details.Channel"
        }
      }
    }
  }
}
}}
==== PVR.GetProperties ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#PVR.Property.Value|PVR.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecordingDetails ====
Retrieves the details of a specific recording<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' recordingid<br />
# [''[[#PVR.Fields.Recording|PVR.Fields.Recording]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#PVR.Details.Recording|PVR.Details.Recording]]'' recordingdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecordings ====
Retrieves the recordings<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#PVR.Fields.Recording|PVR.Fields.Recording]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Recording|PVR.Details.Recording]]'' recordings<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Retrieves the recordings",
  "transport": "Response",
  "permission": "ReadData",
  "params": [
    {
      "name": "properties",
      "$ref": "PVR.Fields.Recording"
    },
    {
      "name": "limits",
      "$ref": "List.Limits"
    }
  ],
  "returns": {
    "type": "object",
    "properties": {
      "limits": {
        "$ref": "List.LimitsReturned",
        "required": true
      },
      "recordings": {
        "type": "array",
        "required": true,
        "items": {
          "$ref": "PVR.Details.Recording"
        }
      }
    }
  }
}
}}
==== PVR.GetTimerDetails ====
Retrieves the details of a specific timer<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' timerid<br />
# [''[[#PVR.Fields.Timer|PVR.Fields.Timer]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#PVR.Details.Timer|PVR.Details.Timer]]'' timerdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetTimers ====
Retrieves the timers<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#PVR.Fields.Timer|PVR.Fields.Timer]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Timer|PVR.Details.Timer]]'' timers<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Retrieves the timers",
  "transport": "Response",
  "permission": "ReadData",
  "params": [
    {
      "name": "properties",
      "$ref": "PVR.Fields.Timer"
    },
    {
      "name": "limits",
      "$ref": "List.Limits"
    }
  ],
  "returns": {
    "type": "object",
    "properties": {
      "limits": {
        "$ref": "List.LimitsReturned",
        "required": true
      },
      "timers": {
        "type": "array",
        "required": true,
        "items": {
          "$ref": "PVR.Details.Timer"
        }
      }
    }
  }
}
}}
==== PVR.Record ====
Toggle recording of a channel<br />
'''Permissions:'''
* ControlPVR
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Global.Toggle|Global.Toggle]]'' record = toggle]<br />
# [''mixed: string|[[#Library.Id|Library.Id]]'' channel = current]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Starts a channel scan<br />
'''Permissions:'''
* ControlPVR
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Starts a channel scan",
  "transport": "Response",
  "permission": "ControlPVR",
  "params": [],
  "returns": "string"
}
}}
==== PVR.ToggleTimer ====
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<br />
'''Permissions:'''
* ControlPVR
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' broadcastid (the broadcast id of the item to toggle a onetime timer or time rule for)<br />
# [''boolean'' timerrule = False] (controls whether to create / delete a timer rule or a onetime timer)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Player ===
==== Player.GetActivePlayers ====
Returns all active players<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''array''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetItem ====
Retrieves the currently played item<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# [''[[#List.Fields.All|List.Fields.All]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.Item.All|List.Item.All]]'' item<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetPlayers ====
Get a list of available players<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''string'' media = all]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''array''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Player.Property.Value|Player.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetViewMode ====
Get view mode of video player<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#Player.ViewMode|Player.ViewMode]]'' viewmode<br />
# ''number'' zoom<br />
# ''number'' pixelratio<br />
# ''number'' verticalshift<br />
# ''boolean'' nonlinearstretch<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GoTo ====
Go to previous/next/specific item in the playlist<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: string|[[#Playlist.Position|Playlist.Position]]'' to<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Move ====
If picture is zoomed move viewport left/right/up/down otherwise skip previous/next<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''string'' direction<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Open ====
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.<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''mixed: object|[[#Playlist.Item|Playlist.Item]]|object|object|object|object'' item]<br />
# [''object'' options]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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": {
            "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.PlayPause ====
Pauses or unpause playback and returns the new state<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# [''[[#Global.Toggle|Global.Toggle]]'' play = toggle]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Player.Speed|Player.Speed]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Rotate ====
Rotates current picture<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# [''string'' value = clockwise]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Seek ====
Seek through the playing item<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: object|object|object|object'' value<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Player.Position.Percentage|Player.Position.Percentage]]'' percentage]<br />
# [''[[#Global.Time|Global.Time]]'' time]<br />
# [''[[#Global.Time|Global.Time]]'' totaltime]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetAudioStream ====
Set the audio stream played by the player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: string|integer'' stream<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetPartymode ====
Turn partymode on or off<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''[[#Global.Toggle|Global.Toggle]]'' partymode<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetRepeat ====
Set the repeat mode of the player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: [[#Player.Repeat|Player.Repeat]]|string'' repeat<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetShuffle ====
Shuffle/Unshuffle items in the player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''[[#Global.Toggle|Global.Toggle]]'' shuffle<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetSpeed ====
Set the speed of the current playback<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: integer|[[#Global.IncrementDecrement|Global.IncrementDecrement]]'' speed<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Player.Speed|Player.Speed]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetSubtitle ====
Set the subtitle displayed by the player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: string|integer'' subtitle<br />
# [''boolean'' enable = False] (Whether to enable subtitles to be displayed after setting the new subtitle)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
==== Player.SetVideoStream ====
Set the video stream played by the player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: string|integer'' stream<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetViewMode ====
Set view mode of video player<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''mixed: [[#Player.CustomViewMode|Player.CustomViewMode]]|[[#Player.ViewMode|Player.ViewMode]]'' viewmode<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Stop ====
Stops playback<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Stops playback",
  "transport": "Response",
  "permission": "ControlPlayback",
  "params": [
    {
      "name": "playerid",
      "$ref": "Player.Id",
      "required": true
    }
  ],
  "returns": "string"
}
}}
==== Player.Zoom ====
Zoom current picture<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Player.Id|Player.Id]]'' playerid<br />
# ''mixed: string|integer'' zoom<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Playlist ===
==== Playlist.Add ====
Add item(s) to playlist<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# ''mixed: [[#Playlist.Item|Playlist.Item]]|array'' item<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Clear ====
Clear playlist<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Clear playlist",
  "transport": "Response",
  "permission": "ControlPlayback",
  "params": [
    {
      "name": "playlistid",
      "$ref": "Playlist.Id",
      "required": true
    }
  ],
  "returns": "string"
}
}}
==== Playlist.GetItems ====
Get all items from playlist<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# [''[[#List.Fields.All|List.Fields.All]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#List.Item.All|List.Item.All]]'' items<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetPlaylists ====
Returns all existing playlists<br />
'''Permissions:'''
* ReadData
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''array''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Playlist.Property.Value|Playlist.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Insert ====
Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# ''[[#Playlist.Position|Playlist.Position]]'' position<br />
# ''mixed: [[#Playlist.Item|Playlist.Item]]|array'' item<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Remove item from playlist. Does not work for picture playlists (aka slideshows).<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# ''[[#Playlist.Position|Playlist.Position]]'' position<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Swap ====
Swap items in the playlist. Does not work for picture playlists (aka slideshows).<br />
'''Permissions:'''
* ControlPlayback
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Playlist.Id|Playlist.Id]]'' playlistid<br />
# ''[[#Playlist.Position|Playlist.Position]]'' position1<br />
# ''[[#Playlist.Position|Playlist.Position]]'' position2<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Profiles ===
==== Profiles.GetCurrentProfile ====
Retrieve the current profile<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Profiles.Fields.Profile|Profiles.Fields.Profile]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#Profiles.Details.Profile|Profiles.Details.Profile]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetProfiles ====
Retrieve all profiles<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Profiles.Fields.Profile|Profiles.Fields.Profile]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Profiles.Details.Profile|Profiles.Details.Profile]]'' profiles<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.LoadProfile ====
Load the specified profile<br />
'''Permissions:'''
* Navigate
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' profile (Profile name)<br />
# [''boolean'' prompt] (Prompt for password)<br />
# [''[[#Profiles.Password|Profiles.Password]]'' password]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== Settings ===
==== Settings.GetCategories ====
Retrieves all setting categories<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Setting.Level|Setting.Level]]'' level = standard]<br />
# [''string'' section = ""]<br />
# [''string'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''array[[#Setting.Details.Category|Setting.Details.Category]]'' categories]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSections ====
Retrieves all setting sections<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Setting.Level|Setting.Level]]'' level = standard]<br />
# [''[[#Setting.Level|Setting.Level]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''array[[#Setting.Details.Section|Setting.Details.Section]]'' sections]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSettingValue ====
Retrieves the value of a setting<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' setting<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#Setting.Value.Extended|Setting.Value.Extended]]'' value<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSettings ====
Retrieves all settings<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Setting.Level|Setting.Level]]'' level = standard]<br />
# [''mixed: object'' filter = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''array[[#Setting.Details.Setting|Setting.Details.Setting]]'' settings]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ResetSettingValue ====
Resets the value of a setting<br />
'''Permissions:'''
* WriteSetting
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' setting<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetSettingValue ====
Changes the value of a setting<br />
'''Permissions:'''
* WriteSetting
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' setting<br />
# ''[[#Setting.Value.Extended|Setting.Value.Extended]]'' value<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''boolean''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== System ===
==== System.EjectOpticalDrive ====
Ejects or closes the optical disc drive (if available)<br />
'''Permissions:'''
* ControlSystem
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Ejects or closes the optical disc drive (if available)",
  "transport": "Response",
  "permission": "ControlSystem",
  "params": [],
  "returns": "string"
}
}}
==== System.GetProperties ====
Retrieves the values of the given properties<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' properties<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''[[#System.Property.Value|System.Property.Value]]''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Hibernate ====
Puts the system running Kodi into hibernate mode<br />
'''Permissions:'''
* ControlPower
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Puts the system running Kodi into hibernate mode",
  "transport": "Response",
  "permission": "ControlPower",
  "params": [],
  "returns": "string"
}
}}
==== System.Reboot ====
Reboots the system running Kodi<br />
'''Permissions:'''
* ControlPower
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Reboots the system running Kodi",
  "transport": "Response",
  "permission": "ControlPower",
  "params": [],
  "returns": "string"
}
}}
==== System.Shutdown ====
Shuts the system running Kodi down<br />
'''Permissions:'''
* ControlPower
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Shuts the system running Kodi down",
  "transport": "Response",
  "permission": "ControlPower",
  "params": [],
  "returns": "string"
}
}}
==== System.Suspend ====
Suspends the system running Kodi<br />
'''Permissions:'''
* ControlPower
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "method",
  "description": "Suspends the system running Kodi",
  "transport": "Response",
  "permission": "ControlPower",
  "params": [],
  "returns": "string"
}
}}
=== Textures ===
==== Textures.GetTextures ====
Retrieve all textures<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Textures.Fields.Texture|Textures.Fields.Texture]]'' properties]<br />
# [''[[#List.Filter.Textures|List.Filter.Textures]]'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''array[[#Textures.Details.Texture|Textures.Details.Texture]]'' textures<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Remove the specified texture<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' textureid (Texture database identifier)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== VideoLibrary ===
==== VideoLibrary.Clean ====
Cleans the video library for non-existent items<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''boolean'' showdialogs = True] (Whether or not to show the progress bar or any other GUI dialog)<br />
# [''string'' content = video] (Content type to clean for)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  ],
  "returns": "string"
}
}}
==== VideoLibrary.Export ====
Exports all items from the video library<br />
'''Permissions:'''
* WriteFile
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''mixed: object|object'' options]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetEpisodeDetails ====
Retrieve details about a specific tv show episode<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' episodeid<br />
# [''[[#Video.Fields.Episode|Video.Fields.Episode]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.Episode|Video.Details.Episode]]'' episodedetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetEpisodes ====
Retrieve all tv show episodes<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Library.Id|Library.Id]]'' tvshowid]<br />
# [''integer'' season = -1]<br />
# [''[[#Video.Fields.Episode|Video.Fields.Episode]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|[[#List.Filter.Episodes|List.Filter.Episodes]]'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.Episode|Video.Details.Episode]]'' episodes]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetGenres ====
Retrieve all genres<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' type<br />
# [''[[#Library.Fields.Genre|Library.Fields.Genre]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Library.Details.Genre|Library.Details.Genre]]'' genres<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetInProgressTVShows ====
Retrieve all in progress tvshows<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.TVShow|Video.Fields.TVShow]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.TVShow|Video.Details.TVShow]]'' tvshows]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMovieDetails ====
Retrieve details about a specific movie<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' movieid<br />
# [''[[#Video.Fields.Movie|Video.Fields.Movie]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.Movie|Video.Details.Movie]]'' moviedetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMovieSetDetails ====
Retrieve details about a specific movie set<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' setid<br />
# [''[[#Video.Fields.MovieSet|Video.Fields.MovieSet]]'' properties]<br />
# [''object'' movies]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.MovieSet.Extended|Video.Details.MovieSet.Extended]]'' setdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMovieSets ====
Retrieve all movie sets<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.MovieSet|Video.Fields.MovieSet]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.MovieSet|Video.Details.MovieSet]]'' sets]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMovies ====
Retrieve all movies<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.Movie|Video.Fields.Movie]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|object|object|object|object|[[#List.Filter.Movies|List.Filter.Movies]]'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.Movie|Video.Details.Movie]]'' movies]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMusicVideoDetails ====
Retrieve details about a specific music video<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' musicvideoid<br />
# [''[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]'' musicvideodetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetMusicVideos ====
Retrieve all music videos<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|object|[[#List.Filter.MusicVideos|List.Filter.MusicVideos]]'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]'' musicvideos]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecentlyAddedEpisodes ====
Retrieve all recently added tv episodes<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.Episode|Video.Fields.Episode]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.Episode|Video.Details.Episode]]'' episodes]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecentlyAddedMovies ====
Retrieve all recently added movies<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.Movie|Video.Fields.Movie]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.Movie|Video.Details.Movie]]'' movies]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetRecentlyAddedMusicVideos ====
Retrieve all recently added music videos<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]'' musicvideos]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSeasonDetails ====
Retrieve details about a specific tv show season<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' seasonid<br />
# [''[[#Video.Fields.Season|Video.Fields.Season]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.Season|Video.Details.Season]]'' seasondetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetSeasons ====
Retrieve all tv seasons<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Library.Id|Library.Id]]'' tvshowid]<br />
# [''[[#Video.Fields.Season|Video.Fields.Season]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.Season|Video.Details.Season]]'' seasons]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetTVShowDetails ====
Retrieve details about a specific tv show<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' tvshowid<br />
# [''[[#Video.Fields.TVShow|Video.Fields.TVShow]]'' properties]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# [''[[#Video.Details.TVShow|Video.Details.TVShow]]'' tvshowdetails]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetTVShows ====
Retrieve all tv shows<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Video.Fields.TVShow|Video.Fields.TVShow]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
# [''mixed: object|object|object|object|object|object|[[#List.Filter.TVShows|List.Filter.TVShows]]'' filter]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Video.Details.TVShow|Video.Details.TVShow]]'' tvshows]<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.GetTags ====
Retrieve all tags<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' type<br />
# [''[[#Library.Fields.Tag|Library.Fields.Tag]]'' properties]<br />
# [''[[#List.Limits|List.Limits]]'' limits]<br />
# [''[[#List.Sort|List.Sort]]'' sort]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
'''Properties:'''
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Library.Details.Tag|Library.Details.Tag]]'' tags<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RefreshEpisode ====
Refresh the given episode in the library<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' episodeid<br />
# ''boolean'' ignorenfo = False (Whether or not to ignore a local NFO if present.)<br />
# ''string'' title = "" (Title to use for searching (instead of determining it from the item's filename/path).)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RefreshMovie ====
Refresh the given movie in the library<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' movieid<br />
# ''boolean'' ignorenfo = False (Whether or not to ignore a local NFO if present.)<br />
# ''string'' title = "" (Title to use for searching (instead of determining it from the item's filename/path).)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RefreshMusicVideo ====
Refresh the given music video in the library<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' musicvideoid<br />
# ''boolean'' ignorenfo = False (Whether or not to ignore a local NFO if present.)<br />
# ''string'' title = "" (Title to use for searching (instead of determining it from the item's filename/path).)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RefreshTVShow ====
Refresh the given tv show in the library<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' tvshowid<br />
# ''boolean'' ignorenfo = False (Whether or not to ignore a local NFO if present.)<br />
# ''boolean'' refreshepisodes = False (Whether or not to refresh all episodes belonging to the TV show.)<br />
# ''string'' title = "" (Title to use for searching (instead of determining it from the item's filename/path).)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RemoveEpisode ====
Removes the given episode from the library<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' episodeid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RemoveMovie ====
Removes the given movie from the library<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' movieid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RemoveMusicVideo ====
Removes the given music video from the library<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' musicvideoid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.RemoveTVShow ====
Removes the given tv show from the library<br />
'''Permissions:'''
* RemoveData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' tvshowid<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Scan ====
Scans the video sources for new library items<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''string'' directory = ""]<br />
# [''boolean'' showdialogs = True] (Whether or not to show the progress bar or any other GUI dialog)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetEpisodeDetails ====
Update the given episode with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' episodeid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' runtime] (Runtime in seconds)<br />
# [''mixed: [[#Array.String|Array.String]]'' director = None]<br />
# [''[[#Optional.String|Optional.String]]'' plot]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.String|Optional.String]]'' votes]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
# [''mixed: [[#Array.String|Array.String]]'' writer = None]<br />
# [''[[#Optional.String|Optional.String]]'' firstaired]<br />
# [''[[#Optional.String|Optional.String]]'' productioncode]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' season]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' episode]<br />
# [''[[#Optional.String|Optional.String]]'' originaltitle]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
# [''[[#Optional.String|Optional.String]]'' fanart]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''mixed: [[#Video.Resume|Video.Resume]]'' resume = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Video.Ratings.Set|Video.Ratings.Set]]'' ratings]<br />
# [''[[#Optional.String|Optional.String]]'' dateadded]<br />
# [''mixed: [[#Media.UniqueID.Set|Media.UniqueID.Set]]'' uniqueid = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetMovieDetails ====
Update the given movie with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' movieid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' runtime] (Runtime in seconds)<br />
# [''mixed: [[#Array.String|Array.String]]'' director = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' studio = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year] (linked with premiered. Overridden by premiered parameter)<br />
# [''[[#Optional.String|Optional.String]]'' plot]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.String|Optional.String]]'' mpaa]<br />
# [''[[#Optional.String|Optional.String]]'' imdbnumber]<br />
# [''[[#Optional.String|Optional.String]]'' votes]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
# [''[[#Optional.String|Optional.String]]'' originaltitle]<br />
# [''[[#Optional.String|Optional.String]]'' trailer]<br />
# [''[[#Optional.String|Optional.String]]'' tagline]<br />
# [''[[#Optional.String|Optional.String]]'' plotoutline]<br />
# [''mixed: [[#Array.String|Array.String]]'' writer = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' country = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' top250]<br />
# [''[[#Optional.String|Optional.String]]'' sorttitle]<br />
# [''[[#Optional.String|Optional.String]]'' set]<br />
# [''mixed: [[#Array.String|Array.String]]'' showlink = None]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
# [''[[#Optional.String|Optional.String]]'' fanart]<br />
# [''mixed: [[#Array.String|Array.String]]'' tag = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''mixed: [[#Video.Resume|Video.Resume]]'' resume = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Video.Ratings.Set|Video.Ratings.Set]]'' ratings]<br />
# [''[[#Optional.String|Optional.String]]'' dateadded]<br />
# [''[[#Optional.String|Optional.String]]'' premiered] (linked with year. Overrides year)<br />
# [''mixed: [[#Media.UniqueID.Set|Media.UniqueID.Set]]'' uniqueid = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Update the given movie set with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' setid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.String|Optional.String]]'' plot]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetMusicVideoDetails ====
Update the given music video with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' musicvideoid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' runtime] (Runtime in seconds)<br />
# [''mixed: [[#Array.String|Array.String]]'' director = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' studio = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year] (linked with premiered. Overridden by premiered parameter)<br />
# [''[[#Optional.String|Optional.String]]'' plot]<br />
# [''[[#Optional.String|Optional.String]]'' album]<br />
# [''mixed: [[#Array.String|Array.String]]'' artist]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' track]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
# [''[[#Optional.String|Optional.String]]'' fanart]<br />
# [''mixed: [[#Array.String|Array.String]]'' tag = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''mixed: [[#Video.Resume|Video.Resume]]'' resume = None]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Optional.String|Optional.String]]'' dateadded]<br />
# [''[[#Optional.String|Optional.String]]'' premiered] (linked with year. Overrides year)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  ],
  "returns": "string"
}
}}
==== VideoLibrary.SetSeasonDetails ====
Update the given season with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' seasonid<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SetTVShowDetails ====
Update the given tvshow with the given details<br />
'''Permissions:'''
* UpdateData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''[[#Library.Id|Library.Id]]'' tvshowid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
# [''mixed: [[#Array.String|Array.String]]'' studio = None]<br />
# [''[[#Optional.String|Optional.String]]'' plot]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
# [''[[#Optional.String|Optional.String]]'' mpaa]<br />
# [''[[#Optional.String|Optional.String]]'' imdbnumber]<br />
# [''[[#Optional.String|Optional.String]]'' premiered]<br />
# [''[[#Optional.String|Optional.String]]'' votes]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
# [''[[#Optional.String|Optional.String]]'' originaltitle]<br />
# [''[[#Optional.String|Optional.String]]'' sorttitle]<br />
# [''[[#Optional.String|Optional.String]]'' episodeguide]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
# [''[[#Optional.String|Optional.String]]'' fanart]<br />
# [''mixed: [[#Array.String|Array.String]]'' tag = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
# [''[[#Video.Ratings.Set|Video.Ratings.Set]]'' ratings]<br />
# [''[[#Optional.String|Optional.String]]'' dateadded]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' runtime] (Runtime in seconds)<br />
# [''[[#Optional.String|Optional.String]]'' status] (Valid values: 'returning series', 'in production', 'planned', 'cancelled', 'ended')<br />
# [''mixed: [[#Media.UniqueID.Set|Media.UniqueID.Set]]'' uniqueid = None]<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''string''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
}
}}
=== XBMC ===
==== XBMC.GetInfoBooleans ====
Retrieve info booleans about Kodi and the system<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' booleans<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object (Object containing key-value pairs of the retrieved info booleans)''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== XBMC.GetInfoLabels ====
Retrieve info labels about Kodi and the system<br />
'''Permissions:'''
* ReadData
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''array'' labels (See http://kodi.wiki/view/InfoLabels for a list of possible info labels)<br />
</div>
'''Returns:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object (Object containing key-value pairs of the retrieved info labels)''<br />
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
== Global Types ==
=== Addon ===
==== Addon.Content ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "unknown",
    "video",
    "audio",
    "image",
    "executable"
  ],
  "default": "unknown"
}
}}
==== Addon.Details ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' addonid
* ''[[#Addon.Types|Addon.Types]]'' type
* [''string'' name]
* [''string'' version]
* [''string'' summary]
* [''string'' description]
* [''string'' path]
* [''string'' author]
* [''string'' thumbnail]
* [''string'' disclaimer]
* [''string'' fanart]
* [''array'' dependencies]
* [''mixed: '' broken]
* [''array'' extrainfo]
* [''integer'' rating]
* [''boolean'' enabled]
* [''boolean'' installed]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== Addon.Fields ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "name",
      "version",
      "summary",
      "description",
      "path",
      "author",
      "thumbnail",
      "disclaimer",
      "fanart",
      "dependencies",
      "broken",
      "extrainfo",
      "rating",
      "enabled",
      "installed"
    ]
  }
}
}}
=== Application ===
==== Application.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "volume",
    "muted",
    "name",
    "version",
    "volume",
    "sorttokens",
    "language"
  ]
}
}}
==== Application.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' volume]
* [''boolean'' muted]
* [''string'' name]
* [''object'' version]
* [''[[#Array.String|Array.String]]'' sorttokens]
* [''string'' language]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
=== Array ===
==== Array.Integer ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "items": {
    "type": "integer"
  }
}
}}
==== Array.String ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "items": {
    "type": "string",
    "minLength": 1
  }
}
}}
=== Audio ===
==== Audio.Album.ReleaseType ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "album",
    "single"
  ],
  "default": "album"
}
}}
==== Audio.Artist.Roles ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Contributors ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Details.Album ====
'''Extends:'''
* ''[[#Audio.Details.Media|Audio.Details.Media]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' albumid
* [''string'' description]
* [''[[#Array.String|Array.String]]'' theme]
* [''[[#Array.String|Array.String]]'' mood]
* [''[[#Array.String|Array.String]]'' style]
* [''string'' type]
* [''string'' albumlabel]
* [''integer'' playcount]
* [''boolean'' compilation]
* [''[[#Audio.Album.ReleaseType|Audio.Album.ReleaseType]]'' releasetype]
* [''string'' musicbrainzreleasegroupid]
* [''string'' musicbrainzalbumid]
* [''[[#Audio.Details.Genres|Audio.Details.Genres]]'' songgenres]
* [''string'' lastplayed]
* [''[[#Array.Integer|Array.Integer]]'' sourceid]
* [''boolean'' isboxset]
* [''integer'' totaldiscs]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== Audio.Details.Artist ====
'''Extends:'''
* ''[[#Audio.Details.Base|Audio.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' artistid
* ''string'' artist
* [''[[#Array.String|Array.String]]'' instrument]
* [''[[#Array.String|Array.String]]'' style]
* [''[[#Array.String|Array.String]]'' mood]
* [''string'' born]
* [''string'' formed]
* [''string'' description]
* [''string'' died]
* [''string'' disbanded]
* [''[[#Array.String|Array.String]]'' yearsactive]
* [''boolean'' compilationartist]
* [''[[#Array.String|Array.String]]'' musicbrainzartistid]
* [''[[#Audio.Artist.Roles|Audio.Artist.Roles]]'' roles]
* [''[[#Audio.Details.Genres|Audio.Details.Genres]]'' songgenres]
* [''boolean'' isalbumartist]
* [''string'' sortname]
* [''string'' type]
* [''string'' gender]
* [''string'' disambiguation]
* [''[[#Array.Integer|Array.Integer]]'' sourceid]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Base ====
'''Extends:'''
* ''[[#Media.Details.Base|Media.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Array.String|Array.String]]'' genre]
* [''string'' dateadded]
* [''[[#Media.Artwork|Media.Artwork]]'' art]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Media.Details.Base",
  "properties": {
    "genre": {
      "$ref": "Array.String"
    },
    "dateadded": {
      "type": "string"
    },
    "art": {
      "$ref": "Media.Artwork"
    }
  }
}
}}
==== Audio.Details.Genres ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "genreid": {
        "$ref": "Library.Id",
        "required": true
      },
      "title": {
        "type": "string"
      }
    }
  }
}
}}
==== Audio.Details.Media ====
'''Extends:'''
* ''[[#Audio.Details.Base|Audio.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' title]
* [''[[#Array.String|Array.String]]'' artist]
* [''integer'' year]
* [''number'' rating]
* [''[[#Array.String|Array.String]]'' musicbrainzalbumartistid]
* [''[[#Array.Integer|Array.Integer]]'' artistid]
* [''string'' displayartist]
* [''integer'' votes]
* [''integer'' userrating]
* [''string'' sortartist]
* [''string'' releasedate]
* [''string'' originaldate]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Role ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' roleid
* [''string'' title]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Details.Base",
  "properties": {
    "roleid": {
      "$ref": "Library.Id",
      "required": true
    },
    "title": {
      "type": "string"
    }
  }
}
}}
==== Audio.Details.Song ====
'''Extends:'''
* ''[[#Audio.Details.Media|Audio.Details.Media]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' songid
* [''string'' file]
* [''[[#Array.String|Array.String]]'' albumartist]
* [''string'' album]
* [''integer'' track]
* [''integer'' duration]
* [''string'' comment]
* [''string'' lyrics]
* [''integer'' playcount]
* [''string'' musicbrainztrackid]
* [''[[#Array.String|Array.String]]'' musicbrainzartistid]
* [''[[#Library.Id|Library.Id]]'' albumid]
* [''string'' lastplayed]
* [''integer'' disc]
* [''[[#Array.Integer|Array.Integer]]'' albumartistid]
* [''[[#Audio.Album.ReleaseType|Audio.Album.ReleaseType]]'' albumreleasetype]
* [''string'' mood]
* [''[[#Audio.Contributors|Audio.Contributors]]'' contributors]
* [''string'' displaycomposer]
* [''string'' displayconductor]
* [''string'' displayorchestra]
* [''string'' displaylyricist]
* [''[[#Array.Integer|Array.Integer]]'' genreid]
* [''[[#Array.Integer|Array.Integer]]'' sourceid]
* [''string'' disctitle]
* [''Integer'' bpm]
* [''Integer'' samplerate]
* [''Integer'' bitrate]
* [''Integer'' channels]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Fields.Album ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== Audio.Fields.Artist ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== Audio.Fields.Role ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "title"
    ]
  }
}
}}
==== Audio.Fields.Song ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== Audio.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "missingartistid",
    "librarylastupdated"
  ]
}
}}
==== Audio.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Library.Id|Library.Id]]'' missingartistid]
* [''string'' librarylastupdated]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "missingartistid": {
      "$ref": "Library.Id"
    },
    "librarylastupdated": {
      "type": "string"
    }
  }
}
}}
=== Configuration ===
==== Configuration ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Configuration.Notifications|Configuration.Notifications]]'' notifications
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "required": true,
  "properties": {
    "notifications": {
      "$ref": "Configuration.Notifications",
      "required": true
    }
  }
}
}}
==== Configuration.Notifications ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''boolean'' Player
* ''boolean'' Playlist
* ''boolean'' GUI
* ''boolean'' System
* ''boolean'' VideoLibrary
* ''boolean'' AudioLibrary
* ''boolean'' Application
* ''boolean'' Input
* ''boolean'' PVR
* ''boolean'' Other
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== Favourite ===
==== Favourite.Details.Favourite ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' title
* ''[[#Favourite.Type|Favourite.Type]]'' type
* [''string'' path]
* [''string'' window]
* [''string'' windowparameter]
* [''string'' thumbnail]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== Favourite.Fields.Favourite ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "window",
      "windowparameter",
      "thumbnail",
      "path"
    ]
  }
}
}}
==== Favourite.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "media",
    "window",
    "script",
    "androidapp",
    "unknown"
  ]
}
}}
=== Files ===
==== Files.Media ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "video",
    "music",
    "pictures",
    "files",
    "programs"
  ]
}
}}
=== GUI ===
==== GUI.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "currentwindow",
    "currentcontrol",
    "skin",
    "fullscreen",
    "stereoscopicmode"
  ]
}
}}
==== GUI.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''object'' currentwindow]
* [''object'' currentcontrol]
* [''object'' skin]
* [''boolean'' fullscreen]
* [''[[#GUI.Stereoscopy.Mode|GUI.Stereoscopy.Mode]]'' stereoscopicmode]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== GUI.Stereoscopy.Mode ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' mode
* ''string'' label
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
    }
  }
}
}}
=== Global ===
==== Global.IncrementDecrement ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "increment",
    "decrement"
  ]
}
}}
==== Global.String.NotEmpty ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "minLength": 1
}
}}
==== Global.Time ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''integer'' hours
* ''integer'' minutes
* ''integer'' seconds
* ''integer'' milliseconds
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "hours": {
      "type": "integer",
      "required": true,
      "minimum": 0,
      "maximum": 23
    },
    "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.Toggle ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    {
      "type": "boolean",
      "required": true
    },
    {
      "type": "string",
      "enum": [
        "toggle"
      ],
      "required": true
    }
  ]
}
}}
==== Global.Weekday ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "monday",
    "tuesday",
    "wednesday",
    "thursday",
    "friday",
    "saturday",
    "sunday"
  ]
}
}}
=== Item ===
==== Item.Details.Base ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' label
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "label": {
      "type": "string",
      "required": true
    }
  }
}
}}
==== Item.Fields.Base ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "uniqueItems": true,
  "items": {
    "type": "string"
  }
}
}}
=== Library ===
==== Library.Details.Genre ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' genreid
* [''string'' title]
* [''string'' thumbnail]
* [''[[#Array.Integer|Array.Integer]]'' sourceid]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Details.Source ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' sourceid
* ''string'' file
* [''[[#Array.String|Array.String]]'' paths]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Details.Tag ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' tagid
* [''string'' title]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Details.Base",
  "properties": {
    "tagid": {
      "$ref": "Library.Id",
      "required": true
    },
    "title": {
      "type": "string"
    }
  }
}
}}
==== Library.Fields.Genre ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "title",
      "thumbnail",
      "sourceid"
    ]
  }
}
}}
==== Library.Fields.Source ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "file",
      "paths"
    ]
  }
}
}}
==== Library.Fields.Tag ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "title"
    ]
  }
}
}}
==== Library.Id ====
'''Type:''' ''integer''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "integer",
  "default": -1,
  "minimum": 1
}
}}
=== List ===
==== List.Amount ====
'''Type:''' ''integer''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "integer",
  "default": -1,
  "minimum": 0
}
}}
==== List.Fields.All ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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",
      "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"
    ]
  }
}
}}
==== List.Fields.Files ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== List.Filter.Albums ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Artists ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Episodes ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Movies ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.MusicVideos ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Rule ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Operators|List.Filter.Operators]]'' operator
* ''mixed: string|array'' value
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Albums ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Albums|List.Filter.Fields.Albums]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Albums",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.Artists ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Artists|List.Filter.Fields.Artists]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Artists",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.Episodes ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Episodes|List.Filter.Fields.Episodes]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Episodes",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.Movies ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Movies|List.Filter.Fields.Movies]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Movies",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.MusicVideos ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.MusicVideos|List.Filter.Fields.MusicVideos]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.MusicVideos",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.Songs ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Songs|List.Filter.Fields.Songs]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Songs",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.TVShows ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.TVShows|List.Filter.Fields.TVShows]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.TVShows",
      "required": true
    }
  }
}
}}
==== List.Filter.Rule.Textures ====
'''Extends:'''
* ''[[#List.Filter.Rule|List.Filter.Rule]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.Filter.Fields.Textures|List.Filter.Fields.Textures]]'' field
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Filter.Rule",
  "properties": {
    "field": {
      "$ref": "List.Filter.Fields.Textures",
      "required": true
    }
  }
}
}}
==== List.Filter.Songs ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.TVShows ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Textures ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.All ====
'''Extends:'''
* ''[[#List.Item.Base|List.Item.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' channel]
* [''[[#PVR.Channel.Type|PVR.Channel.Type]]'' channeltype]
* [''boolean'' hidden]
* [''boolean'' locked]
* [''integer'' channelnumber]
* [''string'' starttime]
* [''string'' endtime]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "List.Item.Base",
  "properties": {
    "channel": {
      "type": "string"
    },
    "channeltype": {
      "$ref": "PVR.Channel.Type"
    },
    "hidden": {
      "type": "boolean"
    },
    "locked": {
      "type": "boolean"
    },
    "channelnumber": {
      "type": "integer"
    },
    "starttime": {
      "type": "string"
    },
    "endtime": {
      "type": "string"
    }
  }
}
}}
==== List.Item.Base ====
'''Extends:'''
* ''[[#Video.Details.File|Video.Details.File]]''
* ''[[#Audio.Details.Media|Audio.Details.Media]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Library.Id|Library.Id]]'' id]
* [''string'' type]
* [''[[#Array.String|Array.String]]'' albumartist]
* [''string'' album]
* [''integer'' track]
* [''integer'' duration]
* [''string'' comment]
* [''string'' lyrics]
* [''string'' musicbrainztrackid]
* [''[[#Array.String|Array.String]]'' musicbrainzartistid]
* [''string'' trailer]
* [''string'' tagline]
* [''string'' plotoutline]
* [''string'' originaltitle]
* [''[[#Array.String|Array.String]]'' writer]
* [''[[#Array.String|Array.String]]'' studio]
* [''string'' mpaa]
* [''[[#Video.Cast|Video.Cast]]'' cast]
* [''[[#Array.String|Array.String]]'' country]
* [''string'' imdbnumber]
* [''string'' premiered]
* [''string'' productioncode]
* [''string'' set]
* [''[[#Array.String|Array.String]]'' showlink]
* [''integer'' top250]
* [''string'' votes]
* [''string'' firstaired]
* [''integer'' season]
* [''integer'' episode]
* [''string'' showtitle]
* [''[[#Library.Id|Library.Id]]'' albumid]
* [''[[#Library.Id|Library.Id]]'' setid]
* [''[[#Library.Id|Library.Id]]'' tvshowid]
* [''integer'' watchedepisodes]
* [''integer'' disc]
* [''[[#Array.String|Array.String]]'' tag]
* [''[[#Array.Integer|Array.Integer]]'' albumartistid]
* [''[[#Media.UniqueID|Media.UniqueID]]'' uniqueid]
* [''string'' episodeguide]
* [''string'' sorttitle]
* [''string'' description]
* [''[[#Array.String|Array.String]]'' theme]
* [''[[#Array.String|Array.String]]'' mood]
* [''[[#Array.String|Array.String]]'' style]
* [''string'' albumlabel]
* [''integer'' specialsortseason]
* [''integer'' specialsortepisode]
* [''boolean'' compilation]
* [''[[#Audio.Album.ReleaseType|Audio.Album.ReleaseType]]'' releasetype]
* [''[[#Audio.Album.ReleaseType|Audio.Album.ReleaseType]]'' albumreleasetype]
* [''[[#Audio.Contributors|Audio.Contributors]]'' contributors]
* [''string'' displaycomposer]
* [''string'' displayconductor]
* [''string'' displayorchestra]
* [''string'' displaylyricist]
* [''string'' mediapath]
* [''string'' dynpath]
* [''boolean'' isboxset]
* [''integer'' totaldiscs]
* [''string'' disctitle]
* [''string'' releasedate]
* [''string'' originaldate]
* [''integer'' bpm]
* [''integer'' bitrate]
* [''integer'' samplerate]
* [''integer'' channels]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": [
    "Video.Details.File",
    "Audio.Details.Media"
  ],
  "properties": {
    "id": {
      "$ref": "Library.Id"
    },
    "type": {
      "type": "string",
      "enum": [
        "unknown",
        "movie",
        "episode",
        "musicvideo",
        "song",
        "picture",
        "channel"
      ]
    },
    "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"
    }
  }
}
}}
==== List.Item.File ====
'''Extends:'''
* ''[[#List.Item.Base|List.Item.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' file
* ''string'' filetype
* [''integer'' size]
* [''string'' lastmodified]
* [''string'' mimetype]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "items": {
    "extends": "Item.Details.Base",
    "properties": {
      "file": {
        "type": "string",
        "required": true
      }
    }
  }
}
}}
==== List.Limits ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' start]
* [''[[#List.Amount|List.Amount]]'' end]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' start]
* [''[[#List.Amount|List.Amount]]'' end]
* ''integer'' total
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' method = none]
* [''string'' order = ascending]
* [''boolean'' ignorearticle]
* [''boolean'' useartistsortname]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
      ]
    },
    "order": {
      "type": "string",
      "default": "ascending",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "ignorearticle": {
      "type": "boolean",
      "default": false
    },
    "useartistsortname": {
      "type": "boolean",
      "default": false
    }
  }
}
}}
=== Media ===
==== Media.Artwork ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Global.String.NotEmpty|Global.String.NotEmpty]]'' thumb]
* [''[[#Global.String.NotEmpty|Global.String.NotEmpty]]'' poster]
* [''[[#Global.String.NotEmpty|Global.String.NotEmpty]]'' banner]
* [''[[#Global.String.NotEmpty|Global.String.NotEmpty]]'' fanart]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''mixed: [[#Global.String.NotEmpty|Global.String.NotEmpty]]'' thumb]
* [''mixed: [[#Global.String.NotEmpty|Global.String.NotEmpty]]'' poster]
* [''mixed: [[#Global.String.NotEmpty|Global.String.NotEmpty]]'' banner]
* [''mixed: [[#Global.String.NotEmpty|Global.String.NotEmpty]]'' fanart]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
      }
    ]
  }
}
}}
==== Media.Details.Base ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' fanart]
* [''string'' thumbnail]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Details.Base",
  "properties": {
    "fanart": {
      "type": "string"
    },
    "thumbnail": {
      "type": "string"
    }
  }
}
}}
==== Media.UniqueID ====
'''Type:''' ''object''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "additionalProperties": {
    "$ref": "Global.String.NotEmpty"
  }
}
}}
==== Media.UniqueID.Set ====
'''Type:''' ''object''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "additionalProperties": {
    "type": [
      "null",
      {
        "$ref": "Global.String.NotEmpty",
        "required": true
      }
    ]
  }
}
}}
=== Notifications ===
==== Notifications.Item ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
        }
      }
    }
  ]
}
}}
==== Notifications.Item.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "unknown",
    "movie",
    "episode",
    "musicvideo",
    "song",
    "picture",
    "channel"
  ]
}
}}
=== Optional ===
==== Optional.Boolean ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    "null",
    "boolean"
  ],
  "default": null
}
}}
==== Optional.Integer ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    "null",
    "integer"
  ],
  "default": null
}
}}
==== Optional.Number ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    "null",
    "number"
  ],
  "default": null
}
}}
==== Optional.String ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    "null",
    "string"
  ],
  "default": null
}
}}
=== PVR ===
==== PVR.Channel.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "tv",
    "radio"
  ]
}
}}
==== PVR.ChannelGroup.Id ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    {
      "$ref": "Library.Id",
      "required": true
    },
    {
      "type": "string",
      "enum": [
        "alltv",
        "allradio"
      ],
      "required": true
    }
  ]
}
}}
==== PVR.Details.Broadcast ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' broadcastid
* [''string'' title]
* [''string'' plot]
* [''string'' plotoutline]
* [''string'' starttime]
* [''string'' endtime]
* [''integer'' runtime]
* [''integer'' progress]
* [''number'' progresspercentage]
* [''string'' genre]
* [''string'' episodename]
* [''integer'' episodenum]
* [''integer'' episodepart]
* [''string'' firstaired]
* [''boolean'' hastimer]
* [''boolean'' isactive]
* [''integer'' parentalrating]
* [''boolean'' wasactive]
* [''string'' thumbnail]
* [''integer'' rating]
* [''string'' originaltitle]
* [''string'' cast]
* [''string'' director]
* [''string'' writer]
* [''integer'' year]
* [''integer'' imdbnumber]
* [''boolean'' hastimerrule]
* [''boolean'' hasrecording]
* [''string'' recording]
* [''boolean'' isseries]
* [''boolean'' isplayable]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== PVR.Details.Channel ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' channelid
* [''string'' channel]
* [''[[#PVR.Channel.Type|PVR.Channel.Type]]'' channeltype]
* [''boolean'' hidden]
* [''boolean'' locked]
* [''string'' thumbnail]
* [''string'' lastplayed]
* [''[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcastnow]
* [''[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcastnext]
* ''integer'' uniqueid
* [''string'' icon]
* [''integer'' channelnumber]
* [''integer'' subchannelnumber]
* [''boolean'' isrecording]
* [''boolean'' hasarchive]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== PVR.Details.ChannelGroup ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' channelgroupid
* ''[[#PVR.Channel.Type|PVR.Channel.Type]]'' channeltype
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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|PVR.Details.ChannelGroup]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits
* [''array'' channels]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "PVR.Details.ChannelGroup",
  "properties": {
    "limits": {
      "$ref": "List.LimitsReturned",
      "required": true
    },
    "channels": {
      "type": "array",
      "items": {
        "$ref": "PVR.Details.Channel"
      }
    }
  }
}
}}
==== PVR.Details.Recording ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' recordingid
* [''string'' title]
* [''string'' plot]
* [''string'' plotoutline]
* [''string'' genre]
* [''integer'' playcount]
* [''[[#Video.Resume|Video.Resume]]'' resume]
* [''string'' channel]
* [''string'' starttime]
* [''string'' endtime]
* [''integer'' runtime]
* [''integer'' lifetime]
* [''string'' icon]
* [''[[#Media.Artwork|Media.Artwork]]'' art]
* [''string'' streamurl]
* [''string'' file]
* [''string'' directory]
* [''boolean'' radio]
* [''boolean'' isdeleted]
* [''integer'' epgeventid]
* [''integer'' channeluid]
* [''integer'' season]
* [''integer'' episode]
* [''string'' showtitle]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== PVR.Details.Timer ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' timerid
* [''string'' title]
* [''string'' summary]
* [''[[#Library.Id|Library.Id]]'' channelid]
* [''boolean'' isradio]
* [''boolean'' istimerrule]
* [''boolean'' ismanual]
* [''string'' starttime]
* [''string'' endtime]
* [''integer'' runtime]
* [''integer'' lifetime]
* [''string'' firstday]
* [''array'' weekdays]
* [''integer'' priority]
* [''integer'' startmargin]
* [''integer'' endmargin]
* [''[[#PVR.TimerState|PVR.TimerState]]'' state]
* [''string'' file]
* [''string'' directory]
* [''integer'' preventduplicateepisodes]
* [''boolean'' startanytime]
* [''boolean'' endanytime]
* [''string'' epgsearchstring]
* [''boolean'' fulltextepgsearch]
* [''integer'' recordinggroup]
* [''integer'' maxrecordings]
* [''integer'' epguid]
* [''boolean'' isreadonly]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== PVR.Fields.Broadcast ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== PVR.Fields.Channel ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "thumbnail",
      "channeltype",
      "hidden",
      "locked",
      "channel",
      "lastplayed",
      "broadcastnow",
      "broadcastnext",
      "uniqueid",
      "icon",
      "channelnumber",
      "subchannelnumber",
      "isrecording",
      "hasarchive"
    ]
  }
}
}}
==== PVR.Fields.Recording ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== PVR.Fields.Timer ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    ]
  }
}
}}
==== PVR.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "available",
    "recording",
    "scanning"
  ]
}
}}
==== PVR.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''boolean'' available]
* [''boolean'' recording]
* [''boolean'' scanning]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "available": {
      "type": "boolean"
    },
    "recording": {
      "type": "boolean"
    },
    "scanning": {
      "type": "boolean"
    }
  }
}
}}
==== PVR.TimerState ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "unknown",
    "new",
    "scheduled",
    "recording",
    "completed",
    "aborted",
    "cancelled",
    "conflict_ok",
    "conflict_notok",
    "error",
    "disabled"
  ]
}
}}
=== Player ===
==== Player.Audio.Stream ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''integer'' index
* ''string'' name
* ''string'' language
* ''string'' codec
* ''integer'' bitrate
* ''integer'' channels
* ''boolean'' isdefault
* ''boolean'' isoriginal
* ''boolean'' isimpaired
* ''integer'' samplerate
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.CustomViewMode ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''mixed: string|[[#Optional.Number|Optional.Number]]'' zoom]
* [''mixed: string|[[#Optional.Number|Optional.Number]]'' pixelratio]
* [''mixed: string|[[#Optional.Number|Optional.Number]]'' verticalshift]
* [''mixed: string|[[#Optional.Boolean|Optional.Boolean]]'' nonlinearstretch]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Id ====
'''Type:''' ''integer''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "integer",
  "minimum": 0,
  "maximum": 2,
  "default": -1
}
}}
==== Player.Notifications.Data ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Notifications.Item|Notifications.Item]]'' item
* ''[[#Player.Notifications.Player|Player.Notifications.Player]]'' player
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "item": {
      "$ref": "Notifications.Item",
      "required": true
    },
    "player": {
      "$ref": "Player.Notifications.Player",
      "required": true
    }
  }
}
}}
==== Player.Notifications.Player ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Player.Id|Player.Id]]'' playerid
* [''integer'' speed]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "playerid": {
      "$ref": "Player.Id",
      "required": true
    },
    "speed": {
      "type": "integer"
    }
  }
}
}}
==== Player.Notifications.Player.Seek ====
'''Extends:'''
* ''[[#Player.Notifications.Player|Player.Notifications.Player]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Global.Time|Global.Time]]'' time]
* [''[[#Global.Time|Global.Time]]'' seekoffset]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Player.Notifications.Player",
  "properties": {
    "time": {
      "$ref": "Global.Time"
    },
    "seekoffset": {
      "$ref": "Global.Time"
    }
  }
}
}}
==== Player.Position.Percentage ====
'''Type:''' ''number''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "number",
  "minimum": 0.0,
  "maximum": 100.0
}
}}
==== Player.Position.Time ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' hours]
* [''integer'' minutes]
* [''integer'' seconds]
* [''integer'' milliseconds]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "hours": {
      "type": "integer",
      "minimum": 0,
      "maximum": 23,
      "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.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
  ]
}
}}
==== Player.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Player.Type|Player.Type]]'' type]
* [''boolean'' partymode]
* [''integer'' speed]
* [''[[#Global.Time|Global.Time]]'' time]
* [''[[#Player.Position.Percentage|Player.Position.Percentage]]'' percentage]
* [''[[#Global.Time|Global.Time]]'' totaltime]
* [''[[#Playlist.Id|Playlist.Id]]'' playlistid]
* [''[[#Playlist.Position|Playlist.Position]]'' position]
* [''[[#Player.Repeat|Player.Repeat]]'' repeat]
* [''boolean'' shuffled]
* [''boolean'' canseek]
* [''boolean'' canchangespeed]
* [''boolean'' canmove]
* [''boolean'' canzoom]
* [''boolean'' canrotate]
* [''boolean'' canshuffle]
* [''boolean'' canrepeat]
* [''[[#Player.Audio.Stream|Player.Audio.Stream]]'' currentaudiostream]
* [''array'' audiostreams]
* [''[[#Player.Video.Stream|Player.Video.Stream]]'' currentvideostream]
* [''array'' videostreams]
* [''boolean'' subtitleenabled]
* [''[[#Player.Subtitle|Player.Subtitle]]'' currentsubtitle]
* [''array'' subtitles]
* [''boolean'' live]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== Player.Repeat ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "off",
    "one",
    "all"
  ]
}
}}
==== Player.Speed ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' speed]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "required": true,
  "properties": {
    "speed": {
      "type": "integer"
    }
  }
}
}}
==== Player.Subtitle ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''integer'' index
* ''string'' name
* ''string'' language
* ''boolean'' isdefault
* ''boolean'' isforced
* ''boolean'' isimpaired
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "video",
    "audio",
    "picture"
  ]
}
}}
==== Player.Video.Stream ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''integer'' index
* ''string'' name
* ''string'' language
* ''string'' codec
* ''integer'' width
* ''integer'' height
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ViewMode ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "normal",
    "zoom",
    "stretch4x3",
    "widezoom",
    "stretch16x9",
    "original",
    "stretch16x9nonlin",
    "zoom120width",
    "zoom110width"
  ]
}
}}
=== Playlist ===
==== Playlist.Id ====
'''Type:''' ''integer''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "integer",
  "minimum": 0,
  "maximum": 2,
  "default": -1
}
}}
==== Playlist.Item ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
    }
  ]
}
}}
==== Playlist.Position ====
'''Type:''' ''integer''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "integer",
  "minimum": 0,
  "default": -1
}
}}
==== Playlist.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "type",
    "size"
  ]
}
}}
==== Playlist.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''[[#Playlist.Type|Playlist.Type]]'' type]
* [''integer'' size]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "type": {
      "$ref": "Playlist.Type"
    },
    "size": {
      "type": "integer",
      "minimum": 0
    }
  }
}
}}
==== Playlist.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "unknown",
    "video",
    "audio",
    "picture",
    "mixed"
  ]
}
}}
=== Profiles ===
==== Profiles.Details.Profile ====
'''Extends:'''
* ''[[#Item.Details.Base|Item.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' thumbnail]
* [''integer'' lockmode]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Details.Base",
  "properties": {
    "thumbnail": {
      "type": "string"
    },
    "lockmode": {
      "type": "integer"
    }
  }
}
}}
==== Profiles.Fields.Profile ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "thumbnail",
      "lockmode"
    ]
  }
}
}}
==== Profiles.Password ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' value
* [''string'' encryption = md5]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "value": {
      "type": "string",
      "required": true,
      "description": "Password"
    },
    "encryption": {
      "type": "string",
      "description": "Password Encryption",
      "default": "md5",
      "enum": [
        "none",
        "md5"
      ]
    }
  }
}
}}
=== Setting ===
==== Setting.Details.Base ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' id
* ''string'' label
* [''string'' help]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "required": true,
      "minLength": 1
    },
    "label": {
      "type": "string",
      "required": true
    },
    "help": {
      "type": "string"
    }
  }
}
}}
==== Setting.Details.Category ====
'''Extends:'''
* ''[[#Setting.Details.Base|Setting.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''array'' groups]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.Base",
  "properties": {
    "groups": {
      "type": "array",
      "items": {
        "$ref": "Setting.Details.Group"
      },
      "minItems": 1,
      "uniqueItems": true
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.Control ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.ControlBase ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''string'' format
* ''boolean'' delayed
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "required": true
    },
    "format": {
      "type": "string",
      "required": true
    },
    "delayed": {
      "type": "boolean",
      "required": true
    }
  }
}
}}
==== Setting.Details.ControlButton ====
'''Extends:'''
* ''[[#Setting.Details.ControlHeading|Setting.Details.ControlHeading]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlHeading",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "button"
      ]
    }
  }
}
}}
==== Setting.Details.ControlCheckmark ====
'''Extends:'''
* ''[[#Setting.Details.ControlBase|Setting.Details.ControlBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''string'' format
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlBase",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "toggle"
      ]
    },
    "format": {
      "type": "string",
      "required": true,
      "enum": [
        "boolean"
      ]
    }
  }
}
}}
==== Setting.Details.ControlEdit ====
'''Extends:'''
* ''[[#Setting.Details.ControlHeading|Setting.Details.ControlHeading]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''boolean'' hidden
* ''boolean'' verifynewvalue
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlHeading",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "edit"
      ]
    },
    "hidden": {
      "type": "boolean",
      "required": true
    },
    "verifynewvalue": {
      "type": "boolean",
      "required": true
    }
  }
}
}}
==== Setting.Details.ControlHeading ====
'''Extends:'''
* ''[[#Setting.Details.ControlBase|Setting.Details.ControlBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' heading]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlBase",
  "properties": {
    "heading": {
      "type": "string"
    }
  }
}
}}
==== Setting.Details.ControlLabel ====
'''Extends:'''
* ''[[#Setting.Details.ControlBase|Setting.Details.ControlBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''string'' format
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlBase",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "label"
      ]
    },
    "format": {
      "type": "string",
      "required": true,
      "enum": [
        "string"
      ]
    }
  }
}
}}
==== Setting.Details.ControlList ====
'''Extends:'''
* ''[[#Setting.Details.ControlHeading|Setting.Details.ControlHeading]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''boolean'' multiselect
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlHeading",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "list"
      ]
    },
    "multiselect": {
      "type": "boolean",
      "required": true
    }
  }
}
}}
==== Setting.Details.ControlRange ====
'''Extends:'''
* ''[[#Setting.Details.ControlBase|Setting.Details.ControlBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''string'' formatlabel
* ''string'' formatvalue
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlBase",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "range"
      ]
    },
    "formatlabel": {
      "type": "string",
      "required": true
    },
    "formatvalue": {
      "type": "string",
      "required": true
    }
  }
}
}}
==== Setting.Details.ControlSlider ====
'''Extends:'''
* ''[[#Setting.Details.ControlHeading|Setting.Details.ControlHeading]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* ''string'' formatlabel
* ''boolean'' popup
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlHeading",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "slider"
      ]
    },
    "formatlabel": {
      "type": "string",
      "required": true
    },
    "popup": {
      "type": "boolean",
      "required": true
    }
  }
}
}}
==== Setting.Details.ControlSpinner ====
'''Extends:'''
* ''[[#Setting.Details.ControlBase|Setting.Details.ControlBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' type
* [''string'' formatlabel]
* [''string'' minimumlabel]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.ControlBase",
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "enum": [
        "spinner"
      ]
    },
    "formatlabel": {
      "type": "string"
    },
    "minimumlabel": {
      "type": "string"
    }
  }
}
}}
==== Setting.Details.Group ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' id
* [''array'' settings]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Section ====
'''Extends:'''
* ''[[#Setting.Details.Base|Setting.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''array'' categories]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.Base",
  "properties": {
    "categories": {
      "type": "array",
      "items": {
        "$ref": "Setting.Details.Category"
      },
      "minItems": 1,
      "uniqueItems": true
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.Setting ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SettingAction ====
'''Extends:'''
* ''[[#Setting.Details.SettingBase|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingBase",
  "properties": {
    "data": {
      "type": "string",
      "required": true
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.SettingAddon ====
'''Extends:'''
* ''[[#Setting.Details.SettingString|Setting.Details.SettingString]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Addon.Types|Addon.Types]]'' addontype
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingString",
  "properties": {
    "addontype": {
      "$ref": "Addon.Types",
      "required": true
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.SettingBase ====
'''Extends:'''
* ''[[#Setting.Details.Base|Setting.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Setting.Type|Setting.Type]]'' type
* ''boolean'' enabled
* ''[[#Setting.Level|Setting.Level]]'' level
* [''string'' parent]
* [''[[#Setting.Details.Control|Setting.Details.Control]]'' control]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''boolean'' value
* ''boolean'' default
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingBase",
  "properties": {
    "value": {
      "type": "boolean",
      "required": true
    },
    "default": {
      "type": "boolean",
      "required": true
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.SettingDate ====
'''Extends:'''
* ''[[#Setting.Details.SettingString|Setting.Details.SettingString]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingString",
  "additionalProperties": false
}
}}
==== Setting.Details.SettingInt ====
'''Extends:'''
* ''[[#Setting.Details.SettingBase|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''integer'' value
* ''integer'' default
* [''integer'' minimum]
* [''integer'' step]
* [''integer'' maximum]
* [''array'' options]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SettingList ====
'''Extends:'''
* ''[[#Setting.Details.SettingBase|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Setting.Value.List|Setting.Value.List]]'' value
* ''[[#Setting.Value.List|Setting.Value.List]]'' default
* ''[[#Setting.Type|Setting.Type]]'' elementtype
* ''[[#Setting.Details.Setting|Setting.Details.Setting]]'' definition
* ''string'' delimiter
* [''integer'' minimumItems]
* [''integer'' maximumItems]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SettingNumber ====
'''Extends:'''
* ''[[#Setting.Details.SettingBase|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''number'' value
* ''number'' default
* ''number'' minimum
* ''number'' step
* ''number'' maximum
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SettingPath ====
'''Extends:'''
* ''[[#Setting.Details.SettingString|Setting.Details.SettingString]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''boolean'' writable
* [''array'' sources]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingString",
  "properties": {
    "writable": {
      "type": "boolean",
      "required": true
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
}}
==== Setting.Details.SettingString ====
'''Extends:'''
* ''[[#Setting.Details.SettingBase|Setting.Details.SettingBase]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''string'' value
* ''string'' default
* ''boolean'' allowempty
* [''array'' options]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.SettingTime ====
'''Extends:'''
* ''[[#Setting.Details.SettingString|Setting.Details.SettingString]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Setting.Details.SettingString",
  "additionalProperties": false
}
}}
==== Setting.Level ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "basic",
    "standard",
    "advanced",
    "expert"
  ]
}
}}
==== Setting.Type ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "boolean",
    "integer",
    "number",
    "string",
    "action",
    "list",
    "path",
    "addon",
    "date",
    "time"
  ]
}
}}
==== Setting.Value ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    {
      "type": "boolean",
      "required": true
    },
    {
      "type": "integer",
      "required": true
    },
    {
      "type": "number",
      "required": true
    },
    {
      "type": "string",
      "required": true
    }
  ]
}
}}
==== Setting.Value.Extended ====
'''Type:''' ''mixed''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": [
    {
      "type": "boolean",
      "required": true
    },
    {
      "type": "integer",
      "required": true
    },
    {
      "type": "number",
      "required": true
    },
    {
      "type": "string",
      "required": true
    },
    {
      "$ref": "Setting.Value.List",
      "required": true
    }
  ]
}
}}
==== Setting.Value.List ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "array",
  "items": {
    "$ref": "Setting.Value"
  }
}
}}
=== System ===
==== System.Property.Name ====
'''Type:''' ''string''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "string",
  "enum": [
    "canshutdown",
    "cansuspend",
    "canhibernate",
    "canreboot"
  ]
}
}}
==== System.Property.Value ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''boolean'' canshutdown]
* [''boolean'' cansuspend]
* [''boolean'' canhibernate]
* [''boolean'' canreboot]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "canshutdown": {
      "type": "boolean"
    },
    "cansuspend": {
      "type": "boolean"
    },
    "canhibernate": {
      "type": "boolean"
    },
    "canreboot": {
      "type": "boolean"
    }
  }
}
}}
=== Textures ===
==== Textures.Details.Size ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' size]
* [''integer'' width]
* [''integer'' height]
* [''integer'' usecount]
* [''string'' lastused]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Details.Texture ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' textureid
* [''string'' url]
* [''string'' cachedurl]
* [''string'' lasthashcheck]
* [''string'' imagehash]
* [''array'' sizes]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
      }
    }
  }
}
}}
==== Textures.Fields.Texture ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "url",
      "cachedurl",
      "lasthashcheck",
      "imagehash",
      "sizes"
    ]
  }
}
}}
=== Video ===
==== Video.Cast ====
'''Type:''' ''array''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Details.Base ====
'''Extends:'''
* ''[[#Media.Details.Base|Media.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' playcount]
* [''[[#Media.Artwork|Media.Artwork]]'' art]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Media.Details.Base",
  "properties": {
    "playcount": {
      "type": "integer"
    },
    "art": {
      "$ref": "Media.Artwork"
    }
  }
}
}}
==== Video.Details.Episode ====
'''Extends:'''
* ''[[#Video.Details.File|Video.Details.File]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' episodeid
* [''string'' votes]
* [''number'' rating]
* [''[[#Array.String|Array.String]]'' writer]
* [''string'' firstaired]
* [''string'' productioncode]
* [''integer'' season]
* [''integer'' episode]
* [''[[#Media.UniqueID|Media.UniqueID]]'' uniqueid]
* [''string'' originaltitle]
* [''string'' showtitle]
* [''[[#Video.Cast|Video.Cast]]'' cast]
* [''[[#Library.Id|Library.Id]]'' tvshowid]
* [''integer'' specialsortseason]
* [''integer'' specialsortepisode]
* [''integer'' userrating]
* [''[[#Library.Id|Library.Id]]'' seasonid]
* [''Video.Ratings'' ratings]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.File ====
'''Extends:'''
* ''[[#Video.Details.Item|Video.Details.Item]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''integer'' runtime]
* [''[[#Array.String|Array.String]]'' director]
* [''[[#Video.Streams|Video.Streams]]'' streamdetails]
* [''[[#Video.Resume|Video.Resume]]'' resume]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Item ====
'''Extends:'''
* ''[[#Video.Details.Media|Video.Details.Media]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' file]
* [''string'' plot]
* [''string'' lastplayed]
* [''string'' dateadded]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Video.Details.Media",
  "properties": {
    "file": {
      "type": "string"
    },
    "plot": {
      "type": "string"
    },
    "lastplayed": {
      "type": "string"
    },
    "dateadded": {
      "type": "string"
    }
  }
}
}}
==== Video.Details.Media ====
'''Extends:'''
* ''[[#Video.Details.Base|Video.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''string'' title]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Video.Details.Base",
  "properties": {
    "title": {
      "type": "string"
    }
  }
}
}}
==== Video.Details.Movie ====
'''Extends:'''
* ''[[#Video.Details.File|Video.Details.File]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' movieid
* [''[[#Array.String|Array.String]]'' genre]
* [''integer'' year]
* [''number'' rating]
* [''string'' trailer]
* [''string'' tagline]
* [''string'' plotoutline]
* [''string'' originaltitle]
* [''string'' sorttitle]
* [''[[#Array.String|Array.String]]'' writer]
* [''[[#Array.String|Array.String]]'' studio]
* [''string'' mpaa]
* [''[[#Video.Cast|Video.Cast]]'' cast]
* [''[[#Array.String|Array.String]]'' country]
* [''string'' imdbnumber]
* [''string'' set]
* [''[[#Array.String|Array.String]]'' showlink]
* [''integer'' top250]
* [''string'' votes]
* [''[[#Library.Id|Library.Id]]'' setid]
* [''[[#Array.String|Array.String]]'' tag]
* [''integer'' userrating]
* [''Video.Ratings'' ratings]
* [''string'' premiered]
* [''[[#Media.UniqueID|Media.UniqueID]]'' uniqueid]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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|Video.Details.Media]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' setid
* [''string'' plot]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Video.Details.Media",
  "properties": {
    "setid": {
      "$ref": "Library.Id",
      "required": true
    },
    "plot": {
      "type": "string"
    }
  }
}
}}
==== Video.Details.MovieSet.Extended ====
'''Extends:'''
* ''[[#Video.Details.MovieSet|Video.Details.MovieSet]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits
* [''array'' movies]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Video.Details.MovieSet",
  "properties": {
    "limits": {
      "$ref": "List.LimitsReturned",
      "required": true
    },
    "movies": {
      "type": "array",
      "items": {
        "$ref": "Video.Details.Movie"
      }
    }
  }
}
}}
==== Video.Details.MusicVideo ====
'''Extends:'''
* ''[[#Video.Details.File|Video.Details.File]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' musicvideoid
* [''[[#Array.String|Array.String]]'' studio]
* [''integer'' year]
* [''string'' album]
* [''[[#Array.String|Array.String]]'' artist]
* [''[[#Array.String|Array.String]]'' genre]
* [''integer'' track]
* [''[[#Array.String|Array.String]]'' tag]
* [''number'' rating]
* [''integer'' userrating]
* [''string'' premiered]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
    }
  }
}
}}
==== Video.Details.Season ====
'''Extends:'''
* ''[[#Video.Details.Base|Video.Details.Base]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' seasonid
* ''integer'' season
* [''string'' showtitle]
* [''integer'' episode]
* [''integer'' watchedepisodes]
* [''[[#Library.Id|Library.Id]]'' tvshowid]
* [''integer'' userrating]
* [''string'' title]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.TVShow ====
'''Extends:'''
* ''[[#Video.Details.Item|Video.Details.Item]]''
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''[[#Library.Id|Library.Id]]'' tvshowid
* [''[[#Array.String|Array.String]]'' genre]
* [''integer'' year]
* [''number'' rating]
* [''string'' originaltitle]
* [''string'' sorttitle]
* [''[[#Array.String|Array.String]]'' studio]
* [''string'' mpaa]
* [''[[#Video.Cast|Video.Cast]]'' cast]
* [''integer'' episode]
* [''integer'' watchedepisodes]
* [''string'' imdbnumber]
* [''string'' premiered]
* [''string'' votes]
* [''string'' episodeguide]
* [''integer'' season]
* [''[[#Array.String|Array.String]]'' tag]
* [''integer'' userrating]
* [''Video.Ratings'' ratings]
* [''integer'' runtime]
* [''string'' status]
* [''[[#Media.UniqueID|Media.UniqueID]]'' uniqueid]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Fields.Episode ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Movie ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "title",
      "playcount",
      "fanart",
      "thumbnail",
      "art",
      "plot"
    ]
  }
}
}}
==== Video.Fields.MusicVideo ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "description": "Requesting the streamdetails 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"
    ]
  }
}
}}
==== Video.Fields.Season ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "extends": "Item.Fields.Base",
  "items": {
    "type": "string",
    "enum": [
      "season",
      "showtitle",
      "playcount",
      "episode",
      "fanart",
      "thumbnail",
      "tvshowid",
      "watchedepisodes",
      "art",
      "userrating",
      "title"
    ]
  }
}
}}
==== Video.Fields.TVShow ====
'''Extends:'''
* ''[[#Item.Fields.Base|Item.Fields.Base]]''
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.Rating ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* ''number'' rating
* [''integer'' votes]
* [''boolean'' default]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "rating": {
      "type": "number",
      "required": true
    },
    "votes": {
      "type": "integer"
    },
    "default": {
      "type": "boolean"
    }
  }
}
}}
==== Video.Ratings ====
'''Type:''' ''object''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "additionalProperties": {
    "$ref": "Video.Rating"
  }
}
}}
==== Video.Ratings.Set ====
'''Type:''' ''object''
<br />
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "additionalProperties": {
    "type": [
      "null",
      {
        "$ref": "Video.Rating",
        "required": true
      }
    ]
  }
}
}}
==== Video.Resume ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''number'' position]
* [''number'' total]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "object",
  "properties": {
    "position": {
      "type": "number",
      "minimum": 0.0
    },
    "total": {
      "type": "number",
      "minimum": 0.0
    }
  },
  "additionalProperties": false
}
}}
==== Video.Streams ====
'''Type:''' ''object''
<br />
'''Properties:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
* [''array'' audio]
* [''array'' video]
* [''array'' subtitle]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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"
          }
        },
        "additionalProperties": false
      }
    },
    "subtitle": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "language": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
}}
== Notifications ==
=== Application ===
==== Application.OnVolumeChanged ====
The volume of the application has changed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''integer'' volume
#* ''boolean'' muted
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== AudioLibrary ===
==== AudioLibrary.OnCleanFinished ====
The audio library has been cleaned.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnCleanStarted ====
An audio library clean operation has started.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnExport ====
An audio library export has finished.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# [''object'' data]:
#* [''string'' file = ""]
#* [''integer'' failcount = 0]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== AudioLibrary.OnRemove ====
An audio item has been removed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Library.Id|Library.Id]]'' id
#* ''[[#Notifications.Library.Audio.Type|Notifications.Library.Audio.Type]]'' type
#* ''[[#Optional.Boolean|Optional.Boolean]]'' transaction
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnScanFinished ====
Scanning the audio library has been finished.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnScanStarted ====
An audio library scan has started.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnUpdate ====
An audio item has been updated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Library.Id|Library.Id]]'' id
#* ''string'' type
#* ''[[#Optional.Boolean|Optional.Boolean]]'' transaction
#* ''[[#Optional.Boolean|Optional.Boolean]]'' added
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== GUI ===
==== GUI.OnDPMSActivated ====
Energy saving/DPMS has been activated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
Energy saving/DPMS has been deactivated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "notification",
  "description": "Energy saving/DPMS has been deactivated.",
  "params": [
    {
      "name": "sender",
      "type": "string",
      "required": true
    },
    {
      "name": "data",
      "type": "null",
      "required": true
    }
  ],
  "returns": null
}
}}
==== GUI.OnScreensaverActivated ====
The screensaver has been activated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
The screensaver has been deactivated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''boolean'' shuttingdown
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== Input ===
==== Input.OnInputFinished ====
The user has provided the requested input.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== Input.OnInputRequested ====
The user is requested to provide some information.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''string'' type
#* ''string'' value
#* ''string'' title
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== Player ===
==== Player.OnAVChange ====
Audio- or videostream has changed. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnAVStart ====
Playback of a media item has been started and first frame is available. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnPause ====
Playback of a media item has been paused. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnPlay ====
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.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnPropertyChanged ====
A property of the playing items has changed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Player.Property.Value|Player.Property.Value]]'' property
#* ''[[#Player.Notifications.Player|Player.Notifications.Player]]'' player
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== Player.OnResume ====
Playback of a media item has been resumed. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnSeek ====
The playback position has been changed. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Notifications.Item|Notifications.Item]]'' item
#* ''[[#Player.Notifications.Player.Seek|Player.Notifications.Player.Seek]]'' player
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnSpeedChanged ====
Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''[[#Player.Notifications.Data|Player.Notifications.Data]]'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnStop ====
Playback of a media item has been stopped. If there is no ID available extra information will be provided.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Notifications.Item|Notifications.Item]]'' item
#* ''boolean'' end
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== Playlist ===
==== Playlist.OnAdd ====
A playlist item has been added.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Playlist.Id|Playlist.Id]]'' playlistid
#* ''[[#Notifications.Item|Notifications.Item]]'' item
#* ''[[#Playlist.Position|Playlist.Position]]'' position
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnClear ====
A playlist item has been cleared.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Playlist.Id|Playlist.Id]]'' playlistid
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== Playlist.OnRemove ====
A playlist item has been removed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Playlist.Id|Playlist.Id]]'' playlistid
#* ''[[#Playlist.Position|Playlist.Position]]'' position
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
=== System ===
==== System.OnLowBattery ====
The system is on low battery.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "notification",
  "description": "The system is on low battery.",
  "params": [
    {
      "name": "sender",
      "type": "string",
      "required": true
    },
    {
      "name": "data",
      "type": "null",
      "required": true
    }
  ],
  "returns": null
}
}}
==== System.OnQuit ====
Kodi will be closed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''integer'' exitcode
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
The system will be restarted.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
The system will be suspended.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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 ====
The system woke up from suspension.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "type": "notification",
  "description": "The system woke up from suspension.",
  "params": [
    {
      "name": "sender",
      "type": "string",
      "required": true
    },
    {
      "name": "data",
      "type": "null",
      "required": true
    }
  ],
  "returns": null
}
}}
=== VideoLibrary ===
==== VideoLibrary.OnCleanFinished ====
The video library has been cleaned.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnCleanStarted ====
A video library clean operation has started.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnExport ====
A video library export has finished.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# [''object'' data]:
#* [''string'' file = ""]
#* [''string'' root = ""]
#* [''integer'' failcount = 0]
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnRefresh ====
The video library has been refreshed and a home screen reload might be necessary.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
==== VideoLibrary.OnRemove ====
A video item has been removed.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Library.Id|Library.Id]]'' id
#* ''[[#Notifications.Library.Video.Type|Notifications.Library.Video.Type]]'' type
#* ''[[#Optional.Boolean|Optional.Boolean]]'' transaction
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnScanFinished ====
Scanning the video library has been finished.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnScanStarted ====
A video library scan has started.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''string'' data
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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.OnUpdate ====
A video item has been updated.<br />
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' sender
# ''object'' data:
#* ''[[#Library.Id|Library.Id]]'' id
#* ''string'' type
#* ''integer'' playcount = -1
#* ''[[#Optional.Boolean|Optional.Boolean]]'' transaction
#* ''[[#Optional.Boolean|Optional.Boolean]]'' added
</div>
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|
{
  "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
}
}}
 
== See also ==
* [[JSON-RPC API]]
* [[JSON-RPC API/v4|JSON-RPC API v4 (Eden)]]
* [[JSON-RPC API/v6|JSON-RPC API v6 (Frodo - Jarvis)]]
* [[JSON-RPC API/v8|JSON-RPC API v8 (Krypton)]]
* [[JSON-RPC API/v10|JSON-RPC API v10 (Leia)]]
 
== External links ==
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]
* [http://tools.ietf.org/html/draft-zyp-json-schema-03 A JSON Media Type for Describing the Structure and Meaning of JSON Documents (Draft 03)]
 
[[Category:Development]]

Latest revision as of 16:40, 19 October 2020

Ronie.jpg