<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Extension on OpenSubsonic</title><link>/opensubsonic/extension/</link><description>Recent content in Extension on OpenSubsonic</description><generator>Hugo</generator><language>en</language><atom:link href="/opensubsonic/extension/index.xml" rel="self" type="application/rss+xml"/><item><title>API Key Authentication</title><link>/docs/extensions/apikeyauth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/apikeyauth/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>apiKeyAuthentication&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>This extension requires changes to the semantics of authentication.
Broadly, there are two general changes:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Required&lt;/strong>: A new authentication mechanism: &lt;code>apiKey&lt;/code> for query.&lt;/li>
&lt;li>Recommended: Deprecation of token/salt-based authentication.&lt;/li>
&lt;/ol>
&lt;h3 id="api-keys">API keys&lt;/h3>
&lt;p>An API key is any authentication token generated by an OpenSubsonic server that can be used to authenticate.
How this API key is generated by the server is implementation-specific: the server may provide a page where the user can configure one or more API keys, the server may automatically generate a API key, or any other variety of means.
The format of the API key is not specified, but it &lt;strong>must&lt;/strong> be of reasonable length to fit into a query parameter (less than 2048 characters URL-encoded).&lt;/p></description></item><item><title>ClientInfo</title><link>/docs/payloads/clientinfo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/payloads/clientinfo/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Play:1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;platform&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Sonos&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioBitrate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">512000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxTranscodingAudioBitrate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">256000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;directPlayProfiles&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;containers&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodecs&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocols&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;containers&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodecs&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocols&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;containers&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;mp4&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodecs&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;aac&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;alac&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocols&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;transcodingProfiles&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;hls&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;codecProfiles&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AudioCodec&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;limitations&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> { &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audioBitrate&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;comparison&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;LessThanEqual&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;values&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;320000&amp;#34;&lt;/span> ], &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AudioCodec&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;limitations&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> { &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audioSamplerate&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;comparison&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;LessThanEqual&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;values&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;192000&amp;#34;&lt;/span> ], &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">false&lt;/span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> { &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audioChannels&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;comparison&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Equals&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;values&amp;#34;&lt;/span>: [&lt;span style="color:#ed9d13">&amp;#34;1&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;2&amp;#34;&lt;/span> ], &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">false&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>name&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The name of the client device.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>platform&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The platform of the client (e.g., Android, iOS).&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>maxAudioBitrate&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The maximum audio bitrate the client can handle. 0 or missing means no limitation.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>maxTranscodingAudioBitrate&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The maximum audio bitrate for transcoded content. 0 or missing means no limitation.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>directPlayProfiles&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/payloads/directplayprofile/">DirectPlayProfile[]&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>A list of profiles for direct playback.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>transcodingProfiles&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/payloads/transcodingprofile/">TranscodingProfile[]&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>A list of profiles for transcoding. The server should evaluate these in the order they are listed, as a priority list.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>codecProfiles&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/payloads/codecprofile/">CodecProfile[]&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>A list of codec-specific profiles.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>CodecProfile</title><link>/docs/payloads/codecprofile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/payloads/codecprofile/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AudioCodec&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;limitations&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> { &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audioBitrate&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;comparison&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;LessThanEqual&amp;#34;&lt;/span>, &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;values&amp;#34;&lt;/span>: [&lt;span style="color:#ed9d13">&amp;#34;320000&amp;#34;&lt;/span>], &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>type&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The type of codec profile. Currently only &lt;code>AudioCodec&lt;/code> is supported.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>name&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The name of the codec (e.g., mp3, flac). Only a single value is accepted.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>limitations&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/payloads/limitation/">Limitation[]&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>A list of limitations for this codec.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>DirectPlayProfile</title><link>/docs/payloads/directplayprofile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/payloads/directplayprofile/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;containers&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;mp4&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodecs&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;aac&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;alac&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocols&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>containers&lt;/code>&lt;/td>
 &lt;td>Array of string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>List of supported container format (e.g., mp3, flac, mp4). An empty array means any container.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioCodecs&lt;/code>&lt;/td>
 &lt;td>Array of string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>List of supported audio codecs. An empty array means any codec.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>protocols&lt;/code>&lt;/td>
 &lt;td>Array of string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The streaming protocols. Supported values are &lt;code>http&lt;/code>, &lt;code>hls&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>maxAudioChannels&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The maximum number of audio channels supported.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>getLyricsBySongId</title><link>/docs/endpoints/getlyricsbysongid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/getlyricsbysongid/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>songLyrics&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>Retrieves all structured lyrics from the server for a given song.
The lyrics can come from embedded tags (&lt;code>SYLT&lt;/code>/&lt;code>USLT&lt;/code>), LRC file/text file, or any other external source.&lt;/p>
&lt;p>&lt;code>http://your-server/rest/getLyricsBySongId&lt;/code>&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Parameter&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Comment&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>id&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The track ID.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>enhanced&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>When &lt;code>true&lt;/code>, the response includes &lt;a href="../../responses/cueline">&lt;code>cueLine&lt;/code>&lt;/a> arrays, cue &lt;code>byteStart&lt;/code> / &lt;code>byteEnd&lt;/code> offsets into &lt;code>cueLine.value&lt;/code>, and non-main &lt;a href="../../responses/structuredlyrics">&lt;code>kind&lt;/code>&lt;/a> tracks (translations, pronunciations). When &lt;code>false&lt;/code> or omitted, only &lt;code>kind=&amp;quot;main&amp;quot;&lt;/code> entries are returned with no &lt;code>cueLine&lt;/code> data. Added in &lt;a href="../../extensions/songlyrics">&lt;code>songLyrics&lt;/code>&lt;/a> version 2.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>


&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Special notes about the lang field&lt;/h4>

 &lt;p>Ideally, the server will return &lt;code>lang&lt;/code> as an ISO 639 (2/3) code.
However, tagged files and external lyrics can come with any value as a potential language code, so clients should take care when displaying &lt;code>lang&lt;/code>.&lt;/p></description></item><item><title>getPlayQueueByIndex</title><link>/docs/endpoints/getplayqueuebyindex/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/getplayqueuebyindex/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>indexBasedQueue&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>&lt;code>http://your-server/rest/getPlayQueueByIndex&lt;/code>&lt;/p>
&lt;p>Returns the state of the play queue for this user (as set by &lt;code>savePlayQueue&lt;/code> or &lt;code>savePlayQueueByIndex&lt;/code>). This includes the tracks in the play queue, the currently playing track index (0-based), and the position within this track. Typically used to allow a user to move between different clients/apps while retaining the same play queue (for instance when listening to an audio book).&lt;/p></description></item><item><title>getPodcastEpisode</title><link>/docs/extensions/getpodcastepisode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/getpodcastepisode/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong>: &lt;code>getPodcastEpisode&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>When a server support this extension this means that it support the &lt;code>getPodcastEpisode&lt;/code> endpoint &lt;a href="../../endpoints/getPodCastEpisode">&lt;code>getPodCastEpisode&lt;/code>&lt;/a>&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>You can now retrieve the metadata for an individual podcast episode without having to pull an entire channel and searching the list of episodes.&lt;/p></description></item><item><title>getPodcastEpisode</title><link>/docs/endpoints/getpodcastepisode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/getpodcastepisode/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>getPodcastEpisode&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)
&lt;code>http://your-server/rest/getPodcastEpisode&lt;/code>&lt;/p>
&lt;p>Returns details for a podcast episode.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Parameter&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Comment&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>id&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The podcast episode ID.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="example">Example&lt;/h3>


