<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://kodi.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thezoggy</id>
	<title>Official Kodi Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://kodi.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thezoggy"/>
	<link rel="alternate" type="text/html" href="https://kodi.wiki/view/Special:Contributions/Thezoggy"/>
	<updated>2026-06-18T18:31:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242055</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242055"/>
		<updated>2022-05-20T05:47:14Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JSON-RPC_API_nav}}&lt;br /&gt;
{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated HTTP API, and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling_the_webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using JSONRPC.NotifyAll it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method Player.Stop does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling Files.Download. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the Files.Download request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling Files.PrepareDownload and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Python&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 3 / 4&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 5 / 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 8&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|17.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Krypton&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 10&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|18&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Leia&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 12&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|19&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Matrix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;For information requests only, actions require POST&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 February 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 March 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 24 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 22 August 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 October 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.5&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 14 November 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.6&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 29 January 2019&lt;br /&gt;
| 18.0&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:1,&amp;quot;patch&amp;quot;:1}&lt;br /&gt;
|-&lt;br /&gt;
| 17 February 2019&lt;br /&gt;
| 18.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:1,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| 22 April 2019&lt;br /&gt;
| 18.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 27 June 2019&lt;br /&gt;
| 18.3&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 01 September 2019&lt;br /&gt;
| 18.4&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 17 November 2019&lt;br /&gt;
| 18.5&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 02 March 2020&lt;br /&gt;
| 18.6&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 21 May 2020&lt;br /&gt;
| 18.7&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 01 June 2020&lt;br /&gt;
| 18.7.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 14 June 2020&lt;br /&gt;
| 18.7.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 29 July 2020&lt;br /&gt;
| 18.8&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 24 October 2020&lt;br /&gt;
| 18.9&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 February 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:2,&amp;quot;patch&amp;quot;:1}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 10 May 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:3,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 09 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:4,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 28 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:4,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 March 2022&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:4,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| TBA 2022&lt;br /&gt;
| 20.0&lt;br /&gt;
| Nexus&lt;br /&gt;
| {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:10,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to JSONRPC.Introspect results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for version 2 it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with version 3. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:JSON-RPC]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242054</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242054"/>
		<updated>2022-05-20T05:38:28Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JSON-RPC_API_nav}}&lt;br /&gt;
{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated HTTP API, and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling_the_webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using JSONRPC.NotifyAll it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method Player.Stop does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling Files.Download. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the Files.Download request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling Files.PrepareDownload and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Python&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 3 / 4&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 5 / 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 8&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|17.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Krypton&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 10&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|18&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Leia&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 12&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|19&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Matrix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;For information requests only, actions require POST&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 February 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 March 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 24 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 22 August 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 October 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.5&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 14 November 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.6&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 29 January 2019&lt;br /&gt;
| 18.0&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:1,&amp;quot;patch&amp;quot;:1}&lt;br /&gt;
|-&lt;br /&gt;
| 17 February 2019&lt;br /&gt;
| 18.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 22 April 2019&lt;br /&gt;
| 18.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 27 June 2019&lt;br /&gt;
| 18.3&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 01 September 2019&lt;br /&gt;
| 18.4&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 17 November 2019&lt;br /&gt;
| 18.5&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 02 March 2020&lt;br /&gt;
| 18.6&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 21 May 2020&lt;br /&gt;
| 18.7&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 01 June 2020&lt;br /&gt;
| 18.7.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 14 June 2020&lt;br /&gt;
| 18.7.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 29 July 2020&lt;br /&gt;
| 18.8&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 24 October 2020&lt;br /&gt;
| 18.9&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 February 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 10 May 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 09 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 28 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 March 2022&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:12,&amp;quot;minor&amp;quot;:4,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to JSONRPC.Introspect results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for version 2 it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with version 3. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:JSON-RPC]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242052</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242052"/>
		<updated>2022-05-19T17:57:41Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JSON-RPC_API_nav}}&lt;br /&gt;
{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated HTTP API, and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling_the_webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using JSONRPC.NotifyAll it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method Player.Stop does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling Files.Download. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the Files.Download request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling Files.PrepareDownload and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Python&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 3 / 4&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 5 / 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 8&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|17.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Krypton&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 10&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|18&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Leia&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 12&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|19&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Matrix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;For information requests only, actions require POST&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 February 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 March 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 24 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 22 August 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 October 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.5&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 14 November 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.6&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 29 January 2019&lt;br /&gt;
| 18.0&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:1,&amp;quot;patch&amp;quot;:1}&lt;br /&gt;
|-&lt;br /&gt;
| 17 February 2019&lt;br /&gt;
| 18.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 22 April 2019&lt;br /&gt;
| 18.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 27 June 2019&lt;br /&gt;
| 18.3&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 01 September 2019&lt;br /&gt;
| 18.4&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 17 November 2019&lt;br /&gt;
| 18.5&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 02 March 2020&lt;br /&gt;
| 18.6&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 21 May 2020&lt;br /&gt;
| 18.7&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 01 June 2020&lt;br /&gt;
| 18.7.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 14 June 2020&lt;br /&gt;
| 18.7.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 29 July 2020&lt;br /&gt;
| 18.8&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 24 October 2020&lt;br /&gt;
| 18.9&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 February 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 10 May 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 09 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 28 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 March 2022&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to JSONRPC.Introspect results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for version 2 it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with version 3. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:JSON-RPC]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242051</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=242051"/>
		<updated>2022-05-19T17:56:02Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JSON-RPC_API_nav}}&lt;br /&gt;
{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated HTTP API, and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling_the_webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using JSONRPC.NotifyAll it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method Player.Stop does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling Files.Download. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the Files.Download request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling Files.PrepareDownload and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Python&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 3 / 4&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 5 / 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 6&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 8&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|17.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Krypton&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 10&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|18&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Leia&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Version 12&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|19&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Matrix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;For information requests only, actions require POST&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 5 February 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 March 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 24 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 22 August 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 October 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.5&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 14 November 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.6&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| 29 January 2019&lt;br /&gt;
| 18.0&lt;br /&gt;
| Leia&lt;br /&gt;
| {&amp;quot;major&amp;quot;:10,&amp;quot;minor&amp;quot;:1,&amp;quot;patch&amp;quot;:1}&lt;br /&gt;
|-&lt;br /&gt;
| 17 February 2019&lt;br /&gt;
| 18.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 22 April 2019&lt;br /&gt;
| 18.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 27 June 2019&lt;br /&gt;
| 18.3&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 1 September 2019&lt;br /&gt;
| 18.4&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 17 November 2019&lt;br /&gt;
| 18.5&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 2 March 2020&lt;br /&gt;
| 18.6&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 21 May 2020&lt;br /&gt;
| 18.7&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 1 June 2020&lt;br /&gt;
| 18.7.1&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 14 June 2020&lt;br /&gt;
| 18.7.2&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 29 July 2020&lt;br /&gt;
| 18.8&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| 24 October 2020&lt;br /&gt;
| 18.9&lt;br /&gt;
| Leia&lt;br /&gt;
| {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 February 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 10 May 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 9 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 28 October 2021&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 4 March 2022&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Matrix&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to JSONRPC.Introspect results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for version 2 it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with version 3. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:JSON-RPC]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=131291</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=131291"/>
		<updated>2017-12-02T06:27:54Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v8|Version 8]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|17.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Krypton&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 5 February 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 March 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 24 May 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.3&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 22 August 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.4&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 23 October 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.5&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 14 November 2017&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.6&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v2|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo - Jarvis)]]&lt;br /&gt;
* [[/v8|JSON-RPC API v8 (Krypton)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=126756</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=126756"/>
		<updated>2016-12-10T08:25:43Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | ?? December 2016&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Krypton&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:8,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=122763</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=122763"/>
		<updated>2016-05-01T08:29:30Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|24 April 2016&lt;br /&gt;
|16.1&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:5}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=117190</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=117190"/>
		<updated>2016-02-21T14:23:19Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|21 February 2016&lt;br /&gt;
|16.0&lt;br /&gt;
|Jarvis&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:32,&amp;quot;patch&amp;quot;:4}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=117189</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=117189"/>
		<updated>2016-02-21T14:16:50Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|16.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Jarvis&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=102654</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=102654"/>
		<updated>2015-10-21T23:01:30Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 19 October 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=101417</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=101417"/>
		<updated>2015-09-21T06:27:09Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 20 September 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2 (RC2)&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=100361</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=100361"/>
		<updated>2015-08-31T20:19:34Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 16 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 28 August 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.2 (RC1)&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=98726</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=98726"/>
		<updated>2015-07-23T12:05:32Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=98725</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=98725"/>
		<updated>2015-07-23T12:05:07Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with Kodi. It replaces the deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of Kodi will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of Kodi from the client creator.&lt;br /&gt;
&lt;br /&gt;
In Kodi JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information Kodi sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of Kodi via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control Kodi&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control Kodi&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to Kodi, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by Kodi addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an Kodi installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside Kodi to control Kodi, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access Kodi&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as Kodi or on a different machine which can access the machine running Kodi using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside Kodi to control Kodi it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access Kodi&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of Kodi&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of Kodi, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask Kodi to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from Kodi by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from Kodi by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by Kodi is constantly extended to provide better and more functionality to third party applications. For that reason Kodi provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s Kodi installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|15.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Isengard&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|26 March 2014&lt;br /&gt;
|14.2&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 21 July 2015&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 15.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Isengard&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:25,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Kodi&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of Kodi, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by Kodi can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of Kodi&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to Kodi to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running Kodi it is possible to send and receive raw json data to/from Kodi. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to Kodi is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to Kodi.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=84624</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=84624"/>
		<updated>2015-02-01T09:58:57Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|30 January 2014&lt;br /&gt;
|14.1&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82583</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82583"/>
		<updated>2014-12-24T04:27:35Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82582</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82582"/>
		<updated>2014-12-24T04:25:07Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSONRPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82581</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82581"/>
		<updated>2014-12-24T04:24:37Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82580</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=82580"/>
		<updated>2014-12-24T04:24:01Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|14.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Helix&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|23 December 2014&lt;br /&gt;
|14.0&lt;br /&gt;
|Helix&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:21,&amp;quot;patch&amp;quot;:2}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=78085</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=78085"/>
		<updated>2014-08-17T23:39:18Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.2&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 17 August 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.2&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo/Gotham)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=77113</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=77113"/>
		<updated>2014-06-29T20:35:14Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.1&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 05 June 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.1&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74679</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74679"/>
		<updated>2014-05-08T00:33:24Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:14,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74678</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74678"/>
		<updated>2014-05-08T00:32:58Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&amp;quot;major&amp;quot;: 6, &amp;quot;minor&amp;quot;: 14, &amp;quot;patch&amp;quot;: 3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74677</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74677"/>
		<updated>2014-05-08T00:32:12Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;patch&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;patch&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:0}&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{&amp;quot;major&amp;quot;:6,&amp;quot;minor&amp;quot;:0,&amp;quot;patch&amp;quot;:3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {&#039;major&#039;: 6, &#039;minor&#039;: 14, &#039;patch&#039;: 3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74675</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74675"/>
		<updated>2014-05-07T23:40:04Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;bugfix&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;bugfix&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;bugfix&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|XBMC Release&lt;br /&gt;
!|JSON-RPC.Version&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Date&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Codename&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|[&amp;quot;version&amp;quot;]&lt;br /&gt;
|-&lt;br /&gt;
|18 December 2010&lt;br /&gt;
|10.0&lt;br /&gt;
|Dharma&lt;br /&gt;
|xxx&lt;br /&gt;
|-&lt;br /&gt;
|10 March 2011&lt;br /&gt;
|10.1&lt;br /&gt;
|Dharma&lt;br /&gt;
|xxx&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |24 March 2012 &lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |11.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |Eden&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; |4&lt;br /&gt;
|-&lt;br /&gt;
|29 January 2013&lt;br /&gt;
|12.0&lt;br /&gt;
|Frodo&lt;br /&gt;
|xxx&lt;br /&gt;
|-&lt;br /&gt;
|18 March 2013&lt;br /&gt;
|12.1&lt;br /&gt;
|Frodo&lt;br /&gt;
|xxx&lt;br /&gt;
|-&lt;br /&gt;
|03 May 2013&lt;br /&gt;
|12.2&lt;br /&gt;
|Frodo&lt;br /&gt;
|xxx&lt;br /&gt;
|-&lt;br /&gt;
|24 December 2013&lt;br /&gt;
|12.3&lt;br /&gt;
|Frodo&lt;br /&gt;
|{u&#039;major&#039;: 6, u&#039;minor&#039;: 0, u&#039;patch&#039;: 3}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 04 May 2014&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | 13.0&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | Gotham&lt;br /&gt;
| style=&amp;quot;background:#eee;&amp;quot; | {u&#039;major&#039;: 6, u&#039;minor&#039;: 14, u&#039;patch&#039;: 3}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Archive:JSON-RPC_API/v6&amp;diff=74673</id>
		<title>Archive:JSON-RPC API/v6</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Archive:JSON-RPC_API/v6&amp;diff=74673"/>
		<updated>2014-05-07T17:18:05Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* JSON-RPC 2.0 compatibility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]|[[JSON-RPC API]]}}&lt;br /&gt;
&lt;br /&gt;
Version 6 is a stable version of XBMC&#039;s JSON-RPC API and is published with the release of XBMC v12 (Frodo) and v13 (Gotham) . 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 XBMC&#039;s JSON-RPC API and can therefore also profit from additional features like notifications.&lt;br /&gt;
&lt;br /&gt;
Some of the methods have been changed or removed, so v6 is not 100% backwards compatible with older versions. A rough and incomplete list of changes compared to version 4 can be found [[Frodo API Changes|here]]. A more complete and detailed list can be found in the [http://forum.xbmc.org/showthread.php?t=98551 forum].&lt;br /&gt;
&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
==JSON-RPC 2.0 compatibility==&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; width: 7em; text-align: left;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot;|Version 6&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Documentation (JSON Schema)==&lt;br /&gt;
===Supported features of JSON Schema===&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:2em&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10em; text-align: left;&amp;quot;|Schema&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|IETF Draft 03&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1 type]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.2 properties]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.3 patternProperties]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.4 additionalProperties]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.5 items]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.6 additionalItems]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7 required]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.8 dependencies]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.9 minimum]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.10 maximum]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:2em&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10em; text-align: left;&amp;quot;|Schema&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|IETF Draft 03&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.11 exclusiveMinimum]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.12 exclusiveMaximum]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.13 minItems]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.14 maxItems]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.15 uniqueItems]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.16 pattern]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.17 minLength]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.18 maxLength]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.19 enum]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.20 default]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10em; text-align: left;&amp;quot;|Schema&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|IETF Draft 03&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.21 title]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22 description]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23 format]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.24 divisibleBy]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.25 disallow]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.26 extends]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.27 id]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.28 $ref]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.29 $schema]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|[http://tools.ietf.org/html/draft-zyp-json-schema-03#section-6 Hyper Schema]&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:left;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Error message==&lt;br /&gt;
If XBMC 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&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;code&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
    &amp;quot;message&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
    &amp;quot;data&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;method&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
        &amp;quot;stack&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;Error.Stack&amp;quot;,&lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
            &amp;quot;type&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
            &amp;quot;message&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;required&amp;quot;: true },&lt;br /&gt;
            &amp;quot;property&amp;quot;: { &amp;quot;$ref&amp;quot;: &amp;quot;Error.Stack&amp;quot; }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Namespaces==&lt;br /&gt;