&lt;div class="alert alert-primary" role="alert">


 &lt;code>http://your-server/rest/getPodcastEpisode.view?id=123&amp;amp;u=demo&amp;amp;p=demo&amp;amp;v=1.13.0&amp;amp;c=AwesomeClientName&amp;amp;f=json&lt;/code>

&lt;/div>

&lt;h3 id="result">Result&lt;/h3>
&lt;p>A &lt;a href="../../responses/subsonic-response">&lt;code>subsonic-response&lt;/code>&lt;/a> element with a nested &lt;a href="../../responses/podcastepisode">&lt;code>podcastEpisode&lt;/code>&lt;/a> element on success.&lt;/p>




&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
 aria-controls="tabs-01-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
 aria-controls="tabs-01-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
 aria-controls="tabs-01-02" aria-selected="false">
 Subsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-1-content">
 &lt;div class="tab-pane fade"
 id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;subsonic-response&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;ok&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;1.16.1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AwesomeServerName&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;serverVersion&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;0.1.3 (tag)&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;openSubsonic&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;podcastEpisode&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;7390&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;parent&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;7389&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;isDir&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;false&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;title&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Jonas Gahr Støre&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;album&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;NRK – Hallo P3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;artist&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Podcast&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;year&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;2015&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;coverArt&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;7389&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;size&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;41808585&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;contentType&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audio/mpeg&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;suffix&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;duration&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;2619&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;bitRate&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;128&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;isVideo&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;false&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;created&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;2015-09-07T20:07:31.000Z&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;artistId&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;453&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;podcast&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;streamId&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;7410&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;channelId&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Jonas Gahr Støre fra Arbeiderpartiet er med i dagens partilederutspørring i Hallo P3!&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;completed&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;publishDate&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;2015-09-07T15:29:00.000Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class="tab-pane fade"
 id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a61717;background-color:#e3d2d2">Does&lt;/span> &lt;span style="color:#a61717;background-color:#e3d2d2">not&lt;/span> &lt;span style="color:#a61717;background-color:#e3d2d2">exist&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>podcastEspisode&lt;/code>&lt;/td>
 &lt;td>&lt;a href="../../responses/podcastepisode">&lt;code>podcastEpisode&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The podcast episode&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>getTranscodeDecision</title><link>/docs/endpoints/gettranscodedecision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/gettranscodedecision/</guid><description>&lt;p>&lt;code>http://your-server/rest/getTranscodeDecision&lt;/code>&lt;/p>
&lt;p>Returns a transcode decision for a given media file. This endpoint is used by clients to determine if a media file should be transcoded before streaming. The server will analyze the provided client information and return a decision.
This endpoint must be accessed using a POST request&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Parameter&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Comment&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>mediaId&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The ID of the media to be transcoded.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>mediaType&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Either song or podcast so the server knows what the mediaId is referring to.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="request-body">Request Body&lt;/h3>
&lt;p>The request body must be a JSON object containing the client&amp;rsquo;s capabilities. See the &lt;a href="/docs/payloads/clientinfo/">&lt;code>ClientInfo&lt;/code>&lt;/a> documentation for more details.&lt;/p></description></item><item><title>getTranscodeStream</title><link>/docs/endpoints/gettranscodestream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/gettranscodestream/</guid><description>&lt;p>&lt;code>http://your-server/rest/getTranscodeStream&lt;/code>&lt;/p>
&lt;p>Returns a transcoded media stream. &lt;strong>Note:&lt;/strong> Clients should not try to reconstruct the &lt;code>transcodeParams&lt;/code>. Instead, they must use the &lt;code>transcodeParams&lt;/code> provided in the response of the &lt;a href="../gettranscodedecision">&lt;code>getTranscodeDecision&lt;/code>&lt;/a> endpoint.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Parameter&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Comment&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>mediaId&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The ID of the media to be transcoded.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>mediaType&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Either song or podcast so the server knows what the mediaId is referring to.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>offset&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>The time offset in seconds from which to start transcoding.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>transcodeParams&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Server-specific transcoding parameters, obtained from the property &lt;code>transcodeParams&lt;/code> of the result of the endpoint &lt;code>getTranscodeDecision&lt;/code>. The value is unique and already properly escaped.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="example">Example&lt;/h3>


&lt;div class="alert alert-primary" role="alert">


 &lt;code>http://your-server/rest/getTranscodeStream.view?mediaIdId=123&amp;amp;mediaType=song&amp;amp;offset=0&amp;amp;parameters=...&amp;amp;u=demo&amp;amp;p=demo&amp;amp;v=1.16.1&amp;amp;c=AwesomeClientName&amp;amp;f=json&lt;/code>

&lt;/div>