The XBMC JSON-RPC API is split up into namespaces, which contain methods that can be called. These namespaces are:&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
JSONRPC          A variety of standard JSONRPC calls&lt;br /&gt;
Player           Manages all available players&lt;br /&gt;
Playlist         Playlist modification&lt;br /&gt;
Files            Shares information&lt;br /&gt;
AudioLibrary     Audio Library information&lt;br /&gt;
VideoLibrary     Video Library information&lt;br /&gt;
Input            Allows limited navigation within XBMC&lt;br /&gt;
Application      Application information and control&lt;br /&gt;
System           System controls and information&lt;br /&gt;
Favourites       Favourites GetFavourites and AddFavourite&lt;br /&gt;
Profiles         Support for Profiles operations to XBMC. &lt;br /&gt;
Settings         Allows manipulation of XBMC settings.&lt;br /&gt;
Textures         with GetTextures and RemoveTexture&lt;br /&gt;
XBMC             Dumping ground for very XBMC specific operations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
===Addons===&lt;br /&gt;
====Addons.ExecuteAddon====&lt;br /&gt;
Executes the given addon with the given parameters (if possible)&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ExecuteAddon&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; addonid&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; params = null ]&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; wait = False ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;addonid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;params&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;wait&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Executes the given addon with the given parameters (if possible)&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addons.GetAddonDetails====&lt;br /&gt;
Gets the details of a specific addon&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; addonid&lt;br /&gt;
#[ &#039;&#039;[[#Addon.Fields|Addon.Fields]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#Addon.Details|Addon.Details]]&#039;&#039; addon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;addonid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Fields&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Gets the details of a specific addon&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;addon&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Details&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addons.GetAddons====&lt;br /&gt;
Gets all available addons&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Addon.Types|Addon.Types]]&#039;&#039; type = &amp;quot;unknown&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;[[#Addon.Content|Addon.Content]]&#039;&#039; content = &amp;quot;unknown&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; enabled = &amp;quot;all&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;[[#Addon.Fields|Addon.Fields]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Addon.Details|Addon.Details]]&#039;&#039;[] addons ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Types&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Content&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Content provided by the addon. Only considered for plugins and scripts.&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;content&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;enabled&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;all&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;all&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Fields&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Gets all available addons&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;addons&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Details&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addons.SetAddonEnabled====&lt;br /&gt;
Enables/Disables a specific addon&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ManageAddon&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; addonid&lt;br /&gt;
#&#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; enabled&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;addonid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;enabled&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Enables/Disables a specific addon&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Application===&lt;br /&gt;
====Application.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Application.Property.Name|Application.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Application.Property.Value|Application.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Application.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Application.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Application.Quit====&lt;br /&gt;
Quit application&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPower&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Quit application&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Application.SetMute====&lt;br /&gt;
Toggle mute/unmute&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; mute&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;boolean&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;mute&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Toggle mute/unmute&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Mute state&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Application.SetVolume====&lt;br /&gt;
Set the current volume&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; volume&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;volume&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;maximum&amp;quot;: 100&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Global.IncrementDecrement&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Set the current volume&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===AudioLibrary===&lt;br /&gt;
====AudioLibrary.Clean====&lt;br /&gt;
Cleans the audio library from non-existent items&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Cleans the audio library from non-existent items&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.Export====&lt;br /&gt;
Exports all items from the audio library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* WriteFile&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; options ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;options&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;path&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Path to the directory to where the data should be exported&amp;quot;, &lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;overwrite&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to overwrite existing exported files&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: false&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;images&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to export thumbnails and fanart images&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: false&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Exports all items from the audio library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetAlbumDetails====&lt;br /&gt;
Retrieve details about a specific album&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; albumid&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Album|Audio.Fields.Album]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Album|Audio.Details.Album]]&#039;&#039; albumdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Album&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific album&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;albumdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Album&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetAlbums====&lt;br /&gt;
Retrieve all albums from specified artist or genre&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Album|Audio.Fields.Album]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Album|Audio.Details.Album]]&#039;&#039;[] albums ]&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Album&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;artistid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;artist&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Albums&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all albums from specified artist or genre&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;albums&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Album&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetArtistDetails====&lt;br /&gt;
Retrieve details about a specific artist&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; artistid&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Artist|Audio.Fields.Artist]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Artist|Audio.Details.Artist]]&#039;&#039; artistdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Artist&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific artist&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;artistdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Artist&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetArtists====&lt;br /&gt;
Retrieve all artists&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; albumartistsonly = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Artist|Audio.Fields.Artist]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Artist|Audio.Details.Artist]]&#039;&#039;[] artists ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Whether or not to include artists only appearing in compilations. If the parameter is not passed or is passed as null the GUI setting will be used&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumartistsonly&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Artist&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;album&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;songid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Artists&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all artists&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;artists&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Artist&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetGenres====&lt;br /&gt;
Retrieve all genres&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Library.Fields.Genre|Library.Fields.Genre]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Details.Genre|Library.Details.Genre]]&#039;&#039;[] genres&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Fields.Genre&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all genres&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;genres&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Details.Genre&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetRecentlyAddedAlbums====&lt;br /&gt;
Retrieve recently added albums&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Album|Audio.Fields.Album]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Album|Audio.Details.Album]]&#039;&#039;[] albums ]&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Album&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve recently added albums&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;albums&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Album&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetRecentlyAddedSongs====&lt;br /&gt;
Retrieve recently added songs&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#List.Amount|List.Amount]]&#039;&#039; albumlimit = -1 ]&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Song|Audio.Fields.Song]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Song|Audio.Details.Song]]&#039;&#039;[] songs ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Amount&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;The amount of recently added albums from which to return the songs&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumlimit&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Song&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve recently added songs&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;songs&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Song&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetRecentlyPlayedAlbums====&lt;br /&gt;
Retrieve recently played albums&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Album|Audio.Fields.Album]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Album|Audio.Details.Album]]&#039;&#039;[] albums ]&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Album&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve recently played albums&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;albums&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Album&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetRecentlyPlayedSongs====&lt;br /&gt;
Retrieve recently played songs&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Song|Audio.Fields.Song]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Song|Audio.Details.Song]]&#039;&#039;[] songs ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Song&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve recently played songs&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;songs&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Song&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetSongDetails====&lt;br /&gt;
Retrieve details about a specific song&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; songid&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Song|Audio.Fields.Song]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Song|Audio.Details.Song]]&#039;&#039; songdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;songid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Song&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific song&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;songdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Song&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.GetSongs====&lt;br /&gt;
Retrieve all songs from specified album, artist or genre&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Audio.Fields.Song|Audio.Fields.Song]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Audio.Details.Song|Audio.Details.Song]]&#039;&#039;[] songs ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Fields.Song&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;artistid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;artist&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;album&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Songs&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all songs from specified album, artist or genre&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;songs&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Audio.Details.Song&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.Scan====&lt;br /&gt;
Scans the audio sources for new library items&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;string&#039;&#039; directory = &amp;quot;&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;directory&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Scans the audio sources for new library items&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.SetAlbumDetails====&lt;br /&gt;
Update the given album with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; albumid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; artist = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; description = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; theme = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; mood = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; style = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; type = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; albumlabel = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; rating = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; year = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;theme&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumlabel&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given album with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.SetArtistDetails====&lt;br /&gt;
Update the given artist with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; artistid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; artist = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; instrument = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; style = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; mood = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; born = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; formed = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; description = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; died = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; disbanded = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; yearsactive = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;instrument&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;born&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;formed&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;died&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;disbanded&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;yearsactive&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given artist with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.SetSongDetails====&lt;br /&gt;
Update the given song with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; songid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; artist = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; albumartist = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; year = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; rating = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; album = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; track = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; disc = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; duration = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; comment = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; musicbrainztrackid = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; musicbrainzartistid = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; musicbrainzalbumid = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; musicbrainzalbumartistid = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;songid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;disc&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;duration&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;comment&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicbrainztrackid&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicbrainzartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicbrainzalbumid&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicbrainzalbumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given song with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
====Files.Download====&lt;br /&gt;
Downloads the given file&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; path&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;any&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Downloads the given file&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;any&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Files.GetDirectory====&lt;br /&gt;
Get the directories and files in the given directory&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; directory&lt;br /&gt;
#[ &#039;&#039;[[#Files.Media|Files.Media]]&#039;&#039; media = &amp;quot;files&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Fields.Files|List.Fields.Files]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#List.Item.File|List.Item.File]]&#039;&#039;[] files&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;directory&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Files.Media&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;media&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;files&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Fields.Files&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Get the directories and files in the given directory&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;files&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Item.File&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Files.GetFileDetails====&lt;br /&gt;
Get details for a specific file&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; file&lt;br /&gt;
#[ &#039;&#039;[[#Files.Media|Files.Media]]&#039;&#039; media = &amp;quot;files&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Fields.Files|List.Fields.Files]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Item.File|List.Item.File]]&#039;&#039; filedetails&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Full path to the file&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Files.Media&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;media&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;files&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Fields.Files&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Get details for a specific file&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;filedetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.Item.File&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Files.GetSources====&lt;br /&gt;
Get the sources of the media windows&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Files.Media|Files.Media]]&#039;&#039; media&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#List.Items.Sources|List.Items.Sources]]&#039;&#039; sources&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Files.Media&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;media&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Get the sources of the media windows&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;sources&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.Items.Sources&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Files.PrepareDownload====&lt;br /&gt;
Provides a way to download a given file (e.g. providing an URL to the real file location)&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; path&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;string&#039;&#039; mode&lt;br /&gt;
*&#039;&#039;string&#039;&#039; protocol&lt;br /&gt;
*&#039;&#039;any&#039;&#039; details&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Provides a way to download a given file (e.g. providing an URL to the real file location)&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;mode&amp;quot;: {&lt;br /&gt;
        &amp;quot;enums&amp;quot;: [&lt;br /&gt;
          &amp;quot;redirect&amp;quot;, &lt;br /&gt;
          &amp;quot;direct&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;protocol&amp;quot;: {&lt;br /&gt;
        &amp;quot;enums&amp;quot;: [&lt;br /&gt;
          &amp;quot;http&amp;quot;&lt;br /&gt;
        ], &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;details&amp;quot;: {&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Transport specific details on how/from where to download the given file&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;any&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
====GUI.ActivateWindow====&lt;br /&gt;
Activates the given window&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlGUI&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#GUI.Window|GUI.Window]]&#039;&#039; window&lt;br /&gt;
#[ &#039;&#039;array&#039;&#039;[1..X] parameters ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;GUI.Window&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;window&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;parameters&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Activates the given window&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====GUI.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#GUI.Property.Name|GUI.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#GUI.Property.Value|GUI.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;GUI.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;GUI.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====GUI.SetFullscreen====&lt;br /&gt;
Toggle fullscreen/GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlGUI&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; fullscreen&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;boolean&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;fullscreen&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Toggle fullscreen/GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Fullscreen state&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====GUI.ShowNotification====&lt;br /&gt;
Shows a GUI notification&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlGUI&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; title&lt;br /&gt;
#&#039;&#039;string&#039;&#039; message&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; image = &amp;quot;&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;integer&#039;&#039; displaytime = 5000 ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;message&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;image&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;info&amp;quot;, &lt;br /&gt;
            &amp;quot;warning&amp;quot;, &lt;br /&gt;
            &amp;quot;error&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 1500, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;The time in milliseconds the notification will be visible&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;displaytime&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 5000, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Shows a GUI notification&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Input===&lt;br /&gt;
====Input.Back====&lt;br /&gt;
Goes back in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Goes back in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.ContextMenu====&lt;br /&gt;
Shows the context menu&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Shows the context menu&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Down====&lt;br /&gt;
Navigate down in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Navigate down in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.ExecuteAction====&lt;br /&gt;
Execute a specific action&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Input.Action|Input.Action]]&#039;&#039; action&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Input.Action&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;action&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Execute a specific action&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Home====&lt;br /&gt;
Goes to home window in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Goes to home window in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Info====&lt;br /&gt;
Shows the information dialog&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Shows the information dialog&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Left====&lt;br /&gt;
Navigate left in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Navigate left in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Right====&lt;br /&gt;
Navigate right in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Navigate right in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Select====&lt;br /&gt;
Select current item in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Select current item in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.SendText====&lt;br /&gt;
Send a generic (unicode) text&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; text&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; done = True ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Unicode text&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;text&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Whether this is the whole input or not (closes an open input dialog if true).&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;done&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Send a generic (unicode) text&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.ShowCodec====&lt;br /&gt;
Show codec information of the playing item&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Show codec information of the playing item&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.ShowOSD====&lt;br /&gt;
Show the on-screen display for the current player&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Show the on-screen display for the current player&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.Up====&lt;br /&gt;
Navigate up in GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* Navigate&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Navigate up in GUI&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===JSONRPC===&lt;br /&gt;
====JSONRPC.GetConfiguration====&lt;br /&gt;
Get client-specific configurations&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Configuration|Configuration]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Get client-specific configurations&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Configuration&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.Introspect====&lt;br /&gt;
Enumerates all actions and descriptions&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; getdescriptions = True ]&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; getmetadata = False ]&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; filterbytransport = True ]&lt;br /&gt;
#[ &#039;&#039;object&#039;&#039; filter ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; getreferences = True ]&lt;br /&gt;
*&#039;&#039;string&#039;&#039; id&lt;br /&gt;
*&#039;&#039;string&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;getdescriptions&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;getmetadata&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filterbytransport&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;getreferences&amp;quot;: {&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Whether or not to print the schema for referenced types&amp;quot;, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Name of a namespace, method or type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;method&amp;quot;, &lt;br /&gt;
            &amp;quot;namespace&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;, &lt;br /&gt;
            &amp;quot;notification&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Type of the given name&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Enumerates all actions and descriptions&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.NotifyAll====&lt;br /&gt;