&lt;h3 id="result">Result&lt;/h3>
&lt;p>The raw transcoded media stream. In case of an error, a standard HTTP error code is returned with a descriptive message.&lt;/p></description></item><item><title>HTTP form POST</title><link>/docs/extensions/formpost/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/formpost/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>formPost&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>This extension requires that the server support passing API arguments via POST with the arguments respecting the &lt;code>application/x-www-form-urlencoded&lt;/code> format.&lt;/p>
&lt;p>See: &lt;a href="../../api-reference">API reference&lt;/a>&lt;/p>


&lt;div class="alert alert-warning" role="alert">


 &lt;code>application/x-www-form-urlencoded&lt;/code>: the keys and values are encoded in key-value tuples separated by &amp;lsquo;&amp;amp;&amp;rsquo;, with a &amp;lsquo;=&amp;rsquo; between the key and the value. Non-alphanumeric characters in both keys and values are &lt;a href="https://en.wikipedia.org/wiki/Percent-encoding">URL encoded&lt;/a>.

&lt;/div></description></item><item><title>Index based Queue</title><link>/docs/extensions/indexbasedqueue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/indexbasedqueue/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>indexBasedQueue&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>When a server supports this extension, it provides two new endpoints: &lt;a href="../../endpoints/saveplayqueuebyindex">&lt;code>savePlayQueueByIndex&lt;/code>&lt;/a> and &lt;a href="../../endpoints/getplayqueuebyindex">&lt;code>getPlayQueueByIndex&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>You can now save a play queue using an index instead of the current song ID, allowing for duplicate items in the queue.
Similarly, the queue can be retrieved with the current song index.&lt;/p></description></item><item><title>Limitation</title><link>/docs/payloads/limitation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/payloads/limitation/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;audioSamplerate&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;comparison&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;Equals&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;values&amp;#34;&lt;/span>: [ &lt;span style="color:#ed9d13">&amp;#34;44100&amp;#34;&lt;/span>, &lt;span style="color:#ed9d13">&amp;#34;48000&amp;#34;&lt;/span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>name&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The name of the limitation. Can be &lt;code>audioChannels&lt;/code>, &lt;code>audioBitrate&lt;/code>, &lt;code>audioProfile&lt;/code>, &lt;code>audioSamplerate&lt;/code>, or &lt;code>audioBitdepth&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>comparison&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The comparison operator. Can be &lt;code>Equals&lt;/code>, &lt;code>NotEquals&lt;/code>, &lt;code>LessThanEqual&lt;/code>, &lt;code>GreaterThanEqual&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>values&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>The values to compare against. For &lt;code>LessThanEqual&lt;/code> and &lt;code>GreaterThanEqual&lt;/code>, only the first value will be used.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>required&lt;/code>&lt;/td>
 &lt;td>boolean&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Whether this limitation must be met.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Playback Report</title><link>/docs/extensions/playbackreport/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/playbackreport/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>playbackReport&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>When a server supports this extension, it provides the &lt;a href="../../endpoints/reportplayback">&lt;code>reportPlayback&lt;/code>&lt;/a> endpoint and can expose timeline fields in &lt;a href="../../endpoints/getnowplaying">&lt;code>getNowPlaying&lt;/code>&lt;/a> responses.&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>Clients can report playback status with &lt;code>mediaId&lt;/code>, &lt;code>mediaType&lt;/code>, &lt;code>positionMs&lt;/code>, &lt;code>state&lt;/code>, &lt;code>playbackRate&lt;/code>, and &lt;code>ignoreScrobble&lt;/code>.&lt;/p>
&lt;p>When &lt;code>ignoreScrobble=true&lt;/code>, the server should only update now playing display/state fields and should not perform playcount/scrobble side effects.&lt;/p></description></item><item><title>reportPlayback</title><link>/docs/endpoints/reportplayback/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/reportplayback/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>playbackReport&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>&lt;code>http://your-server/rest/reportPlayback&lt;/code>&lt;/p>
&lt;p>Reports playback timeline state for a song. Clients should call the endpoint at least on each state change. The end point can be called every X seconds by clients, but servers should estimate current position based on playbackRate for up to date data between calls. Servers should not assume a media is played after the calculated end of content, but needs to wait for a stopped state. 30 minutes after the planned end of the media, servers should stop listening to events and clients should use the normal scrobble endpoint after reconnection from offline.&lt;/p></description></item><item><title>savePlayQueueByIndex</title><link>/docs/endpoints/saveplayqueuebyindex/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/saveplayqueuebyindex/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>indexBasedQueue&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>&lt;code>http://your-server/rest/savePlayQueueByIndex&lt;/code>&lt;/p>
&lt;p>Saves the state of the play queue for this user. This includes the tracks in the play queue, the currently playing track, and the position within this track. Typically used to allow a user to move between different clients/apps while retaining the same play queue (for instance when listening to an audio book).&lt;/p>
&lt;p>Uses an index instead, as this allows for uniquely identifying play queues which may have multiple copies of the same track.&lt;/p></description></item><item><title>Song Lyrics</title><link>/docs/extensions/songlyrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/songlyrics/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>songLyrics&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>Line-level structured lyrics with multi-language support.&lt;/p>
&lt;p>This extension requires the following endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../endpoints/getlyricsbysongid">&lt;code>getLyricsBySongId&lt;/code>&lt;/a>: Fetch structured song lyrics by id&lt;/li>
&lt;/ul>
&lt;h2 id="version-2">Version 2&lt;/h2>
&lt;p>Word/syllable-level timing (karaoke) and lyric layer classification (translations, pronunciations).&lt;/p>
&lt;p>Adds:&lt;/p>
&lt;ul>
&lt;li>&lt;code>enhanced&lt;/code> query parameter on &lt;a href="../../endpoints/getlyricsbysongid">&lt;code>getLyricsBySongId&lt;/code>&lt;/a> to opt-in to enhanced lyrics data&lt;/li>
&lt;li>&lt;code>kind&lt;/code> field on &lt;a href="../../responses/structuredlyrics">&lt;code>structuredLyrics&lt;/code>&lt;/a> to classify independent lyric layers (&lt;code>main&lt;/code>, &lt;code>translation&lt;/code>, &lt;code>pronunciation&lt;/code>)&lt;/li>
&lt;li>&lt;a href="../../responses/agent">&lt;code>agent&lt;/code>&lt;/a> objects within an optional &lt;code>agents&lt;/code> array on &lt;a href="../../responses/structuredlyrics">&lt;code>structuredLyrics&lt;/code>&lt;/a> for reusable agent attribution metadata&lt;/li>
&lt;li>&lt;a href="../../responses/cueline">&lt;code>cueLine&lt;/code>&lt;/a> array on &lt;a href="../../responses/structuredlyrics">&lt;code>structuredLyrics&lt;/code>&lt;/a> for word/syllable-level timing&lt;/li>
&lt;li>&lt;code>agentId&lt;/code> field on &lt;a href="../../responses/cueline">&lt;code>cueLine&lt;/code>&lt;/a> to reference an &lt;a href="../../responses/agent">&lt;code>agent&lt;/code>&lt;/a> in the same &lt;code>structuredLyrics&lt;/code> entry&lt;/li>
&lt;li>&lt;a href="../../responses/cue">&lt;code>cue&lt;/code>&lt;/a> objects within each &lt;code>cueLine&lt;/code> for individual word/syllable timestamps, with required &lt;code>byteStart&lt;/code> / &lt;code>byteEnd&lt;/code> offsets into &lt;code>cueLine.value&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>When agent attribution is present, the reusable agent metadata lives once in &lt;code>structuredLyrics.agents&lt;/code>, while each &lt;code>cueLine&lt;/code> points at the relevant agent via &lt;code>agentId&lt;/code>. Simple unattributed single-layer lyrics may omit &lt;code>agents&lt;/code> entirely. Entries with multiple vocal agents/layers &lt;strong>must&lt;/strong> emit &lt;code>agents&lt;/code>, and every attributed entry that uses &lt;code>agents&lt;/code> &lt;strong>must&lt;/strong> define exactly one &lt;code>role: &amp;quot;main&amp;quot;&lt;/code> agent. A single-agent attributed/default layer may also use &lt;code>agents&lt;/code> with that lone agent marked as &lt;code>main&lt;/code>.&lt;/p></description></item><item><title>stream</title><link>/docs/endpoints/stream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/stream/</guid><description>&lt;p>&lt;code>http://your-server/rest/stream&lt;/code> Since &lt;a href="../../subsonic-versions">1.0.0&lt;/a>&lt;/p>
&lt;p>Streams a given media file.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Parameter&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Comment&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>id&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>A string which uniquely identifies the file to stream. Obtained by calls to getMusicDirectory.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>maxBitRate&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>(Since &lt;a href="../../subsonic-versions">1.2.0&lt;/a>) If specified, the server will attempt to limit the bitrate to this value, in kilobits per second. If set to zero, no limit is imposed.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>format&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>(Since &lt;a href="../../subsonic-versions">1.6.0&lt;/a>) Specifies the preferred target format (e.g., &amp;ldquo;mp3&amp;rdquo; or &amp;ldquo;flv&amp;rdquo;) in case there are multiple applicable transcodings. Starting with &lt;a href="../../subsonic-versions">1.9.0&lt;/a> you can use the special value &amp;ldquo;raw&amp;rdquo; to disable transcoding.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>timeOffset&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>No / &lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>By default only applicable to video streaming. If specified, start streaming at the given offset (in seconds) into the media. The &lt;a href="../../extensions/transcodeoffset/">&lt;code>Transcode Offset&lt;/code>&lt;/a> extension enables the parameter to music too.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>size&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>(Since &lt;a href="../../subsonic-versions">1.6.0&lt;/a>) Only applicable to video streaming. Requested video size specified as WxH, for instance &amp;ldquo;640x480&amp;rdquo;.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>estimateContentLength&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>false&lt;/td>
 &lt;td>(Since &lt;a href="../../subsonic-versions">1.8.0&lt;/a>). If set to &amp;ldquo;true&amp;rdquo;, the &lt;em>Content-Length&lt;/em> HTTP header will be set to an estimated value for transcoded or downsampled media.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>converted&lt;/code>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>false&lt;/td>
 &lt;td>(Since &lt;a href="../../subsonic-versions">1.14.0&lt;/a>) Only applicable to video streaming. Servers can optimize videos for streaming by converting them to MP4. If a conversion exists for the video in question, then setting this parameter to &amp;ldquo;true&amp;rdquo; will cause the converted video to be returned instead of the original.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="example">Example&lt;/h3>