Notify all other connected clients&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;string&#039;&#039; message&lt;br /&gt;
#[ &#039;&#039;any&#039;&#039; data = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;any&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;message&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;any&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Notify all other connected clients&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;any&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.Permission====&lt;br /&gt;
Retrieve the clients permissions&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; readdata&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; writefile&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlpvr&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlsystem&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; removedata&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlplayback&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; navigate&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlpower&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; executeaddon&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; manageaddon&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlgui&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; controlnotify&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; updatedata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve the clients permissions&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;readdata&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;writefile&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlpvr&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlsystem&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;removedata&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlplayback&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;navigate&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlpower&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;executeaddon&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;manageaddon&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlgui&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;controlnotify&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;updatedata&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.Ping====&lt;br /&gt;
Ping responder&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ping responder&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.SetConfiguration====&lt;br /&gt;
Change the client-specific configuration&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlNotify&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;object&#039;&#039; notifications ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; gui = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; other = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; input = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; videolibrary = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; audiolibrary = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; playlist = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; system = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; player = null ]&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; application = null ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Configuration|Configuration]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;notifications&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;gui&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;other&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;input&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;videolibrary&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;audiolibrary&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;playlist&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;system&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;player&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;application&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Change the client-specific configuration&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Configuration&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====JSONRPC.Version====&lt;br /&gt;
Retrieve the JSON-RPC protocol version.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; minor&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; patch&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; major&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve the JSON-RPC protocol version.&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;minor&amp;quot;: {&lt;br /&gt;
        &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Bumped on backwards compatible additions/changes to the API definition&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;patch&amp;quot;: {&lt;br /&gt;
        &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Bumped on any changes to the internal implementation but not to the API definition&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;major&amp;quot;: {&lt;br /&gt;
        &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Bumped on backwards incompatible changes to the API definition&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===PVR===&lt;br /&gt;
====PVR.GetChannelDetails====&lt;br /&gt;
Retrieves the details of a specific channel&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; channelid&lt;br /&gt;
#[ &#039;&#039;[[#PVR.Fields.Channel|PVR.Fields.Channel]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Details.Channel|PVR.Details.Channel]]&#039;&#039; channeldetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channelid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Fields.Channel&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the details of a specific channel&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;channeldetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Details.Channel&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.GetChannelGroupDetails====&lt;br /&gt;
Retrieves the details of a specific channel group&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#PVR.ChannelGroup.Id|PVR.ChannelGroup.Id]]&#039;&#039; channelgroupid&lt;br /&gt;
#[ &#039;&#039;object&#039;&#039; channels ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Fields.Channel|PVR.Fields.Channel]]&#039;&#039; properties ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Details.ChannelGroup.Extended|PVR.Details.ChannelGroup.Extended]]&#039;&#039; channelgroupdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.ChannelGroup.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channelgroupid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channels&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;limits&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Fields.Channel&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the details of a specific channel group&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;channelgroupdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Details.ChannelGroup.Extended&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.GetChannelGroups====&lt;br /&gt;
Retrieves the channel groups for the specified type&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#PVR.Channel.Type|PVR.Channel.Type]]&#039;&#039; channeltype&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#PVR.Details.ChannelGroup|PVR.Details.ChannelGroup]]&#039;&#039;[] channelgroups&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channeltype&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the channel groups for the specified type&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;channelgroups&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Details.ChannelGroup&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.GetChannels====&lt;br /&gt;
Retrieves the channel list&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#PVR.ChannelGroup.Id|PVR.ChannelGroup.Id]]&#039;&#039; channelgroupid&lt;br /&gt;
#[ &#039;&#039;[[#PVR.Fields.Channel|PVR.Fields.Channel]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#PVR.Details.Channel|PVR.Details.Channel]]&#039;&#039;[] channels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.ChannelGroup.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channelgroupid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Fields.Channel&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the channel list&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;channels&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Details.Channel&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#PVR.Property.Name|PVR.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#PVR.Property.Value|PVR.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Record====&lt;br /&gt;
Toggle recording of a channel&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPVR&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; record = &amp;quot;toggle&amp;quot; ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; channel = &amp;quot;current&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;record&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;toggle&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;channel&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;current&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;current&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Toggle recording of a channel&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Scan====&lt;br /&gt;
Starts a channel scan&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPVR&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Starts a channel scan&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
====Player.GetActivePlayers====&lt;br /&gt;
Returns all active players&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Returns all active players&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
    &amp;quot;items&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;playerid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.GetItem====&lt;br /&gt;
Retrieves the currently played item&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#[ &#039;&#039;[[#List.Fields.All|List.Fields.All]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Item.All|List.Item.All]]&#039;&#039; item&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Fields.All&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the currently played item&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;item&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.Item.All&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;[[#Player.Property.Name|Player.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Player.Property.Value|Player.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Player.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Player.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.GoTo====&lt;br /&gt;
Go to previous/next/specific item in the playlist&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; to&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;to&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;previous&amp;quot;, &lt;br /&gt;
            &amp;quot;next&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;position in playlist&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Go to previous/next/specific item in the playlist&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Move====&lt;br /&gt;
If picture is zoomed move viewport left/right/up/down otherwise skip previous/next&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;string&#039;&#039; direction&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;left&amp;quot;, &lt;br /&gt;
        &amp;quot;right&amp;quot;, &lt;br /&gt;
        &amp;quot;up&amp;quot;, &lt;br /&gt;
        &amp;quot;down&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;direction&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;If picture is zoomed move viewport left/right/up/down otherwise skip previous/next&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Open====&lt;br /&gt;
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.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; item ]&lt;br /&gt;
#[ &#039;&#039;object&#039;&#039; options ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Optional.Boolean|Optional.Boolean]]&#039;&#039; shuffled = null ]&lt;br /&gt;
*[ &#039;&#039;mixed&#039;&#039; repeat = null ]&lt;br /&gt;
*[ &#039;&#039;mixed&#039;&#039; resume = False ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;item&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;position&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: 0&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Item&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;path&amp;quot;: {&lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;random&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Deprecated, use the shuffled property of the options parameter instead&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: true&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;recursive&amp;quot;: {&lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;partymode&amp;quot;: {&lt;br /&gt;
              &amp;quot;type&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
                    &amp;quot;music&amp;quot;, &lt;br /&gt;
                    &amp;quot;video&amp;quot;&lt;br /&gt;
                  ], &lt;br /&gt;
                  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                {&lt;br /&gt;
                  &amp;quot;description&amp;quot;: &amp;quot;Path to a smartplaylist (*.xsp) file&amp;quot;, &lt;br /&gt;
                  &amp;quot;minLength&amp;quot;: 5, &lt;br /&gt;
                  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
              ], &lt;br /&gt;
              &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;channelid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;options&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;shuffled&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;repeat&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Player.Repeat&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;resume&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to resume from the resume point or not&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Percentage&amp;quot;, &lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Percentage value to start from&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Time&amp;quot;, &lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Time to start from&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;default&amp;quot;: false&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;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.&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.PlayPause====&lt;br /&gt;
Pauses or unpause playback and returns the new state&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#[ &#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; play = &amp;quot;toggle&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Player.Speed|Player.Speed]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;play&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;toggle&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Pauses or unpause playback and returns the new state&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Player.Speed&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Rotate====&lt;br /&gt;
Rotates current picture&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#[ &#039;&#039;string&#039;&#039; value = &amp;quot;clockwise&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;clockwise&amp;quot;, &lt;br /&gt;
        &amp;quot;counterclockwise&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;value&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;clockwise&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Rotates current picture&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Seek====&lt;br /&gt;
Seek through the playing item&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; value&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Player.Position.Percentage|Player.Position.Percentage]]&#039;&#039; percentage = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; time ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; totaltime ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;value&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Percentage&amp;quot;, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Percentage value to seek to&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Time&amp;quot;, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Time to seek to&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;smallforward&amp;quot;, &lt;br /&gt;
            &amp;quot;smallbackward&amp;quot;, &lt;br /&gt;
            &amp;quot;bigforward&amp;quot;, &lt;br /&gt;
            &amp;quot;bigbackward&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Seek by predefined jumps&amp;quot;, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Seek through the playing item&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;percentage&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Percentage&amp;quot;, &lt;br /&gt;
        &amp;quot;default&amp;quot;: 0&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;time&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;totaltime&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetAudioStream====&lt;br /&gt;
Set the audio stream played by the player&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; stream&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;stream&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;previous&amp;quot;, &lt;br /&gt;
            &amp;quot;next&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Index of the audio stream to play&amp;quot;, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Set the audio stream played by the player&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetPartymode====&lt;br /&gt;
Turn partymode on or off&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; partymode&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;partymode&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Turn partymode on or off&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetRepeat====&lt;br /&gt;
Set the repeat mode of the player&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; repeat&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;repeat&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Repeat&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;cycle&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Set the repeat mode of the player&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetShuffle====&lt;br /&gt;
Shuffle/Unshuffle items in the player&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;[[#Global.Toggle|Global.Toggle]]&#039;&#039; shuffle&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;shuffle&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Shuffle/Unshuffle items in the player&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetSpeed====&lt;br /&gt;
Set the speed of the current playback&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; speed&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Player.Speed|Player.Speed]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;speed&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            -32, &lt;br /&gt;
            -16, &lt;br /&gt;
            -8, &lt;br /&gt;
            -4, &lt;br /&gt;
            -2, &lt;br /&gt;
            -1, &lt;br /&gt;
            0, &lt;br /&gt;
            1, &lt;br /&gt;
            2, &lt;br /&gt;
            4, &lt;br /&gt;
            8, &lt;br /&gt;
            16, &lt;br /&gt;
            32&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Global.IncrementDecrement&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Set the speed of the current playback&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Player.Speed&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.SetSubtitle====&lt;br /&gt;
Set the subtitle displayed by the player&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; subtitle&lt;br /&gt;
#[ &#039;&#039;boolean&#039;&#039; enable = False ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;subtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;previous&amp;quot;, &lt;br /&gt;
            &amp;quot;next&amp;quot;, &lt;br /&gt;
            &amp;quot;off&amp;quot;, &lt;br /&gt;
            &amp;quot;on&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Index of the subtitle to display&amp;quot;, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Whether to enable subtitles to be displayed after setting the new subtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;enable&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Set the subtitle displayed by the player&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Stop====&lt;br /&gt;
Stops playback&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Stops playback&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Zoom====&lt;br /&gt;
Zoom current picture&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
#&#039;&#039;mixed&#039;&#039; zoom&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playerid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;zoom&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;in&amp;quot;, &lt;br /&gt;
            &amp;quot;out&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;zoom level&amp;quot;, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;maximum&amp;quot;: 10&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Zoom current picture&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Playlist===&lt;br /&gt;
====Playlist.Add====&lt;br /&gt;
Add item(s) to playlist&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#&#039;&#039;[[#Playlist.Item|Playlist.Item]]&#039;&#039; item&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Item&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;item&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Add item(s) to playlist&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Clear====&lt;br /&gt;
Clear playlist&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Clear playlist&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.GetItems====&lt;br /&gt;
Get all items from playlist&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#[ &#039;&#039;[[#List.Fields.All|List.Fields.All]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*&#039;&#039;[[#List.Item.All|List.Item.All]]&#039;&#039;[] items&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Fields.All&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Get all items from playlist&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Item.All&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.GetPlaylists====&lt;br /&gt;
Returns all existing playlists&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Returns all existing playlists&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
    &amp;quot;items&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#&#039;&#039;[[#Playlist.Property.Name|Playlist.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#Playlist.Property.Value|Playlist.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Insert====&lt;br /&gt;
Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#&#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position&lt;br /&gt;
#&#039;&#039;[[#Playlist.Item|Playlist.Item]]&#039;&#039; item&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;position&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Item&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;item&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Remove====&lt;br /&gt;
Remove item from playlist. Does not work for picture playlists (aka slideshows).&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#&#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;position&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Remove item from playlist. Does not work for picture playlists (aka slideshows).&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Swap====&lt;br /&gt;
Swap items in the playlist. Does not work for picture playlists (aka slideshows).&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPlayback&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
#&#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position1&lt;br /&gt;
#&#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position2&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;position1&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;position2&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Swap items in the playlist. Does not work for picture playlists (aka slideshows).&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===System===&lt;br /&gt;
====System.EjectOpticalDrive====&lt;br /&gt;
Ejects or closes the optical disc drive (if available)&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlSystem&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ejects or closes the optical disc drive (if available)&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.GetProperties====&lt;br /&gt;
Retrieves the values of the given properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#System.Property.Name|System.Property.Name]]&#039;&#039;[] properties&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;[[#System.Property.Value|System.Property.Value]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;System.Property.Name&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieves the values of the given properties&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;System.Property.Value&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.Hibernate====&lt;br /&gt;
Puts the system running XBMC into hibernate mode&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPower&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Puts the system running XBMC into hibernate mode&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.Reboot====&lt;br /&gt;
Reboots the system running XBMC&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPower&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Reboots the system running XBMC&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.Shutdown====&lt;br /&gt;
Shuts the system running XBMC down&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPower&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Shuts the system running XBMC down&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.Suspend====&lt;br /&gt;
Suspends the system running XBMC&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ControlPower&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Suspends the system running XBMC&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===VideoLibrary===&lt;br /&gt;
====VideoLibrary.Clean====&lt;br /&gt;
Cleans the video library from non-existent items&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; None&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Cleans the video library from non-existent items&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.Export====&lt;br /&gt;
Exports all items from the video library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* WriteFile&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; options ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;options&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;path&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Path to the directory to where the data should be exported&amp;quot;, &lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;overwrite&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to overwrite existing exported files&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: false&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;actorthumbs&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to export actor thumbnails&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: false&lt;br /&gt;
            }, &lt;br /&gt;
            &amp;quot;images&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Whether to export thumbnails and fanart images&amp;quot;, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
              &amp;quot;default&amp;quot;: false&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Exports all items from the video library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetEpisodeDetails====&lt;br /&gt;
Retrieve details about a specific tv show episode&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; episodeid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Episode|Video.Fields.Episode]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Episode|Video.Details.Episode]]&#039;&#039; episodedetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;episodeid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Episode&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific tv show episode&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;episodedetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Episode&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetEpisodes====&lt;br /&gt;
Retrieve all tv show episodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid = -1 ]&lt;br /&gt;
#[ &#039;&#039;integer&#039;&#039; season = -1 ]&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Episode|Video.Fields.Episode]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Episode|Video.Details.Episode]]&#039;&#039;[] episodes ]&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Episode&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Requires tvshowid to be set&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Requires tvshowid to be set&amp;quot;, &lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;year&amp;quot;: {&lt;br /&gt;
              &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;actor&amp;quot;: {&lt;br /&gt;
              &amp;quot;description&amp;quot;: &amp;quot;Requires tvshowid to be set&amp;quot;, &lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;director&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Episodes&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all tv show episodes&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;episodes&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Episode&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetGenres====&lt;br /&gt;
Retrieve all genres&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; type&lt;br /&gt;
#[ &#039;&#039;[[#Library.Fields.Genre|Library.Fields.Genre]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Details.Genre|Library.Details.Genre]]&#039;&#039;[] genres&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;movie&amp;quot;, &lt;br /&gt;
        &amp;quot;tvshow&amp;quot;, &lt;br /&gt;
        &amp;quot;musicvideo&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;type&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Fields.Genre&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all genres&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;genres&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Details.Genre&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMovieDetails====&lt;br /&gt;
Retrieve details about a specific movie&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; movieid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Movie|Video.Fields.Movie]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Movie|Video.Details.Movie]]&#039;&#039; moviedetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;movieid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Movie&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific movie&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;moviedetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Movie&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMovieSetDetails====&lt;br /&gt;
Retrieve details about a specific movie set&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; setid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.MovieSet|Video.Fields.MovieSet]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;object&#039;&#039; movies ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
*[ &#039;&#039;[[#Video.Fields.Movie|Video.Fields.Movie]]&#039;&#039; properties ]&lt;br /&gt;
*[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.MovieSet.Extended|Video.Details.MovieSet.Extended]]&#039;&#039; setdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;setid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.MovieSet&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;movies&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;limits&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Movie&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;sort&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific movie set&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;setdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.MovieSet.Extended&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMovieSets====&lt;br /&gt;
Retrieve all movie sets&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.MovieSet|Video.Fields.MovieSet]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.MovieSet|Video.Details.MovieSet]]&#039;&#039;[] sets ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.MovieSet&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all movie sets&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;sets&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.MovieSet&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMovies====&lt;br /&gt;
Retrieve all movies&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Movie|Video.Fields.Movie]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Movie|Video.Details.Movie]]&#039;&#039;[] movies ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Movie&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;year&amp;quot;: {&lt;br /&gt;
              &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;actor&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;director&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;studio&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;country&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;setid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;set&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;tag&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Movies&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all movies&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;movies&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Movie&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMusicVideoDetails====&lt;br /&gt;
Retrieve details about a specific music video&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; musicvideoid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]&#039;&#039; musicvideodetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicvideoid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.MusicVideo&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific music video&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;musicvideodetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.MusicVideo&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetMusicVideos====&lt;br /&gt;
Retrieve all music videos&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]&#039;&#039;[] musicvideos ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.MusicVideo&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;artist&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;year&amp;quot;: {&lt;br /&gt;
              &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;director&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;studio&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;tag&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.MusicVideos&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all music videos&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;musicvideos&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.MusicVideo&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetRecentlyAddedEpisodes====&lt;br /&gt;