&lt;div class="alert alert-primary" role="alert">


 &lt;code>http://your-server/rest/stream.view?id=123&amp;amp;u=demo&amp;amp;p=demo&amp;amp;v=1.13.0&amp;amp;c=AwesomeClientName&amp;amp;f=json&lt;/code>

&lt;/div>

&lt;h3 id="result">Result&lt;/h3>
&lt;p>Returns binary data on success, or an XML document on error (in which case the HTTP content type will start with &amp;ldquo;text/xml&amp;rdquo;).&lt;/p></description></item><item><title>StreamDetails</title><link>/docs/responses/streamdetails/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/responses/streamdetails/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;codec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">6&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitrate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">3000000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioProfile&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioSamplerate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">96000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitdepth&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">24&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>protocol&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The streaming protocol. Can be &lt;code>http&lt;/code> or &lt;code>hls&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>container&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The container format.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>codec&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The audio codec.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioChannels&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The number of audio channels.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioBitrate&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The audio bitrate.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioProfile&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The audio profile.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioSamplerate&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The audio sample rate.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioBitdepth&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The audio bit depth.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Template extension</title><link>/docs/extensions/template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/template/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong>: &lt;code>template&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>This is a template extension that allows servers to do marvelous stuff and clients to use that stuff.&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>You can now bake cakes and brownies via the API!&lt;/p>
&lt;p>This extension requires the following endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../invalid">&lt;code>bakeCake&lt;/code>&lt;/a> To bake cakes.&lt;/li>
&lt;li>&lt;a href="../invalid">&lt;code>bakeBrownie&lt;/code>&lt;/a> To bake brownies.&lt;/li>
&lt;/ul>
&lt;h2 id="version-2">Version 2&lt;/h2>
&lt;p>You can now bake a lot of stuff via the API!&lt;/p>
&lt;p>This extension requires the following endpoints:&lt;/p></description></item><item><title>tokenInfo</title><link>/docs/endpoints/tokeninfo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/endpoints/tokeninfo/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong> &lt;code>apiKeyAuthentication&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>Returns data about an API key.&lt;/p>
&lt;p>&lt;code>http://your-server/rest/tokenInfo&lt;/code>&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;p>None&lt;/p>
&lt;h3 id="example">Example&lt;/h3>


&lt;div class="alert alert-primary" role="alert">


 &lt;code>http://your-server/rest/tokenInfo.view?apiKey=1234&amp;amp;v=1.13.0&amp;amp;c=AwesomeClientName&amp;amp;f=json&lt;/code>

&lt;/div>

&lt;h3 id="result">Result&lt;/h3>
&lt;p>A &lt;a href="../../responses/subsonic-response">&lt;code>subsonic-response&lt;/code>&lt;/a> element with a nested &lt;a href="../../responses/tokenInfo/">&lt;code>tokenInfo&lt;/code>&lt;/a> on success, or error 44 on invalid token.&lt;/p>





&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
 aria-controls="tabs-01-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
 aria-controls="tabs-01-01" aria-selected="true">
 OpenSubsonic JSON
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
 aria-controls="tabs-01-02" aria-selected="false">
 OpenSubsonic XML
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-01-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-03" role="tab"
 aria-controls="tabs-01-03" aria-selected="false">
 Subsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-1-content">
 &lt;div class="tab-pane fade"
 id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">&amp;#34;subsonic-response&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;ok&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;1.16.1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AwesomeServerName&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;serverVersion&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;0.1.3 (tag)&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;openSubsonic&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;tokenInfo&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;username&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;token username&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class="tab-pane fade"
 id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">&amp;lt;subsonic-response&lt;/span> &lt;span style="color:#bbb">status=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;ok&amp;#34;&lt;/span> &lt;span style="color:#bbb">version=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;1.16.1&amp;#34;&lt;/span> &lt;span style="color:#bbb">type=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;AwesomeServerName&amp;#34;&lt;/span> &lt;span style="color:#bbb">serverVersion=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;0.1.3 (tag)&amp;#34;&lt;/span> &lt;span style="color:#bbb">openSubsonic=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;lt;tokenInfo&lt;/span> &lt;span style="color:#bbb">username=&lt;/span>&lt;span style="color:#ed9d13">&amp;#34;token username&amp;#34;&lt;/span>&lt;span style="color:#6ab825;font-weight:bold">&amp;gt;&amp;lt;/tokenInfo&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6ab825;font-weight:bold">&amp;lt;/subsonic-response&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class="tab-pane fade"
 id="tabs-01-03" role="tabpanel" aria-labelled-by="tabs-01-03-tab" tabindex="1">
 &lt;pre tabindex="0">&lt;code>Does not exist.&lt;/code>&lt;/pre>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>tokenInfo&lt;/code>&lt;/td>
 &lt;td>&lt;a href="../../responses/tokeninfo">&lt;code>tokenInfo&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>Information about the token&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Transcode Offset</title><link>/docs/extensions/transcodeoffset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/transcodeoffset/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong>: &lt;code>transcodeOffset&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;p>When a server support this extension this means that it support the &lt;code>timeOffset&lt;/code> parameter of the &lt;a href="../../endpoints/stream">&lt;code>stream&lt;/code>&lt;/a> endpoint for music.&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>You can now start transcoding at any position in the media, allowing seeking when transcoding on the clients!&lt;/p>