Retrieve all recently added tv episodes&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Episode|Video.Fields.Episode]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Episode|Video.Details.Episode]]&#039;&#039;[] episodes ]&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Episode&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all recently added tv episodes&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;episodes&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Episode&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetRecentlyAddedMovies====&lt;br /&gt;
Retrieve all recently added movies&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Movie|Video.Fields.Movie]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Movie|Video.Details.Movie]]&#039;&#039;[] movies ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Movie&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all recently added movies&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;movies&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Movie&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetRecentlyAddedMusicVideos====&lt;br /&gt;
Retrieve all recently added music videos&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.MusicVideo|Video.Fields.MusicVideo]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.MusicVideo|Video.Details.MusicVideo]]&#039;&#039;[] musicvideos ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.MusicVideo&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all recently added music videos&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;musicvideos&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.MusicVideo&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetSeasons====&lt;br /&gt;
Retrieve all tv seasons&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.Season|Video.Fields.Season]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Season|Video.Details.Season]]&#039;&#039;[] seasons ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.Season&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all tv seasons&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;seasons&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Season&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetTVShowDetails====&lt;br /&gt;
Retrieve details about a specific tv show&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.TVShow|Video.Fields.TVShow]]&#039;&#039; properties ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.TVShow|Video.Details.TVShow]]&#039;&#039; tvshowdetails ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.TVShow&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve details about a specific tv show&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;tvshowdetails&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.TVShow&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.GetTVShows====&lt;br /&gt;
Retrieve all tv shows&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;[[#Video.Fields.TVShow|Video.Fields.TVShow]]&#039;&#039; properties ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Limits|List.Limits]]&#039;&#039; limits ]&lt;br /&gt;
#[ &#039;&#039;[[#List.Sort|List.Sort]]&#039;&#039; sort ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; filter ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.TVShow|Video.Details.TVShow]]&#039;&#039;[] tvshows ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Fields.TVShow&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;properties&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;limits&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sort&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;filter&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
              &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;genre&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;year&amp;quot;: {&lt;br /&gt;
              &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;actor&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;studio&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
          &amp;quot;properties&amp;quot;: {&lt;br /&gt;
            &amp;quot;tag&amp;quot;: {&lt;br /&gt;
              &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
              &amp;quot;required&amp;quot;: true, &lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.TVShows&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve all tv shows&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;limits&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
        &amp;quot;required&amp;quot;: true&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;tvshows&amp;quot;: {&lt;br /&gt;
        &amp;quot;items&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.TVShow&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.RemoveEpisode====&lt;br /&gt;
Removes the given episode from the library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; episodeid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;episodeid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Removes the given episode from the library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.RemoveMovie====&lt;br /&gt;
Removes the given movie from the library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; movieid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;movieid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Removes the given movie from the library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.RemoveMusicVideo====&lt;br /&gt;
Removes the given music video from the library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; musicvideoid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicvideoid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Removes the given music video from the library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.RemoveTVShow====&lt;br /&gt;
Removes the given tv show from the library&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* RemoveData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Removes the given tv show from the library&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.Scan====&lt;br /&gt;
Scans the video sources for new library items&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#[ &#039;&#039;string&#039;&#039; directory = &amp;quot;&amp;quot; ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;directory&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Scans the video sources for new library items&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.SetEpisodeDetails====&lt;br /&gt;
Update the given episode with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; episodeid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; playcount = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; runtime = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; director = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; plot = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Number|Optional.Number]]&#039;&#039; rating = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; votes = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; lastplayed = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; writer = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; firstaired = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; productioncode = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; season = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; episode = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; originaltitle = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; thumbnail = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; fanart = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; art = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;episodeid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Runtime in seconds&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Number&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;firstaired&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;productioncode&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Media.Artwork&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given episode with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.SetMovieDetails====&lt;br /&gt;
Update the given movie with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; movieid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; playcount = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; runtime = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; director = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; studio = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; year = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; plot = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Number|Optional.Number]]&#039;&#039; rating = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; mpaa = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; imdbnumber = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; votes = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; lastplayed = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; originaltitle = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; trailer = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; tagline = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; plotoutline = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; writer = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; country = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; top250 = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; sorttitle = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; set = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; showlink = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; thumbnail = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; fanart = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; tag = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; art = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;movieid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Runtime in seconds&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Number&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;trailer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tagline&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;plotoutline&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;country&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;top250&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;set&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;showlink&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Media.Artwork&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given movie with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.SetMusicVideoDetails====&lt;br /&gt;
Update the given music video with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; musicvideoid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; playcount = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; runtime = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; director = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; studio = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; year = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; plot = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; album = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; artist = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; track = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; lastplayed = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; thumbnail = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; fanart = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; tag = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; art = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;musicvideoid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Runtime in seconds&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Media.Artwork&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given music video with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.SetTVShowDetails====&lt;br /&gt;
Update the given tvshow with the given details&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* UpdateData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; title = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Integer|Optional.Integer]]&#039;&#039; playcount = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; studio = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; plot = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; genre = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.Number|Optional.Number]]&#039;&#039; rating = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; mpaa = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; imdbnumber = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; premiered = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; votes = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; lastplayed = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; originaltitle = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; sorttitle = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; episodeguide = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; thumbnail = null ]&lt;br /&gt;
#[ &#039;&#039;[[#Optional.String|Optional.String]]&#039;&#039; fanart = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; tag = null ]&lt;br /&gt;
#[ &#039;&#039;mixed&#039;&#039; art = null ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.Number&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;premiered&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;episodeguide&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Media.Artwork&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Update the given tvshow with the given details&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===XBMC===&lt;br /&gt;
====XBMC.GetInfoBooleans====&lt;br /&gt;
Retrieve info booleans about XBMC and the system&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;array&#039;&#039;[1..X] booleans&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;booleans&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve info booleans about XBMC and the system&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Object containing key-value pairs of the retrieved info booleans&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====XBMC.GetInfoLabels====&lt;br /&gt;
Retrieve info labels about XBMC and the system&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Permissions:&#039;&#039;&#039;&lt;br /&gt;
* ReadData&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;array&#039;&#039;[1..X] labels&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;See http://wiki.xbmc.org/index.php?title=InfoLabels for a list of possible info labels&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;labels&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Retrieve info labels about XBMC and the system&amp;quot;, &lt;br /&gt;
  &amp;quot;returns&amp;quot;: {&lt;br /&gt;
    &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Object containing key-value pairs of the retrieved info labels&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Global types==&lt;br /&gt;
===Addon===&lt;br /&gt;
====Addon.Content====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;unknown&amp;quot;, &lt;br /&gt;
    &amp;quot;video&amp;quot;, &lt;br /&gt;
    &amp;quot;audio&amp;quot;, &lt;br /&gt;
    &amp;quot;image&amp;quot;, &lt;br /&gt;
    &amp;quot;executable&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Addon.Content&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addon.Details====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Details.Base|Item.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;string&#039;&#039; addonid&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; disclaimer = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; fanart = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;mixed&#039;&#039; broken = null ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; author = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; enabled = False ]&lt;br /&gt;
*[ &#039;&#039;array&#039;&#039; extrainfo ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; thumbnail = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; path = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;array&#039;&#039; dependencies ]&lt;br /&gt;
*&#039;&#039;[[#Addon.Types|Addon.Types]]&#039;&#039; type&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; description = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; name = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; version = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; summary = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; rating = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Addon.Details&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;addonid&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;disclaimer&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;fanart&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;broken&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;default&amp;quot;: null&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;author&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;enabled&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;extrainfo&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;value&amp;quot;: {&lt;br /&gt;
            &amp;quot;required&amp;quot;: true, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;key&amp;quot;: {&lt;br /&gt;
            &amp;quot;required&amp;quot;: true, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;thumbnail&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;path&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;dependencies&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;addonid&amp;quot;: {&lt;br /&gt;
            &amp;quot;required&amp;quot;: true, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;version&amp;quot;: {&lt;br /&gt;
            &amp;quot;required&amp;quot;: true, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;optional&amp;quot;: {&lt;br /&gt;
            &amp;quot;required&amp;quot;: true, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Addon.Types&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;name&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;version&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;summary&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;rating&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addon.Fields====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;name&amp;quot;, &lt;br /&gt;
      &amp;quot;version&amp;quot;, &lt;br /&gt;
      &amp;quot;summary&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;path&amp;quot;, &lt;br /&gt;
      &amp;quot;author&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;disclaimer&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;dependencies&amp;quot;, &lt;br /&gt;
      &amp;quot;broken&amp;quot;, &lt;br /&gt;
      &amp;quot;extrainfo&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;enabled&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Addon.Fields&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Addon.Types====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;unknown&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.metadata.scraper.albums&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.metadata.scraper.artists&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.metadata.scraper.movies&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.metadata.scraper.musicvideos&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.metadata.scraper.tvshows&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.ui.screensaver&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.player.musicviz&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.python.pluginsource&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.python.script&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.python.weather&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.python.subtitles&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.python.lyrics&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.gui.skin&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.gui.webinterface&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.addon.video&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.addon.audio&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.addon.image&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.addon.executable&amp;quot;, &lt;br /&gt;
    &amp;quot;xbmc.service&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Addon.Types&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Application===&lt;br /&gt;
====Application.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;volume&amp;quot;, &lt;br /&gt;
    &amp;quot;muted&amp;quot;, &lt;br /&gt;
    &amp;quot;name&amp;quot;, &lt;br /&gt;
    &amp;quot;version&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Application.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;volume&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Application.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; version ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;integer&#039;&#039; minor&lt;br /&gt;
**&#039;&#039;string&#039;&#039; tag&lt;br /&gt;
**&#039;&#039;integer&#039;&#039; major&lt;br /&gt;
**[ &#039;&#039;mixed&#039;&#039; revision = null ]&lt;br /&gt;
&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; name = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; volume = 0 ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; muted = False ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Application.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;version&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;minor&amp;quot;: {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;tag&amp;quot;: {&lt;br /&gt;
          &amp;quot;enums&amp;quot;: [&lt;br /&gt;
            &amp;quot;prealpha&amp;quot;, &lt;br /&gt;
            &amp;quot;alpha&amp;quot;, &lt;br /&gt;
            &amp;quot;beta&amp;quot;, &lt;br /&gt;
            &amp;quot;releasecandidate&amp;quot;, &lt;br /&gt;
            &amp;quot;stable&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;major&amp;quot;: {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;revision&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
            }, &lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;default&amp;quot;: null&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;name&amp;quot;: {&lt;br /&gt;
      &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;volume&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 100&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;muted&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Array===&lt;br /&gt;
====Array.Integer====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Array.Integer&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Array.String====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Array.String&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
====Audio.Details.Album====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Audio.Details.Media|Audio.Details.Media]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; theme ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; description = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; type = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; style ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; albumid&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; playcount = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; albumlabel = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; mood ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Details.Album&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;style&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumlabel&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mood&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Audio.Details.Media&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Details.Artist====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Audio.Details.Base|Audio.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; born = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; formed = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; died = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; style ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; yearsactive ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; mood ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainzartistid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; disbanded = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; description = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;string&#039;&#039; artist&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; instrument ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; artistid&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Details.Artist&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;born&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;formed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;died&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;style&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;yearsactive&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mood&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainzartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;disbanded&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;artist&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;instrument&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;artistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Audio.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Details.Base====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Media.Details.Base|Media.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; genre ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Details.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;genre&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Media.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Details.Media====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Audio.Details.Base|Audio.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; displayartist = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; artist ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.Integer|Array.Integer]]&#039;&#039; genreid ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainzalbumartistid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; year = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; rating = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.Integer|Array.Integer]]&#039;&#039; artistid ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; title = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainzalbumid = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Details.Media&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;displayartist&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;artist&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.Integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainzalbumartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;year&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;rating&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;artistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.Integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;title&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainzalbumid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Audio.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Details.Song====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Audio.Details.Media|Audio.Details.Media]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lyrics = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; songid&lt;br /&gt;
*[ &#039;&#039;[[#Array.Integer|Array.Integer]]&#039;&#039; albumartistid ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; disc = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; comment = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; playcount = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; album = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; file = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lastplayed = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; albumid = -1 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainzartistid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; albumartist ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; duration = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainztrackid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; track = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Details.Song&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;lyrics&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;songid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.Integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;disc&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;comment&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;album&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;file&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainzartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumartist&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;duration&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainztrackid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;track&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Audio.Details.Media&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Fields.Album====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;theme&amp;quot;, &lt;br /&gt;
      &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;, &lt;br /&gt;
      &amp;quot;albumlabel&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;genreid&amp;quot;, &lt;br /&gt;
      &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;displayartist&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Requesting the genreid and/or artistid field will result in increased response times&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Fields.Album&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Fields.Artist====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;instrument&amp;quot;, &lt;br /&gt;
      &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;born&amp;quot;, &lt;br /&gt;
      &amp;quot;formed&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;died&amp;quot;, &lt;br /&gt;
      &amp;quot;disbanded&amp;quot;, &lt;br /&gt;
      &amp;quot;yearsactive&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Fields.Artist&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Audio.Fields.Song====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;duration&amp;quot;, &lt;br /&gt;
      &amp;quot;comment&amp;quot;, &lt;br /&gt;
      &amp;quot;lyrics&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainztrackid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;albumid&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;disc&amp;quot;, &lt;br /&gt;
      &amp;quot;genreid&amp;quot;, &lt;br /&gt;
      &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;displayartist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartistid&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Requesting the genreid, artistid and/or albumartistid field will result in increased response times&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Audio.Fields.Song&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
====Configuration====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Configuration.Notifications|Configuration.Notifications]]&#039;&#039; notifications&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Configuration&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;notifications&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Configuration.Notifications&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;required&amp;quot;: true, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Configuration.Notifications====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; gui&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; other&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; input&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; videolibrary&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; audiolibrary&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; pvr&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; playlist&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; system&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; player&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; application&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Configuration.Notifications&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;gui&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;other&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;input&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;videolibrary&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;audiolibrary&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;pvr&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;system&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;player&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;application&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
====Files.Media====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;video&amp;quot;, &lt;br /&gt;
    &amp;quot;music&amp;quot;, &lt;br /&gt;
    &amp;quot;pictures&amp;quot;, &lt;br /&gt;
    &amp;quot;files&amp;quot;, &lt;br /&gt;
    &amp;quot;programs&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Files.Media&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;video&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
====GUI.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;currentwindow&amp;quot;, &lt;br /&gt;
    &amp;quot;currentcontrol&amp;quot;, &lt;br /&gt;
    &amp;quot;skin&amp;quot;, &lt;br /&gt;
    &amp;quot;fullscreen&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;GUI.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;currentwindow&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====GUI.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; currentwindow ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;string&#039;&#039; label&lt;br /&gt;
**&#039;&#039;integer&#039;&#039; id&lt;br /&gt;
&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; fullscreen = False ]&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; skin ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;string&#039;&#039; id&lt;br /&gt;
**[ &#039;&#039;string&#039;&#039; name = &amp;quot;&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; currentcontrol ]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;string&#039;&#039; label&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;GUI.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;currentwindow&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;label&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;fullscreen&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;skin&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;name&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;currentcontrol&amp;quot;: {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;label&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====GUI.Window====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;home&amp;quot;, &lt;br /&gt;
    &amp;quot;programs&amp;quot;, &lt;br /&gt;
    &amp;quot;pictures&amp;quot;, &lt;br /&gt;
    &amp;quot;filemanager&amp;quot;, &lt;br /&gt;
    &amp;quot;files&amp;quot;, &lt;br /&gt;
    &amp;quot;settings&amp;quot;, &lt;br /&gt;
    &amp;quot;music&amp;quot;, &lt;br /&gt;
    &amp;quot;video&amp;quot;, &lt;br /&gt;
    &amp;quot;videos&amp;quot;, &lt;br /&gt;
    &amp;quot;tv&amp;quot;, &lt;br /&gt;
    &amp;quot;pvr&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrguideinfo&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrrecordinginfo&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrtimersetting&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrgroupmanager&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrchannelmanager&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrguidesearch&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrchannelscan&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrupdateprogress&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrosdchannels&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrosdguide&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrosddirector&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrosdcutter&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrosdteletext&amp;quot;, &lt;br /&gt;
    &amp;quot;systeminfo&amp;quot;, &lt;br /&gt;
    &amp;quot;testpattern&amp;quot;, &lt;br /&gt;
    &amp;quot;screencalibration&amp;quot;, &lt;br /&gt;
    &amp;quot;guicalibration&amp;quot;, &lt;br /&gt;
    &amp;quot;picturessettings&amp;quot;, &lt;br /&gt;
    &amp;quot;programssettings&amp;quot;, &lt;br /&gt;
    &amp;quot;weathersettings&amp;quot;, &lt;br /&gt;
    &amp;quot;musicsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;systemsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;videossettings&amp;quot;, &lt;br /&gt;
    &amp;quot;networksettings&amp;quot;, &lt;br /&gt;
    &amp;quot;servicesettings&amp;quot;, &lt;br /&gt;
    &amp;quot;appearancesettings&amp;quot;, &lt;br /&gt;
    &amp;quot;pvrsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;tvsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;scripts&amp;quot;, &lt;br /&gt;
    &amp;quot;videofiles&amp;quot;, &lt;br /&gt;
    &amp;quot;videolibrary&amp;quot;, &lt;br /&gt;
    &amp;quot;videoplaylist&amp;quot;, &lt;br /&gt;
    &amp;quot;loginscreen&amp;quot;, &lt;br /&gt;
    &amp;quot;profiles&amp;quot;, &lt;br /&gt;
    &amp;quot;skinsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;addonbrowser&amp;quot;, &lt;br /&gt;
    &amp;quot;yesnodialog&amp;quot;, &lt;br /&gt;
    &amp;quot;progressdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;virtualkeyboard&amp;quot;, &lt;br /&gt;
    &amp;quot;volumebar&amp;quot;, &lt;br /&gt;
    &amp;quot;submenu&amp;quot;, &lt;br /&gt;
    &amp;quot;favourites&amp;quot;, &lt;br /&gt;
    &amp;quot;contextmenu&amp;quot;, &lt;br /&gt;
    &amp;quot;infodialog&amp;quot;, &lt;br /&gt;
    &amp;quot;numericinput&amp;quot;, &lt;br /&gt;
    &amp;quot;gamepadinput&amp;quot;, &lt;br /&gt;
    &amp;quot;shutdownmenu&amp;quot;, &lt;br /&gt;
    &amp;quot;mutebug&amp;quot;, &lt;br /&gt;
    &amp;quot;playercontrols&amp;quot;, &lt;br /&gt;
    &amp;quot;seekbar&amp;quot;, &lt;br /&gt;
    &amp;quot;musicosd&amp;quot;, &lt;br /&gt;
    &amp;quot;addonsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;visualisationsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;visualisationpresetlist&amp;quot;, &lt;br /&gt;
    &amp;quot;osdvideosettings&amp;quot;, &lt;br /&gt;
    &amp;quot;osdaudiosettings&amp;quot;, &lt;br /&gt;
    &amp;quot;videobookmarks&amp;quot;, &lt;br /&gt;
    &amp;quot;filebrowser&amp;quot;, &lt;br /&gt;
    &amp;quot;networksetup&amp;quot;, &lt;br /&gt;
    &amp;quot;mediasource&amp;quot;, &lt;br /&gt;
    &amp;quot;profilesettings&amp;quot;, &lt;br /&gt;
    &amp;quot;locksettings&amp;quot;, &lt;br /&gt;
    &amp;quot;contentsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;songinformation&amp;quot;, &lt;br /&gt;
    &amp;quot;smartplaylisteditor&amp;quot;, &lt;br /&gt;
    &amp;quot;smartplaylistrule&amp;quot;, &lt;br /&gt;
    &amp;quot;busydialog&amp;quot;, &lt;br /&gt;
    &amp;quot;pictureinfo&amp;quot;, &lt;br /&gt;
    &amp;quot;accesspoints&amp;quot;, &lt;br /&gt;
    &amp;quot;fullscreeninfo&amp;quot;, &lt;br /&gt;
    &amp;quot;karaokeselector&amp;quot;, &lt;br /&gt;
    &amp;quot;karaokelargeselector&amp;quot;, &lt;br /&gt;
    &amp;quot;sliderdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;addoninformation&amp;quot;, &lt;br /&gt;
    &amp;quot;musicplaylist&amp;quot;, &lt;br /&gt;
    &amp;quot;musicfiles&amp;quot;, &lt;br /&gt;
    &amp;quot;musiclibrary&amp;quot;, &lt;br /&gt;
    &amp;quot;musicplaylisteditor&amp;quot;, &lt;br /&gt;
    &amp;quot;teletext&amp;quot;, &lt;br /&gt;
    &amp;quot;selectdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;musicinformation&amp;quot;, &lt;br /&gt;
    &amp;quot;okdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;movieinformation&amp;quot;, &lt;br /&gt;
    &amp;quot;textviewer&amp;quot;, &lt;br /&gt;
    &amp;quot;fullscreenvideo&amp;quot;, &lt;br /&gt;
    &amp;quot;fullscreenlivetv&amp;quot;, &lt;br /&gt;
    &amp;quot;visualisation&amp;quot;, &lt;br /&gt;
    &amp;quot;slideshow&amp;quot;, &lt;br /&gt;
    &amp;quot;filestackingdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;karaoke&amp;quot;, &lt;br /&gt;
    &amp;quot;weather&amp;quot;, &lt;br /&gt;
    &amp;quot;screensaver&amp;quot;, &lt;br /&gt;
    &amp;quot;videoosd&amp;quot;, &lt;br /&gt;
    &amp;quot;videomenu&amp;quot;, &lt;br /&gt;
    &amp;quot;videotimeseek&amp;quot;, &lt;br /&gt;
    &amp;quot;musicoverlay&amp;quot;, &lt;br /&gt;
    &amp;quot;videooverlay&amp;quot;, &lt;br /&gt;
    &amp;quot;startwindow&amp;quot;, &lt;br /&gt;
    &amp;quot;startup&amp;quot;, &lt;br /&gt;
    &amp;quot;peripherals&amp;quot;, &lt;br /&gt;
    &amp;quot;peripheralsettings&amp;quot;, &lt;br /&gt;
    &amp;quot;extendedprogressdialog&amp;quot;, &lt;br /&gt;
    &amp;quot;mediafilter&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;GUI.Window&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;home&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Global===&lt;br /&gt;
====Global.IncrementDecrement====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;increment&amp;quot;, &lt;br /&gt;
    &amp;quot;decrement&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Global.IncrementDecrement&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;increment&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Global.String.NotEmpty====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
  &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Global.Time====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; hours&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; milliseconds&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; seconds&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; minutes&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Global.Time&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;hours&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 23&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;milliseconds&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 999&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;seconds&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 59&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;minutes&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 59&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Global.Toggle====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Global.Toggle&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;toggle&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Input===&lt;br /&gt;
====Input.Action====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;left&amp;quot;, &lt;br /&gt;
    &amp;quot;right&amp;quot;, &lt;br /&gt;
    &amp;quot;up&amp;quot;, &lt;br /&gt;
    &amp;quot;down&amp;quot;, &lt;br /&gt;
    &amp;quot;pageup&amp;quot;, &lt;br /&gt;
    &amp;quot;pagedown&amp;quot;, &lt;br /&gt;
    &amp;quot;select&amp;quot;, &lt;br /&gt;
    &amp;quot;highlight&amp;quot;, &lt;br /&gt;
    &amp;quot;parentdir&amp;quot;, &lt;br /&gt;
    &amp;quot;parentfolder&amp;quot;, &lt;br /&gt;
    &amp;quot;back&amp;quot;, &lt;br /&gt;
    &amp;quot;previousmenu&amp;quot;, &lt;br /&gt;
    &amp;quot;info&amp;quot;, &lt;br /&gt;
    &amp;quot;pause&amp;quot;, &lt;br /&gt;
    &amp;quot;stop&amp;quot;, &lt;br /&gt;
    &amp;quot;skipnext&amp;quot;, &lt;br /&gt;
    &amp;quot;skipprevious&amp;quot;, &lt;br /&gt;
    &amp;quot;fullscreen&amp;quot;, &lt;br /&gt;
    &amp;quot;aspectratio&amp;quot;, &lt;br /&gt;
    &amp;quot;stepforward&amp;quot;, &lt;br /&gt;
    &amp;quot;stepback&amp;quot;, &lt;br /&gt;
    &amp;quot;bigstepforward&amp;quot;, &lt;br /&gt;
    &amp;quot;bigstepback&amp;quot;, &lt;br /&gt;
    &amp;quot;osd&amp;quot;, &lt;br /&gt;
    &amp;quot;showsubtitles&amp;quot;, &lt;br /&gt;
    &amp;quot;nextsubtitle&amp;quot;, &lt;br /&gt;
    &amp;quot;codecinfo&amp;quot;, &lt;br /&gt;
    &amp;quot;nextpicture&amp;quot;, &lt;br /&gt;
    &amp;quot;previouspicture&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomout&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomin&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;, &lt;br /&gt;
    &amp;quot;queue&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomnormal&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel1&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel2&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel3&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel4&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel5&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel6&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel7&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel8&amp;quot;, &lt;br /&gt;
    &amp;quot;zoomlevel9&amp;quot;, &lt;br /&gt;
    &amp;quot;nextcalibration&amp;quot;, &lt;br /&gt;
    &amp;quot;resetcalibration&amp;quot;, &lt;br /&gt;
    &amp;quot;analogmove&amp;quot;, &lt;br /&gt;
    &amp;quot;rotate&amp;quot;, &lt;br /&gt;
    &amp;quot;rotateccw&amp;quot;, &lt;br /&gt;
    &amp;quot;close&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitledelayminus&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitledelay&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitledelayplus&amp;quot;, &lt;br /&gt;
    &amp;quot;audiodelayminus&amp;quot;, &lt;br /&gt;
    &amp;quot;audiodelay&amp;quot;, &lt;br /&gt;
    &amp;quot;audiodelayplus&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitleshiftup&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitleshiftdown&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitlealign&amp;quot;, &lt;br /&gt;
    &amp;quot;audionextlanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;verticalshiftup&amp;quot;, &lt;br /&gt;
    &amp;quot;verticalshiftdown&amp;quot;, &lt;br /&gt;
    &amp;quot;nextresolution&amp;quot;, &lt;br /&gt;
    &amp;quot;audiotoggledigital&amp;quot;, &lt;br /&gt;
    &amp;quot;number0&amp;quot;, &lt;br /&gt;
    &amp;quot;number1&amp;quot;, &lt;br /&gt;
    &amp;quot;number2&amp;quot;, &lt;br /&gt;
    &amp;quot;number3&amp;quot;, &lt;br /&gt;
    &amp;quot;number4&amp;quot;, &lt;br /&gt;
    &amp;quot;number5&amp;quot;, &lt;br /&gt;
    &amp;quot;number6&amp;quot;, &lt;br /&gt;
    &amp;quot;number7&amp;quot;, &lt;br /&gt;
    &amp;quot;number8&amp;quot;, &lt;br /&gt;
    &amp;quot;number9&amp;quot;, &lt;br /&gt;
    &amp;quot;osdleft&amp;quot;, &lt;br /&gt;
    &amp;quot;osdright&amp;quot;, &lt;br /&gt;
    &amp;quot;osdup&amp;quot;, &lt;br /&gt;
    &amp;quot;osddown&amp;quot;, &lt;br /&gt;
    &amp;quot;osdselect&amp;quot;, &lt;br /&gt;
    &amp;quot;osdvalueplus&amp;quot;, &lt;br /&gt;
    &amp;quot;osdvalueminus&amp;quot;, &lt;br /&gt;
    &amp;quot;smallstepback&amp;quot;, &lt;br /&gt;
    &amp;quot;fastforward&amp;quot;, &lt;br /&gt;
    &amp;quot;rewind&amp;quot;, &lt;br /&gt;
    &amp;quot;play&amp;quot;, &lt;br /&gt;
    &amp;quot;playpause&amp;quot;, &lt;br /&gt;
    &amp;quot;delete&amp;quot;, &lt;br /&gt;
    &amp;quot;copy&amp;quot;, &lt;br /&gt;
    &amp;quot;move&amp;quot;, &lt;br /&gt;
    &amp;quot;mplayerosd&amp;quot;, &lt;br /&gt;
    &amp;quot;hidesubmenu&amp;quot;, &lt;br /&gt;
    &amp;quot;screenshot&amp;quot;, &lt;br /&gt;
    &amp;quot;rename&amp;quot;, &lt;br /&gt;
    &amp;quot;togglewatched&amp;quot;, &lt;br /&gt;
    &amp;quot;scanitem&amp;quot;, &lt;br /&gt;
    &amp;quot;reloadkeymaps&amp;quot;, &lt;br /&gt;
    &amp;quot;volumeup&amp;quot;, &lt;br /&gt;
    &amp;quot;volumedown&amp;quot;, &lt;br /&gt;
    &amp;quot;mute&amp;quot;, &lt;br /&gt;
    &amp;quot;backspace&amp;quot;, &lt;br /&gt;
    &amp;quot;scrollup&amp;quot;, &lt;br /&gt;
    &amp;quot;scrolldown&amp;quot;, &lt;br /&gt;
    &amp;quot;analogfastforward&amp;quot;, &lt;br /&gt;
    &amp;quot;analogrewind&amp;quot;, &lt;br /&gt;
    &amp;quot;moveitemup&amp;quot;, &lt;br /&gt;
    &amp;quot;moveitemdown&amp;quot;, &lt;br /&gt;
    &amp;quot;contextmenu&amp;quot;, &lt;br /&gt;
    &amp;quot;shift&amp;quot;, &lt;br /&gt;
    &amp;quot;symbols&amp;quot;, &lt;br /&gt;
    &amp;quot;cursorleft&amp;quot;, &lt;br /&gt;
    &amp;quot;cursorright&amp;quot;, &lt;br /&gt;
    &amp;quot;showtime&amp;quot;, &lt;br /&gt;
    &amp;quot;analogseekforward&amp;quot;, &lt;br /&gt;
    &amp;quot;analogseekback&amp;quot;, &lt;br /&gt;
    &amp;quot;showpreset&amp;quot;, &lt;br /&gt;
    &amp;quot;presetlist&amp;quot;, &lt;br /&gt;
    &amp;quot;nextpreset&amp;quot;, &lt;br /&gt;
    &amp;quot;previouspreset&amp;quot;, &lt;br /&gt;
    &amp;quot;lockpreset&amp;quot;, &lt;br /&gt;
    &amp;quot;randompreset&amp;quot;, &lt;br /&gt;
    &amp;quot;increasevisrating&amp;quot;, &lt;br /&gt;
    &amp;quot;decreasevisrating&amp;quot;, &lt;br /&gt;
    &amp;quot;showvideomenu&amp;quot;, &lt;br /&gt;
    &amp;quot;enter&amp;quot;, &lt;br /&gt;
    &amp;quot;increaserating&amp;quot;, &lt;br /&gt;
    &amp;quot;decreaserating&amp;quot;, &lt;br /&gt;
    &amp;quot;togglefullscreen&amp;quot;, &lt;br /&gt;
    &amp;quot;nextscene&amp;quot;, &lt;br /&gt;
    &amp;quot;previousscene&amp;quot;, &lt;br /&gt;
    &amp;quot;nextletter&amp;quot;, &lt;br /&gt;
    &amp;quot;prevletter&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms2&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms3&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms4&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms5&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms6&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms7&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms8&amp;quot;, &lt;br /&gt;
    &amp;quot;jumpsms9&amp;quot;, &lt;br /&gt;
    &amp;quot;filter&amp;quot;, &lt;br /&gt;
    &amp;quot;filterclear&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms2&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms3&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms4&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms5&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms6&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms7&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms8&amp;quot;, &lt;br /&gt;
    &amp;quot;filtersms9&amp;quot;, &lt;br /&gt;
    &amp;quot;firstpage&amp;quot;, &lt;br /&gt;
    &amp;quot;lastpage&amp;quot;, &lt;br /&gt;
    &amp;quot;guiprofile&amp;quot;, &lt;br /&gt;
    &amp;quot;red&amp;quot;, &lt;br /&gt;
    &amp;quot;green&amp;quot;, &lt;br /&gt;
    &amp;quot;yellow&amp;quot;, &lt;br /&gt;
    &amp;quot;blue&amp;quot;, &lt;br /&gt;
    &amp;quot;increasepar&amp;quot;, &lt;br /&gt;
    &amp;quot;decreasepar&amp;quot;, &lt;br /&gt;
    &amp;quot;volampup&amp;quot;, &lt;br /&gt;
    &amp;quot;volampdown&amp;quot;, &lt;br /&gt;
    &amp;quot;channelup&amp;quot;, &lt;br /&gt;
    &amp;quot;channeldown&amp;quot;, &lt;br /&gt;
    &amp;quot;previouschannelgroup&amp;quot;, &lt;br /&gt;
    &amp;quot;nextchannelgroup&amp;quot;, &lt;br /&gt;
    &amp;quot;leftclick&amp;quot;, &lt;br /&gt;
    &amp;quot;rightclick&amp;quot;, &lt;br /&gt;
    &amp;quot;middleclick&amp;quot;, &lt;br /&gt;
    &amp;quot;doubleclick&amp;quot;, &lt;br /&gt;
    &amp;quot;wheelup&amp;quot;, &lt;br /&gt;
    &amp;quot;wheeldown&amp;quot;, &lt;br /&gt;
    &amp;quot;mousedrag&amp;quot;, &lt;br /&gt;
    &amp;quot;mousemove&amp;quot;, &lt;br /&gt;
    &amp;quot;noop&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Input.Action&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;left&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Item===&lt;br /&gt;
====Item.Details.Base====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;string&#039;&#039; label&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;label&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Item.Fields.Base====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;uniqueItems&amp;quot;: true, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Library===&lt;br /&gt;
====Library.Details.Genre====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Details.Base|Item.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; thumbnail = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; title = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; genreid&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Library.Details.Genre&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;thumbnail&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;title&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Library.Fields.Genre====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Library.Fields.Genre&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Library.Id====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 1, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: -1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===List===&lt;br /&gt;
====List.Amount====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Amount&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: -1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Fields.All====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;duration&amp;quot;, &lt;br /&gt;
      &amp;quot;comment&amp;quot;, &lt;br /&gt;
      &amp;quot;lyrics&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainztrackid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;trailer&amp;quot;, &lt;br /&gt;
      &amp;quot;tagline&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;plotoutline&amp;quot;, &lt;br /&gt;
      &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;cast&amp;quot;, &lt;br /&gt;
      &amp;quot;country&amp;quot;, &lt;br /&gt;
      &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;premiered&amp;quot;, &lt;br /&gt;
      &amp;quot;productioncode&amp;quot;, &lt;br /&gt;
      &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;set&amp;quot;, &lt;br /&gt;
      &amp;quot;showlink&amp;quot;, &lt;br /&gt;
      &amp;quot;streamdetails&amp;quot;, &lt;br /&gt;
      &amp;quot;top250&amp;quot;, &lt;br /&gt;
      &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;firstaired&amp;quot;, &lt;br /&gt;
      &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;showtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;resume&amp;quot;, &lt;br /&gt;
      &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;albumid&amp;quot;, &lt;br /&gt;
      &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;setid&amp;quot;, &lt;br /&gt;
      &amp;quot;watchedepisodes&amp;quot;, &lt;br /&gt;
      &amp;quot;disc&amp;quot;, &lt;br /&gt;
      &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;genreid&amp;quot;, &lt;br /&gt;
      &amp;quot;displayartist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;theme&amp;quot;, &lt;br /&gt;
      &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;albumlabel&amp;quot;, &lt;br /&gt;
      &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;episodeguide&amp;quot;, &lt;br /&gt;
      &amp;quot;uniqueid&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;channel&amp;quot;, &lt;br /&gt;
      &amp;quot;channeltype&amp;quot;, &lt;br /&gt;
      &amp;quot;hidden&amp;quot;, &lt;br /&gt;
      &amp;quot;locked&amp;quot;, &lt;br /&gt;
      &amp;quot;channelnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;starttime&amp;quot;, &lt;br /&gt;
      &amp;quot;endtime&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Fields.All&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Fields.Files====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;duration&amp;quot;, &lt;br /&gt;
      &amp;quot;comment&amp;quot;, &lt;br /&gt;
      &amp;quot;lyrics&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainztrackid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumid&amp;quot;, &lt;br /&gt;
      &amp;quot;musicbrainzalbumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;trailer&amp;quot;, &lt;br /&gt;
      &amp;quot;tagline&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;plotoutline&amp;quot;, &lt;br /&gt;
      &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;cast&amp;quot;, &lt;br /&gt;
      &amp;quot;country&amp;quot;, &lt;br /&gt;
      &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;premiered&amp;quot;, &lt;br /&gt;
      &amp;quot;productioncode&amp;quot;, &lt;br /&gt;
      &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;set&amp;quot;, &lt;br /&gt;
      &amp;quot;showlink&amp;quot;, &lt;br /&gt;
      &amp;quot;streamdetails&amp;quot;, &lt;br /&gt;
      &amp;quot;top250&amp;quot;, &lt;br /&gt;
      &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;firstaired&amp;quot;, &lt;br /&gt;
      &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;showtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;resume&amp;quot;, &lt;br /&gt;
      &amp;quot;artistid&amp;quot;, &lt;br /&gt;
      &amp;quot;albumid&amp;quot;, &lt;br /&gt;
      &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;setid&amp;quot;, &lt;br /&gt;
      &amp;quot;watchedepisodes&amp;quot;, &lt;br /&gt;
      &amp;quot;disc&amp;quot;, &lt;br /&gt;
      &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;, &lt;br /&gt;
      &amp;quot;genreid&amp;quot;, &lt;br /&gt;
      &amp;quot;displayartist&amp;quot;, &lt;br /&gt;
      &amp;quot;albumartistid&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;, &lt;br /&gt;
      &amp;quot;theme&amp;quot;, &lt;br /&gt;
      &amp;quot;mood&amp;quot;, &lt;br /&gt;
      &amp;quot;style&amp;quot;, &lt;br /&gt;
      &amp;quot;albumlabel&amp;quot;, &lt;br /&gt;
      &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;episodeguide&amp;quot;, &lt;br /&gt;
      &amp;quot;uniqueid&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;size&amp;quot;, &lt;br /&gt;
      &amp;quot;lastmodified&amp;quot;, &lt;br /&gt;
      &amp;quot;mimetype&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Fields.Files&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Albums====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Albums&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Albums&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Albums&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.Albums&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Artists====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Artists&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Artists&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Artists&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.Artists&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Episodes====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Episodes&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Episodes&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Episodes&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.Episodes&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.Albums====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;album&amp;quot;, &lt;br /&gt;
    &amp;quot;artist&amp;quot;, &lt;br /&gt;
    &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;review&amp;quot;, &lt;br /&gt;
    &amp;quot;themes&amp;quot;, &lt;br /&gt;
    &amp;quot;moods&amp;quot;, &lt;br /&gt;
    &amp;quot;styles&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;, &lt;br /&gt;
    &amp;quot;label&amp;quot;, &lt;br /&gt;
    &amp;quot;rating&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.Albums&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;genre&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.Artists====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;artist&amp;quot;, &lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;moods&amp;quot;, &lt;br /&gt;
    &amp;quot;styles&amp;quot;, &lt;br /&gt;
    &amp;quot;instruments&amp;quot;, &lt;br /&gt;
    &amp;quot;biography&amp;quot;, &lt;br /&gt;
    &amp;quot;born&amp;quot;, &lt;br /&gt;
    &amp;quot;bandformed&amp;quot;, &lt;br /&gt;
    &amp;quot;disbanded&amp;quot;, &lt;br /&gt;
    &amp;quot;died&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.Artists&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;artist&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.Episodes====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;title&amp;quot;, &lt;br /&gt;
    &amp;quot;tvshow&amp;quot;, &lt;br /&gt;
    &amp;quot;plot&amp;quot;, &lt;br /&gt;
    &amp;quot;votes&amp;quot;, &lt;br /&gt;
    &amp;quot;rating&amp;quot;, &lt;br /&gt;
    &amp;quot;time&amp;quot;, &lt;br /&gt;
    &amp;quot;writers&amp;quot;, &lt;br /&gt;
    &amp;quot;airdate&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
    &amp;quot;inprogress&amp;quot;, &lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;director&amp;quot;, &lt;br /&gt;
    &amp;quot;actor&amp;quot;, &lt;br /&gt;
    &amp;quot;episode&amp;quot;, &lt;br /&gt;
    &amp;quot;season&amp;quot;, &lt;br /&gt;
    &amp;quot;filename&amp;quot;, &lt;br /&gt;
    &amp;quot;path&amp;quot;, &lt;br /&gt;
    &amp;quot;studio&amp;quot;, &lt;br /&gt;
    &amp;quot;mpaarating&amp;quot;, &lt;br /&gt;
    &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
    &amp;quot;videoresolution&amp;quot;, &lt;br /&gt;
    &amp;quot;audiochannels&amp;quot;, &lt;br /&gt;
    &amp;quot;videocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiolanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitlelanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;videoaspect&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.Episodes&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;title&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.Movies====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;title&amp;quot;, &lt;br /&gt;
    &amp;quot;plot&amp;quot;, &lt;br /&gt;
    &amp;quot;plotoutline&amp;quot;, &lt;br /&gt;
    &amp;quot;tagline&amp;quot;, &lt;br /&gt;
    &amp;quot;votes&amp;quot;, &lt;br /&gt;
    &amp;quot;rating&amp;quot;, &lt;br /&gt;
    &amp;quot;time&amp;quot;, &lt;br /&gt;
    &amp;quot;writers&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
    &amp;quot;inprogress&amp;quot;, &lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;country&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;director&amp;quot;, &lt;br /&gt;
    &amp;quot;actor&amp;quot;, &lt;br /&gt;
    &amp;quot;mpaarating&amp;quot;, &lt;br /&gt;
    &amp;quot;top250&amp;quot;, &lt;br /&gt;
    &amp;quot;studio&amp;quot;, &lt;br /&gt;
    &amp;quot;hastrailer&amp;quot;, &lt;br /&gt;
    &amp;quot;filename&amp;quot;, &lt;br /&gt;
    &amp;quot;path&amp;quot;, &lt;br /&gt;
    &amp;quot;set&amp;quot;, &lt;br /&gt;
    &amp;quot;tag&amp;quot;, &lt;br /&gt;
    &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
    &amp;quot;videoresolution&amp;quot;, &lt;br /&gt;
    &amp;quot;audiochannels&amp;quot;, &lt;br /&gt;
    &amp;quot;videocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiolanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitlelanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;videoaspect&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.Movies&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;title&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.MusicVideos====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;title&amp;quot;, &lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;album&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;artist&amp;quot;, &lt;br /&gt;
    &amp;quot;filename&amp;quot;, &lt;br /&gt;
    &amp;quot;path&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
    &amp;quot;time&amp;quot;, &lt;br /&gt;
    &amp;quot;director&amp;quot;, &lt;br /&gt;
    &amp;quot;studio&amp;quot;, &lt;br /&gt;
    &amp;quot;plot&amp;quot;, &lt;br /&gt;
    &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
    &amp;quot;videoresolution&amp;quot;, &lt;br /&gt;
    &amp;quot;audiochannels&amp;quot;, &lt;br /&gt;
    &amp;quot;videocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiocodec&amp;quot;, &lt;br /&gt;
    &amp;quot;audiolanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitlelanguage&amp;quot;, &lt;br /&gt;
    &amp;quot;videoaspect&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.MusicVideos&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;title&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.Songs====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;album&amp;quot;, &lt;br /&gt;
    &amp;quot;artist&amp;quot;, &lt;br /&gt;
    &amp;quot;albumartist&amp;quot;, &lt;br /&gt;
    &amp;quot;title&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;time&amp;quot;, &lt;br /&gt;
    &amp;quot;tracknumber&amp;quot;, &lt;br /&gt;
    &amp;quot;filename&amp;quot;, &lt;br /&gt;
    &amp;quot;path&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
    &amp;quot;rating&amp;quot;, &lt;br /&gt;
    &amp;quot;comment&amp;quot;, &lt;br /&gt;
    &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.Songs&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;genre&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Fields.TVShows====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;title&amp;quot;, &lt;br /&gt;
    &amp;quot;plot&amp;quot;, &lt;br /&gt;
    &amp;quot;status&amp;quot;, &lt;br /&gt;
    &amp;quot;votes&amp;quot;, &lt;br /&gt;
    &amp;quot;rating&amp;quot;, &lt;br /&gt;
    &amp;quot;year&amp;quot;, &lt;br /&gt;
    &amp;quot;genre&amp;quot;, &lt;br /&gt;
    &amp;quot;director&amp;quot;, &lt;br /&gt;
    &amp;quot;actor&amp;quot;, &lt;br /&gt;
    &amp;quot;numepisodes&amp;quot;, &lt;br /&gt;
    &amp;quot;numwatched&amp;quot;, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;, &lt;br /&gt;
    &amp;quot;path&amp;quot;, &lt;br /&gt;
    &amp;quot;studio&amp;quot;, &lt;br /&gt;
    &amp;quot;mpaarating&amp;quot;, &lt;br /&gt;
    &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
    &amp;quot;inprogress&amp;quot;, &lt;br /&gt;
    &amp;quot;playlist&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Fields.TVShows&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;title&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Movies====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Movies&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Movies&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Movies&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.Movies&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.MusicVideos====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.MusicVideos&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.MusicVideos&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.MusicVideos&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.MusicVideos&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Operators====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;contains&amp;quot;, &lt;br /&gt;
    &amp;quot;doesnotcontain&amp;quot;, &lt;br /&gt;
    &amp;quot;is&amp;quot;, &lt;br /&gt;
    &amp;quot;isnot&amp;quot;, &lt;br /&gt;
    &amp;quot;startswith&amp;quot;, &lt;br /&gt;
    &amp;quot;endswith&amp;quot;, &lt;br /&gt;
    &amp;quot;greaterthan&amp;quot;, &lt;br /&gt;
    &amp;quot;lessthan&amp;quot;, &lt;br /&gt;
    &amp;quot;after&amp;quot;, &lt;br /&gt;
    &amp;quot;before&amp;quot;, &lt;br /&gt;
    &amp;quot;inthelast&amp;quot;, &lt;br /&gt;
    &amp;quot;notinthelast&amp;quot;, &lt;br /&gt;
    &amp;quot;true&amp;quot;, &lt;br /&gt;
    &amp;quot;false&amp;quot;, &lt;br /&gt;
    &amp;quot;between&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Operators&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;contains&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;mixed&#039;&#039; value&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Operators|List.Filter.Operators]]&#039;&#039; operator&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;value&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;operator&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Operators&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.Albums====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.Albums|List.Filter.Fields.Albums]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.Albums&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.Albums&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.Artists====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.Artists|List.Filter.Fields.Artists]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.Artists&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.Artists&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.Episodes====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.Episodes|List.Filter.Fields.Episodes]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.Episodes&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.Episodes&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.Movies====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.Movies|List.Filter.Fields.Movies]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.Movies&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.Movies&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.MusicVideos====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.MusicVideos|List.Filter.Fields.MusicVideos]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.MusicVideos&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.MusicVideos&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.Songs====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.Songs|List.Filter.Fields.Songs]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.Songs&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.Songs&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Rule.TVShows====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Rule|List.Filter.Rule]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Filter.Fields.TVShows|List.Filter.Fields.TVShows]]&#039;&#039; field&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Rule.TVShows&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;field&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Fields.TVShows&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Filter.Rule&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.Songs====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.Songs&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Songs&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Songs&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.Songs&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Filter.TVShows====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Filter.TVShows&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;and&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.TVShows&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;or&amp;quot;: {&lt;br /&gt;
          &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
          &amp;quot;items&amp;quot;: {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.TVShows&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Filter.Rule.TVShows&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Item.All====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Item.Base|List.Item.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Channel.Type|PVR.Channel.Type]]&#039;&#039; channeltype = &amp;quot;tv&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; channel = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; starttime = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; endtime = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; channelnumber = 0 ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; hidden = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; locked = False ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Item.All&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;channeltype&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;tv&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channel&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;starttime&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;endtime&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channelnumber&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;hidden&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;locked&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Item.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Item.Base====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.File|Video.Details.File]]&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Audio.Details.Media|Audio.Details.Media]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; sorttitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; productioncode = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Video.Cast|Video.Cast]]&#039;&#039; cast ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; votes = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; duration = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; trailer = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; albumid = -1 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainzartistid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; mpaa = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; albumlabel = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; originaltitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; writer ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.Integer|Array.Integer]]&#039;&#039; albumartistid ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; type = &amp;quot;unknown&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; episode = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; firstaired = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; showtitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; country ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; mood ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; set = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; musicbrainztrackid = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; tag ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lyrics = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; top250 = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; comment = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; premiered = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; showlink ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; style ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; album = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; season = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; theme ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; description = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; setid = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; track = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; tagline = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; plotoutline = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; watchedepisodes = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; id = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; disc = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; albumartist ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; studio ]&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; uniqueid ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; episodeguide = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; imdbnumber = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Item.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;sorttitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;productioncode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;cast&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Cast&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;votes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;duration&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;trailer&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainzartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mpaa&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumlabel&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;originaltitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;writer&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumartistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.Integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;unknown&amp;quot;, &lt;br /&gt;
        &amp;quot;movie&amp;quot;, &lt;br /&gt;
        &amp;quot;episode&amp;quot;, &lt;br /&gt;
        &amp;quot;musicvideo&amp;quot;, &lt;br /&gt;
        &amp;quot;song&amp;quot;, &lt;br /&gt;
        &amp;quot;picture&amp;quot;, &lt;br /&gt;
        &amp;quot;channel&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;firstaired&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;showtitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;country&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mood&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;set&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicbrainztrackid&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tag&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;lyrics&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;top250&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;comment&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;premiered&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;showlink&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;style&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;album&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tvshowid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;season&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;theme&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;description&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;setid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;track&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tagline&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;plotoutline&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;watchedepisodes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;id&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;disc&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;albumartist&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;studio&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;uniqueid&amp;quot;: {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
        &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
        &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episodeguide&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;imdbnumber&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: [&lt;br /&gt;
    &amp;quot;Video.Details.File&amp;quot;, &lt;br /&gt;
    &amp;quot;Audio.Details.Media&amp;quot;&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Item.File====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.Item.Base|List.Item.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;string&#039;&#039; filetype&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; size = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; mimetype = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;string&#039;&#039; file&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lastmodified = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Item.File&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;filetype&amp;quot;: {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;file&amp;quot;, &lt;br /&gt;
        &amp;quot;directory&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;size&amp;quot;: {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Size of the file in kB (1000 Byte)&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mimetype&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;file&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;lastmodified&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;List.Item.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Items.Sources====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;file&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Items.Sources&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Limits====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#List.Amount|List.Amount]]&#039;&#039; end = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; start = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Limits&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;end&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Amount&amp;quot;, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Index of the last item to return&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;start&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Index of the first item to return&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.LimitsReturned====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#List.Amount|List.Amount]]&#039;&#039; end = -1 ]&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; total&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; start = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;end&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.Amount&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;total&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;start&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====List.Sort====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; order = &amp;quot;ascending&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; ignorearticle = False ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; method = &amp;quot;none&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;List.Sort&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;order&amp;quot;: {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;ascending&amp;quot;, &lt;br /&gt;
        &amp;quot;descending&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;ascending&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;ignorearticle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;method&amp;quot;: {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;none&amp;quot;, &lt;br /&gt;
        &amp;quot;label&amp;quot;, &lt;br /&gt;
        &amp;quot;date&amp;quot;, &lt;br /&gt;
        &amp;quot;size&amp;quot;, &lt;br /&gt;
        &amp;quot;file&amp;quot;, &lt;br /&gt;
        &amp;quot;path&amp;quot;, &lt;br /&gt;
        &amp;quot;drivetype&amp;quot;, &lt;br /&gt;
        &amp;quot;title&amp;quot;, &lt;br /&gt;
        &amp;quot;track&amp;quot;, &lt;br /&gt;
        &amp;quot;time&amp;quot;, &lt;br /&gt;
        &amp;quot;artist&amp;quot;, &lt;br /&gt;
        &amp;quot;album&amp;quot;, &lt;br /&gt;
        &amp;quot;albumtype&amp;quot;, &lt;br /&gt;
        &amp;quot;genre&amp;quot;, &lt;br /&gt;
        &amp;quot;country&amp;quot;, &lt;br /&gt;
        &amp;quot;year&amp;quot;, &lt;br /&gt;
        &amp;quot;rating&amp;quot;, &lt;br /&gt;
        &amp;quot;votes&amp;quot;, &lt;br /&gt;
        &amp;quot;top250&amp;quot;, &lt;br /&gt;
        &amp;quot;programcount&amp;quot;, &lt;br /&gt;
        &amp;quot;playlist&amp;quot;, &lt;br /&gt;
        &amp;quot;episode&amp;quot;, &lt;br /&gt;
        &amp;quot;season&amp;quot;, &lt;br /&gt;
        &amp;quot;totalepisodes&amp;quot;, &lt;br /&gt;
        &amp;quot;watchedepisodes&amp;quot;, &lt;br /&gt;
        &amp;quot;tvshowstatus&amp;quot;, &lt;br /&gt;
        &amp;quot;tvshowtitle&amp;quot;, &lt;br /&gt;
        &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
        &amp;quot;productioncode&amp;quot;, &lt;br /&gt;
        &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
        &amp;quot;studio&amp;quot;, &lt;br /&gt;
        &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
        &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
        &amp;quot;playcount&amp;quot;, &lt;br /&gt;
        &amp;quot;listeners&amp;quot;, &lt;br /&gt;
        &amp;quot;bitrate&amp;quot;, &lt;br /&gt;
        &amp;quot;random&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;none&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Media===&lt;br /&gt;
====Media.Artwork====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Global.String.NotEmpty|Global.String.NotEmpty]]&#039;&#039; banner = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.String.NotEmpty|Global.String.NotEmpty]]&#039;&#039; poster = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.String.NotEmpty|Global.String.NotEmpty]]&#039;&#039; fanart = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.String.NotEmpty|Global.String.NotEmpty]]&#039;&#039; thumb = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
    &amp;quot;$ref&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
    &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Media.Artwork&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;banner&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;poster&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;fanart&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;thumb&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.String.NotEmpty&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Media.Details.Base====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Details.Base|Item.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; fanart = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; thumbnail = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Media.Details.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;fanart&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;thumbnail&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Notifications===&lt;br /&gt;
====Notifications.Item====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Notifications.Item&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;An unknown item does not have any additional information.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;An item known to the database has an identification.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A movie item has a title and may have a release year.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;year&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: 0&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A tv episode has a title and may have an episode number, season number and the title of the show it belongs to.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;showtitle&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;episode&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: 0&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;season&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: 0&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A music video has a title and may have an album and an artist.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;album&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;artist&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A song has a title and may have an album, an artist and a track number.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;album&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;track&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: 0&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;artist&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A picture has a file path.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;file&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;A PVR channel is either a radio or tv channel and has a title.&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;channeltype&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Notifications.Item.Type====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;unknown&amp;quot;, &lt;br /&gt;
    &amp;quot;movie&amp;quot;, &lt;br /&gt;
    &amp;quot;episode&amp;quot;, &lt;br /&gt;
    &amp;quot;musicvideo&amp;quot;, &lt;br /&gt;
    &amp;quot;song&amp;quot;, &lt;br /&gt;
    &amp;quot;picture&amp;quot;, &lt;br /&gt;
    &amp;quot;channel&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Notifications.Item.Type&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Optional===&lt;br /&gt;
====Optional.Boolean====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Optional.Boolean&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Optional.Integer====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Optional.Integer&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Optional.Number====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Optional.Number&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Optional.String====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Optional.String&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===PVR===&lt;br /&gt;
====PVR.Channel.Type====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;tv&amp;quot;, &lt;br /&gt;
    &amp;quot;radio&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;tv&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.ChannelGroup.Id====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.ChannelGroup.Id&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;enums&amp;quot;: [&lt;br /&gt;
        &amp;quot;alltv&amp;quot;, &lt;br /&gt;
        &amp;quot;allradio&amp;quot;&lt;br /&gt;
      ], &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;default&amp;quot;: null&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Details.Channel====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Details.Base|Item.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Channel.Type|PVR.Channel.Type]]&#039;&#039; channeltype = &amp;quot;tv&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; thumbnail = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; channel = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; hidden = False ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; channelid&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; locked = False ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lastplayed = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Details.Channel&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;channeltype&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;tv&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;thumbnail&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channel&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;hidden&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channelid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;locked&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Details.ChannelGroup====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Details.Base|Item.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#PVR.Channel.Type|PVR.Channel.Type]]&#039;&#039; channeltype&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; channelgroupid&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Details.ChannelGroup&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;channeltype&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Channel.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channelgroupid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Details.ChannelGroup.Extended====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#PVR.Details.ChannelGroup|PVR.Details.ChannelGroup]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#PVR.Details.Channel|PVR.Details.Channel]]&#039;&#039;[] channels ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Details.ChannelGroup.Extended&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;limits&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;channels&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;PVR.Details.Channel&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;PVR.Details.ChannelGroup&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Fields.Channel====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;channeltype&amp;quot;, &lt;br /&gt;
      &amp;quot;hidden&amp;quot;, &lt;br /&gt;
      &amp;quot;locked&amp;quot;, &lt;br /&gt;
      &amp;quot;channel&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Fields.Channel&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;available&amp;quot;, &lt;br /&gt;
    &amp;quot;recording&amp;quot;, &lt;br /&gt;
    &amp;quot;scanning&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;available&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====PVR.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; scanning = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; recording = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; available = False ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;PVR.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;scanning&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;recording&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;available&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
====Player.Audio.Stream====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; index&lt;br /&gt;
*&#039;&#039;string&#039;&#039; language&lt;br /&gt;
*&#039;&#039;string&#039;&#039; name&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Audio.Stream&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;index&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;language&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;name&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Audio.Stream.Extended====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Player.Audio.Stream|Player.Audio.Stream]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; channels&lt;br /&gt;
*&#039;&#039;string&#039;&#039; codec&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; bitrate&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Audio.Stream.Extended&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;channels&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;codec&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;bitrate&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Player.Audio.Stream&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Id====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: -1, &lt;br /&gt;
  &amp;quot;maximum&amp;quot;: 2&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Notifications.Data====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Player.Notifications.Player|Player.Notifications.Player]]&#039;&#039; player&lt;br /&gt;
*&#039;&#039;[[#Notifications.Item|Notifications.Item]]&#039;&#039; item&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Notifications.Data&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;player&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Player&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;item&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Notifications.Player====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; speed = 0 ]&lt;br /&gt;
*&#039;&#039;[[#Player.Id|Player.Id]]&#039;&#039; playerid&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Notifications.Player&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;speed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playerid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Notifications.Player.Seek====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Player.Notifications.Player|Player.Notifications.Player]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; seekoffset ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; time ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Notifications.Player.Seek&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;seekoffset&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;time&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Player.Notifications.Player&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Position.Percentage====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;number&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Position.Percentage&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;maximum&amp;quot;: 100&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Position.Time====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; hours = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; milliseconds = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; seconds = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; minutes = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Position.Time&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;hours&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 23&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;milliseconds&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 999&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;seconds&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 59&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;minutes&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;maximum&amp;quot;: 59&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;type&amp;quot;, &lt;br /&gt;
    &amp;quot;partymode&amp;quot;, &lt;br /&gt;
    &amp;quot;speed&amp;quot;, &lt;br /&gt;
    &amp;quot;time&amp;quot;, &lt;br /&gt;
    &amp;quot;percentage&amp;quot;, &lt;br /&gt;
    &amp;quot;totaltime&amp;quot;, &lt;br /&gt;
    &amp;quot;playlistid&amp;quot;, &lt;br /&gt;
    &amp;quot;position&amp;quot;, &lt;br /&gt;
    &amp;quot;repeat&amp;quot;, &lt;br /&gt;
    &amp;quot;shuffled&amp;quot;, &lt;br /&gt;
    &amp;quot;canseek&amp;quot;, &lt;br /&gt;
    &amp;quot;canchangespeed&amp;quot;, &lt;br /&gt;
    &amp;quot;canmove&amp;quot;, &lt;br /&gt;
    &amp;quot;canzoom&amp;quot;, &lt;br /&gt;
    &amp;quot;canrotate&amp;quot;, &lt;br /&gt;
    &amp;quot;canshuffle&amp;quot;, &lt;br /&gt;
    &amp;quot;canrepeat&amp;quot;, &lt;br /&gt;
    &amp;quot;currentaudiostream&amp;quot;, &lt;br /&gt;
    &amp;quot;audiostreams&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitleenabled&amp;quot;, &lt;br /&gt;
    &amp;quot;currentsubtitle&amp;quot;, &lt;br /&gt;
    &amp;quot;subtitles&amp;quot;, &lt;br /&gt;
    &amp;quot;live&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;type&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canrepeat = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canmove = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canshuffle = False ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; speed = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Position.Percentage|Player.Position.Percentage]]&#039;&#039; percentage = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid = -1 ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Audio.Stream|Player.Audio.Stream]]&#039;&#039;[] audiostreams ]&lt;br /&gt;
*[ &#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position = -1 ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Repeat|Player.Repeat]]&#039;&#039; repeat = &amp;quot;off&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Subtitle|Player.Subtitle]]&#039;&#039; currentsubtitle ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canrotate = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canzoom = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canchangespeed = False ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Type|Player.Type]]&#039;&#039; type = &amp;quot;video&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; partymode = False ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Subtitle|Player.Subtitle]]&#039;&#039;[] subtitles ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canseek = False ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; time ]&lt;br /&gt;
*[ &#039;&#039;[[#Global.Time|Global.Time]]&#039;&#039; totaltime ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; shuffled = False ]&lt;br /&gt;
*[ &#039;&#039;[[#Player.Audio.Stream.Extended|Player.Audio.Stream.Extended]]&#039;&#039; currentaudiostream ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; live = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; subtitleenabled = False ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;canrepeat&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canmove&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canshuffle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;speed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;percentage&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Position.Percentage&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;audiostreams&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Player.Audio.Stream&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;position&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;repeat&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Repeat&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;off&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;currentsubtitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Subtitle&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canrotate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canzoom&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canchangespeed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;video&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;partymode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;subtitles&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Player.Subtitle&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canseek&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;time&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;totaltime&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Global.Time&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;shuffled&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;currentaudiostream&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Audio.Stream.Extended&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;live&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;subtitleenabled&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Repeat====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;off&amp;quot;, &lt;br /&gt;
    &amp;quot;one&amp;quot;, &lt;br /&gt;
    &amp;quot;all&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Repeat&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;off&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Speed====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; speed = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Speed&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;speed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;required&amp;quot;: true, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Subtitle====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; index&lt;br /&gt;
*&#039;&#039;string&#039;&#039; language&lt;br /&gt;
*&#039;&#039;string&#039;&#039; name&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Subtitle&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;index&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;language&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;name&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.Type====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;video&amp;quot;, &lt;br /&gt;
    &amp;quot;audio&amp;quot;, &lt;br /&gt;
    &amp;quot;picture&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Player.Type&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;video&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Playlist===&lt;br /&gt;
====Playlist.Id====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: -1, &lt;br /&gt;
  &amp;quot;maximum&amp;quot;: 2&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Item====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;mixed&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Item&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;file&amp;quot;: {&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Path to a file (not a directory) to be added to the playlist&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;directory&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;movieid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;episodeid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;musicvideoid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;artistid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;albumid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;songid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;genreid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Identification of a genre from the AudioLibrary&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Position====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;integer&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Position&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: -1&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;type&amp;quot;, &lt;br /&gt;
    &amp;quot;size&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;type&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; size = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Playlist.Type|Playlist.Type]]&#039;&#039; type = &amp;quot;unknown&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;size&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Type&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.Type====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;unknown&amp;quot;, &lt;br /&gt;
    &amp;quot;video&amp;quot;, &lt;br /&gt;
    &amp;quot;audio&amp;quot;, &lt;br /&gt;
    &amp;quot;picture&amp;quot;, &lt;br /&gt;
    &amp;quot;mixed&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Playlist.Type&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;unknown&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===System===&lt;br /&gt;
====System.Property.Name====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;string&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;enums&amp;quot;: [&lt;br /&gt;
    &amp;quot;canshutdown&amp;quot;, &lt;br /&gt;
    &amp;quot;cansuspend&amp;quot;, &lt;br /&gt;
    &amp;quot;canhibernate&amp;quot;, &lt;br /&gt;
    &amp;quot;canreboot&amp;quot;&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;System.Property.Name&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
  &amp;quot;default&amp;quot;: &amp;quot;canshutdown&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.Property.Value====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canshutdown = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canhibernate = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; cansuspend = False ]&lt;br /&gt;
*[ &#039;&#039;boolean&#039;&#039; canreboot = False ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;System.Property.Value&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;canshutdown&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canhibernate&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;cansuspend&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;canreboot&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
====Video.Cast====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;array&#039;&#039;{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
        &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;name&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;role&amp;quot;: {&lt;br /&gt;
        &amp;quot;required&amp;quot;: true, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Cast&amp;quot;, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Base====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Media.Details.Base|Media.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Media.Artwork|Media.Artwork]]&#039;&#039; art ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; playcount = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Base&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;art&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Media.Artwork&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;playcount&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Media.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Episode====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.File|Video.Details.File]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Cast|Video.Cast]]&#039;&#039; cast ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; productioncode = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;number&#039;&#039; rating = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; votes = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; episode = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; showtitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; episodeid&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; season = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; firstaired = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;object&#039;&#039; uniqueid ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; writer ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; originaltitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Episode&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;cast&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Cast&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;productioncode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;rating&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;votes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;showtitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episodeid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tvshowid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;season&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;firstaired&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;uniqueid&amp;quot;: {&lt;br /&gt;
      &amp;quot;additionalProperties&amp;quot;: {&lt;br /&gt;
        &amp;quot;minLength&amp;quot;: 1, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
        &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;writer&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;originaltitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.File&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.File====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Item|Video.Details.Item]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Video.Streams|Video.Streams]]&#039;&#039; streamdetails ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; director ]&lt;br /&gt;
*[ &#039;&#039;[[#Video.Resume|Video.Resume]]&#039;&#039; resume ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; runtime = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.File&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;streamdetails&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Streams&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;director&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;resume&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Resume&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;runtime&amp;quot;: {&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Runtime in seconds&amp;quot;, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Item&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Item====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Media|Video.Details.Media]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; dateadded = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; file = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; lastplayed = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; plot = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Item&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;dateadded&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;file&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;lastplayed&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;plot&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Media&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Media====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Base|Video.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; title = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Media&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;title&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Movie====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.File|Video.Details.File]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; plotoutline = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; sorttitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; movieid&lt;br /&gt;
*[ &#039;&#039;[[#Video.Cast|Video.Cast]]&#039;&#039; cast ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; votes = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; showlink ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; top250 = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; trailer = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; year = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; country ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; studio ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; set = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; genre ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; mpaa = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; setid = -1 ]&lt;br /&gt;
*[ &#039;&#039;number&#039;&#039; rating = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; tag ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; tagline = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; writer ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; originaltitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; imdbnumber = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Movie&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;plotoutline&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;sorttitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;movieid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;cast&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Cast&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;votes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;showlink&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;top250&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;trailer&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;year&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;country&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;studio&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;set&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;genre&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mpaa&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;setid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;rating&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tag&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tagline&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;writer&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;originaltitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;imdbnumber&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.File&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.MovieSet====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Media|Video.Details.Media]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; setid&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.MovieSet&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;setid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Media&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.MovieSet.Extended====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.MovieSet|Video.Details.MovieSet]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#List.LimitsReturned|List.LimitsReturned]]&#039;&#039; limits&lt;br /&gt;
*[ &#039;&#039;[[#Video.Details.Movie|Video.Details.Movie]]&#039;&#039;[] movies ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.MovieSet.Extended&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;limits&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;List.LimitsReturned&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;movies&amp;quot;: {&lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;$ref&amp;quot;: &amp;quot;Video.Details.Movie&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.MovieSet&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.MusicVideo====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.File|Video.Details.File]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; genre ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; artist ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; musicvideoid&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; tag ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; album = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; track = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; studio ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; year = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.MusicVideo&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;genre&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;artist&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;musicvideoid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tag&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;album&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;track&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;studio&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;year&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.File&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.Season====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Base|Video.Details.Base]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; showtitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; watchedepisodes = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid = -1 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; episode = 0 ]&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; season&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.Season&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;showtitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;watchedepisodes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tvshowid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: -1&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;season&amp;quot;: {&lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Details.TVShow====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Video.Details.Item|Video.Details.Item]]&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; sorttitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; mpaa = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; premiered = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; year = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; episode = 0 ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; watchedepisodes = 0 ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; votes = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;number&#039;&#039; rating = 0 ]&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; tvshowid&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; studio ]&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; season = 0 ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; genre ]&lt;br /&gt;
*[ &#039;&#039;[[#Video.Cast|Video.Cast]]&#039;&#039; cast ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; episodeguide = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;[[#Array.String|Array.String]]&#039;&#039; tag ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; originaltitle = &amp;quot;&amp;quot; ]&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; imdbnumber = &amp;quot;&amp;quot; ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Details.TVShow&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;sorttitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;mpaa&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;premiered&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;year&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episode&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;watchedepisodes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;votes&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;rating&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tvshowid&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;studio&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;season&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;genre&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;cast&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Video.Cast&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;episodeguide&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;tag&amp;quot;: {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Array.String&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;originaltitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;imdbnumber&amp;quot;: {&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Video.Details.Item&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.Episode====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;firstaired&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;productioncode&amp;quot;, &lt;br /&gt;
      &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;showtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;cast&amp;quot;, &lt;br /&gt;
      &amp;quot;streamdetails&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;resume&amp;quot;, &lt;br /&gt;
      &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;uniqueid&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Requesting the cast field will result in increased response times&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.Episode&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.Movie====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;trailer&amp;quot;, &lt;br /&gt;
      &amp;quot;tagline&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;plotoutline&amp;quot;, &lt;br /&gt;
      &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;writer&amp;quot;, &lt;br /&gt;
      &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;cast&amp;quot;, &lt;br /&gt;
      &amp;quot;country&amp;quot;, &lt;br /&gt;
      &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;set&amp;quot;, &lt;br /&gt;
      &amp;quot;showlink&amp;quot;, &lt;br /&gt;
      &amp;quot;streamdetails&amp;quot;, &lt;br /&gt;
      &amp;quot;top250&amp;quot;, &lt;br /&gt;
      &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;resume&amp;quot;, &lt;br /&gt;
      &amp;quot;setid&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Requesting the cast, showlink and/or tag field will result in increased response times&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.Movie&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.MovieSet====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.MovieSet&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.MusicVideo====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;runtime&amp;quot;, &lt;br /&gt;
      &amp;quot;director&amp;quot;, &lt;br /&gt;
      &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;album&amp;quot;, &lt;br /&gt;
      &amp;quot;artist&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;track&amp;quot;, &lt;br /&gt;
      &amp;quot;streamdetails&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;resume&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.MusicVideo&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.Season====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;showtitle&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;tvshowid&amp;quot;, &lt;br /&gt;
      &amp;quot;watchedepisodes&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.Season&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Fields.TVShow====&lt;br /&gt;
&#039;&#039;&#039;Extends:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Item.Fields.Base|Item.Fields.Base]]&#039;&#039;&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;items&amp;quot;: {&lt;br /&gt;
    &amp;quot;enums&amp;quot;: [&lt;br /&gt;
      &amp;quot;title&amp;quot;, &lt;br /&gt;
      &amp;quot;genre&amp;quot;, &lt;br /&gt;
      &amp;quot;year&amp;quot;, &lt;br /&gt;
      &amp;quot;rating&amp;quot;, &lt;br /&gt;
      &amp;quot;plot&amp;quot;, &lt;br /&gt;
      &amp;quot;studio&amp;quot;, &lt;br /&gt;
      &amp;quot;mpaa&amp;quot;, &lt;br /&gt;
      &amp;quot;cast&amp;quot;, &lt;br /&gt;
      &amp;quot;playcount&amp;quot;, &lt;br /&gt;
      &amp;quot;episode&amp;quot;, &lt;br /&gt;
      &amp;quot;imdbnumber&amp;quot;, &lt;br /&gt;
      &amp;quot;premiered&amp;quot;, &lt;br /&gt;
      &amp;quot;votes&amp;quot;, &lt;br /&gt;
      &amp;quot;lastplayed&amp;quot;, &lt;br /&gt;
      &amp;quot;fanart&amp;quot;, &lt;br /&gt;
      &amp;quot;thumbnail&amp;quot;, &lt;br /&gt;
      &amp;quot;file&amp;quot;, &lt;br /&gt;
      &amp;quot;originaltitle&amp;quot;, &lt;br /&gt;
      &amp;quot;sorttitle&amp;quot;, &lt;br /&gt;
      &amp;quot;episodeguide&amp;quot;, &lt;br /&gt;
      &amp;quot;season&amp;quot;, &lt;br /&gt;
      &amp;quot;watchedepisodes&amp;quot;, &lt;br /&gt;
      &amp;quot;dateadded&amp;quot;, &lt;br /&gt;
      &amp;quot;tag&amp;quot;, &lt;br /&gt;
      &amp;quot;art&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Requesting the cast field will result in increased response times&amp;quot;, &lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Fields.TVShow&amp;quot;, &lt;br /&gt;
  &amp;quot;extends&amp;quot;: &amp;quot;Item.Fields.Base&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Resume====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;number&#039;&#039; position = 0 ]&lt;br /&gt;
*[ &#039;&#039;number&#039;&#039; total = 0 ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Resume&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;position&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;total&amp;quot;: {&lt;br /&gt;
      &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
      &amp;quot;default&amp;quot;: 0&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Video.Streams====&lt;br /&gt;
&#039;&#039;&#039;Type:&#039;&#039;&#039; &#039;&#039;object&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;array&#039;&#039;[1..X] video ]&lt;br /&gt;
*[ &#039;&#039;array&#039;&#039;[1..X] audio ]&lt;br /&gt;
*[ &#039;&#039;array&#039;&#039;[1..X] subtitle ]&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;Video.Streams&amp;quot;, &lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;video&amp;quot;: {&lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;height&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: 0&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;width&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: 0&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;aspect&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: 0&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;codec&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;duration&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: 0&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;audio&amp;quot;: {&lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;channels&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: 0&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;language&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
          }, &lt;br /&gt;
          &amp;quot;codec&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;subtitle&amp;quot;: {&lt;br /&gt;
      &amp;quot;minItems&amp;quot;: 1, &lt;br /&gt;
      &amp;quot;items&amp;quot;: {&lt;br /&gt;
        &amp;quot;additionalProperties&amp;quot;: false, &lt;br /&gt;
        &amp;quot;properties&amp;quot;: {&lt;br /&gt;
          &amp;quot;language&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }, &lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notifications==&lt;br /&gt;
===Application===&lt;br /&gt;
====Application.OnVolumeChanged====&lt;br /&gt;
The volume of the application has changed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;integer&#039;&#039; volume&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; muted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;volume&amp;quot;: {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;maximum&amp;quot;: 100&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;muted&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The volume of the application has changed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===AudioLibrary===&lt;br /&gt;
====AudioLibrary.OnCleanFinished====&lt;br /&gt;
The audio library has been cleaned.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The audio library has been cleaned.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.OnCleanStarted====&lt;br /&gt;
An audio library clean operation has started.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;An audio library clean operation has started.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.OnRemove====&lt;br /&gt;
An audio item has been removed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; id&lt;br /&gt;
*&#039;&#039;[[#Notifications.Library.Audio.Type|Notifications.Library.Audio.Type]]&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Library.Audio.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;An audio item has been removed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.OnScanFinished====&lt;br /&gt;
Scanning the audio library has been finished.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Scanning the audio library has been finished.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.OnScanStarted====&lt;br /&gt;
An audio library scan has started.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;An audio library scan has started.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====AudioLibrary.OnUpdate====&lt;br /&gt;
An audio item has been updated.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; id&lt;br /&gt;
*&#039;&#039;string&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;enum&amp;quot;: [&lt;br /&gt;
            &amp;quot;song&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;id&amp;quot;: &amp;quot;Notifications.Library.Audio.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;An audio item has been updated.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Input===&lt;br /&gt;
====Input.OnInputFinished====&lt;br /&gt;
The user has provided the requested input.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The user has provided the requested input.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Input.OnInputRequested====&lt;br /&gt;
The user is requested to provide some information.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;string&#039;&#039; value&lt;br /&gt;
*[ &#039;&#039;string&#039;&#039; title ]&lt;br /&gt;
*&#039;&#039;string&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;value&amp;quot;: {&lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;title&amp;quot;: {&lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;enum&amp;quot;: [&lt;br /&gt;
            &amp;quot;keyboard&amp;quot;, &lt;br /&gt;
            &amp;quot;time&amp;quot;, &lt;br /&gt;
            &amp;quot;date&amp;quot;, &lt;br /&gt;
            &amp;quot;ip&amp;quot;, &lt;br /&gt;
            &amp;quot;password&amp;quot;, &lt;br /&gt;
            &amp;quot;numericpassword&amp;quot;, &lt;br /&gt;
            &amp;quot;number&amp;quot;, &lt;br /&gt;
            &amp;quot;seconds&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The user is requested to provide some information.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
====Player.OnPause====&lt;br /&gt;
Playback of a media item has been paused. If there is no ID available extra information will be provided.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;[[#Player.Notifications.Data|Player.Notifications.Data]]&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Data&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Playback of a media item has been paused. If there is no ID available extra information will be provided.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.OnPlay====&lt;br /&gt;
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.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;[[#Player.Notifications.Data|Player.Notifications.Data]]&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Data&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;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.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.OnPropertyChanged====&lt;br /&gt;
A property of the playing items has changed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Player.Property.Value|Player.Property.Value]]&#039;&#039; property ]&lt;br /&gt;
*&#039;&#039;[[#Player.Notifications.Player|Player.Notifications.Player]]&#039;&#039; player&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;property&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Property.Value&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;player&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Player&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A property of the playing items has changed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.OnSeek====&lt;br /&gt;
The playback position has been changed. If there is no ID available extra information will be provided.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Player.Notifications.Player.Seek|Player.Notifications.Player.Seek]]&#039;&#039; player&lt;br /&gt;
*[ &#039;&#039;[[#Notifications.Item|Notifications.Item]]&#039;&#039; item ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;player&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Player.Seek&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;item&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The playback position has been changed. If there is no ID available extra information will be provided.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.OnSpeedChanged====&lt;br /&gt;
Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;[[#Player.Notifications.Data|Player.Notifications.Data]]&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;$ref&amp;quot;: &amp;quot;Player.Notifications.Data&amp;quot;, &lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Player.OnStop====&lt;br /&gt;
Playback of a media item has been stopped. If there is no ID available extra information will be provided.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;boolean&#039;&#039; end&lt;br /&gt;
*[ &#039;&#039;[[#Notifications.Item|Notifications.Item]]&#039;&#039; item ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;end&amp;quot;: {&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Whether the player has reached the end of the playable item(s) or not&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;item&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Playback of a media item has been stopped. If there is no ID available extra information will be provided.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Playlist===&lt;br /&gt;
====Playlist.OnAdd====&lt;br /&gt;
A playlist item has been added.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position ]&lt;br /&gt;
*[ &#039;&#039;[[#Notifications.Item|Notifications.Item]]&#039;&#039; item ]&lt;br /&gt;
*&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;position&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;item&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Item&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A playlist item has been added.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.OnClear====&lt;br /&gt;
A playlist item has been cleared.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A playlist item has been cleared.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====Playlist.OnRemove====&lt;br /&gt;
A playlist item has been removed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*[ &#039;&#039;[[#Playlist.Position|Playlist.Position]]&#039;&#039; position ]&lt;br /&gt;
*&#039;&#039;[[#Playlist.Id|Playlist.Id]]&#039;&#039; playlistid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;position&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Position&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;playlistid&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Playlist.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A playlist item has been removed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===System===&lt;br /&gt;
====System.OnLowBattery====&lt;br /&gt;
The system is on low battery.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The system is on low battery.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.OnQuit====&lt;br /&gt;
XBMC will be closed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;XBMC will be closed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.OnRestart====&lt;br /&gt;
The system will be restarted.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The system will be restarted.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.OnSleep====&lt;br /&gt;
The system will be suspended.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The system will be suspended.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====System.OnWake====&lt;br /&gt;
The system woke up from suspension.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The system woke up from suspension.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===VideoLibrary===&lt;br /&gt;
====VideoLibrary.OnCleanFinished====&lt;br /&gt;
The video library has been cleaned.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The video library has been cleaned.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.OnCleanStarted====&lt;br /&gt;
A video library clean operation has started.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A video library clean operation has started.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.OnRemove====&lt;br /&gt;
A video item has been removed.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; id&lt;br /&gt;
*&#039;&#039;[[#Notifications.Library.Video.Type|Notifications.Library.Video.Type]]&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Notifications.Library.Video.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A video item has been removed.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.OnScanFinished====&lt;br /&gt;
Scanning the video library has been finished.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Scanning the video library has been finished.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.OnScanStarted====&lt;br /&gt;
A video library scan has started.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;null&#039;&#039; data&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;null&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A video library scan has started.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
====VideoLibrary.OnUpdate====&lt;br /&gt;
A video item has been updated.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA&amp;quot;&amp;gt;&lt;br /&gt;
#&#039;&#039;string&#039;&#039; sender&lt;br /&gt;
#&#039;&#039;object&#039;&#039; data&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Properties:&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;[[#Library.Id|Library.Id]]&#039;&#039; id&lt;br /&gt;
*[ &#039;&#039;integer&#039;&#039; playcount = -1 ]&lt;br /&gt;
*&#039;&#039;string&#039;&#039; type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;params&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;sender&amp;quot;, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }, &lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;data&amp;quot;, &lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: {&lt;br /&gt;
          &amp;quot;$ref&amp;quot;: &amp;quot;Library.Id&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;playcount&amp;quot;: {&lt;br /&gt;
          &amp;quot;minimum&amp;quot;: 0, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;, &lt;br /&gt;
          &amp;quot;default&amp;quot;: -1&lt;br /&gt;
        }, &lt;br /&gt;
        &amp;quot;type&amp;quot;: {&lt;br /&gt;
          &amp;quot;enum&amp;quot;: [&lt;br /&gt;
            &amp;quot;movie&amp;quot;, &lt;br /&gt;
            &amp;quot;tvshow&amp;quot;, &lt;br /&gt;
            &amp;quot;episode&amp;quot;, &lt;br /&gt;
            &amp;quot;musicvideo&amp;quot;&lt;br /&gt;
          ], &lt;br /&gt;
          &amp;quot;id&amp;quot;: &amp;quot;Notifications.Library.Video.Type&amp;quot;, &lt;br /&gt;
          &amp;quot;required&amp;quot;: true, &lt;br /&gt;
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }, &lt;br /&gt;
      &amp;quot;required&amp;quot;: true, &lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ], &lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;A video item has been updated.&amp;quot;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[JSON-RPC API]]&lt;br /&gt;
*[[JSON-RPC API/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
*[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)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74570</id>
		<title>JSON-RPC API</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=JSON-RPC_API&amp;diff=74570"/>
		<updated>2014-05-07T04:47:57Z</updated>

		<summary type="html">&lt;p&gt;Thezoggy: /* API versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{JSON-RPC API nav}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSON-RPC is a HTTP- and/or raw TCP socket-based interface for communicating with XBMC. It replaces the &amp;lt;s&amp;gt;soon-to-be-depreceated&amp;lt;/s&amp;gt; deprecated [[HTTP API]], and offers a more secure and robust mechanism in the same format. It is based upon the [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification].&lt;br /&gt;
&lt;br /&gt;
Each method in the interface can have different security needs which means one client may be allowed to only control playback while another can only read and manipulate the library. In version 2 (first stable) and 4 all clients are granted full authority but will later be forced to ask for privileges and the user of XBMC will have to grant said client access. The design of JSON-RPC is that most methods should behave roughly the same and maintain consistency while hiding the mechanics of XBMC from the client creator.&lt;br /&gt;
&lt;br /&gt;
In XBMC JSON-RPC can be accessed over a variety of transports and has been designed from the ground up to be flexible to allow control over new transports easily. Some of the transports have different limitations which will be enforced upon the interaction over that transport. As an example HTTP transports allow response and downloading of files while the raw TCP transport allows response and notifications (events and information XBMC sends to its clients). Depending on the client&#039;s needs it will choose one (or many) of the available transports.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enabling JSON-RPC ==&lt;br /&gt;
Since the interface is available on many transports enabling it depends on the transport.&lt;br /&gt;
* Python: Always enabled&lt;br /&gt;
* HTTP: In System/Settings/Network/Services activate &#039;&#039;Allow control of XBMC via HTTP&#039;&#039; (see [[Webserver#Enabling the webserver|Enabling the webserver]])&lt;br /&gt;
* TCP: In System/Settings/Network/Services activate &#039;&#039;Allow programs on this system to control XBMC&#039;&#039; for localhost access only and &#039;&#039;Allow programs on other systems to control XBMC&#039;&#039; for access from other computers as well&lt;br /&gt;
&lt;br /&gt;
Note: The [[EventServer]] is a different interface for sending remote keypresses to XBMC, and must be enabled separately, some programs may use both interfaces.&lt;br /&gt;
&lt;br /&gt;
== Transports &amp;amp; Functionalities ==&lt;br /&gt;
=== Transports ===&lt;br /&gt;
==== Python ====&lt;br /&gt;
The &#039;&#039;Python&#039;&#039; transport can only be used by XBMC addons through the &#039;&#039;&#039;executeJSONRPC&#039;&#039;&#039; method provided by the &#039;&#039;&#039;xbmc&#039;&#039;&#039; python library. As it must be available to every addon in an XBMC installation it must not be enabled or disabled by the user.&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
The &#039;&#039;HTTP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP] protocol. Because this transport allows applications outside XBMC to control XBMC, it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user.&lt;br /&gt;
&lt;br /&gt;
===== POST =====&lt;br /&gt;
Third-party applications can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in HTTP [http://en.wikipedia.org/wiki/POST_(HTTP) POST] requests to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starting with Frodo nightly builds it is mandatory to set the HTTP header field &#039;&#039;&#039;Content-Type: application/json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== GET =====&lt;br /&gt;
Third-party application can access XBMC&#039;s JSON-RPC API by sending JSON-RPC requests embedded in a HTTP GET parameter called &#039;&#039;request&#039;&#039;. The JSON-RPC request must be URL encoded and sent to the following URL&lt;br /&gt;
&amp;lt;pre&amp;gt;http://&amp;lt;your-ip&amp;gt;:&amp;lt;your-port&amp;gt;/jsonrpc?request=&amp;lt;url-encoded-request&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
The &#039;&#039;TCP&#039;&#039; transport can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] protocol. Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by opening a TCP [http://en.wikipedia.org/wiki/Internet_socket socket] on port 9090 (this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file) and sending raw JSON-RPC requests over that socket. Please note that no delimiters are provided in between notifications and/or responses. As such, your client needs to be able to deal with this, eg. by counting and matching curly braces ({}).&lt;br /&gt;
&lt;br /&gt;
==== WebSocket ====&lt;br /&gt;
The &#039;&#039;WebSocket&#039;&#039; transport has been added since Version 5 and can be used by third-party applications running on the same machine as XBMC or on a different machine which can access the machine running XBMC using the [http://en.wikipedia.org/wiki/WebSocket Websocket] protocol. The supported versions are 8 (draft [http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10 hybi-10]) and 13 ([http://tools.ietf.org/html/rfc6455 RFC 6455]). Because this transport allows applications outside XBMC to control XBMC it has to be manually enabled (see [[#Enabling JSON-RPC|Enabling JSON-RPC]]) by the user. Once enabled, third-party applications can access XBMC&#039;s JSON-RPC API by sending a WebSocket protocol handshake to the following URI&lt;br /&gt;
&amp;lt;pre&amp;gt;ws://&amp;lt;your-ip&amp;gt;:&amp;lt;configured tcp port&amp;gt;/jsonrpc&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is important to send the handshake on the port of XBMC&#039;s TCP server (by default 9090, but this port can be configured in the [[Advancedsettings.xml#&amp;lt;jsonrpc&amp;gt;|advanced settings]] file). After having successfully finished the handshake third-party applications can send WebSocket protocl messages over that connection.&lt;br /&gt;
&lt;br /&gt;
=== Functionalities ===&lt;br /&gt;
==== Response ====&lt;br /&gt;
The &#039;&#039;Response&#039;&#039; functionality is the only functionality that should be present in every transport available as it describes the functionality to respond to a JSON-RPC request with a valid JSON-RPC response (be it an error message or an actual response).&lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
The &#039;&#039;Notifications&#039;&#039; functionality includes both server-side (from the server to clients) and client-side (from clients to the server) notifications. A JSON-RPC notification is a valid JSON-RPC request with no &#039;&#039;id&#039;&#039; property. Following the JSON-RPC 2.0 specification any JSON-RPC request with no &#039;&#039;id&#039;&#039; must be considered as a notification and the receiver must not send a response upon a notification. &lt;br /&gt;
&lt;br /&gt;
In the specific case of XBMC, server-side notifications are used to inform clients about certain events to relieve clients of the need to periodically poll for certain events. Furthermore there are two ways of client-side notifications. Using [[/v3#JSONRPC.NotifyAll|JSONRPC.NotifyAll]] it is possible to ask XBMC to relay the message in the JSON-RPC request to all other connected clients. The second way is to send JSON-RPC requests without an &#039;&#039;id&#039;&#039; property in case the client does not care about the response (e.g. the method [[/v3#Player.Stop|Player.Stop]] does not return any useful information to the client).&lt;br /&gt;
&lt;br /&gt;
==== Direct file download ====&lt;br /&gt;
The &#039;&#039;Direct file download&#039;&#039; functionality is the ability to directly download files from XBMC by calling [[/v3#Files.Download|Files.Download]]. In this case the term &#039;&#039;direct&#039;&#039; means that the download happens within the JSON-RPC response of the [[/v3#Files.Download|Files.Download]] request.&lt;br /&gt;
&lt;br /&gt;
==== Redirected file download ====&lt;br /&gt;
The &#039;&#039;Redirected file download&#039;&#039; functionality is the ability to indirectly download files from XBMC by calling [[/v3#Files.PrepareDownload|Files.PrepareDownload]] and using the data received in the response to download the file over a different protocol (like HTTP, FTP ...) or another socket. As the &#039;&#039;Redirected file download&#039;&#039; is very transport specific, it must be handled separately for every transport supporting it.&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The following table shows all the available transports and what functionalities they support&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 10px;&amp;quot; colspan=&amp;quot;2&amp;quot;|Transport&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Response&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Direct file&amp;lt;br /&amp;gt;download&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Redirected file&amp;lt;br /&amp;gt;download&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[[Python Development|Python]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot; rowspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/HTTP HTTP]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|POST&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right:5px;&amp;quot;|GET&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px;&amp;quot; colspan=&amp;quot;2&amp;quot;|[http://en.wikipedia.org/wiki/WebSocket WebSocket]&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; Added in Version 5&lt;br /&gt;
&lt;br /&gt;
== API versions ==&lt;br /&gt;
The JSON-RPC API exposed by XBMC is constantly extended to provide better and more functionality to third party applications. For that reason XBMC provides a version information through the &#039;&#039;&#039;JSONRPC.Version&#039;&#039;&#039; method. The rule is that odd version numbers describe an API state, that is not stable and under heavy development whereas even version numbers describe a stable API. Therefore the version number can be used by third-party clients to check if their application might not be fully compatible with the JSON-RPC API exposed by a user&#039;s XBMC installation.&lt;br /&gt;
&lt;br /&gt;
Starting with XBMC v12 (Frodo) we started using a new versioning system (&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;bugfix&amp;gt;) for the JSON-RPC API. Frodo stable is version 6.0.0 and from now on with every bugfix the &amp;lt;bugfix&amp;gt; part of the version is increased, with every feature addition to the API, the &amp;lt;minor&amp;gt; version is increased (and the &amp;lt;bugfix&amp;gt; version reset to 0) and with every backwards incompatible change, the &amp;lt;major&amp;gt; version is increased.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; style=&amp;quot;margin-right: 0;&amp;quot;&lt;br /&gt;
!|&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|XBMC Release&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|JSON-RPC 2.0 specification&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Transports&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;padding-left: 5px; padding-right: 5px; width: 6em; text-align: left;&amp;quot;|API Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 5em;&amp;quot;|Version&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px; width: 4em;&amp;quot;|Name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Method calls&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(server-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Notifications&amp;lt;br /&amp;gt;(client-side)&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-name&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Parameters&amp;lt;br /&amp;gt;by-position&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Batch requests&lt;br /&gt;
&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|Python&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|TCP&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP POST&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|HTTP GET&lt;br /&gt;
!style=&amp;quot;padding-left: 10px; padding-right: 10px;&amp;quot;|WebSocket&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v2|Version 2]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|10.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Dharma&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v3|Version 3]] / [[/v4|4]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-11 / 11.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Eden&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|{{no}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v5|Version 5]] / [[/v6|6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|pre-12 / 12.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Frodo&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|[[/v6|Version 6]]&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|13.0&lt;br /&gt;
|style=&amp;quot;padding-left: 5px; padding-right: 5px;&amp;quot;|Gotham&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
XBMC&#039;s JSON-RPC API has been designed to be self-documented i.e. a call to [[/v3#JSONRPC.Introspect|JSONRPC.Introspect]] results in a JSON-RPC response containing a documentation for all the available methods and data types. While this documentation is very incomplete and partly wrong for [[/v3|version 2]] it is provided as a full [http://tools.ietf.org/html/draft-zyp-json-schema-03 JSON schema] starting with [[/v3|version 3]]. As the documentation retrieved in that way is always specific to the used version of XBMC, it is (especially for development versions) the best documentation available and should be preferred over the wiki documentation as the latter always documents the API of the latest development.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
=== Output format ===&lt;br /&gt;
To be able to support easier debugging of (third-party) development using the JSON-RPC API, the JSON output generated by XBMC can be pretty-printed by setting&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jsonrpc&amp;gt;&lt;br /&gt;
    &amp;lt;compactoutput&amp;gt;false&amp;lt;/compactoutput&amp;gt;&lt;br /&gt;
&amp;lt;/jsonrpc&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
in the [[Advancedsettings.xml#.3Cjsonrpc.3E|advancedsettings.xml]]. Default JSON output will be in compact format to minimize sent data (especially useful for mobile devices).&lt;br /&gt;
&lt;br /&gt;
=== Direct interaction ===&lt;br /&gt;
To be able to test some methods of XBMC&#039;s JSON-RPC API, it can be of great help to be able to send a single hand-written JSON-RPC request to XBMC to see its effect and the generated response. Depending on the transport protocol used there are different possibilities to do that:&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
With a [http://en.wikipedia.org/wiki/Telnet telnet] connection (using [http://en.wikipedia.org/wiki/PuTTY PuTTY] on Windows or telnet on Linux) to port 9090 of the machine running XBMC it is possible to send and receive raw json data to/from XBMC. {{see also|SSH}}&lt;br /&gt;
&lt;br /&gt;
==== HTTP ====&lt;br /&gt;
A simple way of manually sending HTTP requests containing a JSON-RPC request to XBMC is using the [http://chrome.google.com/extensions/detail/fhjcajmcbmldlhcimfajhfbgofnpcjmb Simple REST Client] extension for Google&#039;s Chrome/Chromium browser. It allows defining a URL and the HTTP request type (&#039;&#039;&#039;POST&#039;&#039;&#039; is what we need). The actual JSON-RPC request can be defined in the &#039;&#039;&#039;Data&#039;&#039;&#039; field and then sent to XBMC.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[/v2|JSON-RPC API v2 (Dharma)]]&lt;br /&gt;
* [[/v4|JSON-RPC API v4 (Eden)]]&lt;br /&gt;
* [[/v6|JSON-RPC API v6 (Frodo)]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jsonrpc.org/spec.html JSON-RPC 2.0 specification]&lt;br /&gt;
* [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)]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
These examples take their base from v4. Any that require a higher version will be marked.&lt;br /&gt;
&lt;br /&gt;
[[JSON-RPC_API/Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Thezoggy</name></author>
	</entry>
</feed>