&lt;p>This extension requires the support of the &lt;code>timeOffset&lt;/code> parameter of the &lt;a href="../../endpoints/stream">&lt;code>stream&lt;/code>&lt;/a> endpoint for music.&lt;/p></description></item><item><title>transcodeDecision</title><link>/docs/responses/transcodedecision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/responses/transcodedecision/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;subsonic-response&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;ok&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;1.16.1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;AwesomeServerName&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;serverVersion&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;0.1.3 (tag)&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;openSubsonic&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;transcodeDecision&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;canDirectPlay&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;canTranscode&amp;#34;&lt;/span>: &lt;span style="color:#6ab825;font-weight:bold">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;transcodeReason&amp;#34;&lt;/span>: [&lt;span style="color:#ed9d13">&amp;#34;AudioCodecNotSupported&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;errorReason&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;transcodeParams&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;0001-0005-004&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;sourceStream&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;codec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;flac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">6&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitrate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">3000000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioProfile&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioSamplerate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">96000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitdepth&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">24&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;transcodeStream&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;hls&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;codec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;aac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitrate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">256000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioProfile&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;xHE-AAC&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioSamplerate&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">48000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioBitdepth&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">16&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>canDirectPlay&lt;/code>&lt;/td>
 &lt;td>boolean&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>Whether the media can be played directly by the client.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>canTranscode&lt;/code>&lt;/td>
 &lt;td>boolean&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>Whether the media can be transcoded by the server.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>transcodeReason&lt;/code>&lt;/td>
 &lt;td>string[]&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>An array of reasons why transcoding is necessary. The strings are server specific made for logging purpose, the server should return 1 string per direct play profile.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>errorReason&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>A description of an error that occurred.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>transcodeParams&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>An server internal value to be passed to the transcode endpoint, the value needs to be properly escaped to be reused as is in url parameter. See &lt;a href="/docs/endpoints/gettranscodestream/">&lt;code>getTranscodeStream&lt;/code>&lt;/a>. The client may not use the value instantly and should be kept valid by the server for a reasonable duration if stored in memory.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>sourceStream&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/responses/streamdetails/">StreamDetails&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>Details about the source media stream.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>transcodeStream&lt;/code>&lt;/td>
 &lt;td>&lt;a href="/docs/responses/streamdetails/">StreamDetails&lt;/a>&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>Details about the target transcoded stream if &lt;code>canTranscode&lt;/code> is true.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Transcoding</title><link>/docs/extensions/transcoding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/extensions/transcoding/</guid><description>&lt;p>&lt;strong>OpenSubsonic version&lt;/strong>: &lt;a href="../../opensubsonic-versions">1&lt;/a>&lt;/p>
&lt;p>&lt;strong>OpenSubsonic extension name&lt;/strong>: &lt;code>transcoding&lt;/code> (As returned by &lt;a href="../../endpoints/getopensubsonicextensions">&lt;code>getOpenSubsonicExtensions&lt;/code>&lt;/a>)&lt;/p>
&lt;h2 id="version-1">Version 1&lt;/h2>
&lt;p>This extension provides a way for clients to obtain a server’s decision on whether a media file should be transcoded and to retrieve the transcoded stream if necessary.&lt;/p>
&lt;p>This extension requires the following endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../endpoints/gettranscodedecision">&lt;code>getTranscodeDecision&lt;/code>&lt;/a>: Returns a transcode decision for a given media file. Standard parameters are still provided through the URL as usual. However, because client playback capabilities can be complex, they must be supplied in the request body as a JSON-encoded payload. &lt;strong>For this reason, this endpoint uses the POST method rather than GET&lt;/strong>.&lt;/li>
&lt;li>&lt;a href="../../endpoints/gettranscodestream">&lt;code>getTranscodeStream&lt;/code>&lt;/a>: Returns a transcoded media stream.&lt;/li>
&lt;/ul></description></item><item><title>TranscodingProfile</title><link>/docs/payloads/transcodingprofile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/payloads/transcodingprofile/</guid><description>&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link disabled"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="false">
 &lt;strong>Example&lt;/strong>:
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="true">
 OpenSubsonic
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-pane fade"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;pre tabindex="0">&lt;code>&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div class="tab-pane fade show active"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;div class="highlight">&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;container&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;audioCodec&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;mp3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;protocol&amp;#34;&lt;/span>: &lt;span style="color:#ed9d13">&amp;#34;http&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6ab825;font-weight:bold">&amp;#34;maxAudioChannels&amp;#34;&lt;/span>: &lt;span style="color:#3677a9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Req.&lt;/th>
 &lt;th>OpenS.&lt;/th>
 &lt;th>Details&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>container&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The container format (e.g., mp3, flac).&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>audioCodec&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The target audio codec for transcoding.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>protocol&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The streaming protocol. Can be &lt;code>http&lt;/code> or &lt;code>hls&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>maxAudioChannels&lt;/code>&lt;/td>
 &lt;td>integer&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;strong>Yes&lt;/strong>&lt;/td>
 &lt;td>The maximum number of audio channels for the transcoded stream.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item></channel></rss>